File size: 1,186 Bytes
f909d7c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import ReactGA from "react-ga4";
import { create } from "zustand";
import { Modal } from "src/containers/Modals";
import useUser from "./useUser";
type ModalState = {
[key in Modal]: boolean;
};
interface ModalActions {
setVisible: (modal: Modal) => (visible: boolean) => void;
}
const initialStates: ModalState = {
clear: false,
cloud: false,
download: false,
import: false,
account: false,
node: false,
share: false,
login: false,
premium: false,
jwt: false,
schema: false,
cancelPremium: false,
review: false,
jq: false,
type: false,
};
const authModals: Modal[] = ["cloud", "account"];
const premiumModals: Modal[] = [];
const useModal = create<ModalState & ModalActions>()(set => ({
...initialStates,
setVisible: modal => visible => {
const user = useUser.getState();
if (authModals.includes(modal) && !user.isAuthenticated) {
return set({ login: true });
} else if (premiumModals.includes(modal) && !user.premium) {
return set({ premium: true });
}
if (visible) ReactGA.event({ category: "Modal View", action: `modal_view_${modal}` });
set({ [modal]: visible });
},
}));
export default useModal;
|