< Summary

Information
Class: tui-item-table.tsx
Assembly: app.features.items
File(s): /home/runner/work/ClutterStock/ClutterStock/frontend/app/features/items/tui-item-table.tsx
Tag: 58_25416222083
Line coverage
0%
Covered lines: 0
Uncovered lines: 16
Coverable lines: 16
Total lines: 62
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/ClutterStock/ClutterStock/frontend/app/features/items/tui-item-table.tsx

#LineLine coverage
 1import type { ItemResponse, RoomResponse } from "~/api/client";
 2
 03export function TuiItemTable({ items, roomById, selectedId, onSelect, totalCount }: {
 4  items: ItemResponse[];
 5  roomById: Record<number, RoomResponse | undefined>;
 6  selectedId?: number | null;
 7  onSelect: (item: ItemResponse) => void;
 8  totalCount: number;
 9}) {
 010  return (
 11    <div className="tui-panel tui-table" style={{ flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }}>
 12      <span className="tui-panel-title">
 13        {`─[ items · ${items.length}${items.length !== totalCount ? ` of ${totalCount}` : ""} ]─`}
 14      </span>
 15
 16      <div className="tui-table-scroll">
 17        <div className="tui-table-head">
 18          <span>ID</span>
 19          <span>NAME</span>
 20          <span>ROOM</span>
 21          <span>CAT</span>
 22          <span>UPD</span>
 23        </div>
 24
 025        {items.map(item => {
 026          const sel = selectedId === item.id;
 027          const room = item.roomId != null ? roomById[item.roomId] : undefined;
 028          const updated = formatShortDate(item.updatedAtUtc ?? item.createdAtUtc);
 029          return (
 30            <div
 31              key={item.id}
 32              role="button"
 33              tabIndex={0}
 34              data-selected={sel ? "true" : undefined}
 035              onClick={() => onSelect(item)}
 36              className="tui-table-row"
 37            >
 38              <span className="tui-table-id">{String(item.id ?? 0).padStart(3, "0")}</span>
 39              <span className="tui-table-name">
 40                <span className="tui-table-arrow">{sel ? "▶ " : "  "}</span>
 41                {item.name ?? "—"}
 42              </span>
 43              <span className="tui-table-dim">{room?.name ?? "—"}</span>
 44              <span className="tui-table-cat">{item.category ?? "—"}</span>
 45              <span className="tui-table-dim">{updated}</span>
 46            </div>
 47          );
 48        })}
 49      </div>
 50    </div>
 51  );
 52}
 53
 054function formatShortDate(iso?: string | null): string {
 055  if (!iso) return "—";
 056  const d = new Date(iso);
 057  if (isNaN(d.getTime())) return "—";
 058  const yyyy = d.getFullYear();
 059  const mm = String(d.getMonth() + 1).padStart(2, "0");
 060  const dd = String(d.getDate()).padStart(2, "0");
 061  return `${yyyy}-${mm}-${dd}`;
 62}