diff --git a/apps/app/layouts/auth-layout/user-authorization-wrapper.tsx b/apps/app/layouts/auth-layout/user-authorization-wrapper.tsx index 5336890083..d11bb2ac1a 100644 --- a/apps/app/layouts/auth-layout/user-authorization-wrapper.tsx +++ b/apps/app/layouts/auth-layout/user-authorization-wrapper.tsx @@ -29,7 +29,7 @@ export const UserAuthorizationLayout: React.FC = ({ children }) => { ); } - if (error?.status === 401) { + if (error) { const redirectTo = router.asPath; router.push(`/signin?next=${redirectTo}`); diff --git a/apps/app/lib/auth.ts b/apps/app/lib/auth.ts index f2df25203f..e607fd00c8 100644 --- a/apps/app/lib/auth.ts +++ b/apps/app/lib/auth.ts @@ -109,9 +109,6 @@ export const homePageRedirect = async (cookie?: string) => { }, }; - // FIXME: backend is returning object of user and workspace. - // Get KT if it's required to send user and workspace and if - // yes change below accordingly if (!user.is_onboarded) return { redirect: { diff --git a/apps/app/pages/index.tsx b/apps/app/pages/index.tsx index a795211ff3..ef67f765d5 100644 --- a/apps/app/pages/index.tsx +++ b/apps/app/pages/index.tsx @@ -1,13 +1,67 @@ -// lib -import { homePageRedirect } from "lib/auth"; +import { useEffect } from "react"; + +import { useRouter } from "next/router"; + +import useSWR from "swr"; + +// services +import workspaceService from "services/workspace.service"; +// hooks +import useUser from "hooks/use-user"; +import useWorkspaces from "hooks/use-workspaces"; +// ui +import { Spinner } from "components/ui"; // types -import type { NextPage, NextPageContext } from "next"; +import type { NextPage } from "next"; +// fetch-keys +import { USER_WORKSPACE_INVITATIONS } from "constants/fetch-keys"; -const Home: NextPage = () => null; +const Home: NextPage = () => { + const router = useRouter(); -export const getServerSideProps = (ctx: NextPageContext) => { - const cookies = ctx.req?.headers.cookie; - return homePageRedirect(cookies); + const { user } = useUser(); + const { workspaces } = useWorkspaces(); + + const lastActiveWorkspace = + user && workspaces.find((workspace) => workspace.id === user.last_workspace_id); + + const { data: invitations } = useSWR(USER_WORKSPACE_INVITATIONS, () => + workspaceService.userWorkspaceInvitations() + ); + + useEffect(() => { + if (!user) { + router.push("/signin"); + return; + } + + if (!user.is_onboarded) { + router.push("/onboarding"); + return; + } + + if (lastActiveWorkspace) { + router.push(`/${lastActiveWorkspace.slug}`); + return; + } else if (workspaces.length > 0) { + router.push(`/${workspaces[0].slug}`); + return; + } + + if (invitations && invitations.length > 0) { + router.push("/invitations"); + return; + } else { + router.push("/create-workspace"); + return; + } + }, [user, router, lastActiveWorkspace, workspaces, invitations]); + + return ( +
+ +
+ ); }; export default Home; diff --git a/apps/app/pages/installations/[provider]/index.tsx b/apps/app/pages/installations/[provider]/index.tsx index 130011a865..a804b8d97c 100644 --- a/apps/app/pages/installations/[provider]/index.tsx +++ b/apps/app/pages/installations/[provider]/index.tsx @@ -12,6 +12,7 @@ interface IGithuPostInstallationProps { provider: string; } +// TODO:Change getServerSideProps to router.query const AppPostInstallation = ({ installation_id, setup_action, diff --git a/apps/app/pages/invitations.tsx b/apps/app/pages/invitations.tsx index e75dc26fe1..907c7bad36 100644 --- a/apps/app/pages/invitations.tsx +++ b/apps/app/pages/invitations.tsx @@ -22,6 +22,8 @@ import { CubeIcon, PlusIcon } from "@heroicons/react/24/outline"; // types import type { NextPage } from "next"; import type { IWorkspaceMemberInvitation } from "types"; +// fetch-keys +import { USER_WORKSPACE_INVITATIONS } from "constants/fetch-keys"; const OnBoard: NextPage = () => { const [invitationsRespond, setInvitationsRespond] = useState([]); @@ -32,9 +34,8 @@ const OnBoard: NextPage = () => { const { setToastAlert } = useToast(); - const { data: invitations, mutate: mutateInvitations } = useSWR( - "USER_WORKSPACE_INVITATIONS", - () => workspaceService.userWorkspaceInvitations() + const { data: invitations, mutate: mutateInvitations } = useSWR(USER_WORKSPACE_INVITATIONS, () => + workspaceService.userWorkspaceInvitations() ); const { data: workspaces, mutate: mutateWorkspaces } = useSWR("USER_WORKSPACES", () => diff --git a/apps/app/pages/onboarding.tsx b/apps/app/pages/onboarding.tsx index a72a797757..59913b9f00 100644 --- a/apps/app/pages/onboarding.tsx +++ b/apps/app/pages/onboarding.tsx @@ -3,6 +3,8 @@ import { useState } from "react"; import Image from "next/image"; import { useRouter } from "next/router"; +import { mutate } from "swr"; + // services import userService from "services/user.service"; // hooks @@ -20,6 +22,8 @@ import { ONBOARDING_CARDS } from "constants/workspace"; import Logo from "public/onboarding/logo.svg"; // types import type { NextPage } from "next"; +// fetch-keys +import { CURRENT_USER } from "constants/fetch-keys"; const Onboarding: NextPage = () => { const [step, setStep] = useState(1); @@ -72,6 +76,7 @@ const Onboarding: NextPage = () => { userService .updateUserOnBoard({ userRole }) .then(() => { + mutate(CURRENT_USER); router.push("/"); }) .catch((err) => {