import { useEffect } from 'react'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button, Input, Switch, Checkbox, Select, SelectContent, SelectItem, SelectTrigger, } from '@/components'; import { updateAuthConfigRequestSchema, type UpdateAuthConfigRequest, } from '@insforge/shared-schemas'; import { useAuthConfig } from '@/features/auth/hooks/useAuthConfig'; import { isInsForgeCloudProject } from '@/lib/utils/utils'; export default function ConfigurationPage() { const { config, isLoading, isUpdating, updateConfig } = useAuthConfig(); const form = useForm({ resolver: zodResolver(updateAuthConfigRequestSchema), defaultValues: { requireEmailVerification: false, passwordMinLength: 6, requireNumber: false, requireLowercase: false, requireUppercase: false, requireSpecialChar: false, verifyEmailMethod: 'code', resetPasswordMethod: 'code', signInRedirectTo: null, }, }); // Load configuration when config changes useEffect(() => { if (config) { form.reset({ requireEmailVerification: config.requireEmailVerification, passwordMinLength: config.passwordMinLength, requireNumber: config.requireNumber, requireLowercase: config.requireLowercase, requireUppercase: config.requireUppercase, requireSpecialChar: config.requireSpecialChar, verifyEmailMethod: config.verifyEmailMethod, resetPasswordMethod: config.resetPasswordMethod, signInRedirectTo: config.signInRedirectTo ?? null, }); } }, [config, form]); const handleSubmitData = (data: UpdateAuthConfigRequest) => { updateConfig(data); }; const handleSubmit = () => { void form.handleSubmit(handleSubmitData)(); }; const handleReset = () => { if (config) { form.reset({ requireEmailVerification: config.requireEmailVerification, passwordMinLength: config.passwordMinLength, requireNumber: config.requireNumber, requireLowercase: config.requireLowercase, requireUppercase: config.requireUppercase, requireSpecialChar: config.requireSpecialChar, verifyEmailMethod: config.verifyEmailMethod, resetPasswordMethod: config.resetPasswordMethod, signInRedirectTo: config.signInRedirectTo ?? null, }); } }; if (isLoading) { return (
Loading configuration...
); } return (

Configuration

e.preventDefault()} className="flex flex-col gap-8"> {/* Sign In Redirect URL */}
Your app url after successful authentication
{form.formState.errors.signInRedirectTo && ( {form.formState.errors.signInRedirectTo.message || 'Please enter a valid URL'} )}
{isInsForgeCloudProject() && (

Email Verification

{/* Email Verification Toggle */}
Require Email Verification Users must verify their email address before they can sign in
(
{ field.onChange(value); }} />
)} />
{/* Verify Email Method - Only shown when email verification is enabled */} {form.watch('requireEmailVerification') && (
Choose between 6-digit verification code or verification link
( )} />
)}
)} {/* Password Requirements Section */}

Password Requirements

{/* Password Length */}
Must be between 4 and 128 characters
{form.formState.errors.passwordMinLength && ( {form.formState.errors.passwordMinLength.message || 'Must be between 4 and 128 characters'} )}
{/* Password Strength Checkboxes */}
( )} /> ( )} /> ( )} /> ( )} />
{/* Reset Password Method */} {isInsForgeCloudProject() && (
Choose between 6-digit reset code or reset link
( )} />
)}
{/* Action Buttons - Reserve space even when hidden */}
{form.formState.isDirty && ( <> )}
); }