import { useParams } from 'common' import Head from 'next/head' import { PropsWithChildren, useMemo, useState } from 'react' import { Admonition } from 'ui-patterns/admonition' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { ProjectClaimBenefits } from '@/components/interfaces/Organization/ProjectClaim/benefits' import { ProjectClaimChooseOrg } from '@/components/interfaces/Organization/ProjectClaim/choose-org' import { ProjectClaimConfirm } from '@/components/interfaces/Organization/ProjectClaim/confirm' import { ProjectClaimLayout } from '@/components/interfaces/Organization/ProjectClaim/layout' import { useApiAuthorizationQuery } from '@/data/api-authorization/api-authorization-query' import { useOrganizationProjectClaimQuery } from '@/data/organizations/organization-project-claim-query' import { useOrganizationsQuery } from '@/data/organizations/organizations-query' import { useCustomContent } from '@/hooks/custom-content/useCustomContent' import { withAuth } from '@/hooks/misc/withAuth' import type { NextPageWithLayout } from '@/types' const ClaimProjectPageLayout = ({ children }: PropsWithChildren) => { const { appTitle } = useCustomContent(['app:title']) return ( <> {`Claim project | ${appTitle ?? 'Briven'}`} {children} ) } const ClaimProjectPage: NextPageWithLayout = () => { const { auth_id, token: claimToken } = useParams() const [selectedOrgSlug, setSelectedOrgSlug] = useState() const [step, setStep] = useState<'choose-org' | 'benefits' | 'confirm'>('choose-org') const { data: requester, isPending: isLoadingRequester, isError: isErrorRequester, error: errorRequester, } = useApiAuthorizationQuery({ id: auth_id }) const { data: organizations } = useOrganizationsQuery() const selectedOrganization = useMemo(() => { return (organizations || []).find((org) => org.slug === selectedOrgSlug) }, [selectedOrgSlug, organizations]) const { data: projectClaim, error: errorProjectClaim, isError: isErrorProjectClaim, isPending: isLoadingProjectClaim, isSuccess: isSuccessProjectClaim, } = useOrganizationProjectClaimQuery( { slug: selectedOrgSlug!, token: claimToken!, }, { enabled: !!claimToken && !!selectedOrgSlug, } ) if ((selectedOrgSlug && claimToken && isLoadingProjectClaim) || isLoadingRequester) { return (
) } if ((selectedOrgSlug && claimToken && isErrorProjectClaim) || isErrorRequester) { return (

Please retry your claim request from the requesting app

{!!errorProjectClaim &&

Error: {errorProjectClaim?.message}

} {!!errorRequester &&

Error: {errorRequester?.message}

}
) } if (step === 'choose-org' || !selectedOrganization) { return ( { setSelectedOrgSlug(orgSlug) setStep('benefits') }} /> ) } if (isSuccessProjectClaim) { if (step === 'benefits') { return ( setStep('confirm')} /> ) } return ( ) } return null } ClaimProjectPage.getLayout = (page) => (
{page}
) export default withAuth(ClaimProjectPage)