67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
import { ConfirmDialog } from "~/components/common/ConfirmDialog";
|
|
import type { ScriptItem } from "~/services/api";
|
|
|
|
export type ScriptsPendingConfirm =
|
|
| { kind: "script"; script: ScriptItem }
|
|
| { kind: "resource"; id: string; name: string }
|
|
| { kind: "directory"; path: string }
|
|
| { kind: "close-tab"; id: string; name: string };
|
|
|
|
type ScriptsPendingConfirmDialogProps = {
|
|
pending: ScriptsPendingConfirm | null;
|
|
onOpenChange: (open: boolean) => void;
|
|
onConfirm: () => void | Promise<void>;
|
|
};
|
|
|
|
function copyFor(pending: ScriptsPendingConfirm) {
|
|
switch (pending.kind) {
|
|
case "script":
|
|
return {
|
|
title: "确定删除文件?",
|
|
description: `确定删除文件"${pending.script.script_name}"吗?稳定版本会保留。`,
|
|
confirmLabel: "删除",
|
|
destructive: true,
|
|
};
|
|
case "resource":
|
|
return {
|
|
title: "确定删除数据资源?",
|
|
description: `确定删除数据资源"${pending.name}"吗?稳定版本会保留。`,
|
|
confirmLabel: "删除",
|
|
destructive: true,
|
|
};
|
|
case "directory":
|
|
return {
|
|
title: "确定删除文件夹?",
|
|
description: `确定递归删除文件夹"${pending.path}"及其内容吗?稳定版本会保留。`,
|
|
confirmLabel: "删除",
|
|
destructive: true,
|
|
};
|
|
case "close-tab":
|
|
return {
|
|
title: "确定关闭标签?",
|
|
description: `当前脚本有未保存修改,确定关闭 "${pending.name}" 吗?`,
|
|
confirmLabel: "关闭",
|
|
destructive: false,
|
|
};
|
|
}
|
|
}
|
|
|
|
export function ScriptsPendingConfirmDialog({
|
|
pending,
|
|
onOpenChange,
|
|
onConfirm,
|
|
}: ScriptsPendingConfirmDialogProps) {
|
|
const copy = pending ? copyFor(pending) : null;
|
|
return (
|
|
<ConfirmDialog
|
|
open={pending !== null}
|
|
onOpenChange={onOpenChange}
|
|
title={copy?.title ?? ""}
|
|
description={copy?.description ?? ""}
|
|
confirmLabel={copy?.confirmLabel}
|
|
destructive={copy?.destructive}
|
|
onConfirm={onConfirm}
|
|
/>
|
|
);
|
|
}
|