import { FC, ReactNode } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // ui import { Spinner } from "@plane/ui"; // store import { useMobxStore } from "lib/mobx/store-provider"; export interface IUserAuthWrapper { children: ReactNode; } export const UserAuthWrapper: FC = (props) => { const { children } = props; // store const { user: userStore, workspace: workspaceStore } = useMobxStore(); // router const router = useRouter(); // fetching user information const { data: currentUser, error } = useSWR("CURRENT_USER_DETAILS", () => userStore.fetchCurrentUser(), { shouldRetryOnError: false, }); // fetching user settings useSWR("CURRENT_USER_SETTINGS", () => userStore.fetchCurrentUserSettings(), { shouldRetryOnError: false, }); // fetching all workspaces useSWR(`USER_WORKSPACES_LIST`, () => workspaceStore.fetchWorkspaces(), { shouldRetryOnError: false, }); if (!currentUser && !error) { return (
); } if (error) { const redirectTo = router.asPath; router.push(`/?next=${redirectTo}`); return null; } return <>{children}; };