"use client"; import { Button } from "@app/components/ui/button"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@app/components/ui/form"; import { Input } from "@app/components/ui/input"; import { toast } from "@app/hooks/useToast"; import { zodResolver } from "@hookform/resolvers/zod"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle } from "@app/components/Credenza"; import { formatAxiosError } from "@app/lib/api"; import { AxiosResponse } from "axios"; import { Resource } from "@server/db"; import { InputOTP, InputOTPGroup, InputOTPSlot } from "@app/components/ui/input-otp"; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { useTranslations } from "next-intl"; const setPincodeFormSchema = z.object({ pincode: z.string().length(6) }); type SetPincodeFormValues = z.infer; type SetPincodeFormProps = { open: boolean; setOpen: (open: boolean) => void; resourceId: number; onSetPincode?: () => void; }; export default function SetResourcePincodeForm({ open, setOpen, resourceId, onSetPincode }: SetPincodeFormProps) { const [loading, setLoading] = useState(false); const api = createApiClient(useEnvContext()); const form = useForm({ resolver: zodResolver(setPincodeFormSchema), defaultValues: { pincode: "" } }); const t = useTranslations(); useEffect(() => { if (!open) { return; } form.reset(); }, [open]); async function onSubmit(data: SetPincodeFormValues) { setLoading(true); api.post>(`/resource/${resourceId}/pincode`, { pincode: data.pincode }) .catch((e) => { toast({ variant: "destructive", title: t('resourceErrorPincodeSetup'), description: formatAxiosError( e, t('resourceErrorPincodeSetupDescription') ) }); }) .then(() => { toast({ title: t('resourcePincodeSetup'), description: t('resourcePincodeSetupDescription') }); if (onSetPincode) { onSetPincode(); } }) .finally(() => setLoading(false)); } return ( <> { setOpen(val); setLoading(false); form.reset(); }} > {t('resourcePincodeSetupTitle')} {t('resourcePincodeSetupTitleDescription')}
( {t('resourcePincode')}
)} />
); }