'use client' import learnhouseIcon from 'public/learnhouse_bigicon_1.png' import Image from 'next/image' import { getOrgLogoMediaDirectory } from '@services/media/media' import Link from 'next/link' import { getUriWithOrg } from '@services/config/config' import { useLHSession } from '@components/Contexts/LHSessionContext' import React, { useEffect } from 'react' import { MailWarning, Ticket, UserPlus } from 'lucide-react' import { useOrg } from '@components/Contexts/OrgContext' import UserAvatar from '@components/Objects/UserAvatar' import OpenSignUpComponent from './OpenSignup' import InviteOnlySignUpComponent from './InviteOnlySignUp' import { useRouter, useSearchParams } from 'next/navigation' import { validateInviteCode } from '@services/organizations/invites' import PageLoading from '@components/Objects/Loaders/PageLoading' import Toast from '@components/StyledElements/Toast/Toast' import toast from 'react-hot-toast' import { BarLoader } from 'react-spinners' import { joinOrg } from '@services/organizations/orgs' interface SignUpClientProps { org: any } function SignUpClient(props: SignUpClientProps) { const session = useLHSession() as any const [joinMethod, setJoinMethod] = React.useState('open') const [inviteCode, setInviteCode] = React.useState('') const searchParams = useSearchParams() const inviteCodeParam = searchParams.get('inviteCode') useEffect(() => { if (props.org.config) { setJoinMethod( props.org?.config?.config?.features.members.signup_mode ) } if (inviteCodeParam) { setInviteCode(inviteCodeParam) } }, [props.org, inviteCodeParam]) return (
You've been invited to join
{props.org?.logo_image ? ( LearnHouse ) : ( )}
{props.org?.name}
{joinMethod == 'open' && (session.status == 'authenticated' ? ( ) : ( ))} {joinMethod == 'inviteOnly' && (inviteCode ? ( session.status == 'authenticated' ? ( ) : ( ) ) : ( ))}
) } const LoggedInJoinScreen = (props: any) => { const session = useLHSession() as any const org = useOrg() as any const invite_code = props.inviteCode const [isLoading, setIsLoading] = React.useState(true) const [isSumbitting, setIsSubmitting] = React.useState(false) const router = useRouter() const join = async () => { setIsSubmitting(true) const res = await joinOrg({ org_id: org.id, user_id: session?.data?.user?.id, invite_code: props.inviteCode }, null, session.data?.tokens?.access_token) //wait for 1s if (res.success) { toast.success( res.data ) setTimeout(() => { router.push(getUriWithOrg(org.slug,'/')) }, 2000) setIsSubmitting(false) } else { toast.error(res.data.detail) setIsLoading(false) setIsSubmitting(false) } } useEffect(() => { if (session && org) { setIsLoading(false) } }, [org, session]) return (

Hi {session.data.username}, join {org?.name} ?

) } const NoTokenScreen = (props: any) => { const session = useLHSession() as any const org = useOrg() as any const router = useRouter() const [isLoading, setIsLoading] = React.useState(true) const [inviteCode, setInviteCode] = React.useState('') const [messsage, setMessage] = React.useState('bruh') const handleInviteCodeChange = (e: any) => { setInviteCode(e.target.value) } const validateCode = async () => { setIsLoading(true) let res = await validateInviteCode(org?.id, inviteCode, session?.user?.tokens.access_token) //wait for 1s if (res.success) { toast.success( "Invite code is valid, you'll be redirected to the signup page in a few seconds" ) setTimeout(() => { router.push(`/signup?inviteCode=${inviteCode}&orgslug=${org.slug}`) }, 2000) } else { toast.error('Invite code is invalid') setIsLoading(false) } } useEffect(() => { if (session && org) { setIsLoading(false) } }, [org, session]) return (
{isLoading ? (
) : (

An invite code is required to join {org?.name}

)}
) } export default SignUpClient