Table

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

A Table 允许对行进行选择和排序,以及对行执行操作。

属性

姓名描述类型默认
数据数据any[]
列设置TableColumnConfig[]
verticalAlign内容的垂直对齐"top" "middle"
getRowDescriptor获取行描述符的处理程序(item: any, index: number) => DescriptorType
getRowId选择和排序行时使用的行 ID。如果您跳过一行,其 ID 将是行数据中与列 ID 同名的字段的值。string ((item: any, index: number) => string)
getRowClassNames行 CSS 类(item: any, index: number) => string[]
isRowDisabled禁用列的条件(item: any, index: number) => boolean
onRowClick行点击处理器(项目:任意,索引:数字,事件:react.mouseEvent<HTMLTableRowElement>) = 无效>
onRowMouseEnterRow 鼠标输入处理器(项目:任意,索引:数字,事件:react.mouseEvent<HTMLTableRowElement>) = 无效>
onRowMouseLeaveRow mouseLeave 处理器(项目:任意,索引:数字,事件:react.mouseEvent<HTMLTableRowElement>) = 无效>
emptyMessage如果数据丢失,则返回一条消息string"No data"
className表 CSS 类string
edgePadding为边缘单元格添加水平边距boolean
stickyHorizontalScroll在表格中添加水平粘滞滚动。注意:表格不能同时具有固定高度和粘性滚动。如果表格有溢出,则粘性滚动不起作用。booleanfalse
stickyHorizontalScrollBreakpoint在使滚动粘合之前,父方块应达到的阈值。这在控制台中很有用,例如当 groupActions 栏与滚动条重叠时。number0

DescriptorType

姓名描述类型默认
id选择和排序行时使用的行 IDstring
残疾的禁用列的条件boolean
互动的显示行悬停boolean
classNames行 CSS 类string[]

TableColumnConfig

姓名描述类型默认
id列 IDstring
名称列名(标题)string (() => React.ReactNode)列 ID
className将添加到列中所有单元格的 CSS 类string
占位符单元格中没有数据时存根string ((item: any, index: number) => React.ReactNode)— (&mdash;)
模板单元格内容。如果您跳过一行,则单元格内容将是与该行同名的字段的值。string ((item: any, index: number) => React.ReactNode)名称等于列 ID 的字段的值
对齐内容对齐"start" "end"
置顶专栏"start" "end"
主要的将一列标识为主列而不是其他列boolean
宽度列的内容宽度(以像素为单位)number string
其他数据,包括 HOC 设置记录<string, any>

withTableActions HOC Table 一起使用

此 HOC 向表列添加了一个带有操作的特殊列。

属性

姓名描述类型
getRowActions每行的操作配置数组(item: any, index: number) => TableActionConfig[]
renderRowActions动作单元的渲染函数(props: {item: any; index: number}) => React.ReactNode
rowActionsSize操作按钮和弹出菜单项的大小"s" "xl"

TableActionConfig

type TableActionConfig = TableAction | TableActionGroup;

TableAction

姓名描述类型默认
文本文本string
处理者点击处理器(item: any, index: number) => void
残疾的操作已禁用boolean
href具有此属性的菜单项将成为指向指定位置的链接。string
目标<a> 标签的 target 属性相同。string
真实<a> 标签的 rel 属性相同。string
主题主题"normal" "danger""normal"
图标显示在文本旁边的图标React.ReactNode

TableActionGroup

姓名描述类型
标题操作组标题string
项目操作组物品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} />;

withTableCopy HOC Table 一起使用

此 HOC 允许复制单元格的内容或任何其他文本。

ColumnMeta

姓名描述类型
复制要复制的文本。如果该值为 true,则允许复制单元格内容。boolean ((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} />;

withTableSelection HOC Table 一起使用

此 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}
    />
  );
}

withTableSettings HOC Table 一起使用

此 HOC 启用了表列设置的功能。你可以通过两种方式使用它:

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

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

选项

姓名描述类型默认
宽度设置弹出窗口宽度number "fit"
可排序启用或禁用排序设置项目booleantrue
可过滤启用或禁用筛选设置项目booleanfalse

ColumnMeta

姓名描述类型默认
selectedByDefault如果设置中缺少某列,则启用或禁用选择该列booleantrue
selectedAlways使该列始终处于选中状态。您无法更改其可见性。booleanfalse

属性

姓名描述类型
settingsPopupWidthTableColumnSetup 弹出窗口宽度number "fit"
设置当前设置TableSettingsData
updateSettings设置更新处理器(数据: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>
      )}
    />
  );
}

withTableSorting HOC Table 一起使用

此 HOC 支持列排序。

ColumnMeta

姓名描述类型默认
defaultSortOrder设置主要排序顺序"asc" "desc"asc
分类排序功能。它应该返回一个按升序排序的值。如果设置为 true,则单元格值将按升序进行比较和排序。boolean ((itemA: any, itemB: any) => number)

属性

姓名描述类型
defaultSortState不受控制组件的默认排序状态TableSortState
sortState排序状态TableSortState
onSortStateChange排序状态更改句柄(sortState: TableSortState) => void

如果缺少 sortStateonSortStateChange 属性,则排序状态存储在组件本身中。

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} />;