import * as React from "react"; import { z } from "zod/v4"; import { useForm } from "@mantine/form"; import { Container, Title, TextInput, Button, PasswordInput, Box, Stack, } from "@mantine/core"; import { zod4Resolver } from "mantine-form-zod-resolver"; import { useParams, useSearchParams } from "react-router-dom"; import useAuth from "@/features/auth/hooks/use-auth"; import classes from "@/features/auth/components/auth.module.css"; import { useGetInvitationQuery } from "@/features/workspace/queries/workspace-query.ts"; import { useRedirectIfAuthenticated } from "@/features/auth/hooks/use-redirect-if-authenticated.ts"; import { useTranslation } from "react-i18next"; import SsoLogin from "@/ee/components/sso-login.tsx"; import { AuthLayout } from "./auth-layout.tsx"; const formSchema = z.object({ name: z.string().trim().min(1), password: z.string().min(8), }); type FormValues = z.infer; export function InviteSignUpForm() { const { t } = useTranslation(); const params = useParams(); const [searchParams] = useSearchParams(); const { data: invitation, isError } = useGetInvitationQuery( params?.invitationId, ); const { invitationSignup, isLoading } = useAuth(); useRedirectIfAuthenticated(); const form = useForm({ validate: zod4Resolver(formSchema), initialValues: { name: "", password: "", }, }); async function onSubmit(data: FormValues) { const invitationToken = searchParams.get("token"); await invitationSignup({ invitationId: invitation.id, name: data.name, password: data.password, token: invitationToken, }); } if (isError) { return
{t("invalid invitation link")}
; } if (!invitation) { return
; } return ( {t("Join the workspace")} {!invitation.enforceSso && (
)}
); }