/** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only * See the LICENSE file for details. */ import { observer } from "mobx-react"; import type { ReactNode } from "react"; import { useSearchParams } from "next/navigation"; import useSWR from "swr"; import { ArrowRight, Check, MailCheck, X } from "lucide-react"; import { Button } from "@plane/propel/button"; // components import { LogoSpinner } from "@/components/common/logo-spinner"; import { NodeDCStandaloneShell } from "@/components/nodedc/standalone-shell"; // constants import { WORKSPACE_INVITATION } from "@/constants/fetch-keys"; // helpers import { EPageTypes } from "@/helpers/authentication.helper"; // hooks import { useUser } from "@/hooks/store/user"; import { useAppRouter } from "@/hooks/use-app-router"; // wrappers import { AuthenticationWrapper } from "@/lib/wrappers/authentication-wrapper"; import { WorkspaceService } from "@/services/workspace.service"; // services // service initialization const workspaceService = new WorkspaceService(); function WorkspaceInvitationPage() { // router const router = useAppRouter(); // query params const searchParams = useSearchParams(); const invitation_id = searchParams.get("invitation_id"); const slug = searchParams.get("slug"); const token = searchParams.get("token"); // store hooks const { data: currentUser } = useUser(); const { data: invitationDetail, error } = useSWR( invitation_id && slug && WORKSPACE_INVITATION(invitation_id.toString()), invitation_id && slug ? () => workspaceService.getWorkspaceInvitation(slug.toString(), invitation_id.toString()) : null ); const handleAccept = async () => { if (!invitationDetail) return; try { await workspaceService.joinWorkspace(invitationDetail.workspace.slug, invitationDetail.id, { accepted: true, token: token, }); router.push(invitationDetail.email === currentUser?.email ? `/${invitationDetail.workspace.slug}` : "/"); } catch (err: unknown) { console.error(err); } }; const handleReject = async () => { if (!invitationDetail || !token) return; try { await workspaceService.joinWorkspace(invitationDetail.workspace.slug, invitationDetail.id, { accepted: false, token: token, }); router.push("/"); } catch (err: unknown) { console.error(err); } }; return ( {invitationDetail && !invitationDetail.responded_at ? ( error ? ( router.push("/")} />} /> ) : ( } /> ) ) : error || invitationDetail?.responded_at ? ( invitationDetail?.accepted ? ( router.push("/")} />} /> ) : ( router.push("/")} />} /> ) ) : (
)}
); } export default observer(WorkspaceInvitationPage); function InvitationShell({ action, description, eyebrow = "NODE.DC Tasker", title, }: { action: ReactNode; description: string; eyebrow?: string; title: string; }) { return (
{eyebrow}

{title}

{description}

{action}
); } function HomeButton({ routerPush }: { routerPush: () => void }) { return ( ); }