import { memo, useMemo } from "react"; import { createColumnHelper, type ColumnDef } from "@tanstack/react-table"; import { AppDataTable, useAppTable, } from "@/client/components/table/AppDataTable"; import { ExternalUrlCell } from "@/client/components/table/url"; import { SortableHeader } from "@/client/features/domain/components/SortableHeader"; import { useDomainRenderDebug } from "@/client/features/domain/domainDebug"; import { formatNumber, formatRounded, toPageSortMode, } from "@/client/features/domain/utils"; import type { DomainSortMode, PageRow, SortOrder, } from "@/client/features/domain/types"; type Props = { domain: string; rows: PageRow[]; sortMode: DomainSortMode; currentSortOrder: SortOrder; onSortClick: (sort: DomainSortMode) => void; }; const pageColumnHelper = createColumnHelper(); function DomainPagesTableComponent({ domain, rows, sortMode, currentSortOrder, onSortClick, }: Props) { const renderStarted = performance.now(); const columns = useMemo[]>( () => [ pageColumnHelper.display({ id: "page", header: () => "Page", cell: ({ row }) => ( ), meta: { cellClassName: "max-w-[420px] truncate", }, }), pageColumnHelper.accessor("organicTraffic", { header: () => ( onSortClick("traffic")} /> ), cell: ({ getValue }) => formatRounded(getValue()), }), pageColumnHelper.accessor("keywords", { header: () => ( onSortClick("volume")} /> ), cell: ({ getValue }) => formatNumber(getValue()), }), ], [currentSortOrder, domain, onSortClick, sortMode], ); const table = useAppTable({ data: rows.slice(0, 100), columns, }); useDomainRenderDebug("DomainPagesTable", { rows: rows.length, durationMs: Math.round(performance.now() - renderStarted), sortMode, currentSortOrder, }); return ( No pages match this search. } /> ); } export const DomainPagesTable = memo(DomainPagesTableComponent);