File size: 1,435 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 53 54 55 56 57 |
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;
|