import { Button } from "../ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "../ui/form"; import { Input } from "../ui/input"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import ActivityIndicator from "../indicators/activity-indicator"; import { useState } from "react"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "../ui/dialog"; type CreateUserOverlayProps = { show: boolean; onCreate: (user: string, password: string) => void; onCancel: () => void; }; export default function CreateUserDialog({ show, onCreate, onCancel, }: CreateUserOverlayProps) { const [isLoading, setIsLoading] = useState(false); const formSchema = z.object({ user: z .string() .min(1) .regex(/^[A-Za-z0-9._]+$/, { message: "Username may only include letters, numbers, . or _", }), password: z.string(), }); const form = useForm>({ resolver: zodResolver(formSchema), mode: "onChange", defaultValues: { user: "", password: "", }, }); const onSubmit = async (values: z.infer) => { setIsLoading(true); await onCreate(values.user, values.password); form.reset(); setIsLoading(false); }; return ( Create User
( User )} /> ( Password )} />
); }