Примитивы
39

DataTable

Таблица, описываемая конфигом. У каждой колонки свой рендерер, поэтому таблица остаётся обобщённой по типу строки.

отрендерил aura-react
отрендерил aura-react
отрендерил aura-vue
отрендерил aura-svelte
собрано из классов самого aura-angular
Latest published versions
PackageVersionParity
@ilomee/aura-core1.0.0ok
@ilomee/aura-react1.0.0ok
@ilomee/aura-vue1.0.0behind
Latest published versions
PackageVersionParity
@ilomee/aura-core1.0.0ok
@ilomee/aura-react1.0.0ok
@ilomee/aura-vue1.0.0behind
Latest published versions
PackageVersionParity
@ilomee/aura-core1.0.0ok
@ilomee/aura-react1.0.0ok
@ilomee/aura-vue1.0.0behind
Latest published versions
PackageVersionParity
@ilomee/aura-core1.0.0ok
@ilomee/aura-react1.0.0ok
@ilomee/aura-vue1.0.0behind

Код

Рецепт — это композиция примитивов, а не один элемент, поэтому единого сниппета нет. Соберите его из классов ниже или откройте примитивы, из которых он состоит.
Demo.tsx
import { Badge, Button, DataTable, type DataTableColumn } from '@ilomee/aura-react';

interface Release {
  pkg: string;
  version: string;
  status: 'ok' | 'behind';
}

const ROWS: Release[] = [
  { pkg: '@ilomee/aura-core', version: '1.0.0', status: 'ok' },
  { pkg: '@ilomee/aura-react', version: '1.0.0', status: 'ok' },
  { pkg: '@ilomee/aura-vue', version: '1.0.0', status: 'behind' },
];

const COLUMNS: DataTableColumn<Release>[] = [
  { key: 'pkg', header: 'Package' },
  { key: 'version', header: 'Version', align: 'end', width: '110px' },
  { key: 'status', header: 'Parity', render: (row) => <Badge tone={row.status === 'ok' ? 'success' : 'danger'}>{row.status}</Badge> },
];

export default function Demo() {
  return (
    <DataTable
      columns={COLUMNS}
      rows={ROWS}
      rowKey={(row) => row.pkg}
      actions={(row) => <Button variant="ghost">Publish {row.version}</Button>}
      caption="Latest published versions"
    />
  );
}
Demo.vue
import { DataTable } from '@ilomee/aura-vue';

Колонка рисуется скоуп-слотом, названным по её ключу; column.render тоже принимается, если удобнее функция.

Demo.svelte
import { DataTable } from '@ilomee/aura-svelte';

Колонка рисуется через column.cell — сниппет Snippet<[Row, number]>.

Используется как aura-data-table.

demo.component.ts
import { AuraDataTable } from '@ilomee/aura-angular';

Контентные входы принимают строку либо TemplateRef.

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
columns*DataTableColumn<Row>[]{ key, header, render?, align?, width? }.
rowsRow[] | null
rowKey(row: Row, i: number) => string
actions(row: Row) => ReactNode
emptyLabelstring'No rows'
captionReactNode
ИмяТипПо умолчаниюПримечания
columns*DataTableColumn<Row>[]
rowsRow[] | null
rowKey(row: Row, i: number) => string
emptyLabelstring'No rows'
captionRecipeContent
cell-<key> / actionsслотSlot<{ row: Row; index: number }>Ячейка колонки и ячейка действий строки.
ИмяТипПо умолчаниюПримечания
columns*DataTableColumn<Row>[]
rowsRow[] | null
rowKey(row: Row, i: number) => string
actionsSnippet<[Row, number]>
emptyLabelstring'No rows'
captionRecipeContent
ИмяТипПо умолчаниюПримечания
columns*DataTableColumn<Row>[]
rowsRow[] | null
rowKey(row: Row, i: number) => string
cellsRecord<string, TemplateRef<AuraCellContext<Row>>>Шаблон ячейки на ключ колонки. Контекст — { $implicit: row, index }.
actionsTemplateRef<AuraCellContext<Row>>
emptyLabelRecipeContent'No rows'
captionRecipeContent

Какие классы отдаёт

Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.

КлассРольПримечания
.aura-tableбазаОбязательный. Без него модификатор не работает.
.aura-table__actionsэлемент
.aura-table--emptyмодификатор