modalStore.ts 901 B

12345678910111213141516171819202122232425262728293031323334
  1. // stores/modalStore.ts
  2. import { create } from 'zustand';
  3. type ModalConfig ={
  4. content: React.ReactNode;
  5. beforeClose?: () => Promise<void> | void; // 用户自定义关闭前回调
  6. onCancel?: () => Promise<void> | void; // 用户自定义关闭前回调
  7. onConfirm?: () => Promise<void> | void; // 用户自定义关闭前回调
  8. }
  9. type ModalStore = {
  10. isVisible: boolean;
  11. config: ModalConfig | null;
  12. showModal: (config:ModalConfig) => void;
  13. hideModal: () => void;
  14. onConfirm: ()=> void
  15. onCancel: ()=> void
  16. };
  17. export const useModalStore = create<ModalStore>((set, get) => ({
  18. isVisible: false,
  19. config: null,
  20. showModal: (config) => set({ isVisible: true, config }),
  21. hideModal: () => set({ isVisible: false }),
  22. onConfirm: () => {
  23. get().config?.onConfirm?.()
  24. get().hideModal();
  25. },
  26. onCancel: () => {
  27. get().config?.onCancel?.()
  28. get().hideModal();
  29. },
  30. }));