xref: /MusicFree/src/pages/pluginSheetDetail/hooks/usePluginSheetMusicList.ts (revision e650bfb34226e2a09d15cbf7832c4805a87cd60e)
15830c002S猫头猫import PluginManager from '@/core/pluginManager';
25830c002S猫头猫import {useCallback, useEffect, useRef, useState} from 'react';
35830c002S猫头猫
45830c002S猫头猫export default function usePluginSheetMusicList(
55830c002S猫头猫    originalSheetItem: IMusic.IMusicSheetItem | null,
65830c002S猫头猫) {
75830c002S猫头猫    const currentPageRef = useRef(1);
85830c002S猫头猫    const [loadMore, setLoadMore] = useState<'idle' | 'loading' | 'done'>(
95830c002S猫头猫        'idle',
105830c002S猫头猫    );
115830c002S猫头猫    const [sheetItem, setSheetItem] = useState<IMusic.IMusicSheetItem | null>(
125830c002S猫头猫        originalSheetItem,
135830c002S猫头猫    );
145830c002S猫头猫    const [musicList, setMusicList] = useState<IMusic.IMusicItem[]>(
155830c002S猫头猫        originalSheetItem?.musicList ?? [],
165830c002S猫头猫    );
175830c002S猫头猫
185830c002S猫头猫    const getSheetDetail = useCallback(
195830c002S猫头猫        async function () {
205830c002S猫头猫            if (originalSheetItem === null || loadMore !== 'idle') {
215830c002S猫头猫                return;
225830c002S猫头猫            }
235830c002S猫头猫
245830c002S猫头猫            try {
255830c002S猫头猫                setLoadMore('loading');
265830c002S猫头猫                const result = await PluginManager.getByMedia(
27*e650bfb3S猫头猫                    originalSheetItem as any,
285830c002S猫头猫                )?.methods?.getMusicSheetInfo?.(
295830c002S猫头猫                    originalSheetItem,
305830c002S猫头猫                    currentPageRef.current,
315830c002S猫头猫                );
325830c002S猫头猫                if (result === null || result === undefined) {
335830c002S猫头猫                    throw new Error();
345830c002S猫头猫                }
355830c002S猫头猫                if (result?.sheetItem) {
365830c002S猫头猫                    setSheetItem(prev => ({
375830c002S猫头猫                        ...(prev ?? {}),
385830c002S猫头猫                        ...(result.sheetItem as IMusic.IMusicSheetItem),
395830c002S猫头猫                        platform: originalSheetItem.platform,
405830c002S猫头猫                    }));
415830c002S猫头猫                }
425830c002S猫头猫                if (result?.musicList) {
435830c002S猫头猫                    setMusicList(prev => {
445830c002S猫头猫                        if (currentPageRef.current === 1) {
455830c002S猫头猫                            return result?.musicList ?? prev;
465830c002S猫头猫                        } else {
475830c002S猫头猫                            return [...prev, ...(result.musicList ?? [])];
485830c002S猫头猫                        }
495830c002S猫头猫                    });
505830c002S猫头猫                }
515830c002S猫头猫                setLoadMore(result.isEnd ? 'done' : 'idle');
525830c002S猫头猫                currentPageRef.current += 1;
535830c002S猫头猫            } catch {
545830c002S猫头猫                setLoadMore('idle');
555830c002S猫头猫            }
565830c002S猫头猫        },
575830c002S猫头猫        [loadMore],
585830c002S猫头猫    );
595830c002S猫头猫
605830c002S猫头猫    useEffect(() => {
615830c002S猫头猫        getSheetDetail();
625830c002S猫头猫    }, []);
635830c002S猫头猫
645830c002S猫头猫    return [loadMore, sheetItem, musicList, getSheetDetail] as const;
655830c002S猫头猫}
66