diff --git a/lib/hoc/withAuthWrapper.tsx b/lib/hoc/withAuthWrapper.tsx index 0d7bc12bd..e14b63b7b 100644 --- a/lib/hoc/withAuthWrapper.tsx +++ b/lib/hoc/withAuthWrapper.tsx @@ -1,30 +1,32 @@ -import React, { useEffect } from "react"; +import React from "react"; // next import type { NextPage } from "next"; -// axios configurations -import { setAxiosHeader } from "configuration/axios-configuration"; // redirect import redirect from "lib/redirect"; -const withAuthWrapper = (WrappedComponent: NextPage) => { +const withAuth = (WrappedComponent: NextPage) => { const Wrapper: NextPage = (props) => { - useEffect(() => { - if (props?.tokenDetails && props?.tokenDetails?.access_token) { - setAxiosHeader(props.tokenDetails.access_token); - } - }, [props]); - return ; }; Wrapper.getInitialProps = async (ctx) => { - const componentProps = - WrappedComponent.getInitialProps && - (await WrappedComponent.getInitialProps(ctx)); - return { ...componentProps }; + const isServer = typeof window === "undefined"; + + const cookies = isServer ? ctx?.req?.headers.cookie : document.cookie; + + const token = cookies?.split("accessToken=")?.[1]?.split(";")?.[0]; + + if (!token) { + redirect(ctx, "/signin"); + } + + const pageProps = + WrappedComponent.getInitialProps && (await WrappedComponent.getInitialProps(ctx)); + + return { ...pageProps }; }; return Wrapper; }; -export default withAuthWrapper; +export default withAuth; diff --git a/lib/redirect.ts b/lib/redirect.ts index ad7c28b34..689a4b2f5 100644 --- a/lib/redirect.ts +++ b/lib/redirect.ts @@ -1,7 +1,8 @@ // next imports +import type { NextPageContext } from "next"; import Router from "next/router"; -const redirect = (context: any, target: any) => { +const redirect = (context: NextPageContext, target: any) => { if (context.res) { // server // 303: "See other" diff --git a/pages/invitations.tsx b/pages/invitations.tsx index a38fb48e6..cb0d378e9 100644 --- a/pages/invitations.tsx +++ b/pages/invitations.tsx @@ -5,8 +5,6 @@ import Link from "next/link"; import { useRouter } from "next/router"; // swr import useSWR from "swr"; -// headless ui -import { Dialog, Transition } from "@headlessui/react"; // services import workspaceService from "lib/services/workspace.service"; import userService from "lib/services/user.service"; @@ -14,19 +12,16 @@ import userService from "lib/services/user.service"; import useUser from "lib/hooks/useUser"; // constants import { USER_WORKSPACE_INVITATIONS } from "constants/api-routes"; -// hoc -import withAuthWrapper from "lib/hoc/withAuthWrapper"; // layouts import DefaultLayout from "layouts/DefaultLayout"; // ui import { Button, Spinner } from "ui"; // types import type { IWorkspaceInvitation } from "types"; -import { ChartBarIcon, ChevronRightIcon, CubeIcon, PlusIcon } from "@heroicons/react/24/outline"; +import { CubeIcon, PlusIcon } from "@heroicons/react/24/outline"; import { EmptySpace, EmptySpaceItem } from "ui/EmptySpace"; const OnBoard: NextPage = () => { - const [canRedirect, setCanRedirect] = useState(true); const router = useRouter(); const { workspaces, mutateWorkspaces, user } = useUser(); @@ -63,28 +58,18 @@ const OnBoard: NextPage = () => { console.log(res); await mutate(); await mutateWorkspaces(); + router.push("/workspace"); }) .catch((err) => { console.log(err); }); }; - // useEffect(() => { - // if (!invitations) return; - // else - // invitations.forEach((invite) => { - // if (invite.accepted) - // setInvitationsRespond((prevData) => { - // return [...prevData, invite.workspace.id]; - // }); - // }); - // }, [invitations, router, workspaces]); - useEffect(() => { - if (workspaces && workspaces.length === 0) { - setCanRedirect(false); - } - }, [workspaces]); + userService.updateUserOnBoard().then((response) => { + console.log(response); + }); + }, []); return ( { )}
- {invitations ? ( + {invitations && workspaces ? ( invitations.length > 0 ? (
@@ -139,23 +124,6 @@ const OnBoard: NextPage = () => { Accept
- {/*
- { - handleInvitation(item, invitationsRespond.includes(item.workspace.id) ? "withdraw" : "accepted"); - }} - type="checkbox" - className="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500" - /> - -
*/}
))} @@ -167,26 +135,45 @@ const OnBoard: NextPage = () => { + ) : workspaces && workspaces.length > 0 ? ( +
+

Your workspaces

+ {workspaces.map((workspace) => ( +
+
+ + + {workspace.name} + +
+
+

{workspace.owner.first_name}

+
+
+ ))} + + + +
) : ( - - { - userService.updateUserOnBoard().then((response) => { - console.log(response); - }); - router.push(canRedirect ? "/" : "/create-workspace"); - }} - /> - + invitations.length === 0 && + workspaces.length === 0 && ( + + { + router.push("/create-workspace"); + }} + /> + + ) ) ) : (
@@ -199,4 +186,4 @@ const OnBoard: NextPage = () => { ); }; -export default withAuthWrapper(OnBoard); +export default OnBoard; diff --git a/pages/signin.tsx b/pages/signin.tsx index aa97cae35..7a976bba1 100644 --- a/pages/signin.tsx +++ b/pages/signin.tsx @@ -8,8 +8,6 @@ import Image from "next/image"; import useUser from "lib/hooks/useUser"; // services import authenticationService from "lib/services/authentication.service"; -// hoc -import withAuthWrapper from "lib/hoc/withAuthWrapper"; // layouts import DefaultLayout from "layouts/DefaultLayout"; // social button @@ -180,4 +178,4 @@ const SignIn: NextPage = () => { ); }; -export default withAuthWrapper(SignIn); +export default SignIn; diff --git a/pages/workspace-member-invitation/[invitationId].tsx b/pages/workspace-member-invitation/[invitationId].tsx index 12c6bd50b..6c0878182 100644 --- a/pages/workspace-member-invitation/[invitationId].tsx +++ b/pages/workspace-member-invitation/[invitationId].tsx @@ -11,8 +11,6 @@ import workspaceService from "lib/services/workspace.service"; import { WORKSPACE_INVITATION } from "constants/fetch-keys"; // hooks import useUser from "lib/hooks/useUser"; -// hoc -import withAuthWrapper from "lib/hoc/withAuthWrapper"; // layouts import DefaultLayout from "layouts/DefaultLayout"; // ui @@ -149,4 +147,4 @@ const WorkspaceInvitation: NextPage = () => { ); }; -export default withAuthWrapper(WorkspaceInvitation); +export default WorkspaceInvitation; diff --git a/pages/workspace/index.tsx b/pages/workspace/index.tsx index 3c73ac872..db86a80ea 100644 --- a/pages/workspace/index.tsx +++ b/pages/workspace/index.tsx @@ -9,6 +9,8 @@ import AdminLayout from "layouts/AdminLayout"; import useSWR from "swr"; // hooks import useUser from "lib/hooks/useUser"; +// hoc +import withAuthWrapper from "lib/hoc/withAuthWrapper"; // fetch keys import { USER_ISSUE } from "constants/fetch-keys"; // services @@ -167,4 +169,4 @@ const Workspace: NextPage = () => { ); }; -export default Workspace; +export default withAuthWrapper(Workspace);