071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
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<CustomWorldProfile> | 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,
|
|
};
|
|
}
|