// 共享数据 hook:专家/子代理模态框打开时加载能力勾选列表所需的数据 // 在模态框挂载时触发,避免在 ConfigPage 顶层预加载 import { useEffect, useState } from 'react'; import { listSkills } from '../../api/skills'; import { listTools } from '../../api/tools'; import { listSubagents } from '../../api/subagents'; import { listModelOptions } from '../../api/experts'; import type { SkillListResponse, ToolsListResponse, SubagentListResponse, ModelOptionsResponse, } from './types'; export interface SharedModalData { skillList: SkillListResponse | null; toolList: ToolsListResponse | null; subagentList: SubagentListResponse | null; modelOptions: ModelOptionsResponse | null; loading: boolean; } /** * 在模态框挂载时一次性加载 skills/tools/subagents/modelOptions。 * 用于专家/子代理编辑模态框的能力勾选列表与 provider/model 下拉框。 */ export function useSharedModalData(enabled: boolean): SharedModalData { const [skillList, setSkillList] = useState(null); const [toolList, setToolList] = useState(null); const [subagentList, setSubagentList] = useState(null); const [modelOptions, setModelOptions] = useState(null); const [loading, setLoading] = useState(false); useEffect(() => { if (!enabled) return; let cancelled = false; setLoading(true); Promise.all([listSkills(), listTools(), listSubagents(), listModelOptions()]) .then(([s, t, sub, m]) => { if (cancelled) return; if (s) setSkillList(s); if (t) setToolList(t); if (sub) setSubagentList(sub); if (m) setModelOptions(m); }) .finally(() => { if (!cancelled) setLoading(false); }); return () => { cancelled = true; }; }, [enabled]); return { skillList, toolList, subagentList, modelOptions, loading }; }