import {useCallback, useMemo} from 'react'; import type {Location} from 'history'; import renderSortableHeaderCell from 'sentry/components/feedback/table/renderSortableHeaderCell'; import useQueryBasedColumnResize from 'sentry/components/feedback/table/useQueryBasedColumnResize'; import useQueryBasedSorting from 'sentry/components/feedback/table/useQueryBasedSorting'; import GridEditable, {GridColumnOrder} from 'sentry/components/gridEditable'; import Link from 'sentry/components/links/link'; import {Organization} from 'sentry/types'; import useOrganization from 'sentry/utils/useOrganization'; import {normalizeUrl} from 'sentry/utils/withDomainRequired'; import { DeadRageSelectorItem, DeadRageSelectorQueryParams, } from 'sentry/views/replays/types'; interface UrlState { widths: string[]; } interface Props { clickCountColumn: {key: string; name: string}; data: DeadRageSelectorItem[]; isError: boolean; isLoading: boolean; location: Location; } const BASE_COLUMNS: GridColumnOrder[] = [ {key: 'element', name: 'element'}, {key: 'dom_element', name: 'selector'}, {key: 'aria_label', name: 'aria label'}, ]; export default function SelectorTable({ clickCountColumn, isError, isLoading, data, location, }: Props) { const organization = useOrganization(); const {currentSort, makeSortLinkGenerator} = useQueryBasedSorting({ defaultSort: {field: clickCountColumn.key, kind: 'desc'}, location, }); const {columns, handleResizeColumn} = useQueryBasedColumnResize({ columns: BASE_COLUMNS.concat(clickCountColumn), location, }); const renderHeadCell = useMemo( () => renderSortableHeaderCell({ currentSort, makeSortLinkGenerator, onClick: () => {}, rightAlignedColumns: [], sortableColumns: [clickCountColumn], }), [clickCountColumn, currentSort, makeSortLinkGenerator] ); const renderBodyCell = useCallback( (column, dataRow) => { const value = dataRow[column.key]; switch (column.key) { case 'dom_element': return ; case 'element': return {value}; case 'aria_label': return {value}; default: return renderSimpleBodyCell(column, dataRow); } }, [organization] ); return ( } /> ); } function SelectorLink({ organization, value, }: { organization: Organization; value: string; }) { return ( {value} ); } function renderSimpleBodyCell(column: GridColumnOrder, dataRow: T) { return dataRow[column.key]; }