update:原生确认框替换为自定义弹窗
This commit is contained in:
@@ -1,7 +1,4 @@
|
||||
// Dialog slice: create-schedule dialog state + cron preview.
|
||||
// Pure setters + small mutations that read/write only dialog-owned fields.
|
||||
|
||||
import type { CronPreview } from "../../../services/api";
|
||||
import type { CronPreview, Schedule } from "../../../services/api";
|
||||
import type { StateCreator } from "zustand";
|
||||
|
||||
import { handleError, notify, requireApi } from "./helpers";
|
||||
@@ -12,6 +9,8 @@ import type { SchedulesStore } from "./useSchedulesStore";
|
||||
export type DialogSliceState = {
|
||||
createDialogOpen: boolean;
|
||||
newScheduleName: string;
|
||||
renameTarget: Schedule | null;
|
||||
renameName: string;
|
||||
cronResult: CronPreview | null;
|
||||
};
|
||||
|
||||
@@ -21,10 +20,13 @@ export type DialogSliceActions = {
|
||||
// pure setters
|
||||
setCreateDialogOpen: (open: boolean) => void;
|
||||
setNewScheduleName: (name: string) => void;
|
||||
setRenameName: (name: string) => void;
|
||||
setCronResult: (result: CronPreview | null) => void;
|
||||
|
||||
// mutations
|
||||
openCreateDialog: () => void;
|
||||
openRenameDialog: (target: Schedule) => void;
|
||||
closeRenameDialog: () => void;
|
||||
runCronPreview: () => Promise<void>;
|
||||
};
|
||||
|
||||
@@ -35,12 +37,15 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
|
||||
// ---- initial state ----
|
||||
createDialogOpen: false,
|
||||
newScheduleName: "",
|
||||
renameTarget: null,
|
||||
renameName: "",
|
||||
cronResult: null,
|
||||
|
||||
// ---- pure setters ----
|
||||
|
||||
setCreateDialogOpen: (open) => set({ createDialogOpen: open }),
|
||||
setNewScheduleName: (name) => set({ newScheduleName: name }),
|
||||
setRenameName: (name) => set({ renameName: name }),
|
||||
setCronResult: (result) => set({ cronResult: result }),
|
||||
|
||||
// ---- mutations ----
|
||||
@@ -54,6 +59,20 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
|
||||
}));
|
||||
},
|
||||
|
||||
openRenameDialog: (target) => {
|
||||
if (get().busy) return;
|
||||
set({
|
||||
contextMenu: null,
|
||||
renameTarget: target,
|
||||
renameName: target.schedule_name,
|
||||
});
|
||||
},
|
||||
|
||||
closeRenameDialog: () => {
|
||||
if (get().busy === "rename-schedule") return;
|
||||
set({ renameTarget: null, renameName: "" });
|
||||
},
|
||||
|
||||
runCronPreview: async () => {
|
||||
const api = requireApi();
|
||||
const { scheduleForm } = get();
|
||||
@@ -75,4 +94,4 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
|
||||
set({ busy: null });
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user