import { faCopy, faEye, faFire, faTrash } from "@fortawesome/free-solid-svg-icons"; import { storeToRefs } from "pinia"; import type { HDASummary } from "@/api"; import { copyDataset, deleteDataset } from "@/api/datasets"; import type { TableAction } from "@/components/Common/GTable.types"; import { useConfirmDialog } from "@/composables/confirmDialog"; import { Toast } from "@/composables/toast"; import { useHistoryStore } from "@/stores/historyStore"; export function useDatasetTableActions(refreshList: () => Promise) { const historyStore = useHistoryStore(); const { currentHistoryId } = storeToRefs(historyStore); const { confirm } = useConfirmDialog(); async function onShowDataset(item: HDASummary) { const { history_id } = item; const filters = { deleted: item.deleted, visible: item.visible, hid: item.hid, }; try { await historyStore.applyFilters(history_id, filters); } catch (error) { Toast.error("无法在历史记录中显示数据集"); } } async function onCopyDataset(item: HDASummary) { const dataset_id = item.id; try { if (!currentHistoryId.value) { throw new Error("未找到当前历史记录。"); } await copyDataset(dataset_id, currentHistoryId.value); historyStore.loadCurrentHistory(); await refreshList(); Toast.success(`数据集“${item.name}”已复制到当前历史记录。`); } catch (error) { Toast.error("无法复制数据集"); } } async function confirmDeleteDataset(item: HDASummary, purge: boolean) { const confirmed = await confirm( `确定要${purge ? "永久删除" : "删除"}数据集“${item.name}”吗?`, { title: purge ? "永久删除数据集" : "删除数据集", okTitle: purge ? "永久删除" : "删除", okVariant: "danger", }, ); if (confirmed) { try { await deleteDataset(item.id, purge); Toast.success(`数据集“${item.name}”已${purge ? "永久删除" : "删除"}。`); historyStore.loadCurrentHistory(); await refreshList(); } catch (error) { Toast.error(`无法${purge ? "永久删除" : "删除"}数据集。`); } } } async function onDeleteDataset(item: HDASummary) { confirmDeleteDataset(item, false); } async function onPurgeDataset(item: HDASummary) { confirmDeleteDataset(item, true); } const datasetTableActions: TableAction[] = [ { id: "copy-dataset", label: "复制到当前历史记录", title: "将数据集复制到当前历史记录", icon: faCopy, handler: onCopyDataset, }, { id: "show-dataset", label: "在历史记录中显示", title: "在历史记录面板中显示数据集", icon: faEye, handler: onShowDataset, }, { id: "delete-dataset", label: "删除", title: "删除数据集", icon: faTrash, handler: onDeleteDataset, }, { id: "purge-dataset", label: "永久删除", title: "永久删除数据集", icon: faFire, handler: onPurgeDataset, }, ]; return { datasetTableActions, }; }