"use client"; import { SettingsSection, SettingsSectionBody, SettingsSectionDescription, SettingsSectionForm, SettingsSectionHeader, SettingsSectionTitle } from "@app/components/Settings"; import { zodResolver } from "@hookform/resolvers/zod"; import { useTranslations } from "next-intl"; import z from "zod"; import { createPolicySchema, type PolicyFormValues } from "."; import { SwitchInput } from "@app/components/SwitchInput"; import { Button } from "@app/components/ui/button"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle } from "@app/components/Credenza"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@app/components/ui/form"; import { Input } from "@app/components/ui/input"; import { InputOTP, InputOTPGroup, InputOTPSlot } from "@app/components/ui/input-otp"; import { cn } from "@app/lib/cn"; import { Binary, Bot, Key, Plus } from "lucide-react"; import { useEffect, useState } from "react"; import { type UseFormReturn, useForm, useWatch } from "react-hook-form"; // ─── CreatePolicyAuthMethodsSectionForm ─────────────────────────────────────── const setPasswordSchema = z.object({ password: z.string().min(4).max(100) }); const setPincodeSchema = z.object({ pincode: z.string().length(6) }); const setHeaderAuthSchema = z.object({ user: z.string().min(4).max(100), password: z.string().min(4).max(100), extendedCompatibility: z.boolean() }); export type CreatePolicyAuthMethodsSectionFormProps = { form: UseFormReturn; }; export function CreatePolicyAuthMethodsSectionForm({ form: parentForm }: CreatePolicyAuthMethodsSectionFormProps) { const t = useTranslations(); const [isExpanded, setIsExpanded] = useState(false); const [isSetPasswordOpen, setIsSetPasswordOpen] = useState(false); const [isSetPincodeOpen, setIsSetPincodeOpen] = useState(false); const [isSetHeaderAuthOpen, setIsSetHeaderAuthOpen] = useState(false); const form = useForm({ resolver: zodResolver( createPolicySchema.pick({ password: true, pincode: true, headerAuth: true }) ), defaultValues: { password: null, pincode: null, headerAuth: null } }); useEffect(() => { const subscription = form.watch((values) => { parentForm.setValue("password", values.password as any); parentForm.setValue("pincode", values.pincode as any); parentForm.setValue("headerAuth", values.headerAuth as any); }); return () => subscription.unsubscribe(); }, [form, parentForm]); const password = useWatch({ control: form.control, name: "password" }); const pincode = useWatch({ control: form.control, name: "pincode" }); const headerAuth = useWatch({ control: form.control, name: "headerAuth" }); const passwordForm = useForm({ resolver: zodResolver(setPasswordSchema), defaultValues: { password: "" } }); const pincodeForm = useForm({ resolver: zodResolver(setPincodeSchema), defaultValues: { pincode: "" } }); const headerAuthForm = useForm({ resolver: zodResolver(setHeaderAuthSchema), defaultValues: { user: "", password: "", extendedCompatibility: true } }); if (!isExpanded) { return ( {t("resourceAuthMethods")} {t("resourcePolicyAuthMethodsDescription")} ); } return ( <> {/* Password Credenza */} { setIsSetPasswordOpen(val); if (!val) passwordForm.reset(); }} > {t("resourcePasswordSetupTitle")} {t("resourcePasswordSetupTitleDescription")}
{ form.setValue("password", data); setIsSetPasswordOpen(false); passwordForm.reset(); })} className="space-y-4" id="set-password-form" > ( {t("password")} )} />
{/* Pincode Credenza */} { setIsSetPincodeOpen(val); if (!val) pincodeForm.reset(); }} > {t("resourcePincodeSetupTitle")} {t("resourcePincodeSetupTitleDescription")}
{ form.setValue("pincode", data); setIsSetPincodeOpen(false); pincodeForm.reset(); })} className="space-y-4" id="set-pincode-form" > ( {t("resourcePincode")}
)} />
{/* Header Auth Credenza */} { setIsSetHeaderAuthOpen(val); if (!val) headerAuthForm.reset(); }} > {t("resourceHeaderAuthSetupTitle")} {t("resourceHeaderAuthSetupTitleDescription")}
{ form.setValue("headerAuth", data); setIsSetHeaderAuthOpen(false); headerAuthForm.reset(); } )} className="space-y-4" id="set-header-auth-form" > ( {t("user")} )} /> ( {t("password")} )} /> ( )} />
{t("resourceAuthMethods")} {t("resourcePolicyAuthMethodsDescription")} {/* Password row */}
{t("resourcePasswordProtection", { status: password ? t("enabled") : t("disabled") })}
{/* Pincode row */}
{t("resourcePincodeProtection", { status: pincode ? t("enabled") : t("disabled") })}
{/* Header auth row */}
{headerAuth ? t( "resourceHeaderAuthProtectionEnabled" ) : t( "resourceHeaderAuthProtectionDisabled" )}
); }