1956ee1b7S猫头猫import {RequestStateCode} from '@/constants/commonConst'; 2d384662fS猫头猫import PluginManager from '@/core/pluginManager'; 3956ee1b7S猫头猫import {useEffect, useRef, useState} from 'react'; 4d384662fS猫头猫 5d384662fS猫头猫export default function useTopListDetail( 692b6c95aS猫头猫 topListItem: IMusic.IMusicSheetItemBase | null, 7d384662fS猫头猫 pluginHash: string, 8d384662fS猫头猫) { 9d384662fS猫头猫 const [mergedTopListItem, setMergedTopListItem] = 1092b6c95aS猫头猫 useState<ICommon.WithMusicList<IMusic.IMusicSheetItemBase> | null>( 11d384662fS猫头猫 topListItem, 12d384662fS猫头猫 ); 13956ee1b7S猫头猫 14956ee1b7S猫头猫 const pageRef = useRef(1); 15956ee1b7S猫头猫 const [requestState, setRequestState] = useState(RequestStateCode.IDLE); 16956ee1b7S猫头猫 17956ee1b7S猫头猫 async function loadMore() { 18956ee1b7S猫头猫 if (!topListItem) { 19956ee1b7S猫头猫 return; 20956ee1b7S猫头猫 } 21956ee1b7S猫头猫 try { 22*26421379S猫头猫 if ( 23*26421379S猫头猫 requestState & RequestStateCode.LOADING || 24*26421379S猫头猫 requestState === RequestStateCode.FINISHED 25*26421379S猫头猫 ) { 26*26421379S猫头猫 return; 27*26421379S猫头猫 } 28956ee1b7S猫头猫 if (pageRef.current === 1) { 29956ee1b7S猫头猫 setRequestState(RequestStateCode.PENDING_FIRST_PAGE); 30956ee1b7S猫头猫 } else { 31956ee1b7S猫头猫 setRequestState(RequestStateCode.PENDING_REST_PAGE); 32956ee1b7S猫头猫 } 33956ee1b7S猫头猫 const result = await PluginManager.getByHash( 34956ee1b7S猫头猫 pluginHash, 35956ee1b7S猫头猫 )?.methods?.getTopListDetail(topListItem, pageRef.current); 36956ee1b7S猫头猫 if (!result) { 37956ee1b7S猫头猫 throw new Error(); 38956ee1b7S猫头猫 } 39956ee1b7S猫头猫 const currentPage = pageRef.current; 40956ee1b7S猫头猫 setMergedTopListItem( 41956ee1b7S猫头猫 prev => 42956ee1b7S猫头猫 ({ 43956ee1b7S猫头猫 ...prev, 44956ee1b7S猫头猫 ...result.topListItem, 45956ee1b7S猫头猫 musicList: 46956ee1b7S猫头猫 currentPage === 1 47956ee1b7S猫头猫 ? result.musicList ?? [] 48956ee1b7S猫头猫 : [ 49956ee1b7S猫头猫 ...(prev?.musicList ?? []), 50956ee1b7S猫头猫 ...(result.musicList ?? []), 51956ee1b7S猫头猫 ], 52956ee1b7S猫头猫 } as IMusic.IMusicSheetItem), 53956ee1b7S猫头猫 ); 54956ee1b7S猫头猫 55*26421379S猫头猫 if (result.isEnd === false) { 56956ee1b7S猫头猫 setRequestState(RequestStateCode.IDLE); 57956ee1b7S猫头猫 } else { 58956ee1b7S猫头猫 setRequestState(RequestStateCode.FINISHED); 59956ee1b7S猫头猫 } 60956ee1b7S猫头猫 pageRef.current++; 61956ee1b7S猫头猫 } catch { 62956ee1b7S猫头猫 setRequestState(RequestStateCode.FINISHED); 63956ee1b7S猫头猫 } 64956ee1b7S猫头猫 } 65956ee1b7S猫头猫 66d384662fS猫头猫 useEffect(() => { 67d384662fS猫头猫 if (topListItem === null) { 68d384662fS猫头猫 return; 69d384662fS猫头猫 } 70956ee1b7S猫头猫 loadMore(); 71d384662fS猫头猫 }, []); 72956ee1b7S猫头猫 return [mergedTopListItem, requestState, loadMore] as const; 73d384662fS猫头猫} 74