TTMT.ManageWebGUI/src/routes/_auth/rooms/$roomName/folder-status/index.tsx

100 lines
2.8 KiB
TypeScript
Raw Normal View History

import {
createFileRoute,
useParams,
useNavigate,
} from "@tanstack/react-router";
import { useMemo } from "react";
import { useGetClientFolderStatus } from "@/hooks/queries";
import type { ClientFolderStatus } from "@/types/folder";
import FolderStatusTemplate from "@/template/folder-status-template";
import {
createColumnHelper,
getCoreRowModel,
useReactTable,
} from "@tanstack/react-table";
export const Route = createFileRoute("/_auth/rooms/$roomName/folder-status/")({
head: ({ params }) => ({
meta: [{ title: `Trạng thái thư mục Setup phòng ${params.roomName}` }],
}),
loader: async ({ context, params }) => {
context.breadcrumbs = [
{ title: "Danh sách phòng", path: "/rooms/" },
{ title: `Phòng ${params.roomName}`, path: `/rooms/${params.roomName}/` },
{ title: `Trạng thái thư mục Setup phòng ${params.roomName}`, path: `/rooms/${params.roomName}/folder-status/` },
];
},
component: RouteComponent,
});
function RouteComponent() {
const { roomName } = useParams({
from: "/_auth/rooms/$roomName/folder-status/",
});
const navigate = useNavigate();
const { data: folderStatusList = [], isLoading } = useGetClientFolderStatus(
roomName as string,
);
const columnHelper = createColumnHelper<ClientFolderStatus>();
const columns = useMemo(
() => [
columnHelper.accessor("deviceId", {
header: "Máy tính",
cell: (info) => info.getValue() ?? "-",
}),
columnHelper.display({
id: "missing",
header: "Số lượng file thiếu",
cell: (info) =>
(info.row.original.missingFiles?.length ?? 0).toString(),
}),
columnHelper.display({
id: "extra",
header: "Số lượng file thừa",
cell: (info) => (info.row.original.extraFiles?.length ?? 0).toString(),
}),
columnHelper.display({
id: "current",
header: "Số lượng file hiện tại",
cell: (info) =>
(info.row.original.currentFiles?.length ?? 0).toString(),
}),
columnHelper.accessor("updatedAt", {
header: "Updated",
cell: (info) => {
const v = info.getValue();
try {
const d = new Date(v as string);
return isNaN(d.getTime())
? (v as string)
: d.toLocaleString("vi-VN");
} catch {
return v as string;
}
},
}),
],
[],
);
const table = useReactTable({
data: folderStatusList ?? [],
columns,
getCoreRowModel: getCoreRowModel(),
});
return (
<FolderStatusTemplate
roomName={roomName as string}
data={folderStatusList}
isLoading={isLoading}
onBack={() =>
navigate({ to: "/rooms/$roomName/", params: { roomName } } as any)
}
table={table}
/>
);
}