import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { useListPeople, useCreatePerson } from "@/features/people/use-people"; import { useAssignFace } from "@/features/faces/use-faces"; import { ScrollArea } from "@/components/ui/scroll-area"; import { UserSquare, Plus } from "lucide-react"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; type PersonAssignmentDialogProps = { isOpen: boolean; onOpenChange: (open: boolean) => void; faceId: string; mediaId: string; currentPersonId: string | null; }; export function PersonAssignmentDialog({ isOpen, onOpenChange, faceId, mediaId, currentPersonId, }: PersonAssignmentDialogProps) { const [searchQuery, setSearchQuery] = useState(""); const [isCreating, setIsCreating] = useState(false); const [newPersonName, setNewPersonName] = useState(""); const { data: people } = useListPeople(); const assignFace = useAssignFace(faceId, mediaId); const createPerson = useCreatePerson(); const filteredPeople = people?.filter((person) => person.name.toLowerCase().includes(searchQuery.toLowerCase()) ); const handleAssign = (personId: string) => { assignFace.mutate( { person_id: personId }, { onSuccess: () => { onOpenChange(false); }, } ); }; const handleCreateAndAssign = () => { if (!newPersonName.trim()) return; createPerson.mutate( { name: newPersonName }, { onSuccess: (newPerson) => { handleAssign(newPerson.id); }, } ); }; return ( Assign Person {isCreating ? (
setNewPersonName(e.target.value)} autoFocus />
) : (
setSearchQuery(e.target.value)} />
{filteredPeople?.map((person) => ( ))}
)}
); }