import { useState } from "react"; import type { ScriptItem } from "~/services/api"; import type { ScriptsPendingConfirm } from "./ScriptsPendingConfirm"; type DeleteActions = { deleteScript: (script: ScriptItem) => Promise; deleteDataResource: (resourceId: string) => Promise; deleteDirectory: (path: string) => Promise; closeTab: ( id: string, event?: { stopPropagation: () => void }, options?: { discardDirty?: boolean }, ) => Promise; }; export function useScriptsPendingConfirm( scripts: ScriptItem[], actions: DeleteActions, ) { const [pendingConfirm, setPendingConfirm] = useState(null); const requestCloseTab = async ( scriptId: string, event?: { stopPropagation: () => void }, ) => { const closed = await actions.closeTab(scriptId, event); if (closed) return; const name = scripts.find((s) => s.script_id === scriptId)?.script_name ?? "该脚本"; setPendingConfirm({ kind: "close-tab", id: scriptId, name }); }; const handleConfirm = async () => { if (!pendingConfirm) return; const target = pendingConfirm; setPendingConfirm(null); if (target.kind === "script") await actions.deleteScript(target.script); else if (target.kind === "resource") { await actions.deleteDataResource(target.id); } else if (target.kind === "directory") { await actions.deleteDirectory(target.path); } else { await actions.closeTab(target.id, undefined, { discardDirty: true }); } }; return { pendingConfirm, setPendingConfirm, requestCloseTab, handleConfirm, }; }