import { fetchDynamicRoutes } from "@/api"; import { isAuthenticated, signOut } from "@/store"; import type { RouteNode } from "@/types"; import { useEffect, useState } from "react"; export interface DynamicRouterData { authed: boolean; loading: boolean; loadError: boolean; dynamicRoutes: RouteNode[]; } export function useDynamicRouterData(): DynamicRouterData { const authed = isAuthenticated(); const [dynamicRoutes, setDynamicRoutes] = useState([]); const [loading, setLoading] = useState(authed); const [loadError, setLoadError] = useState(false); useEffect(() => { if (!authed) { setDynamicRoutes([]); setLoading(false); setLoadError(false); return; } setLoading(true); setLoadError(false); fetchDynamicRoutes() .then((routes) => { setDynamicRoutes(routes); if (!routes || routes.length === 0) { setLoadError(true); } }) .catch(() => { setLoadError(true); signOut(); }) .finally(() => setLoading(false)); }, [authed]); return { authed, loading, loadError, dynamicRoutes }; }