@snack-uikit/table v0.17.0
Table
Installation
npm i @snack-uikit/table
TODO:
- multiple row selection with Shift key pressed
Примечание
Для оптимальной работы таблицы используйте
useMemo
дляcolumnDefinitions
или выносите их определение за компонент
Example
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,
}}
/>
CopyCell
Props
name | type | default value | description |
---|---|---|---|
value | string \| number | - |
Table
Компонент таблицы
Props
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] | - | Определение внешнего вида и функционала колонок |
data* | TData[] | - | Данные для отрисовки |
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 | { initialValue?: 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; } | 'Rows volume: ' onChange: Колбэк на изменение пагинации | Параметры отвечают за пагинацию в таблице state: Состояние строки поиска, жестко устанавливаемое снаружи options: Варианты в выпадающем селекторе для установки кол-ва строк на страницу optionsLabel: Текст для селектора кол-ва строк на страницу |
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 | - | |
exportFileName | string | - | Название файла при экспорте CSV/XLSX |
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> | - | Ссылка на контейнер, который скроллится |
Table.getStatusColumnDef
Вспомогательная функция для создания ячейки со статусом
Props
name | type | default value | description |
---|---|---|---|
mapStatusToAppearance* | MapStatusToAppearanceFnType | - | Маппинг значений статуса на цвета |
accessorKey* | string | - | Имя ключа соответствующее полю в data |
enableSorting | boolean | - | Включение/выключение сортировки |
renderDescription | (cellValue: string) => string | - | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
size | number | - | Размер ячейки |
header | ColumnDefTemplate<HeaderContext<TData, unknown>> & (string \| ((ctx: HeaderContext<TData, unknown>) => string)) | - | Заголовок колонки |
enableResizing | boolean | - | Включение/выключение ресайза колонки |
Table.getRowActionsColumnDef
Вспомогательная функция для создания ячейки с дополнительными действиями у строки
Props
name | type | default value | description |
---|---|---|---|
actionsGenerator* | ActionsGenerator<TData> | - | Действия для строки |
pinned | boolean | - | Закрепление колонки справа в таблице |
ServerTable
Props
name | type | default value | description |
---|---|---|---|
onChangePage* | (offset: number, limit: number) => void | - | |
columnDefinitions* | ColumnDefinition<TData>[] | - | Определение внешнего вида и функционала колонок |
loading | 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 | - | Включить нечеткий поиск |
onRowClick | RowClickHandler<TData> | - | Колбэк клика по строке |
className | string | - | CSS-класс |
onRefresh | () => void | - | Колбек обновления данных |
onDelete | (selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void) => void | - | Колбек удаления выбранных |
outline | boolean | - | Внешний бордер для тулбара и таблицы |
columnFilters | ReactNode | - | Фильтры |
dataFiltered | boolean | - | |
dataError | boolean | - | |
exportFileName | string | - | Название файла при экспорте CSV/XLSX |
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> | - | Ссылка на контейнер, который скроллится |
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: Текст для селектора кол-ва строк на страницу |
ServerTable.getRowActionsColumnDef
Вспомогательная функция для создания ячейки с дополнительными действиями у строки
Props
name | type | default value | description |
---|---|---|---|
actionsGenerator* | ActionsGenerator<TData> | - | Действия для строки |
pinned | boolean | - | Закрепление колонки справа в таблице |
ServerTable.getStatusColumnDef
Вспомогательная функция для создания ячейки со статусом
Props
name | type | default value | description |
---|---|---|---|
mapStatusToAppearance* | MapStatusToAppearanceFnType | - | Маппинг значений статуса на цвета |
accessorKey* | string | - | Имя ключа соответствующее полю в data |
enableSorting | boolean | - | Включение/выключение сортировки |
renderDescription | (cellValue: string) => string | - | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
size | number | - | Размер ячейки |
header | ColumnDefTemplate<HeaderContext<TData, unknown>> & (string \| ((ctx: HeaderContext<TData, unknown>) => string)) | - | Заголовок колонки |
enableResizing | boolean | - | Включение/выключение ресайза колонки |
exportToCSV
Props
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] | - | |
data* | TData[] | - | |
fileName | string | Table |
exportToXLSX
Props
name | type | default value | description |
---|---|---|---|
columnDefinitions* | ColumnDefinition<TData>[] | - | |
data* | TData[] | - | |
fileName | string | Table |
3 days ago
4 days ago
4 days ago
4 days ago
3 days ago
5 days ago
15 days ago
15 days ago
15 days ago
17 days ago
18 days ago
18 days ago
20 days ago
20 days ago
19 days ago
20 days ago
20 days ago
20 days ago
24 days ago
23 days ago
23 days ago
25 days ago
30 days ago
30 days ago
30 days ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
3 months ago
2 months ago
2 months ago
2 months ago
3 months ago
2 months ago
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago