import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../ui/alert-dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; import { LuCopy, LuPencil } from "react-icons/lu"; import { FaDrawPolygon, FaObjectGroup } from "react-icons/fa"; import { BsPersonBoundingBox } from "react-icons/bs"; import { HiOutlineDotsVertical, HiTrash } from "react-icons/hi"; import { isMobile } from "react-device-detect"; import { toRGBColorString } from "@/utils/canvasUtil"; import { Polygon, PolygonType } from "@/types/canvas"; import { useState } from "react"; type PolygonItemProps = { polygon: Polygon; setAllPolygons: React.Dispatch>; index: number; activePolygonIndex: number | undefined; hoveredPolygonIndex: number | null; setHoveredPolygonIndex: (index: number | null) => void; setActivePolygonIndex: (index: number | undefined) => void; setEditPane: (type: PolygonType) => void; handleCopyCoordinates: (index: number) => void; }; export default function PolygonItem({ polygon, setAllPolygons, index, activePolygonIndex, hoveredPolygonIndex, setHoveredPolygonIndex, setActivePolygonIndex, setEditPane, handleCopyCoordinates, }: PolygonItemProps) { const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const polygonTypeIcons = { zone: FaDrawPolygon, motion_mask: FaObjectGroup, object_mask: BsPersonBoundingBox, }; const PolygonItemIcon = polygon ? polygonTypeIcons[polygon.type] : undefined; const handleDelete = (index: number) => { setAllPolygons((oldPolygons) => { return oldPolygons.filter((_, i) => i !== index); }); setActivePolygonIndex(undefined); }; return (
setHoveredPolygonIndex(index)} onMouseLeave={() => setHoveredPolygonIndex(null)} style={{ backgroundColor: hoveredPolygonIndex === index ? toRGBColorString(polygon.color, false) : "", }} >
{PolygonItemIcon && ( )}

{polygon.name}

setDeleteDialogOpen(!deleteDialogOpen)} > Confirm Delete Are you sure you want to delete the {polygon.type.replace("_", " ")}{" "} {polygon.name}? Cancel handleDelete(index)}> Delete {isMobile && ( <> { setActivePolygonIndex(index); setEditPane(polygon.type); }} > Edit handleCopyCoordinates(index)}> Copy setDeleteDialogOpen(true)}> Delete )} {!isMobile && hoveredPolygonIndex === index && (
{ setActivePolygonIndex(index); setEditPane(polygon.type); }} > Edit
handleCopyCoordinates(index)} > Copy coordinates
setDeleteDialogOpen(true)} > Delete
)}
); }