import { createFileRoute } from "@tanstack/react-router"; import { AppManagerTemplate } from "@/template/app-manager-template"; import { useQueryData } from "@/hooks/useQueryData"; import { useMutationData } from "@/hooks/useMutationData"; import { BASE_URL, API_ENDPOINTS } from "@/config/api"; import { toast } from "sonner"; import type { ColumnDef } from "@tanstack/react-table"; import type { AxiosProgressEvent } from "axios"; import type { Version } from "@/types/file"; export const Route = createFileRoute("/_authenticated/agent/")({ head: () => ({ meta: [{ title: "Quản lý Agent" }] }), component: AgentsPage, }); function AgentsPage() { // Lấy danh sách version const { data, isLoading } = useQueryData({ queryKey: ["agent-version"], url: BASE_URL + API_ENDPOINTS.APP_VERSION.GET_VERSION, }); // Lấy danh sách phòng const { data: roomData } = useQueryData({ queryKey: ["rooms"], url: BASE_URL + API_ENDPOINTS.DEVICE_COMM.GET_ROOM_LIST, }); const versionList: Version[] = Array.isArray(data) ? data : data ? [data] : []; const uploadMutation = useMutationData({ url: BASE_URL + API_ENDPOINTS.APP_VERSION.UPLOAD, method: "POST", invalidate: [["agent-version"]], onSuccess: () => toast.success("Upload thành công!"), onError: (error) => { console.error("Upload error:", error); toast.error("Upload thất bại!"); }, }); const updateMutation = useMutationData({ url: "", method: "POST", onSuccess: () => toast.success("Đã gửi yêu cầu update!"), onError: (error) => { console.error("Update mutation error:", error); toast.error("Gửi yêu cầu thất bại!"); }, }); const handleUpload = async ( fd: FormData, config?: { onUploadProgress?: (e: AxiosProgressEvent) => void } ) => { return uploadMutation.mutateAsync({ data: fd, config, }); }; const handleUpdate = async (roomNames: string[]) => { try { for (const roomName of roomNames) { await updateMutation.mutateAsync({ url: BASE_URL + API_ENDPOINTS.DEVICE_COMM.UPDATE_AGENT(roomName), method: "POST", data: undefined }); } toast.success("Đã gửi yêu cầu update cho các phòng đã chọn!"); } catch (e) { toast.error("Có lỗi xảy ra khi cập nhật!"); } }; // Cột bảng const columns: ColumnDef[] = [ { accessorKey: "version", header: "Phiên bản" }, { accessorKey: "fileName", header: "Tên file" }, { accessorKey: "folderPath", header: "Đường dẫn" }, { accessorKey: "updatedAt", header: "Thời gian cập nhật", cell: ({ getValue }) => getValue() ? new Date(getValue() as string).toLocaleString("vi-VN") : "N/A", }, { accessorKey: "requestUpdateAt", header: "Thời gian yêu cầu cập nhật", cell: ({ getValue }) => getValue() ? new Date(getValue() as string).toLocaleString("vi-VN") : "N/A", }, ]; return ( title="Quản lý Agent" description="Quản lý và theo dõi các phiên bản Agent" data={versionList} isLoading={isLoading} columns={columns} onUpload={handleUpload} onUpdate={handleUpdate} updateLoading={updateMutation.isPending} rooms={roomData} /> ); }