import { Session, User } from "@supabase/supabase-js"; import ReactGA from "react-ga4"; import toast from "react-hot-toast"; import { create } from "zustand"; import { supabase } from "src/lib/api/supabase"; interface UserActions { logout: () => void; setSession: (session: Session) => void; } interface UserStates { user: User | null; isAuthenticated: boolean; premium: boolean; premiumCancelled: boolean; organization: boolean; orgAdmin: boolean; } const initialStates: UserStates = { user: null, isAuthenticated: false, premium: false, premiumCancelled: false, organization: false, orgAdmin: false, }; const useUser = create()(set => ({ ...initialStates, setSession: async session => { supabase.rpc("get_subscription_info").then(({ data }) => { if (data) { set({ premium: data.premium, organization: data.organization, premiumCancelled: !!data.cancelled, orgAdmin: data.org_admin, }); ReactGA.set({ tier: data.premium ? "premium" : "free" }); } set({ user: session.user, isAuthenticated: true }); ReactGA.set({ userId: session.user.id }); }); }, logout: async () => { toast.loading("Logging out...", { id: "logout" }); await supabase.auth.signOut(); set(initialStates); toast.success("Logged out.", { id: "logout" }); }, })); export default useUser;