in app/src/sandbox/tokens/palette/components/paletteTable/paletteTable.tsx [44:154]
export function PaletteTable(props: PaletteTableProps) {
const { params, result, grouped } = props;
const { tokens, loading, uuiTheme } = result;
const { valueType, filter } = params;
const filtersConfig = useMemo(() => {
return getFiltersConfig(getTotals(tokens));
}, [tokens]);
const defaultColumns = useMemo(() => {
return getColumns({ uuiTheme, valueType, filter });
}, [filter, uuiTheme, valueType]);
const [value, onValueChange] = useState<DataTableState<TTokensLocalFilter>>({
topIndex: 0,
visibleCount: Number.MAX_SAFE_INTEGER,
filter: DEFAULT_LOCAL_FILTER,
});
const { tableState, setTableState } = useTableState<TTokensLocalFilter>({
onValueChange,
filters: filtersConfig,
value,
});
const items: ITokenRow[] = useMemo(() => {
return convertLocalTokens({
tokens,
grouped,
localFilter: tableState.filter,
});
}, [grouped, tokens, tableState.filter]);
const tokensDs = useArrayDataSource<ITokenRow, string, TTokensLocalFilter>(
{
items,
getId: (item) => {
return item.id;
},
sortBy: getSortBy(),
getParentId: (item) => {
if (grouped) {
return item.parentId;
}
},
},
[items],
);
const tokensDsView = tokensDs.useView(tableState, setTableState, {
isFoldedByDefault: () => false,
});
const { columns, config: columnsConfig } = useColumnsConfig(defaultColumns, tableState.columnsConfig || {});
const renderRow = (rowProps: DataTableRowProps<ITokenRow, string>) => {
return (
<DataTableRow
// cx={ cx }
key={ rowProps.id }
{ ...rowProps }
columns={ columns }
indent={ Math.min(rowProps.indent || 0, 1) }
/>
);
};
const handleChangeValueType = (newValueType: TThemeTokenValueType) => {
props.onChangeParams((prev) => {
return {
...prev,
valueType: newValueType,
};
});
};
return (
<Panel background="surface-main" shadow>
<FlexRow
padding="12"
vPadding="24"
rawProps={ { style: { flexWrap: 'nowrap', gap: '3px', paddingBottom: 0 } } }
>
<ParamsFilters params={ props.params } onChangeParams={ props.onChangeParams } />
<FiltersPanel<TTokensLocalFilter>
filters={ filtersConfig }
tableState={ tableState }
setTableState={ setTableState }
/>
<TokensSummary
uuiTheme={ uuiTheme }
expectedValueType={ params.valueType }
onChangeExpectedValueType={ handleChangeValueType }
/>
</FlexRow>
<div>
<Blocker isEnabled={ loading } cx={ css.blocker } />
<ScrollBars style={ { height: `calc(100vh - ${TOP_INDENT})`, marginBottom: '0px' } }>
<div>
<div className={ css.stickyHeader }>
<DataTableHeaderRow
columns={ columns }
allowColumnsResizing={ false }
value={ { ...tableState, columnsConfig } }
onValueChange={ setTableState }
/>
</div>
{ tokensDsView.getVisibleRows().map(renderRow) }
</div>
</ScrollBars>
</div>
</Panel>
);
}