"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Pencil } from "lucide-react"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { updateScan } from "@/actions/scans"; import { Field, FieldError, FieldLabel, Input } from "@/components/shadcn"; import { FormButtons } from "@/components/shadcn/form"; import { Modal } from "@/components/shadcn/modal"; import { toast } from "@/components/shadcn/toast"; import { scanAliasSchema } from "./scan-alias-validation"; const buildEditAliasSchema = (currentAlias: string) => z.object({ alias: scanAliasSchema.refine( (value) => value.trim() !== currentAlias.trim(), "The new alias must be different from the current one.", ), }); type EditAliasFormValues = { alias: string }; interface EditAliasModalProps { open: boolean; onOpenChange: (open: boolean) => void; scanId: string; currentAlias: string; } interface EditAliasFormProps { scanId: string; currentAlias: string; onClose: () => void; } function EditAliasForm({ scanId, currentAlias, onClose }: EditAliasFormProps) { const router = useRouter(); const form = useForm({ resolver: zodResolver(buildEditAliasSchema(currentAlias)), defaultValues: { alias: currentAlias }, }); const onSubmit = form.handleSubmit(async ({ alias }) => { const trimmed = alias.trim(); const formData = new FormData(); formData.set("scanId", scanId); formData.set("scanName", trimmed); const result = await updateScan(formData); if (result?.errors && result.errors.length > 0) { form.setError("alias", { message: String(result.errors[0]?.detail ?? "Failed to update alias."), }); return; } toast({ title: "Alias updated", description: "The scan alias was updated successfully.", }); onClose(); router.refresh(); }); const aliasError = form.formState.errors.alias?.message; const isSubmitting = form.formState.isSubmitting; return (
Current alias:{" "} {currentAlias || "Unnamed"}
Alias {aliasError && {aliasError}} ); } export function EditAliasModal({ open, onOpenChange, scanId, currentAlias, }: EditAliasModalProps) { return ( onOpenChange(false)} /> ); }