"use client"; import { PasswordComplexityPolicy, PrivacyPolicy } from "@zitadel/server"; import PasswordComplexity from "./PasswordComplexity"; import { useState } from "react"; import { Button, ButtonVariants } from "./Button"; import { TextInput } from "./Input"; import { PrivacyPolicyCheckboxes } from "./PrivacyPolicyCheckboxes"; import { FieldValues, useForm } from "react-hook-form"; import { lowerCaseValidator, numberValidator, symbolValidator, upperCaseValidator, } from "#/utils/validators"; type Inputs = | { firstname: string; lastname: string; email: string; password: string; confirmPassword: string; } | FieldValues; type Props = { privacyPolicy: PrivacyPolicy; passwordComplexityPolicy: PasswordComplexityPolicy; }; export default function RegisterForm({ privacyPolicy, passwordComplexityPolicy, }: Props) { const { register, handleSubmit, watch, formState } = useForm({ mode: "onBlur", }); async function submitRegister(values: Inputs) { const res = await fetch("/registeruser", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email: values.email, password: values.password, firstName: values.firstname, lastName: values.lastname, }), }); if (!res.ok) { throw new Error("Failed to register user"); } return res.json(); } const { errors } = formState; const watchPassword = watch("password", ""); const watchConfirmPassword = watch("confirmPassword", ""); const [tosAndPolicyAccepted, setTosAndPolicyAccepted] = useState(false); const hasMinLength = passwordComplexityPolicy && watchPassword?.length >= passwordComplexityPolicy.minLength; const hasSymbol = symbolValidator(watchPassword); const hasNumber = numberValidator(watchPassword); const hasUppercase = upperCaseValidator(watchPassword); const hasLowercase = lowerCaseValidator(watchPassword); const policyIsValid = passwordComplexityPolicy && (passwordComplexityPolicy.hasLowercase ? hasLowercase : true) && (passwordComplexityPolicy.hasNumber ? hasNumber : true) && (passwordComplexityPolicy.hasUppercase ? hasUppercase : true) && (passwordComplexityPolicy.hasSymbol ? hasSymbol : true) && hasMinLength; return (
{passwordComplexityPolicy && ( )} {privacyPolicy && ( )}
); }