"use client"; /** * V2ScanCard — generic «scan» card for row 2 (prototype `.row2 .card`). Renders a * PticaScanCard view-model: a title (+ optional badge), kv-rows OR status-rows * (dot + state, used by Инженерия), an empty-state, and a "ПОДРОБНЕЕ →" link to * the card's drawer. All values come from the ptica-adapt layer (REAL or honest * «—»). */ import styles from "@/app/site-finder/analysis/[cad]/v2/v2.module.css"; import type { PticaScanCard, PticaScanRow, PticaStatusTone, } from "@/components/site-finder/ptica/ptica-adapt"; import type { V2DrawerKey } from "@/components/site-finder/ptica-v2/v2-drawer-registry"; const STATUS_COLOR: Record = { ok: "var(--accent-green)", warn: "var(--accent-orange)", bad: "var(--accent-red)", }; const STATUS_LABEL: Record = { ok: "Доступно", warn: "Огранич.", bad: "Нет", }; const STATUS_CLASS: Record = { ok: styles.ok, warn: styles.warnc, bad: styles.warnc, }; function KvRow({ row }: { row: PticaScanRow }) { return (
{row.key} {row.field.value}
); } function StatusRow({ row }: { row: PticaScanRow }) { const tone = row.status ?? "ok"; return (
{STATUS_LABEL[tone]} {row.field.value}
); } interface Props { card: PticaScanCard; drawer: V2DrawerKey; onOpenDrawer: (key: V2DrawerKey) => void; } export function V2ScanCard({ card, drawer, onOpenDrawer }: Props) { return (
{card.title} {card.badge && {card.badge}}
{card.rows.length === 0 ? (
{card.emptyState ?? "Нет данных"}
) : ( card.rows.map((row) => row.status ? ( ) : ( ), ) )}
); }