npm i @snack-uikit/table
- multiple row selection with Shift key pressed
Для оптимальной работы таблицы используйте
useMemo
дляcolumnDefinitions
или выносите их определение за компонент
import { Table } from '@snack-uikit/table';
// ...
type TableData = {
id: string;
firstName: string;
lastName: string;
age: number;
status: string;
}
const columnDefinitions: ColumnDefinition<TableData>[] = [
Table.getStatusColumnDef<Person>({
accessorKey: 'status',
mapStatusToAppearance: {
pending: Table.statusAppearances.Blue,
success: Table.statusAppearances.Green,
// ... etc
},
header: 'Статус',
renderDescription: (value: string) => t(translations.statuses[value]),
size: 250,
}),
{
accessorKey: 'id',
},
{
// id, size - обязательны при передаче pinned
id: 'firstName',
size: 140,
pinned: 'left',
accessorKey: 'firstName',
header: 'Имя',
enableSorting: true,
sortDescFirst: true,
},
{
accessorKey: 'lastName',
header: 'Фамилия',
cell: ctx => <div className='custom'>{ctx.getValue<string>()}</div>,
maxSize: 200,
enableSorting: false,
},
{
accessorKey: 'age',
header: ctx => `Можно добавить хедер так: ${ctx.column.id}`,
minSize: 40,
},
Table.getRowActionsColumnDef({
pinned: true,
actionsGenerator: () => [
{
option: 'Действие с иконкой',
icon: <PlaceholderSVG />,
onClick: handleRowActionClick,
},
{
option: 'Другое действие',
onClick: handleRowActionClick,
},
],
})
];
// ...
<Table
columnDefinitions={columnDefinitions}
data={data}
rowSelection={{
enable: true, // false выключает выбор всех строк (состояние disabled)
// или можно передать функцию для вычисления
// enable: row => !['Pending', 'Loading'].includes(row.original.status),
onChange: handleRowSelection,
}}
/>
name | type | default value | description |
---|---|---|---|
value | string | number |
- |
Компонент таблицы
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] |
- | Определение внешнего вида и функционала колонок |
data* | TData[] |
- | Данные для отрисовки |
keepPinnedRows | boolean |
- | Параметр отвечает за отображение закрепленных строк на всех страницах таблицы |
copyPinnedRows | boolean |
- | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
enableSelectPinned | boolean |
- | Параметр отвечает за чекбокс выбора закрепленных строк |
sorting | { initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; } |
- | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние initialState: Начальное состояние сортировки state: Состояние сортировки, жестко устанавливаемое снаружи onChange: Колбэк на изменение сортировки |
rowSelection | { initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean | ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; } |
- | Параметры отвечают за возможность выбора строк initialState: Начальное состояние выбора строк state: Состояние выбора строк, жестко устанавливаемое снаружи enable: Колбэк определяющий можно ли выбрать строку multiRow: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) onChange: Колбэк на выбор строк |
search | { initialState?: string; state?: string; placeholder?: string; loading?: boolean; onChange?(value: string): void; } |
'Search' loading: Состояние загрузки в строке поиска onChange: Колбэк на изменение данных в строке поиска |
Параметры отвечают за глобальный поиск в таблице initialState: Начальное состояние строки поиска state: Состояние строки поиска, жестко устанавливаемое снаружи placeholder: Placeholder строки поиска |
enableFuzzySearch | boolean |
- | Включить нечеткий поиск |
pageSize | number |
10 | Максимальное кол-во строк на страницу |
pagination | { state?: PaginationState; options?: number[]; optionsLabel?: string; onChange?(state: PaginationState): void; optionsRender?(value: string | number, idx: number): string | number; } |
'Rows volume: ' onChange: Колбэк на изменение пагинации |
Параметры отвечают за пагинацию в таблице state: Состояние строки поиска, жестко устанавливаемое снаружи options: Варианты в выпадающем селекторе для установки кол-ва строк на страницу optionsLabel: Текст для селектора кол-ва строк на страницу |
autoResetPageIndex | boolean |
- | Автоматический сброс пагинации к первой странице при изменении данных или состояния (e.g фильтры, сортировки, и т.д) |
pageCount | number |
- | Кол-во страниц (используется для внешнего управления) |
onRowClick | RowClickHandler<TData> |
- | Колбэк клика по строке |
className | string |
- | CSS-класс |
loading | boolean |
- | Состояние загрузки |
onRefresh | () => void |
- | Колбек обновления данных |
onDelete | (selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void) => void |
- | Колбек удаления выбранных |
outline | boolean |
- | Внешний бордер для тулбара и таблицы |
columnFilters | ReactNode |
- | Фильтры |
dataFiltered | boolean |
- | |
dataError | boolean |
- | |
exportSettings | { fileName: string; filterData?: boolean; exportToCSV?(args: ExportProps<TData>): void; exportToXLSX?(args: ExportProps<TData>): void; } |
- | Настройки экспорта в тулбаре |
moreActions | Action[] |
- | Элементы выпадающего списка кнопки с действиями |
noDataState | EmptyStateProps |
- | Экран при отстутствии данных |
noResultsState | EmptyStateProps |
- | Экран при отстутствии результатов поиска или фильтров |
errorDataState | EmptyStateProps |
- | Экран при ошибке запроса |
suppressToolbar | boolean |
- | Отключение тулбара |
toolbarBefore | ReactNode |
- | Дополнительный слот в Toolbar перед строкой поиска |
toolbarAfter | ReactNode |
- | Дополнительный слот в Toolbar после строки поиска |
suppressPagination | boolean |
- | Отключение пагинации |
manualSorting | boolean |
- | |
manualPagination | boolean |
- | |
manualFiltering | boolean |
- | |
getRowId | (originalRow: TData, index: number, parent?: Row<TData>) => string |
- | Дополнительная функция используется для получения уникального идентификатора для любой заданной строки |
scrollRef | RefObject<HTMLElement> |
- | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
scrollContainerRef | RefObject<HTMLElement> |
- | Ссылка на контейнер, который скроллится |
rowPinning | Pick<RowPinningState, "top"> |
{ top: [], } | Определение какие строки должны быть закреплены в таблице |
savedState | { id: string; resize?: boolean; } |
- | Конфиг для сохранения состояния в localStorage. Поле id должно быть уникальным для разных таблиц в рамках приложения. Для корректной работы необходимо наличие id в конфиге columnDefinitions |
Вспомогательная функция для создания ячейки со статусом
name | type | default value | description |
---|---|---|---|
mapStatusToAppearance* | MapStatusToAppearanceFnType |
- | Маппинг значений статуса на цвета |
accessorKey* | string |
- | Имя ключа соответствующее полю в data |
enableSorting | boolean |
true | Включение/выключение сортировки |
renderDescription | (cellValue: string, row: TData) => string |
- | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
size | number |
- | Размер ячейки |
minSize | number |
- | |
maxSize | number |
- | |
header | ColumnDefTemplate<HeaderContext<TData, unknown>> & (string | ((ctx: HeaderContext<TData, unknown>) => string)) |
- | Заголовок колонки |
enableResizing | boolean |
- | Включение/выключение ресайза колонки |
Вспомогательная функция для создания ячейки с дополнительными действиями у строки
name | type | default value | description |
---|---|---|---|
actionsGenerator* | ActionsGenerator<TData> |
- | Действия для строки |
pinned | boolean |
- | Закрепление колонки справа в таблице |
name | type | default value | description |
---|---|---|---|
onChangePage* | (offset: number, limit: number) => void |
- | |
columnDefinitions* | ColumnDefinition<TData>[] |
- | Определение внешнего вида и функционала колонок |
keepPinnedRows | boolean |
false | Параметр отвечает за отображение закрепленных строк на всех страницах таблицы |
copyPinnedRows | boolean |
false | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
enableSelectPinned | boolean |
- | Параметр отвечает за чекбокс выбора закрепленных строк |
sorting | { initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; } |
- | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние initialState: Начальное состояние сортировки state: Состояние сортировки, жестко устанавливаемое снаружи onChange: Колбэк на изменение сортировки |
rowSelection | { initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean | ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; } |
- | Параметры отвечают за возможность выбора строк initialState: Начальное состояние выбора строк state: Состояние выбора строк, жестко устанавливаемое снаружи enable: Колбэк определяющий можно ли выбрать строку multiRow: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) onChange: Колбэк на выбор строк |
enableFuzzySearch | boolean |
- | Включить нечеткий поиск |
autoResetPageIndex | boolean |
- | Автоматический сброс пагинации к первой странице при изменении данных или состояния (e.g фильтры, сортировки, и т.д) |
onRowClick | RowClickHandler<TData> |
- | Колбэк клика по строке |
className | string |
- | CSS-класс |
loading | boolean |
- | Состояние загрузки |
onRefresh | () => void |
- | Колбек обновления данных |
onDelete | (selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void) => void |
- | Колбек удаления выбранных |
outline | boolean |
- | Внешний бордер для тулбара и таблицы |
columnFilters | ReactNode |
- | Фильтры |
dataFiltered | boolean |
- | |
dataError | boolean |
- | |
exportSettings | { fileName: string; filterData?: boolean; exportToCSV?(args: ExportProps<TData>): void; exportToXLSX?(args: ExportProps<TData>): void; } |
- | Настройки экспорта в тулбаре |
moreActions | Action[] |
- | Элементы выпадающего списка кнопки с действиями |
noDataState | EmptyStateProps |
- | Экран при отстутствии данных |
noResultsState | EmptyStateProps |
- | Экран при отстутствии результатов поиска или фильтров |
errorDataState | EmptyStateProps |
- | Экран при ошибке запроса |
suppressToolbar | boolean |
- | Отключение тулбара |
toolbarBefore | ReactNode |
- | Дополнительный слот в Toolbar перед строкой поиска |
toolbarAfter | ReactNode |
- | Дополнительный слот в Toolbar после строки поиска |
suppressPagination | boolean |
- | Отключение пагинации |
manualSorting | boolean |
true | |
manualPagination | boolean |
true | |
manualFiltering | boolean |
true | |
getRowId | (originalRow: TData, index: number, parent?: Row<TData>) => string |
- | Дополнительная функция используется для получения уникального идентификатора для любой заданной строки |
scrollRef | RefObject<HTMLElement> |
- | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
scrollContainerRef | RefObject<HTMLElement> |
- | Ссылка на контейнер, который скроллится |
rowPinning | Pick<RowPinningState, "top"> |
- | Определение какие строки должны быть закреплены в таблице |
savedState | { id: string; resize?: boolean; } |
- | Конфиг для сохранения состояния в localStorage. Поле id должно быть уникальным для разных таблиц в рамках приложения. Для корректной работы необходимо наличие id в конфиге columnDefinitions |
items | TData[] |
- | Данные для отрисовки |
total | number |
10 | Общее кол-во строк |
limit | number |
10 | Кол-во строк на страницу |
offset | number |
- | Смещение |
search | { initialValue?: string; state: string; placeholder?: string; loading?: boolean; onChange(value: string): void; } |
'Search...' loading: Состояние загрузки в строке поиска onChange: Колбэк на изменение данных в строке поиска |
Параметры отвечают за глобальный поиск в таблице initialState: Начальное состояние строки поиска state: Состояние строки поиска, жестко устанавливаемое снаружи placeholder: Placeholder строки поиска |
pagination | { options?: number[]; optionsLabel?: string; } |
'Rows volume' |
Параметры отвечают за пагинацию в таблице options: Варианты в выпадающем селекторе для установки кол-ва строк на страницу optionsLabel: Текст для селектора кол-ва строк на страницу |
Вспомогательная функция для создания ячейки с дополнительными действиями у строки
name | type | default value | description |
---|---|---|---|
actionsGenerator* | ActionsGenerator<TData> |
- | Действия для строки |
pinned | boolean |
- | Закрепление колонки справа в таблице |
Вспомогательная функция для создания ячейки со статусом
name | type | default value | description |
---|---|---|---|
mapStatusToAppearance* | MapStatusToAppearanceFnType |
- | Маппинг значений статуса на цвета |
accessorKey* | string |
- | Имя ключа соответствующее полю в data |
enableSorting | boolean |
true | Включение/выключение сортировки |
renderDescription | (cellValue: string, row: TData) => string |
- | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
size | number |
- | Размер ячейки |
minSize | number |
- | |
maxSize | number |
- | |
header | ColumnDefTemplate<HeaderContext<TData, unknown>> & (string | ((ctx: HeaderContext<TData, unknown>) => string)) |
- | Заголовок колонки |
enableResizing | boolean |
- | Включение/выключение ресайза колонки |
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] |
- | |
data* | TData[] |
- | |
fileName | string |
Table |
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] |
- | |
data* | TData[] |
- | |
fileName | string |
Table |