import { ReactNode, useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Navigate } from 'react-router-dom'; import { apiClient } from '@/lib/api-client'; import { useAuthStore } from '@/store/auth-store'; type AuthGuardProps = { children: ReactNode; requireExpert?: boolean; }; export function AuthGuard({ children, requireExpert = false }: AuthGuardProps) { const user = useAuthStore((state) => state.user); const setUser = useAuthStore((state) => state.setUser); const query = useQuery({ queryKey: ['auth', 'me'], queryFn: () => apiClient.getMe(), staleTime: 30_000, }); useEffect(() => { if (query.data?.user) { setUser(query.data.user); } }, [query.data, setUser]); // Tunjukkan loading hanya jika belum ada user di store if (query.isLoading && !user) { return
Memeriksa sesi...
; } // Cek store dulu, baru query — mencegah redirect saat refetch background const currentUser = query.data?.user ?? user; if (!currentUser) { return ; } if (requireExpert && currentUser.role !== 'expert') { return ; } return <>{children}; }