import { RequestUpdateMenu } from "@/components/menu/request-update-menu"; import { SelectDialog } from "@/components/dialogs/select-dialog"; import { DeviceSearchDialog } from "@/components/bars/device-searchbar"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { FormDialog } from "@/components/dialogs/form-dialog"; import { VersionTable } from "@/components/tables/version-table"; import type { ColumnDef } from "@tanstack/react-table"; import { FileText, Building2 } from "lucide-react"; import { useState } from "react"; import { BlacklistForm } from "@/components/forms/black-list-form"; import type { BlacklistFormData } from "@/types/black-list"; import type { Room } from "@/types/room"; import { mapRoomsToSelectItems } from "@/helpers/mapRoomToSelectItems"; import { fetchDevicesFromRoom } from "@/services/device.service"; interface BlackListManagerTemplateProps { title: string; description: string; data: TData[]; isLoading: boolean; columns: ColumnDef[]; onAdd: (data: BlacklistFormData) => Promise; onDelete?: (id: number) => Promise; onUpdate?: (target: string | string[]) => void | Promise; updateLoading?: boolean; onTableInit?: (table: any) => void; rooms: Room[]; } export function BlackListManagerTemplate({ title, description, data, isLoading, columns, onAdd, onUpdate, updateLoading, onTableInit, rooms = [], }: BlackListManagerTemplateProps) { const [dialogOpen, setDialogOpen] = useState(false); const [dialogType, setDialogType] = useState<"room" | "device" | null>(null); const handleUpdateAll = async () => { if (onUpdate) await onUpdate("All"); }; const openRoomDialog = () => { if (rooms.length > 0 && onUpdate) { setDialogType("room"); setDialogOpen(true); } }; const openDeviceDialog = () => { if (onUpdate) { setDialogType("device"); setDialogOpen(true); } }; return (
{/* Header */}

{title}

{description}

{(closeDialog) => ( )}
{/* Table */} Danh sách phần mềm bị chặn Các phần mềm không được cho phép trong hệ thống {/* Footer */} {onUpdate && ( )} {/* Dialog chọn phòng */} {dialogType === "room" && ( setDialogOpen(false)} title="Chọn phòng" description="Chọn các phòng cần cập nhật danh sách đen" icon={} items={mapRoomsToSelectItems(rooms)} onConfirm={async (selectedRooms) => { if (!onUpdate) return; await onUpdate(selectedRooms); setDialogOpen(false); }} /> )} {/* Dialog tìm thiết bị */} {dialogType === "device" && ( setDialogOpen(false)} rooms={rooms} fetchDevices={fetchDevicesFromRoom} // ⬅ thêm vào đây onSelect={(deviceIds) => onUpdate && onUpdate(deviceIds)} /> )}
); }