xref: /MusicFree/src/pages/pluginSheetDetail/hooks/usePluginSheetMusicList.ts (revision 5830c002c929157c4836f153afb60293c1da54e5)
1*5830c002S猫头猫import PluginManager from '@/core/pluginManager';
2*5830c002S猫头猫import {useCallback, useEffect, useRef, useState} from 'react';
3*5830c002S猫头猫
4*5830c002S猫头猫export default function usePluginSheetMusicList(
5*5830c002S猫头猫    originalSheetItem: IMusic.IMusicSheetItem | null,
6*5830c002S猫头猫) {
7*5830c002S猫头猫    const currentPageRef = useRef(1);
8*5830c002S猫头猫    const [loadMore, setLoadMore] = useState<'idle' | 'loading' | 'done'>(
9*5830c002S猫头猫        'idle',
10*5830c002S猫头猫    );
11*5830c002S猫头猫    const [sheetItem, setSheetItem] = useState<IMusic.IMusicSheetItem | null>(
12*5830c002S猫头猫        originalSheetItem,
13*5830c002S猫头猫    );
14*5830c002S猫头猫    const [musicList, setMusicList] = useState<IMusic.IMusicItem[]>(
15*5830c002S猫头猫        originalSheetItem?.musicList ?? [],
16*5830c002S猫头猫    );
17*5830c002S猫头猫
18*5830c002S猫头猫    const getSheetDetail = useCallback(
19*5830c002S猫头猫        async function () {
20*5830c002S猫头猫            if (originalSheetItem === null || loadMore !== 'idle') {
21*5830c002S猫头猫                return;
22*5830c002S猫头猫            }
23*5830c002S猫头猫
24*5830c002S猫头猫            try {
25*5830c002S猫头猫                setLoadMore('loading');
26*5830c002S猫头猫                const result = await PluginManager.getByMedia(
27*5830c002S猫头猫                    originalSheetItem,
28*5830c002S猫头猫                )?.methods?.getMusicSheetInfo?.(
29*5830c002S猫头猫                    originalSheetItem,
30*5830c002S猫头猫                    currentPageRef.current,
31*5830c002S猫头猫                );
32*5830c002S猫头猫                console.log(result, 'ddd');
33*5830c002S猫头猫                if (result === null || result === undefined) {
34*5830c002S猫头猫                    throw new Error();
35*5830c002S猫头猫                }
36*5830c002S猫头猫                if (result?.sheetItem) {
37*5830c002S猫头猫                    setSheetItem(prev => ({
38*5830c002S猫头猫                        ...(prev ?? {}),
39*5830c002S猫头猫                        ...(result.sheetItem as IMusic.IMusicSheetItem),
40*5830c002S猫头猫                        platform: originalSheetItem.platform,
41*5830c002S猫头猫                    }));
42*5830c002S猫头猫                }
43*5830c002S猫头猫                if (result?.musicList) {
44*5830c002S猫头猫                    setMusicList(prev => {
45*5830c002S猫头猫                        if (currentPageRef.current === 1) {
46*5830c002S猫头猫                            return result?.musicList ?? prev;
47*5830c002S猫头猫                        } else {
48*5830c002S猫头猫                            return [...prev, ...(result.musicList ?? [])];
49*5830c002S猫头猫                        }
50*5830c002S猫头猫                    });
51*5830c002S猫头猫                }
52*5830c002S猫头猫                setLoadMore(result.isEnd ? 'done' : 'idle');
53*5830c002S猫头猫                currentPageRef.current += 1;
54*5830c002S猫头猫            } catch {
55*5830c002S猫头猫                setLoadMore('idle');
56*5830c002S猫头猫            }
57*5830c002S猫头猫        },
58*5830c002S猫头猫        [loadMore],
59*5830c002S猫头猫    );
60*5830c002S猫头猫
61*5830c002S猫头猫    useEffect(() => {
62*5830c002S猫头猫        getSheetDetail();
63*5830c002S猫头猫    }, []);
64*5830c002S猫头猫
65*5830c002S猫头猫    return [loadMore, sheetItem, musicList, getSheetDetail] as const;
66*5830c002S猫头猫}
67