Table

Maintainer:
Raubzeug
GitHub
verticalAlign
rowActionsSize
edgePadding
import {Table} from '@gravity-ui/uikit';

Компонент Table позволяет выбирать и сортировать строки, а также выполнять действия с выбранной строкой.

Свойства

ИмяОписаниеТипЗначение по умолчанию
dataДанные.any[]
columnsНастройки столбцов.TableColumnConfig[]
verticalAlignВыравнивание содержимого по вертикали."top" "middle"
getRowDescriptorОбработчик для получения дескриптора строки.(item: any, index: number) => DescriptorType
getRowIdИдентификатор строки, используемый при выборе и сортировке строк. Если пропустить строку, то идентификатор такой строки будет равен значению поля в данных строки с тем же именем, что и идентификатор столбца.string ((item: any, index: number) => string)
getRowClassNamesCSS-классы строки.(item: any, index: number) => string[]
isRowDisabledУсловие блокировки столбцов.(item: any, index: number) => boolean
onRowClickОбработчик клика (click) по строке.(item: any, index: number, event: React.MouseEvent<HTMLTableRowElement>) => void
onRowMouseEnterОбработчик наведения мыши (mouseenter) на строку.(item: any, index: number, event: React.MouseEvent<HTMLTableRowElement>) => void
onRowMouseLeaveОбработчик ухода мыши (mouseleave) со строки.(item: any, index: number, event: React.MouseEvent<HTMLTableRowElement>) => void
emptyMessageВозвращает сообщение, если данные отсутствуют.string"No data"
classNameCSS-класс таблицы.string
edgePaddingДобавляет горизонтальные отступы для крайних ячеек.boolean
stickyHorizontalScrollДобавляет горизонтальную липкую прокрутку (sticky scroll) в таблице. Обратите внимание, что таблица не может иметь фиксированную высоту и липкую прокрутку одновременно. Липкая прокрутка не будет работать при переполнении таблицы.booleanfalse
stickyHorizontalScrollBreakpointПорог, которого должен достичь родительский блок, чтобы прокрутка стала липкой. Это особенно удобно в консоли, когда панель groupActions перекрывает область прокрутки.number0

DescriptorType

ИмяОписаниеТипЗначение по умолчанию
idИдентификатор строки, используемый при выборе и сортировке строк.string
disabledУсловие блокировки столбцов.boolean
interactiveПоказывать ховерное состояние строкиboolean
classNamesCSS-классы строки.string[]

TableColumnConfig

ИмяОписаниеТипЗначение по умолчанию
idИдентификатор столбца.string
nameНазвание (заголовок) столбца.string (() => React.ReactNode)Идентификатор столбца.
classNameCSS-класс, который будет добавлен ко всем ячейкам в столбце.string
placeholderЗаглушка при отсутствии данных в ячейке.string ((item: any, index: number) => React.ReactNode)— (&mdash;)
templateСодержимое ячейки. Если пропустить строку, ячейка будет содержать значение поля с таким же именем, как и у этой строки.string ((item: any, index: number) => React.ReactNode)Значение поля, имя которого соответствует идентификатору столбца.
alignВыравнивание содержимого."start" "center" "end"
stickyЛипкий столбец."start" "end"
primaryУказывает, что столбец является первичным относительно остальных.boolean
widthШирина содержимого столбца в пикселях.number string
metaРазличные данные, включая настройки HOC.Record<string, any>

Использование Table с HOC withTableActions

Этот HOC добавляет к столбцам таблицы специальный столбец с действиями.

Свойства

ИмяОписаниеТип
getRowActionsМассив конфигураций действий для каждой строки.(item: any, index: number) => TableActionConfig[]
renderRowActionsФункция рендеринга ячейки с действиями.(props: {item: any; index: number}) => React.ReactNode
rowActionsSizeРазмер кнопки действия и элементов всплывающего меню."s" "m" "l" "xl"

TableActionConfig

type TableActionConfig = TableAction | TableActionGroup;

TableAction

ИмяОписаниеТипЗначение по умолчанию
textТекст.string
handlerОбработчик клика.(item: any, index: number) => void
disabledДействие отключено.boolean
hrefЭлемент меню с этим свойством становится ссылкой на указанное местоположение.string
targetТо же, что и атрибут target у тега <a>.string
relТо же, что и атрибут rel у тега <a>.string
themeТема."normal" "danger""normal"
iconИконка, отображаемая рядом с текстом.React.ReactNode

TableActionGroup

ИмяОписаниеТип
titleЗаголовок группы действий.string
itemsЭлементы группы действий.TableActionConfig[]

Пример

import {Table, withTableActions} from '@gravity-ui/uikit';

const MyTable = withTableActions(Table);
const data = [
  {id: 1, text: 'Hello'},
  {id: 2, text: 'World'},
];
const columns = [{id: 'id'}, {id: 'text'}];
const getRowActions = () => {
  return [
    {
      text: 'Print',
      handler: () => {},
    },
    {
      text: 'Remove',
      handler: () => {},
      theme: 'danger',
    },
  ];
};

const table = <MyTable data={data} columns={columns} getRowActions={getRowActions} />;
import {Table, withTableActions, RenderRowActionsProps} from '@gravity-ui/uikit';

const MyTable = withTableActions(Table);
type Item = {id: number; text: string};

const data: Item[] = [
  {id: 1, text: 'Hello'},
  {id: 2, text: 'World'},
];
const columns = [{id: 'id'}, {id: 'text'}];

const RowAction = ({item}: RenderRowActionsProps<Item>) => {
    return <React.Fragment>{`Action for - ${item.text}`}</React.Fragment>;
};

const table = (
  <MyTable
    data={data}
    columns={columns}
    renderRowActions={RowAction}
  />
);

Использование Table с HOC withTableCopy

Этот HOC позволяет копировать содержимое ячейки или произвольный текст.

ColumnMeta

ИмяОписаниеТип
copyКопируемый текст. Если установлено значение true, содержимое ячейки можно копировать.boolean ((item: any, index: number) => string) ((item: any, index: number) => number)

Пример

import {Table, withTableCopy} from '@gravity-ui/uikit';

const MyTable = withTableCopy(Table);
const data = [
  {id: 1, text: 'Hello'},
  {id: 2, text: 'World'},
];
const columns = [
  {id: 'id', meta: {copy: ({id}) => `ID #${id}`}},
  {id: 'text', meta: {copy: true}},
];

const table = <MyTable data={data} columns={columns} />;

Использование Table с HOC withTableSelection

Этот HOC позволяет выбирать строки в таблице.

Свойства

ИмяОписаниеТип
selectedIdsВыбранные строки.string[]
onSelectionChangeОбработчик изменения выбранных строк.(ids: string[]) => void

Пример

import {Table, withTableSelection} from '@gravity-ui/uikit';

const MyTable = withTableSelection(Table);
const data = [
  {id: 1, text: 'Hello'},
  {id: 2, text: 'World'},
];
const columns = [{id: 'id'}, {id: 'text'}];
const getRowId = 'id';

function SelectionTable() {
  const [selectedIds, setSelectedIds] = React.useState([1]);

  return (
    <MyTable
      data={data}
      columns={columns}
      getRowId={getRowId}
      selectedIds={selectedIds}
      onSelectionChange={setSelectedIds}
    />
  );
}

Использование Table с HOC withTableSettings

Этот HOC активирует функции для настройки столбцов таблицы. Его можно использовать двумя способами:

import {Table, withTableSettings} from './withTableSettings';

// No options passed
const MyTable1 = withTableSettings(Table);
// or with options
const MyTable1 = withTableSettings({sortable: false})(Table);

Опции

ИмяОписаниеТипЗначение по умолчанию
widthШирина всплывающего окна с настройками.number "fit"
sortableВключает или отключает сортировку элементов настроек.booleantrue
filterableВключает или отключает фильтрацию элементов настроек.booleanfalse

ColumnMeta

ИмяОписаниеТипЗначение по умолчанию
selectedByDefaultВключает или отключает автоматический выбор столбца, если он не передан в настройках.booleantrue
selectedAlwaysПри включении этого свойства столбец всегда остается выбранным. Изменить видимость такого столбца нельзя.booleanfalse

Свойства

ИмяОписаниеТип
settingsPopupWidthШирина всплывающего окна TableColumnSetup.number "fit"
settingsТекущие настройки.TableSettingsData
updateSettingsОбработчик обновления настроек.(data: TableSettingsData) => Promise<void>
renderControlsПозволяет рендерить пользовательские действия.RenderControls
settingsFilterPlaceholderТекст, который отображается в контроле, когда значение для поиска не задано.string
settingsFilterEmptyMessageТекст, который отображается, когда ни один элемент не найден.string
filterSettingsФункция для фильтрации элементов.(value: string, item: TableColumnSetupItem) => boolean

TableSettingsData

type TableSettingsData = Array<{
  id: string;
  isSelected?: boolean;
}>;

RenderControls

type RenderControls = (params: {
  DefaultApplyButton: React.ComponentType;
  onApply: () => void;
}) => React.ReactNode;

Пример

import {Table, withTableSettings} from '@gravity-ui/uikit';

const MyTable = withTableSettings({width: 100, sortable: false})(Table);
const data = [
  {id: 1, text: 'Hello'},
  {id: 2, text: 'World'},
];
const columns = [{id: 'id'}, {id: 'text'}];
const initialSettings = [
  {id: 'id', isSelected: false},
  {id: 'text', isSelected: true},
];

function SelectionTable() {
  const [settings, setSettings] = React.useState(initialSettings);

  return (
    <MyTable
      data={data}
      columns={columns}
      settings={settings}
      updateSettings={(settings) => {
        setSettings(settings);
        return Promise.resolve();
      }}
      renderControls={({DefaultApplyButton, onApply}) => (
        <Flex gapRow="1" direction="column">
          <Button
            view="outlined-warning"
            onClick={() => {
              onApply();
              setSettings(initialSettings);
            }}
          >
            Reset
          </Button>
          <DefaultApplyButton />
        </Flex>
      )}
    />
  );
}

Использование Table с HOC withTableSorting

Этот HOC позволяет выполнить сортировку столбцов.

ColumnMeta

ИмяОписаниеТипЗначение по умолчанию
defaultSortOrderУстанавливает первичный порядок сортировки."asc" "desc"asc
sortФункция сортировки. Возвращает значение для сортировки по возрастанию. При установке true значения ячеек сравниваются и сортируются в порядке возрастания.boolean ((itemA: any, itemB: any) => number)

Свойства

ИмяОписаниеТип
defaultSortStateСостояние сортировки по умолчанию для неконтролируемого компонента.TableSortState
sortStateСостояние сортировки.TableSortState
onSortStateChangeОбработчик изменения состояния сортировки.(sortState: TableSortState) => void

Если не передавать свойства sortState и onSortStateChange, то состояние сортировки будет храниться в самом компоненте.

TableSortState

type TableSortState = Array<{
  column: string;
  order: 'asc' | 'desc';
}>;

Пример

import {Table, withTableSorting} from '@gravity-ui/uikit';

const MyTable = withTableSorting(Table);
const data = [
  {id: 1, text: 'Hello', date: '2016-10-25'},
  {id: 2, text: 'World', date: '2020-08-15'},
];
const columns = [
  {id: 'id', meta: {sort: true}},
  {
    id: 'text',
    meta: {defaultSortOrder: 'desc', sort: (a, b) => Date.parse(a.date) - Date.parse(b.date)},
  },
];

const table = <MyTable data={data} columns={columns} />;