Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: home page redirection logic #752

Merged
merged 7 commits into from
Apr 8, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const UserAuthorizationLayout: React.FC<Props> = ({ children }) => {
);
}

if (error?.status === 401) {
if (error) {
const redirectTo = router.asPath;

router.push(`/signin?next=${redirectTo}`);
Expand Down
3 changes: 0 additions & 3 deletions apps/app/lib/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
68 changes: 61 additions & 7 deletions apps/app/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -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 = () => {
const router = useRouter();

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;
}

const Home: NextPage = () => null;
if (invitations && invitations.length > 0) {
router.push("/invitations");
return;
} else {
router.push("/create-workspace");
return;
}
}, [user, router, lastActiveWorkspace, workspaces, invitations]);

export const getServerSideProps = (ctx: NextPageContext) => {
const cookies = ctx.req?.headers.cookie;
return homePageRedirect(cookies);
return (
<div className="h-screen grid place-items-center">
<Spinner />
</div>
);
};

export default Home;
1 change: 1 addition & 0 deletions apps/app/pages/installations/[provider]/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ interface IGithuPostInstallationProps {
provider: string;
}

// TODO:Change getServerSideProps to router.query
const AppPostInstallation = ({
installation_id,
setup_action,
Expand Down
7 changes: 4 additions & 3 deletions apps/app/pages/invitations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<string[]>([]);
Expand All @@ -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", () =>
Expand Down
5 changes: 5 additions & 0 deletions apps/app/pages/onboarding.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand Down Expand Up @@ -72,6 +76,7 @@ const Onboarding: NextPage = () => {
userService
.updateUserOnBoard({ userRole })
.then(() => {
mutate(CURRENT_USER);
router.push("/");
})
.catch((err) => {
Expand Down