import { FC, ReactNode } from "react"; import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; // import useSWRImmutable from "swr/immutable"; // ui import { Spinner } from "@plane/ui"; // hooks import { USER_WORKSPACES_LIST } from "@/constants/fetch-keys"; import { useUser, useUserProfile, useWorkspace } from "@/hooks/store"; import { useCurrentUserSettings } from "@/hooks/store/use-current-user-settings"; export interface IUserAuthWrapper { children: ReactNode; } export const UserAuthWrapper: FC = observer((props) => { const { children } = props; // store hooks const { fetchCurrentUser, data: currentUser, error: currentUserError } = useUser(); const { fetchUserProfile } = useUserProfile(); const { fetchCurrentUserSettings } = useCurrentUserSettings(); const { fetchWorkspaces } = useWorkspace(); // router const router = useRouter(); // fetching user information const { error } = useSWR("CURRENT_USER_DETAILS", () => fetchCurrentUser(), { shouldRetryOnError: false, }); useSWR("CURRENT_USER_PROFILE_DETAILS", () => fetchUserProfile(), { shouldRetryOnError: false, }); //fetching user settings const { isLoading: userSettingsLoader } = useSWR("CURRENT_USER_SETTINGS", () => fetchCurrentUserSettings(), { shouldRetryOnError: false, }); // fetching all workspaces const { isLoading: workspaceLoader } = useSWR(USER_WORKSPACES_LIST, () => fetchWorkspaces(), { shouldRetryOnError: false, }); if ((!currentUser && !currentUserError) || workspaceLoader) { return (
); } if (error) { const redirectTo = router.asPath; router.push(`/?next_path=${redirectTo}`); return null; } return <>{children}; });