import { useMemo, useState } from "react"; import type { Person, UpdatePersonRequest } from "@/api/types"; import { useUpdatePersonMetadata } from "@/hooks/queries/people"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; interface EditPersonDialogProps { person: Person; open: boolean; onOpenChange: (open: boolean) => void; } function createFormState(person: Person) { return { name: person.name ?? "", bio: person.bio ?? "", birth_date: person.birth_date ?? "", death_date: person.death_date ?? "", birthplace: person.birthplace ?? "", homepage: person.homepage ?? "", tmdb_id: person.tmdb_id ?? "", imdb_id: person.imdb_id ?? "", tvdb_id: person.tvdb_id ?? "", }; } export default function EditPersonDialog({ person, open, onOpenChange }: EditPersonDialogProps) { const [form, setForm] = useState(() => createFormState(person)); const mutation = useUpdatePersonMetadata(String(person.id)); const originalForm = useMemo(() => createFormState(person), [person]); function setField(field: K, value: (typeof form)[K]) { setForm((current) => ({ ...current, [field]: value })); } function handleSave() { const data: UpdatePersonRequest = {}; if (form.name !== originalForm.name) data.name = form.name; if (form.bio !== originalForm.bio) data.bio = form.bio; if (form.birth_date !== originalForm.birth_date) data.birth_date = form.birth_date || null; if (form.death_date !== originalForm.death_date) data.death_date = form.death_date || null; if (form.birthplace !== originalForm.birthplace) data.birthplace = form.birthplace; if (form.homepage !== originalForm.homepage) data.homepage = form.homepage; if (form.tmdb_id !== originalForm.tmdb_id) data.tmdb_id = form.tmdb_id; if (form.imdb_id !== originalForm.imdb_id) data.imdb_id = form.imdb_id; if (form.tvdb_id !== originalForm.tvdb_id) data.tvdb_id = form.tvdb_id; if (Object.keys(data).length === 0) { onOpenChange(false); return; } mutation.mutate(data, { onSuccess: () => onOpenChange(false), }); } return ( Edit Person Metadata
setField("name", event.target.value)} />