2022-11-19 14:21:26 +00:00
import React from "react" ;
// next
import type { NextPage } from "next" ;
import Link from "next/link" ;
import { useRouter } from "next/router" ;
// swr
import useSWR from "swr" ;
// services
import workspaceService from "lib/services/workspace.service" ;
// constants
import { WORKSPACE_INVITATION } from "constants/fetch-keys" ;
// hooks
import useUser from "lib/hooks/useUser" ;
// layouts
import DefaultLayout from "layouts/DefaultLayout" ;
// ui
2022-12-06 04:41:56 +00:00
import { Button , Spinner } from "ui" ;
2022-11-19 14:21:26 +00:00
// icons
import {
ChartBarIcon ,
2022-11-29 14:19:39 +00:00
CheckIcon ,
2022-11-19 14:21:26 +00:00
ChevronRightIcon ,
CubeIcon ,
ShareIcon ,
StarIcon ,
UserIcon ,
2022-11-29 14:19:39 +00:00
XMarkIcon ,
2022-11-19 14:21:26 +00:00
} from "@heroicons/react/24/outline" ;
2022-12-22 16:19:46 +00:00
import { EmptySpace , EmptySpaceItem } from "ui/empty-space" ;
2022-11-19 14:21:26 +00:00
const WorkspaceInvitation : NextPage = ( ) = > {
const router = useRouter ( ) ;
const { invitationId , email } = router . query ;
const { user } = useUser ( ) ;
2022-12-12 04:49:52 +00:00
const { data : invitationDetail , error } = useSWR ( invitationId && WORKSPACE_INVITATION , ( ) = >
invitationId ? workspaceService . getWorkspaceInvitation ( invitationId as string ) : null
2022-11-19 14:21:26 +00:00
) ;
const handleAccept = ( ) = > {
2022-12-12 04:49:52 +00:00
if ( ! invitationDetail ) return ;
2022-11-19 14:21:26 +00:00
workspaceService
. joinWorkspace ( invitationDetail . workspace . slug , invitationDetail . id , {
accepted : true ,
email : invitationDetail.email ,
} )
. then ( ( res ) = > {
router . push ( "/signin" ) ;
} )
. catch ( ( err ) = > console . error ( err ) ) ;
} ;
return (
< DefaultLayout >
< div className = "w-full h-full flex flex-col justify-center items-center px-3" >
{ invitationDetail ? (
< >
{ error ? (
< div className = "bg-gray-50 rounded shadow-2xl border px-4 py-8 w-full md:w-1/3 space-y-4 flex flex-col text-center" >
< h2 className = "text-xl uppercase" > INVITATION NOT FOUND < / h2 >
< / div >
) : (
< >
2022-11-29 14:19:39 +00:00
{ invitationDetail . accepted ? (
< >
< EmptySpace
title = { ` You are already a member of ${ invitationDetail . workspace . name } ` }
description = "Your workspace is where you'll create projects, collaborate on your issues, and organize different streams of work in your Plane account."
>
< EmptySpaceItem
Icon = { CubeIcon }
title = "Continue to Dashboard"
action = { ( ) = > router . push ( "/" ) }
/ >
< / EmptySpace >
< / >
) : (
< EmptySpace
title = { ` You have been invited to ${ invitationDetail . workspace . name } ` }
description = "Your workspace is where you'll create projects, collaborate on your issues, and organize different streams of work in your Plane account."
>
< EmptySpaceItem Icon = { CheckIcon } title = "Accept" action = { handleAccept } / >
< EmptySpaceItem
Icon = { XMarkIcon }
title = "Ignore"
action = { ( ) = > {
router . push ( "/" ) ;
} }
/ >
< / EmptySpace >
) }
2022-11-19 14:21:26 +00:00
< / >
) }
< / >
2022-12-06 04:41:56 +00:00
) : error ? (
2022-11-29 14:19:39 +00:00
< EmptySpace
title = "This invitation link is not active anymore."
description = "Your workspace is where you'll create projects, collaborate on your issues, and organize different streams of work in your Plane account."
link = { { text : "Or start from an empty project" , href : "/" } }
>
{ ! user ? (
2022-11-19 14:21:26 +00:00
< EmptySpaceItem
2022-11-29 14:19:39 +00:00
Icon = { UserIcon }
title = "Sign in to continue"
2022-11-19 14:21:26 +00:00
action = { ( ) = > {
2022-11-29 14:19:39 +00:00
router . push ( "/signin" ) ;
2022-11-19 14:21:26 +00:00
} }
/ >
2022-11-29 14:19:39 +00:00
) : (
2022-11-19 14:21:26 +00:00
< EmptySpaceItem
2022-11-29 14:19:39 +00:00
Icon = { CubeIcon }
title = "Continue to Dashboard"
2022-11-19 14:21:26 +00:00
action = { ( ) = > {
2022-11-29 14:19:39 +00:00
router . push ( "/" ) ;
2022-11-19 14:21:26 +00:00
} }
/ >
2022-11-29 14:19:39 +00:00
) }
< EmptySpaceItem
Icon = { StarIcon }
title = "Star us on GitHub"
action = { ( ) = > {
router . push ( "https://github.com/makeplane" ) ;
} }
/ >
< EmptySpaceItem
Icon = { ShareIcon }
title = "Join our community of active creators"
action = { ( ) = > {
router . push ( "https://discord.com/invite/8SR2N9PAcJ" ) ;
} }
/ >
< / EmptySpace >
2022-12-06 04:41:56 +00:00
) : (
< div className = "w-full h-full flex justify-center items-center" >
< Spinner / >
< / div >
2022-11-19 14:21:26 +00:00
) }
< / div >
< / DefaultLayout >
) ;
} ;
2022-11-25 11:00:41 +00:00
export default WorkspaceInvitation ;