import { createContext, PropsWithChildren, useCallback, useContext, useMemo } from "react"; import { MantineColor, MantineColorScheme } from "@mantine/core"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { fetchMe } from "@/features/players/server"; const queryKey = ['auth']; export const authQueryConfig = { queryKey, queryFn: fetchMe } interface AuthData { user: any; metadata: { accentColor: MantineColor; colorScheme: MantineColorScheme }; roles: string[]; } export const defaultAuthData: AuthData = { user: undefined, metadata: { accentColor: 'blue', colorScheme: 'auto' }, roles: [], } export interface AuthContextType extends AuthData { set: ({ user, metadata, roles }: Partial) => void; } const AuthContext = createContext({ ...defaultAuthData, set: () => {}, }); export const AuthProvider: React.FC = ({ children }) => { const queryClient = useQueryClient(); const { data, isLoading } = useQuery(authQueryConfig); const set = useCallback((updates: Partial) => { queryClient.setQueryData(queryKey, (oldData: AuthData | undefined) => { const currentData = oldData || defaultAuthData; return { ...currentData, ...updates, metadata: updates.metadata ? { ...currentData.metadata, ...updates.metadata } : currentData.metadata }; }); }, [queryClient]); if (isLoading) { return

Loading...

} return ( {children} ) }; export const useAuth = () => { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth must be used within an AuthProvider'); } return context; };