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