json / src /store /useUser.ts
xinnni's picture
Upload 146 files
f909d7c verified
raw
history blame
No virus
1.44 kB
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<UserStates & UserActions>()(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;