import { useCallback } from 'react'; import type { CustomWorldLibraryEntry } from '../../../packages/shared/src/contracts/runtime'; import type { CustomWorldProfile } from '../../types'; import type { SelectionStage } from './rpgEntryTypes'; type UseRpgEntryNavigationParams = { setSelectionStage: (stage: SelectionStage) => void; setSelectedDetailEntry: ( entry: CustomWorldLibraryEntry | null, ) => void; }; /** * 收口 RPG 入口壳层的阶段跳转,避免页面内散落大量匿名 setState 回调。 */ export function useRpgEntryNavigation( params: UseRpgEntryNavigationParams, ) { const { setSelectionStage, setSelectedDetailEntry } = params; const backToPlatformHome = useCallback(() => { setSelectionStage('platform'); }, [setSelectionStage]); const backToPlatformWithClearedDetail = useCallback(() => { setSelectedDetailEntry(null); setSelectionStage('platform'); }, [setSelectedDetailEntry, setSelectionStage]); const openDetailStage = useCallback(() => { setSelectionStage('detail'); }, [setSelectionStage]); const openAgentWorkspaceStage = useCallback(() => { setSelectionStage('agent-workspace'); }, [setSelectionStage]); const openCustomWorldGenerationStage = useCallback(() => { setSelectionStage('custom-world-generating'); }, [setSelectionStage]); const openCustomWorldResultStage = useCallback(() => { setSelectionStage('custom-world-result'); }, [setSelectionStage]); return { backToPlatformHome, backToPlatformWithClearedDetail, openDetailStage, openAgentWorkspaceStage, openCustomWorldGenerationStage, openCustomWorldResultStage, }; }