useModal.tsx 838 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { create } from "zustand";
  2. import useUser from "./useUser";
  3. interface ModalActions {
  4. setVisible: (modal: keyof typeof initialStates) => (visible: boolean) => void;
  5. }
  6. const initialStates = {
  7. clear: false,
  8. cloud: false,
  9. download: false,
  10. goals: false,
  11. import: false,
  12. account: false,
  13. node: false,
  14. settings: false,
  15. share: false,
  16. login: false,
  17. };
  18. type ModalType = keyof typeof initialStates;
  19. const authModals: ModalType[] = ["cloud", "share", "account"];
  20. export type ModalStates = typeof initialStates;
  21. const useModal = create<ModalStates & ModalActions>()(set => ({
  22. ...initialStates,
  23. setVisible: modal => visible => {
  24. if (authModals.includes(modal) && !useUser.getState().isAuthenticated) {
  25. return set({ login: true });
  26. }
  27. set({ [modal]: visible });
  28. },
  29. }));
  30. export default useModal;