import type { OnChangeFn, PaginationState } from "@edr/ui-common"; import { Card, Group, SimpleGrid, Stack, Text } from "@mantine/core"; import { Badge } from "@mantine/core"; import type { FleetResourceConfig } from "@/pages/fleet/config/resources"; import type { FleetRecord } from "@/services/fleet/fleet.service"; import FleetRecordActions from "./FleetRecordActions"; import { cardInitials, resolveFleetCardPresentation } from "./fleetCardMeta"; import { formatFleetCell } from "./fleetFormat"; import RuleEngineListFooter from "../ruleEngine/RuleEngineListFooter"; export interface FleetCardGridProps { config: FleetResourceConfig; rows: FleetRecord[]; status: "loading" | "error" | "success"; emptyMessage: string; pagination: PaginationState; pageCount: number; totalCount: number; onPaginationChange: OnChangeFn; onEdit: (record: FleetRecord) => void; onRemove: (record: FleetRecord) => void; } const FleetCardGrid = ({ config, rows, status, emptyMessage, pagination, pageCount, totalCount, onPaginationChange, onEdit, onRemove, }: FleetCardGridProps) => { const presentation = resolveFleetCardPresentation(config); if (status === "loading") { return ( Loading… ); } if (status === "error") { return ( Failed to load data ); } if (!rows.length) { return ( {emptyMessage} ); } return ( {rows.map((record) => { const title = String( (record as unknown as Record)[presentation.titleKey] ?? config.entityLabel, ); const code = presentation.codeKey ? (record as unknown as Record)[presentation.codeKey] : null; const subtitle = presentation.subtitleKey ? (record as unknown as Record)[presentation.subtitleKey] : null; const statusValue = presentation.statusKey ? (record as unknown as Record)[presentation.statusKey] : null; return ( { e.currentTarget.style.boxShadow = "0 4px 12px rgba(0, 0, 0, 0.08)"; e.currentTarget.style.borderColor = "var(--mantine-color-green-3)"; }} onMouseLeave={(e) => { e.currentTarget.style.boxShadow = "none"; e.currentTarget.style.borderColor = "var(--mantine-color-gray-2)"; }} >
{cardInitials(title)}
{title || "—"} {subtitle != null && subtitle !== "" ? ( {presentation.subtitleKey === "currentYard" || presentation.subtitleKey === "currentYardId" ? formatFleetCell(subtitle, "entityLabel", presentation.subtitleKey) : String(subtitle)} ) : null}
{code != null && code !== "" ? ( {String(code)} ) : null}
{config.columns .filter( (col) => col.accessorKey !== presentation.titleKey && col.accessorKey !== presentation.codeKey && col.accessorKey !== presentation.statusKey, ) .slice(0, 4) .map((col) => ( {col.header} {formatFleetCell( (record as unknown as Record)[col.accessorKey], col.format, col.accessorKey, )} ))} {statusValue != null ? ( Status {formatFleetCell(statusValue, "statusBadge")} ) : null}
); })}
); }; export default FleetCardGrid;