import { useCallback, useState } from 'react'; import { Layer, Modal, useDefaultLabel } from 'gestalt'; import TabularDataModalFooter from './TabularDataModalFooter'; import TabularDataModalHeading from './TabularDataModalHeading'; import TabularDataModalTable from './TabularDataModalTable'; import useTabularData, { FilterIdType, FilterOrderType, SortChangeType, TransformedTabularDataType, } from './useTabularData'; interface Indexable { index(): number; } type Props = { title: string; toggleTabularDataModal: () => void; data: ReadonlyArray<{ // @ts-expect-error - TS2411 name: string | number; [key: string]: number; }>; tickFormatter?: { timeseries?: (arg1: number) => string | number; xAxisTop?: (arg1: number, arg2: number) => string | number; xAxisBottom?: (arg1: number, arg2: number) => string | number; yAxisRight?: (arg1: number, arg2: number) => string | number; yAxisLeft?: (arg1: number, arg2: number) => string | number; }; labelMap?: { [key: string]: string; }; modalZIndex?: Indexable; isHorizontalLayout: boolean; }; export default function TabularDataModal({ title, toggleTabularDataModal, data, tickFormatter, labelMap, modalZIndex, isHorizontalLayout, }: Props) { const { tabularData } = useDefaultLabel('ChartGraph'); const [sortOrder, setSortOrder] = useState('desc'); const [sortCol, setSortCol] = useState(null); const transformedTabularData: TransformedTabularDataType = useTabularData({ data, filterId: sortCol, filterOrder: sortOrder, tickFormatter, labelMap, isHorizontalLayout, }); const onSortChange = useCallback( (value: SortChangeType) => { if (sortCol !== value) { setSortCol(value); setSortOrder('desc'); } else { setSortOrder((sortValue) => (sortValue === 'asc' ? 'desc' : 'asc')); } }, [sortCol], ); return ( } heading={ } onDismiss={toggleTabularDataModal} size="sm" > ); }