import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import React, { forwardRef } from "react"; import { userFormAgeDescription, userFormAgeLabel, userFormPersonaLabel, userFormPersonaPlaceholder, } from "@/lib/data"; import { Button } from "@/components/ui/button"; import { Loader2 } from "lucide-react"; interface GeneralUserFormProps { selectedUser?: IUser; heading?: React.ReactNode; onSave?: (values: any, userType: "doctor" | "user", userId: string) => void; onClickCallback: () => void; userId: string; disabled?: boolean; } export const UserSettingsSchema = z.object({ supervisee_name: z.string().min(1).max(50), supervisee_age: z.number().min(1).max(18), supervisee_persona: z.string().max(500).optional(), modules: z .array(z.enum(["math", "science", "spelling", "general_trivia"])) .refine((value) => value.some((item) => item), { message: "You have to select at least one item.", }), }); export type GeneralUserInput = z.infer; const GeneralUserForm = ({ selectedUser, onSave, onClickCallback, userId, heading, disabled }: GeneralUserFormProps) => { const form = useForm({ defaultValues: { supervisee_name: selectedUser?.supervisee_name ?? "", supervisee_age: selectedUser?.supervisee_age ?? 0, supervisee_persona: selectedUser?.supervisee_persona ?? "", }, }); async function onSubmit(values: z.infer) { onSave && onSave(values, "user", userId); } const handleSave = () => { onSave && onSave(form.getValues(), "user", userId); onClickCallback(); }; return (
{heading}

Basic Info

( {"Your Name"} )} /> {/* for child age */} ( {userFormAgeLabel} {userFormAgeDescription} )} /> ( {userFormPersonaLabel}