65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { create } from "zustand";
|
|
import type { ReactNode } from "react";
|
|
|
|
interface IConfirmStore {
|
|
visible: boolean;
|
|
message: string;
|
|
content?: ReactNode;
|
|
title: string;
|
|
onConfirm: () => void;
|
|
onCancel: () => void;
|
|
show: (message: string, onConfirm: () => void, onCancel: () => void) => void;
|
|
showContent: (message: string, content: ReactNode, onConfirm: () => void, onCancel: () => void) => void;
|
|
close: () => void;
|
|
clear: () => void;
|
|
}
|
|
|
|
export type ConfirmState = IConfirmStore;
|
|
|
|
const useConfirmStore = create<ConfirmState>()((set) => ({
|
|
visible: false,
|
|
message: "",
|
|
content: undefined,
|
|
title: "",
|
|
onConfirm: () => {},
|
|
onCancel: () => {},
|
|
show: (message: string, onConfirm: () => void, onCancel: () => void) =>
|
|
set(() => ({
|
|
visible: true,
|
|
message: message,
|
|
content: undefined,
|
|
onConfirm: onConfirm,
|
|
onCancel: onCancel,
|
|
title: "Atención",
|
|
})),
|
|
showContent: (message: string, content: ReactNode, onConfirm: () => void, onCancel: () => void) =>
|
|
set(() => ({
|
|
visible: true,
|
|
message: message,
|
|
content: content,
|
|
onConfirm: onConfirm,
|
|
onCancel: onCancel,
|
|
title: "Atención",
|
|
})),
|
|
close: () =>
|
|
set(() => ({
|
|
visible: false,
|
|
message: "",
|
|
content: undefined,
|
|
onConfirm: () => {},
|
|
onCancel: () => {},
|
|
title: "",
|
|
})),
|
|
clear: () =>
|
|
set(() => ({
|
|
visible: false,
|
|
message: "",
|
|
content: undefined,
|
|
onConfirm: () => {},
|
|
onCancel: () => {},
|
|
title: "",
|
|
})),
|
|
}));
|
|
|
|
export { useConfirmStore };
|