import { createFileRoute, useParams } from "@tanstack/react-router"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { LayoutGrid, TableIcon, Monitor, FolderCheck, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useQueryData } from "@/hooks/useQueryData"; import { useDeviceEvents } from "@/hooks/useDeviceEvents"; import { useClientFolderStatus } from "@/hooks/useClientFolderStatus"; import { API_ENDPOINTS, BASE_URL } from "@/config/api"; import { DeviceGrid } from "@/components/grids/device-grid"; import { DeviceTable } from "@/components/tables/device-table"; import { useMachineNumber } from "@/hooks/useMachineNumber"; import { toast } from "sonner"; export const Route = createFileRoute("/_authenticated/room/$roomName/")({ head: ({ params }) => ({ meta: [{ title: `Danh sách thiết bị phòng ${params.roomName}` }], }), component: RoomDetailPage, }); function RoomDetailPage() { const { roomName } = useParams({ from: "/_authenticated/room/$roomName/" }); const [viewMode, setViewMode] = useState<"grid" | "table">("grid"); const [isCheckingFolder, setIsCheckingFolder] = useState(false); // SSE real-time updates useDeviceEvents(roomName); // Folder status from SSE const folderStatuses = useClientFolderStatus(roomName); const { data: devices = [] } = useQueryData({ queryKey: ["devices", roomName], url: BASE_URL + API_ENDPOINTS.DEVICE_COMM.GET_DEVICE_FROM_ROOM(roomName), }); const parseMachineNumber = useMachineNumber(); const handleCheckFolderStatus = async () => { try { setIsCheckingFolder(true); const response = await fetch( BASE_URL + API_ENDPOINTS.DEVICE_COMM.REQUEST_GET_CLIENT_FOLDER_STATUS(roomName), { method: "POST", } ); if (!response.ok) { throw new Error("Failed to request folder status"); } toast.success("Đang kiểm tra thư mục Setup..."); } catch (error) { console.error("Check folder error:", error); toast.error("Lỗi khi kiểm tra thư mục!"); setIsCheckingFolder(false); } }; const sortedDevices = [...devices].sort((a, b) => { return parseMachineNumber(a.id) - parseMachineNumber(b.id); }); return (
Phòng này chưa có thiết bị nào được kết nối.