1*956ee1b7S猫头猫import {RequestStateCode} from '@/constants/commonConst'; 2d384662fS猫头猫import PluginManager from '@/core/pluginManager'; 3*956ee1b7S猫头猫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猫头猫 ); 13*956ee1b7S猫头猫 14*956ee1b7S猫头猫 const pageRef = useRef(1); 15*956ee1b7S猫头猫 const [requestState, setRequestState] = useState(RequestStateCode.IDLE); 16*956ee1b7S猫头猫 17*956ee1b7S猫头猫 async function loadMore() { 18*956ee1b7S猫头猫 if (!topListItem) { 19*956ee1b7S猫头猫 return; 20*956ee1b7S猫头猫 } 21*956ee1b7S猫头猫 try { 22*956ee1b7S猫头猫 if (pageRef.current === 1) { 23*956ee1b7S猫头猫 setRequestState(RequestStateCode.PENDING_FIRST_PAGE); 24*956ee1b7S猫头猫 } else { 25*956ee1b7S猫头猫 setRequestState(RequestStateCode.PENDING_REST_PAGE); 26*956ee1b7S猫头猫 } 27*956ee1b7S猫头猫 const result = await PluginManager.getByHash( 28*956ee1b7S猫头猫 pluginHash, 29*956ee1b7S猫头猫 )?.methods?.getTopListDetail(topListItem, pageRef.current); 30*956ee1b7S猫头猫 if (!result) { 31*956ee1b7S猫头猫 throw new Error(); 32*956ee1b7S猫头猫 } 33*956ee1b7S猫头猫 const currentPage = pageRef.current; 34*956ee1b7S猫头猫 setMergedTopListItem( 35*956ee1b7S猫头猫 prev => 36*956ee1b7S猫头猫 ({ 37*956ee1b7S猫头猫 ...prev, 38*956ee1b7S猫头猫 ...result.topListItem, 39*956ee1b7S猫头猫 musicList: 40*956ee1b7S猫头猫 currentPage === 1 41*956ee1b7S猫头猫 ? result.musicList ?? [] 42*956ee1b7S猫头猫 : [ 43*956ee1b7S猫头猫 ...(prev?.musicList ?? []), 44*956ee1b7S猫头猫 ...(result.musicList ?? []), 45*956ee1b7S猫头猫 ], 46*956ee1b7S猫头猫 } as IMusic.IMusicSheetItem), 47*956ee1b7S猫头猫 ); 48*956ee1b7S猫头猫 49*956ee1b7S猫头猫 if (!result.isEnd) { 50*956ee1b7S猫头猫 setRequestState(RequestStateCode.IDLE); 51*956ee1b7S猫头猫 } else { 52*956ee1b7S猫头猫 setRequestState(RequestStateCode.FINISHED); 53*956ee1b7S猫头猫 } 54*956ee1b7S猫头猫 pageRef.current++; 55*956ee1b7S猫头猫 } catch { 56*956ee1b7S猫头猫 setRequestState(RequestStateCode.FINISHED); 57*956ee1b7S猫头猫 } 58*956ee1b7S猫头猫 } 59*956ee1b7S猫头猫 60d384662fS猫头猫 useEffect(() => { 61d384662fS猫头猫 if (topListItem === null) { 62d384662fS猫头猫 return; 63d384662fS猫头猫 } 64*956ee1b7S猫头猫 loadMore(); 65d384662fS猫头猫 }, []); 66*956ee1b7S猫头猫 return [mergedTopListItem, requestState, loadMore] as const; 67d384662fS猫头猫} 68