@multiplatform.one/table 6.7.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/cjs/components/ChildTable/index.cjs +2 -1
- package/dist/cjs/components/ChildTable/index.native.js +2 -1
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.cjs +17 -9
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +222 -0
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +237 -0
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +5 -2
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +92 -41
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +97 -43
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +8 -2
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/cjs/components/DataTable/documentListSlots.cjs +59 -0
- package/dist/cjs/components/DataTable/documentListSlots.native.js +85 -0
- package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/cjs/components/DataTable/index.native.js +74 -59
- package/dist/cjs/components/DataTable/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/rowStateChrome.cjs +55 -0
- package/dist/cjs/components/DataTable/rowStateChrome.native.js +59 -0
- package/dist/cjs/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +24 -3
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +9 -2
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/index.cjs +74 -63
- package/dist/cjs/components/DataTableCell/index.native.js +94 -82
- package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableColumnPinning/index.cjs +54 -37
- package/dist/cjs/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.cjs +33 -14
- package/dist/cjs/components/DataTableDateFilter/index.native.js +33 -12
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.cjs +35 -7
- package/dist/cjs/components/DataTableExport/index.native.js +42 -7
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFacetMenu/index.cjs +140 -0
- package/dist/cjs/components/DataTableFacetMenu/index.native.js +156 -0
- package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilterButton/index.cjs +51 -32
- package/dist/cjs/components/DataTableFilterButton/index.native.js +63 -40
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterChips/FilterChip.cjs +143 -0
- package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js +148 -0
- package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilterChips/index.cjs +9 -31
- package/dist/cjs/components/DataTableFilterChips/index.native.js +9 -32
- package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilters/index.cjs +145 -502
- package/dist/cjs/components/DataTableFilters/index.native.js +171 -544
- package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.cjs +273 -108
- package/dist/cjs/components/DataTableGrouping/index.native.js +310 -157
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTablePagination/index.cjs +147 -95
- package/dist/cjs/components/DataTablePagination/index.native.js +159 -106
- package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.cjs +251 -210
- package/dist/cjs/components/DataTableSearch/index.native.js +292 -243
- package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.cjs +141 -115
- package/dist/cjs/components/DataTableToolbar/index.native.js +163 -148
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.cjs +25 -21
- package/dist/cjs/components/DataTableViewOptions/index.native.js +6 -4
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.cjs +336 -46
- package/dist/cjs/components/SimpleTable/index.native.js +356 -48
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/index.cjs +147 -38
- package/dist/cjs/components/TableInput/index.native.js +54 -38
- package/dist/cjs/components/TableInput/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/shared.cjs +36 -1
- package/dist/cjs/components/TableInput/shared.native.js +35 -0
- package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTable.cjs +33 -2
- package/dist/cjs/hooks/useDataTable.native.js +41 -2
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/cjs/hooks/useInfiniteRows.cjs +20 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js +20 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/utils/filterUtils.cjs +12 -5
- package/dist/cjs/utils/filterUtils.native.js +20 -5
- package/dist/cjs/utils/filterUtils.native.js.map +1 -1
- package/dist/esm/components/ChildTable/index.mjs +2 -1
- package/dist/esm/components/ChildTable/index.mjs.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js +2 -1
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.mjs +17 -9
- package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs +196 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js +208 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -2
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +93 -42
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +98 -44
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs +8 -2
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/esm/components/DataTable/documentListSlots.mjs +33 -0
- package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -0
- package/dist/esm/components/DataTable/documentListSlots.native.js +56 -0
- package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/esm/components/DataTable/index.native.js +52 -37
- package/dist/esm/components/DataTable/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/rowStateChrome.mjs +28 -0
- package/dist/esm/components/DataTable/rowStateChrome.mjs.map +1 -0
- package/dist/esm/components/DataTable/rowStateChrome.native.js +29 -0
- package/dist/esm/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs +25 -4
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +9 -2
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/index.mjs +75 -64
- package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/index.native.js +95 -83
- package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.mjs +54 -37
- package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.mjs +34 -15
- package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js +34 -13
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.mjs +36 -8
- package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js +43 -8
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFacetMenu/index.mjs +115 -0
- package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -0
- package/dist/esm/components/DataTableFacetMenu/index.native.js +128 -0
- package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/esm/components/DataTableFilterButton/index.mjs +54 -35
- package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js +66 -43
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterChips/FilterChip.mjs +118 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.native.js +120 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/esm/components/DataTableFilterChips/index.mjs +9 -32
- package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterChips/index.native.js +9 -33
- package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilters/index.mjs +149 -506
- package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilters/index.native.js +175 -548
- package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.mjs +275 -110
- package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js +287 -134
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTablePagination/index.mjs +148 -96
- package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/esm/components/DataTablePagination/index.native.js +160 -107
- package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.mjs +256 -215
- package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/esm/components/DataTableSearch/index.native.js +297 -248
- package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.mjs +145 -119
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +167 -152
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.mjs +26 -22
- package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.mjs +338 -48
- package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js +358 -50
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/index.mjs +150 -41
- package/dist/esm/components/TableInput/index.mjs.map +1 -1
- package/dist/esm/components/TableInput/index.native.js +55 -39
- package/dist/esm/components/TableInput/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/shared.mjs +34 -1
- package/dist/esm/components/TableInput/shared.mjs.map +1 -1
- package/dist/esm/components/TableInput/shared.native.js +34 -1
- package/dist/esm/components/TableInput/shared.native.js.map +1 -1
- package/dist/esm/hooks/useDataTable.mjs +33 -2
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +41 -2
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.mjs +20 -3
- package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.native.js +20 -3
- package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/utils/filterUtils.mjs +12 -5
- package/dist/esm/utils/filterUtils.mjs.map +1 -1
- package/dist/esm/utils/filterUtils.native.js +20 -5
- package/dist/esm/utils/filterUtils.native.js.map +1 -1
- package/dist/jsx/components/ChildTable/index.mjs +2 -1
- package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
- package/dist/jsx/components/ChildTable/index.native.js +2 -1
- package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs +17 -9
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +196 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +237 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -2
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +93 -42
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +97 -43
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +8 -2
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/jsx/components/DataTable/documentListSlots.mjs +33 -0
- package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -0
- package/dist/jsx/components/DataTable/documentListSlots.native.js +85 -0
- package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/jsx/components/DataTable/index.native.js +74 -59
- package/dist/jsx/components/DataTable/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/rowStateChrome.mjs +28 -0
- package/dist/jsx/components/DataTable/rowStateChrome.mjs.map +1 -0
- package/dist/jsx/components/DataTable/rowStateChrome.native.js +59 -0
- package/dist/jsx/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +25 -4
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +9 -2
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/index.mjs +75 -64
- package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/index.native.js +94 -82
- package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.mjs +54 -37
- package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.mjs +34 -15
- package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.native.js +33 -12
- package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableExport/index.mjs +36 -8
- package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableExport/index.native.js +42 -7
- package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFacetMenu/index.mjs +115 -0
- package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -0
- package/dist/jsx/components/DataTableFacetMenu/index.native.js +156 -0
- package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilterButton/index.mjs +54 -35
- package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.native.js +63 -40
- package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs +118 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js +148 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/index.mjs +9 -32
- package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterChips/index.native.js +9 -32
- package/dist/jsx/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.mjs +149 -506
- package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.native.js +171 -544
- package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.mjs +275 -110
- package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.native.js +310 -157
- package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.mjs +148 -96
- package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.native.js +159 -106
- package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.mjs +256 -215
- package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.native.js +292 -243
- package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.mjs +145 -119
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +163 -148
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.mjs +26 -22
- package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
- package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/jsx/components/SimpleTable/index.mjs +338 -48
- package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
- package/dist/jsx/components/SimpleTable/index.native.js +356 -48
- package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/index.mjs +150 -41
- package/dist/jsx/components/TableInput/index.mjs.map +1 -1
- package/dist/jsx/components/TableInput/index.native.js +54 -38
- package/dist/jsx/components/TableInput/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/shared.mjs +34 -1
- package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
- package/dist/jsx/components/TableInput/shared.native.js +35 -0
- package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
- package/dist/jsx/hooks/useDataTable.mjs +33 -2
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +41 -2
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.mjs +20 -3
- package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.native.js +20 -3
- package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +2 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/utils/filterUtils.mjs +12 -5
- package/dist/jsx/utils/filterUtils.mjs.map +1 -1
- package/dist/jsx/utils/filterUtils.native.js +20 -5
- package/dist/jsx/utils/filterUtils.native.js.map +1 -1
- package/package.json +15 -15
- package/src/components/ChildTable/index.tsx +1 -0
- package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.spec.tsx +85 -0
- package/src/components/ColumnHeaderFilter/index.tsx +28 -10
- package/src/components/DataTable/DataTable.stories.tsx +30 -0
- package/src/components/DataTable/DataTableDocumentList.tsx +224 -0
- package/src/components/DataTable/DataTableMobileCards.tsx +20 -8
- package/src/components/DataTable/DataTableRoot.tsx +135 -58
- package/src/components/DataTable/DataTableVirtualized.tsx +8 -11
- package/src/components/DataTable/cardLayout.spec.tsx +89 -0
- package/src/components/DataTable/documentListSlots.ts +57 -0
- package/src/components/DataTable/index.native.tsx +76 -50
- package/src/components/DataTable/keepPreviousData.spec.tsx +137 -0
- package/src/components/DataTable/rowRing.spec.tsx +118 -0
- package/src/components/DataTable/rowStateChrome.ts +38 -0
- package/src/components/DataTableCell/CellModalEditor.native.tsx +4 -0
- package/src/components/DataTableCell/CellModalEditor.tsx +31 -3
- package/src/components/DataTableCell/CellOptionsEditor.tsx +29 -12
- package/src/components/DataTableCell/DataTableCell.stories.tsx +3 -3
- package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +131 -4
- package/src/components/DataTableCell/dataTableCell.spec.tsx +36 -1
- package/src/components/DataTableCell/index.tsx +121 -86
- package/src/components/DataTableColumnPinning/DataTableColumnPinning.spec.tsx +66 -0
- package/src/components/DataTableColumnPinning/index.tsx +32 -17
- package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +9 -1
- package/src/components/DataTableDateFilter/dateFilterZones.spec.ts +316 -0
- package/src/components/DataTableDateFilter/index.tsx +42 -22
- package/src/components/DataTableExport/exportDateZones.spec.tsx +348 -0
- package/src/components/DataTableExport/index.tsx +107 -63
- package/src/components/DataTableFacetMenu/DataTableFacetMenu.spec.tsx +264 -0
- package/src/components/DataTableFacetMenu/DataTableFacetMenu.stories.tsx +212 -0
- package/src/components/DataTableFacetMenu/index.tsx +202 -0
- package/src/components/DataTableFilterButton/index.tsx +66 -49
- package/src/components/DataTableFilterChips/DataTableFilterChips.spec.tsx +22 -0
- package/src/components/DataTableFilterChips/FilterChip.tsx +122 -0
- package/src/components/DataTableFilterChips/index.tsx +13 -29
- package/src/components/DataTableFilters/DataTableFilters.spec.tsx +56 -0
- package/src/components/DataTableFilters/index.tsx +169 -584
- package/src/components/DataTableGrouping/DataTableGrouping.spec.tsx +85 -0
- package/src/components/DataTableGrouping/index.tsx +270 -130
- package/src/components/DataTablePagination/DataTablePagination.spec.tsx +79 -4
- package/src/components/DataTablePagination/index.tsx +168 -112
- package/src/components/DataTableSearch/DataTableSearch.spec.tsx +40 -0
- package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
- package/src/components/DataTableSearch/index.tsx +192 -163
- package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +48 -18
- package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +5 -45
- package/src/components/DataTableToolbar/index.tsx +128 -99
- package/src/components/DataTableViewOptions/index.tsx +29 -22
- package/src/components/SimpleTable/SimpleTable.stories.tsx +29 -5
- package/src/components/SimpleTable/index.tsx +442 -61
- package/src/components/SimpleTable/simpleTable.spec.tsx +140 -12
- package/src/components/TableInput/index.native.tsx +91 -81
- package/src/components/TableInput/index.tsx +191 -50
- package/src/components/TableInput/shared.ts +57 -0
- package/src/components/TableInput/tableInput.spec.tsx +104 -0
- package/src/hooks/useDataTable.spec.ts +100 -3
- package/src/hooks/useDataTable.ts +44 -1
- package/src/hooks/useInfiniteRows.spec.tsx +37 -0
- package/src/hooks/useInfiniteRows.ts +34 -4
- package/src/index.ts +7 -0
- package/src/types.ts +54 -3
- package/src/utils/filterUtils.ts +27 -5
- package/types/components/ChildTable/index.d.ts.map +1 -1
- package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
- package/types/components/DataTable/DataTableDocumentList.d.ts +32 -0
- package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -0
- package/types/components/DataTable/DataTableMobileCards.d.ts +3 -1
- package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTable/DataTableVirtualized.d.ts +1 -2
- package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
- package/types/components/DataTable/documentListSlots.d.ts +26 -0
- package/types/components/DataTable/documentListSlots.d.ts.map +1 -0
- package/types/components/DataTable/index.native.d.ts +1 -1
- package/types/components/DataTable/index.native.d.ts.map +1 -1
- package/types/components/DataTable/rowStateChrome.d.ts +18 -0
- package/types/components/DataTable/rowStateChrome.d.ts.map +1 -0
- package/types/components/DataTableCell/CellModalEditor.d.ts +6 -1
- package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/CellModalEditor.native.d.ts +1 -1
- package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
- package/types/components/DataTableCell/CellOptionsEditor.d.ts +11 -3
- package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/index.d.ts +1 -1
- package/types/components/DataTableCell/index.d.ts.map +1 -1
- package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
- package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
- package/types/components/DataTableExport/index.d.ts +17 -6
- package/types/components/DataTableExport/index.d.ts.map +1 -1
- package/types/components/DataTableFacetMenu/index.d.ts +84 -0
- package/types/components/DataTableFacetMenu/index.d.ts.map +1 -0
- package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
- package/types/components/DataTableFilterChips/FilterChip.d.ts +15 -0
- package/types/components/DataTableFilterChips/FilterChip.d.ts.map +1 -0
- package/types/components/DataTableFilterChips/index.d.ts +5 -0
- package/types/components/DataTableFilterChips/index.d.ts.map +1 -1
- package/types/components/DataTableFilters/index.d.ts +11 -0
- package/types/components/DataTableFilters/index.d.ts.map +1 -1
- package/types/components/DataTableGrouping/index.d.ts.map +1 -1
- package/types/components/DataTablePagination/index.d.ts +5 -0
- package/types/components/DataTablePagination/index.d.ts.map +1 -1
- package/types/components/DataTableSearch/index.d.ts.map +1 -1
- package/types/components/DataTableToolbar/index.d.ts +2 -0
- package/types/components/DataTableToolbar/index.d.ts.map +1 -1
- package/types/components/SimpleTable/index.d.ts +27 -5
- package/types/components/SimpleTable/index.d.ts.map +1 -1
- package/types/components/TableInput/index.d.ts +6 -1
- package/types/components/TableInput/index.d.ts.map +1 -1
- package/types/components/TableInput/index.native.d.ts +6 -1
- package/types/components/TableInput/index.native.d.ts.map +1 -1
- package/types/components/TableInput/shared.d.ts +38 -0
- package/types/components/TableInput/shared.d.ts.map +1 -1
- package/types/hooks/useDataTable.d.ts +1 -1
- package/types/hooks/useDataTable.d.ts.map +1 -1
- package/types/hooks/useInfiniteRows.d.ts +8 -1
- package/types/hooks/useInfiniteRows.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/types.d.ts +54 -3
- package/types/types.d.ts.map +1 -1
- package/types/utils/filterUtils.d.ts.map +1 -1
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
PlusIcon,
|
|
18
18
|
TrashIcon,
|
|
19
19
|
} from "@phosphor-icons/react";
|
|
20
|
-
import { Button, Checkbox, Field,
|
|
20
|
+
import { Button, Checkbox, Field, useFormField } from "@multiplatform.one/forms";
|
|
21
21
|
import { flexRender } from "@tanstack/react-table";
|
|
22
22
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
23
23
|
import { ensureFocusVisibleRing, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
@@ -58,7 +58,9 @@ import type {
|
|
|
58
58
|
} from "./DataTableStateContext";
|
|
59
59
|
import { DataTableCardControls } from "./DataTableCardControls";
|
|
60
60
|
import { DataTableMobileCards } from "./DataTableMobileCards";
|
|
61
|
+
import { DataTableDocumentList } from "./DataTableDocumentList";
|
|
61
62
|
import { DataTableVirtualized } from "./DataTableVirtualized";
|
|
63
|
+
import { tableCellKeyboardProps, tableRowStateProps } from "./rowStateChrome";
|
|
62
64
|
import { alignToFlex, getDefaultColumnAlign } from "../../utils/columnAlign";
|
|
63
65
|
import { mapFieldToFilterType } from "../../utils/filterFields";
|
|
64
66
|
import { INFINITE_TRIGGER_ROWS } from "../../utils/paginationDefaults";
|
|
@@ -103,8 +105,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
103
105
|
data,
|
|
104
106
|
columns,
|
|
105
107
|
initialState,
|
|
108
|
+
controlledState,
|
|
106
109
|
onStateChange,
|
|
107
110
|
onRetry,
|
|
111
|
+
isLoading: isLoadingProp,
|
|
112
|
+
isFetching: isFetchingProp,
|
|
108
113
|
syncWithUrl = false,
|
|
109
114
|
urlDebounceMs = 500,
|
|
110
115
|
urlStrategy,
|
|
@@ -169,7 +174,8 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
169
174
|
const { sm } = useMedia();
|
|
170
175
|
// Resolved responsive layout: cards below `$sm` (W11 compact class) unless
|
|
171
176
|
// pinned via the `layout` prop. Same table state drives both layouts.
|
|
172
|
-
const
|
|
177
|
+
const showList = layout === "list";
|
|
178
|
+
const showCards = !showList && (layout === "cards" || (layout === "auto" && sm === false));
|
|
173
179
|
const { knobProps, disabledState } = useResolvedKnobs({
|
|
174
180
|
intent: undefined,
|
|
175
181
|
component: "DataTable",
|
|
@@ -194,6 +200,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
194
200
|
data,
|
|
195
201
|
columns,
|
|
196
202
|
initialState,
|
|
203
|
+
controlledState,
|
|
197
204
|
onStateChange,
|
|
198
205
|
syncWithUrl,
|
|
199
206
|
urlDebounceMs,
|
|
@@ -226,6 +233,8 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
226
233
|
enableRowSelection,
|
|
227
234
|
rowCount,
|
|
228
235
|
pageCount,
|
|
236
|
+
isLoading: isLoadingProp,
|
|
237
|
+
isFetching: isFetchingProp,
|
|
229
238
|
});
|
|
230
239
|
|
|
231
240
|
const resolvedBulkActions = (bulkActions ?? []) as BulkAction<TData>[];
|
|
@@ -260,6 +269,23 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
260
269
|
// already just the accumulated rows, so the slice is a no-op there.
|
|
261
270
|
const infinite = computed.infinite;
|
|
262
271
|
const tableRows = infinite ? rowModelRows.slice(0, infinite.visibleRowCount) : rowModelRows;
|
|
272
|
+
const heldRowsRef = useRef(tableRows);
|
|
273
|
+
if (tableRows.length > 0) {
|
|
274
|
+
heldRowsRef.current = tableRows;
|
|
275
|
+
}
|
|
276
|
+
const queryInFlight = Boolean(
|
|
277
|
+
state.isFetching ||
|
|
278
|
+
state.isPlaceholderData ||
|
|
279
|
+
infinite?.isAppending ||
|
|
280
|
+
state.isLoading ||
|
|
281
|
+
infinite?.isInitialLoading,
|
|
282
|
+
);
|
|
283
|
+
const displayRows =
|
|
284
|
+
tableRows.length > 0
|
|
285
|
+
? tableRows
|
|
286
|
+
: queryInFlight && heldRowsRef.current.length > 0
|
|
287
|
+
? heldRowsRef.current
|
|
288
|
+
: tableRows;
|
|
263
289
|
const footerGroups = table.getFooterGroups();
|
|
264
290
|
|
|
265
291
|
const hasFooter = footerGroups.some((group: any) =>
|
|
@@ -267,7 +293,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
267
293
|
);
|
|
268
294
|
|
|
269
295
|
const allRowsLength =
|
|
270
|
-
|
|
296
|
+
displayRows.length + headerGroups.length + (hasFooter ? footerGroups.length : 0);
|
|
271
297
|
const rowCounter = useRef(-1);
|
|
272
298
|
rowCounter.current = -1;
|
|
273
299
|
|
|
@@ -349,7 +375,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
349
375
|
// appended pages grow geometry instead of collapsing it.
|
|
350
376
|
const hasInfiniteTail = Boolean(infinite && !infinite.exhausted && tableRows.length > 0);
|
|
351
377
|
const virtualizer = useVirtualizer({
|
|
352
|
-
count:
|
|
378
|
+
count: displayRows.length + (hasInfiniteTail ? 1 : 0),
|
|
353
379
|
getScrollElement: () => bodyScrollRef.current,
|
|
354
380
|
estimateSize: () => rowHeightPx,
|
|
355
381
|
overscan: virtualizationOverscan,
|
|
@@ -475,6 +501,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
475
501
|
}
|
|
476
502
|
: undefined,
|
|
477
503
|
});
|
|
504
|
+
const [focusedColIndex, setFocusedColIndex] = useState(0);
|
|
478
505
|
|
|
479
506
|
const isSSR = typeof window === "undefined";
|
|
480
507
|
|
|
@@ -484,7 +511,8 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
484
511
|
// LC-49 roving anchor: the row set exposes exactly one tab stop — the
|
|
485
512
|
// focused row while focus is inside the set, else the first row.
|
|
486
513
|
const [rowPressAnchor, setRowPressAnchor] = useState(0);
|
|
487
|
-
const
|
|
514
|
+
const [rowPressHasFocus, setRowPressHasFocus] = useState(false);
|
|
515
|
+
const effectiveRowPressAnchor = Math.min(rowPressAnchor, Math.max(displayRows.length - 1, 0));
|
|
488
516
|
|
|
489
517
|
// Row identity for accessible names (DG-A11Y-06): consumer accessor →
|
|
490
518
|
// first visible column's cell value → undefined (caller picks its own
|
|
@@ -573,15 +601,21 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
573
601
|
tabIndex: rowIndex === effectiveRowPressAnchor ? 0 : -1,
|
|
574
602
|
focusVisibleStyle: ensureFocusVisibleRing({ outlineOffset: -2 }),
|
|
575
603
|
"data-row-press": "true",
|
|
604
|
+
"data-row-keyboard-focus":
|
|
605
|
+
rowIndex === effectiveRowPressAnchor && rowPressHasFocus ? "true" : "false",
|
|
576
606
|
onFocus: (e: React.FocusEvent) => {
|
|
577
607
|
// Only a focused ROW moves the anchor; focus on an inner
|
|
578
608
|
// control (own tab stop) leaves the roving state alone.
|
|
579
|
-
if (e.target === e.currentTarget)
|
|
609
|
+
if (e.target === e.currentTarget) {
|
|
610
|
+
setRowPressAnchor(rowIndex);
|
|
611
|
+
setRowPressHasFocus(true);
|
|
612
|
+
}
|
|
580
613
|
},
|
|
581
614
|
onBlur: (e: React.FocusEvent) => {
|
|
582
615
|
const next = e.relatedTarget;
|
|
583
616
|
if (!(next instanceof Element) || !next.closest('[data-row-press="true"]')) {
|
|
584
617
|
setRowPressAnchor(0);
|
|
618
|
+
setRowPressHasFocus(false);
|
|
585
619
|
}
|
|
586
620
|
},
|
|
587
621
|
onKeyDown: (e: React.KeyboardEvent) => {
|
|
@@ -626,7 +660,14 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
626
660
|
: {}),
|
|
627
661
|
};
|
|
628
662
|
},
|
|
629
|
-
[
|
|
663
|
+
[
|
|
664
|
+
rowPressActive,
|
|
665
|
+
deriveRowLabel,
|
|
666
|
+
activateRowPress,
|
|
667
|
+
effectiveRowPressAnchor,
|
|
668
|
+
isSSR,
|
|
669
|
+
rowPressHasFocus,
|
|
670
|
+
],
|
|
630
671
|
);
|
|
631
672
|
|
|
632
673
|
const handleCellChange = useCallback(
|
|
@@ -736,6 +777,25 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
736
777
|
const extraColumnsBefore =
|
|
737
778
|
(enableRowSelection ? 1 : 0) + (showRowNumbers ? 1 : 0) + (enableRowExpansion ? 1 : 0);
|
|
738
779
|
const extraColumnsAfter = showDeleteRow && !readOnly ? 1 : 0;
|
|
780
|
+
const excelCellNav = enableKeyboardNavigation && !rowPressActive && !disabled;
|
|
781
|
+
const gridColCount = Math.max(
|
|
782
|
+
table.getVisibleLeafColumns().length + extraColumnsBefore + extraColumnsAfter,
|
|
783
|
+
1,
|
|
784
|
+
);
|
|
785
|
+
const handleGridKeyDown = useCallback(
|
|
786
|
+
(event: React.KeyboardEvent) => {
|
|
787
|
+
if (!enableKeyboardNavigation || disabled) return;
|
|
788
|
+
if (excelCellNav) {
|
|
789
|
+
if (event.key === "ArrowRight") {
|
|
790
|
+
setFocusedColIndex((i) => Math.min(i + 1, gridColCount - 1));
|
|
791
|
+
} else if (event.key === "ArrowLeft") {
|
|
792
|
+
setFocusedColIndex((i) => Math.max(i - 1, 0));
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
keyboardNav.handleKeyDown(event);
|
|
796
|
+
},
|
|
797
|
+
[disabled, enableKeyboardNavigation, excelCellNav, gridColCount, keyboardNav],
|
|
798
|
+
);
|
|
739
799
|
|
|
740
800
|
const getStickyStyle = useCallback(
|
|
741
801
|
(columnId: string) => {
|
|
@@ -806,12 +866,21 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
806
866
|
(row: any, rowIndex: number, _isLastRow: boolean, cellElement?: "div") => {
|
|
807
867
|
const rowData = row.original as TData;
|
|
808
868
|
const cellRenderProps = cellElement ? ({ render: cellElement } as any) : {};
|
|
869
|
+
let cellSlot = 0;
|
|
870
|
+
const cellNavProps = () => {
|
|
871
|
+
const slot = cellSlot++;
|
|
872
|
+
if (!excelCellNav || !keyboardNav.isNavigating) return {};
|
|
873
|
+
return tableCellKeyboardProps(
|
|
874
|
+
rowIndex === keyboardNav.focusedRowIndex && slot === focusedColIndex,
|
|
875
|
+
);
|
|
876
|
+
};
|
|
809
877
|
|
|
810
878
|
return (
|
|
811
879
|
<>
|
|
812
880
|
{enableRowSelection && (
|
|
813
881
|
<Table.Cell
|
|
814
882
|
{...cellRenderProps}
|
|
883
|
+
{...cellNavProps()}
|
|
815
884
|
cellWidth={SELECTION_COL_WIDTH}
|
|
816
885
|
cellHeight={cellHeight as any}
|
|
817
886
|
cellLocation="first"
|
|
@@ -838,6 +907,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
838
907
|
{showRowNumbers && (
|
|
839
908
|
<Table.Cell
|
|
840
909
|
{...cellRenderProps}
|
|
910
|
+
{...cellNavProps()}
|
|
841
911
|
cellWidth={50}
|
|
842
912
|
cellHeight={cellHeight as any}
|
|
843
913
|
cellLocation={enableRowSelection ? "middle" : "first"}
|
|
@@ -851,6 +921,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
851
921
|
{enableRowExpansion && (
|
|
852
922
|
<Table.Cell
|
|
853
923
|
{...cellRenderProps}
|
|
924
|
+
{...cellNavProps()}
|
|
854
925
|
cellWidth={32 + row.depth * 20}
|
|
855
926
|
cellHeight={cellHeight as any}
|
|
856
927
|
cellLocation={enableRowSelection || showRowNumbers ? "middle" : "first"}
|
|
@@ -945,6 +1016,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
945
1016
|
<Table.Cell
|
|
946
1017
|
key={cell.id}
|
|
947
1018
|
{...cellRenderProps}
|
|
1019
|
+
{...cellNavProps()}
|
|
948
1020
|
{...cellFlexProps}
|
|
949
1021
|
{...getColSizeProps(cell.column)}
|
|
950
1022
|
cellHeight={cellHeight as any}
|
|
@@ -976,6 +1048,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
976
1048
|
{showDeleteRow && !readOnly && (
|
|
977
1049
|
<Table.Cell
|
|
978
1050
|
{...cellRenderProps}
|
|
1051
|
+
{...cellNavProps()}
|
|
979
1052
|
cellWidth={60}
|
|
980
1053
|
cellHeight={cellHeight as any}
|
|
981
1054
|
cellLocation="last"
|
|
@@ -1018,6 +1091,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1018
1091
|
ExpandCaretIcon,
|
|
1019
1092
|
expandedCaretRotation,
|
|
1020
1093
|
clipBodyCells,
|
|
1094
|
+
excelCellNav,
|
|
1095
|
+
keyboardNav.isNavigating,
|
|
1096
|
+
keyboardNav.focusedRowIndex,
|
|
1097
|
+
focusedColIndex,
|
|
1021
1098
|
],
|
|
1022
1099
|
);
|
|
1023
1100
|
|
|
@@ -1048,6 +1125,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1048
1125
|
activeViewId: state.activeViewId,
|
|
1049
1126
|
size: knobProps.sizeToken,
|
|
1050
1127
|
compact: isCompact,
|
|
1128
|
+
isFetching: Boolean(state.isFetching),
|
|
1051
1129
|
});
|
|
1052
1130
|
}
|
|
1053
1131
|
|
|
@@ -1066,6 +1144,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1066
1144
|
enableFiltering={enableFiltering}
|
|
1067
1145
|
size={knobProps.sizeToken}
|
|
1068
1146
|
compact={isCompact}
|
|
1147
|
+
isFetching={Boolean(state.isFetching)}
|
|
1069
1148
|
/>
|
|
1070
1149
|
);
|
|
1071
1150
|
};
|
|
@@ -1124,7 +1203,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1124
1203
|
el.removeEventListener("scroll", update);
|
|
1125
1204
|
ro?.disconnect();
|
|
1126
1205
|
};
|
|
1127
|
-
}, [
|
|
1206
|
+
}, [displayRows.length, showCards]);
|
|
1128
1207
|
|
|
1129
1208
|
// Enable drag-to-scroll in the horizontal-overflow modes (scroll layout
|
|
1130
1209
|
// and column pinning share the content-View scrollport).
|
|
@@ -1141,8 +1220,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1141
1220
|
|
|
1142
1221
|
// W9 / DG-ST-01,02,04 / DG-TBL-06 — first-class async states.
|
|
1143
1222
|
// Error wins over empty chrome; initial load uses a table-shaped skeleton.
|
|
1144
|
-
//
|
|
1223
|
+
// A refetch (isFetching / placeholderData) MUST keep the body mounted —
|
|
1224
|
+
// skeleton only when there are no rows to hold (first load).
|
|
1145
1225
|
const resolvedAriaLabel = ariaLabel || t("Data table");
|
|
1226
|
+
const isRefetching = queryInFlight;
|
|
1146
1227
|
if (state.error) {
|
|
1147
1228
|
return (
|
|
1148
1229
|
<AsyncBoundary
|
|
@@ -1155,7 +1236,12 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1155
1236
|
/>
|
|
1156
1237
|
);
|
|
1157
1238
|
}
|
|
1158
|
-
if (
|
|
1239
|
+
if (
|
|
1240
|
+
(state.isLoading || infinite?.isInitialLoading) &&
|
|
1241
|
+
displayRows.length === 0 &&
|
|
1242
|
+
!state.isFetching &&
|
|
1243
|
+
!state.isPlaceholderData
|
|
1244
|
+
) {
|
|
1159
1245
|
return <AsyncBoundary loading layout="table" aria-label={resolvedAriaLabel} />;
|
|
1160
1246
|
}
|
|
1161
1247
|
|
|
@@ -1180,6 +1266,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1180
1266
|
aria-describedby={ariaDescribedBy}
|
|
1181
1267
|
aria-live="polite"
|
|
1182
1268
|
aria-atomic="false"
|
|
1269
|
+
aria-busy={isRefetching || undefined}
|
|
1183
1270
|
// UX-011 / Axiom 6 HONEST STATE: the advertised `disabled` prop
|
|
1184
1271
|
// makes the whole assembly inert and says so. `inert` (React 19)
|
|
1185
1272
|
// blocks pointer, keyboard, and AT for every control inside —
|
|
@@ -1231,7 +1318,19 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1231
1318
|
{children}
|
|
1232
1319
|
|
|
1233
1320
|
{/* Card List View (layout="cards" or auto below $sm) */}
|
|
1234
|
-
{
|
|
1321
|
+
{showList ? (
|
|
1322
|
+
<DataTableDocumentList
|
|
1323
|
+
tableRows={displayRows}
|
|
1324
|
+
enableRowSelection={enableRowSelection}
|
|
1325
|
+
disabled={disabled}
|
|
1326
|
+
hasActiveFilters={computed.hasActiveFilters}
|
|
1327
|
+
renderCellContent={renderCellContent}
|
|
1328
|
+
compact={isCompact}
|
|
1329
|
+
selectRowLabel={deriveSelectRowLabel}
|
|
1330
|
+
queryInFlight={queryInFlight}
|
|
1331
|
+
{...(rowPressActive ? { getRowPressProps } : {})}
|
|
1332
|
+
/>
|
|
1333
|
+
) : showCards ? (
|
|
1235
1334
|
<>
|
|
1236
1335
|
{/* Header affordances (sort / per-column filter) live in the
|
|
1237
1336
|
grid headers; the card list restores them here. */}
|
|
@@ -1244,7 +1343,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1244
1343
|
disabled={disabled}
|
|
1245
1344
|
/>
|
|
1246
1345
|
<DataTableMobileCards
|
|
1247
|
-
tableRows={
|
|
1346
|
+
tableRows={displayRows}
|
|
1248
1347
|
enableRowSelection={enableRowSelection}
|
|
1249
1348
|
showRowNumbers={showRowNumbers}
|
|
1250
1349
|
showDeleteRow={showDeleteRow}
|
|
@@ -1260,6 +1359,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1260
1359
|
onToggleSelectAll={toggleSelectAll}
|
|
1261
1360
|
compact={isCompact}
|
|
1262
1361
|
selectRowLabel={deriveSelectRowLabel}
|
|
1362
|
+
queryInFlight={queryInFlight}
|
|
1263
1363
|
{...(rowPressActive ? { getRowPressProps } : {})}
|
|
1264
1364
|
/>
|
|
1265
1365
|
</>
|
|
@@ -1295,9 +1395,8 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1295
1395
|
label: resolvedAriaLabel,
|
|
1296
1396
|
})}
|
|
1297
1397
|
tabIndex={enableKeyboardNavigation && !isSSR ? 0 : undefined}
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
}
|
|
1398
|
+
{...({ "data-table-grid": "true" } as any)}
|
|
1399
|
+
onKeyDown={enableKeyboardNavigation && !isSSR ? handleGridKeyDown : undefined}
|
|
1301
1400
|
onPress={
|
|
1302
1401
|
enableKeyboardNavigation && !isSSR ? keyboardNav.handleContainerClick : undefined
|
|
1303
1402
|
}
|
|
@@ -1678,18 +1777,20 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1678
1777
|
tableBodyRef.current = node ?? null;
|
|
1679
1778
|
}}
|
|
1680
1779
|
>
|
|
1681
|
-
{
|
|
1780
|
+
{displayRows.length === 0 ? (
|
|
1682
1781
|
<Table.Row>
|
|
1683
1782
|
<Table.Cell>
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1783
|
+
{isRefetching ? null : (
|
|
1784
|
+
<EmptyState
|
|
1785
|
+
compact
|
|
1786
|
+
aria-live="polite"
|
|
1787
|
+
title={
|
|
1788
|
+
computed.hasActiveFilters
|
|
1789
|
+
? t("No results found")
|
|
1790
|
+
: t("No data available")
|
|
1791
|
+
}
|
|
1792
|
+
/>
|
|
1793
|
+
)}
|
|
1693
1794
|
</Table.Cell>
|
|
1694
1795
|
</Table.Row>
|
|
1695
1796
|
) : isVirtualized ? (
|
|
@@ -1724,7 +1825,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1724
1825
|
totalSize={totalSize}
|
|
1725
1826
|
bodyScrollRef={bodyScrollRef}
|
|
1726
1827
|
virtualizationHeight={virtualizationHeight}
|
|
1727
|
-
tableRows={
|
|
1828
|
+
tableRows={displayRows}
|
|
1728
1829
|
headerGroups={headerGroups}
|
|
1729
1830
|
showRowNumbers={showRowNumbers}
|
|
1730
1831
|
enableRowExpansion={enableRowExpansion}
|
|
@@ -1744,9 +1845,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1744
1845
|
</Table.Row>
|
|
1745
1846
|
) : (
|
|
1746
1847
|
<>
|
|
1747
|
-
{
|
|
1848
|
+
{displayRows.map((row: any, index: number) => {
|
|
1748
1849
|
rowCounter.current++;
|
|
1749
|
-
const isLastRow = index ===
|
|
1850
|
+
const isLastRow = index === displayRows.length - 1;
|
|
1750
1851
|
|
|
1751
1852
|
// Grouped row: render a single header cell spanning all columns
|
|
1752
1853
|
// with expand toggle, group label, and item count.
|
|
@@ -1800,17 +1901,13 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1800
1901
|
|
|
1801
1902
|
const mainRow = (
|
|
1802
1903
|
<Table.Row
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
? "$color2"
|
|
1810
|
-
: "$color1"
|
|
1811
|
-
}
|
|
1904
|
+
{...(tableRowStateProps({
|
|
1905
|
+
selected: Boolean(enableRowSelection && row.getIsSelected?.()),
|
|
1906
|
+
keyboardFocused: false,
|
|
1907
|
+
zebraOn: tableZebraOn,
|
|
1908
|
+
index,
|
|
1909
|
+
}) as any)}
|
|
1812
1910
|
{...({ animation: "quick" } as any)}
|
|
1813
|
-
hoverStyle={{ backgroundColor: "$color3" }}
|
|
1814
1911
|
flexShrink={0}
|
|
1815
1912
|
rowLocation={
|
|
1816
1913
|
rowCounter.current === 0
|
|
@@ -2125,26 +2222,6 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
2125
2222
|
</Text>
|
|
2126
2223
|
</View>
|
|
2127
2224
|
)}
|
|
2128
|
-
|
|
2129
|
-
{/* Loading State */}
|
|
2130
|
-
{state.isLoading && (
|
|
2131
|
-
<View
|
|
2132
|
-
position="absolute"
|
|
2133
|
-
top={0}
|
|
2134
|
-
left={0}
|
|
2135
|
-
right={0}
|
|
2136
|
-
bottom={0}
|
|
2137
|
-
alignItems="center"
|
|
2138
|
-
justifyContent="center"
|
|
2139
|
-
zIndex={zIndex.loading}
|
|
2140
|
-
aria-busy={true}
|
|
2141
|
-
aria-live="assertive"
|
|
2142
|
-
aria-label={t("Loading table data")}
|
|
2143
|
-
role="status"
|
|
2144
|
-
>
|
|
2145
|
-
<Spinner size="large" color="$color10" />
|
|
2146
|
-
</View>
|
|
2147
|
-
)}
|
|
2148
2225
|
</View>
|
|
2149
2226
|
</DataTableStateContext.Provider>
|
|
2150
2227
|
</DataTableContext.Provider>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* column border extension.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import
|
|
10
|
+
import { tableRowStateProps } from "./rowStateChrome";
|
|
11
11
|
import { Skeleton } from "@multiplatform.one/components";
|
|
12
12
|
import { Text, View } from "tamagui";
|
|
13
13
|
|
|
@@ -61,7 +61,7 @@ export function DataTableVirtualized({
|
|
|
61
61
|
enableRowExpansion,
|
|
62
62
|
showDeleteRow,
|
|
63
63
|
readOnly,
|
|
64
|
-
enableKeyboardNavigation,
|
|
64
|
+
enableKeyboardNavigation: _enableKeyboardNavigation,
|
|
65
65
|
keyboardNav,
|
|
66
66
|
getColSizeProps,
|
|
67
67
|
renderRowContent,
|
|
@@ -184,15 +184,12 @@ export function DataTableVirtualized({
|
|
|
184
184
|
minHeight: rowHeightPx,
|
|
185
185
|
}}
|
|
186
186
|
flexDirection="row"
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
? "$color1"
|
|
194
|
-
: "$color2"
|
|
195
|
-
}
|
|
187
|
+
{...(tableRowStateProps({
|
|
188
|
+
selected: Boolean(row.getIsSelected?.()),
|
|
189
|
+
keyboardFocused: false,
|
|
190
|
+
zebraOn: true,
|
|
191
|
+
index: virtualRow.index,
|
|
192
|
+
}) as any)}
|
|
196
193
|
role="row"
|
|
197
194
|
aria-rowindex={virtualRow.index + 1}
|
|
198
195
|
{...(getRowPressProps ? (getRowPressProps(row, virtualRow.index) as any) : {})}
|
|
@@ -72,6 +72,58 @@ describe("DataTable card layout", () => {
|
|
|
72
72
|
expect(container.querySelector('[data-testid="data-table-cards"]')).not.toBeNull();
|
|
73
73
|
expect(container.querySelector(".is_Table")).toBeNull();
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
it("layout=list renders document rows, not the grid or cards", () => {
|
|
77
|
+
const { container } = renderWithProviders(
|
|
78
|
+
<DataTable data={sampleData} columns={columns} layout="list" onStateChange={vi.fn()} />,
|
|
79
|
+
);
|
|
80
|
+
expect(container.querySelector('[data-testid="data-table-list"]')).not.toBeNull();
|
|
81
|
+
expect(container.querySelectorAll('[data-testid="data-table-list-row"]').length).toBe(
|
|
82
|
+
sampleData.length,
|
|
83
|
+
);
|
|
84
|
+
expect(container.querySelector('[data-testid="data-table-cards"]')).toBeNull();
|
|
85
|
+
expect(container.querySelector(".is_Table")).toBeNull();
|
|
86
|
+
expect(container.querySelector('[aria-label="Table headers"]')).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("list title slot uses the title-role column, not a leading _liked_by glyph", () => {
|
|
90
|
+
const listColumns: DataTableColumn<Person>[] = [
|
|
91
|
+
{ id: "_liked_by", accessorKey: "id", header: "♥", meta: { label: "Liked" } },
|
|
92
|
+
{ accessorKey: "firstName", header: "First Name", meta: { role: "title" } },
|
|
93
|
+
{ accessorKey: "lastName", header: "Last Name" },
|
|
94
|
+
{ accessorKey: "email", header: "Email" },
|
|
95
|
+
];
|
|
96
|
+
const { container } = renderWithProviders(
|
|
97
|
+
<DataTable data={sampleData} columns={listColumns} layout="list" onStateChange={vi.fn()} />,
|
|
98
|
+
);
|
|
99
|
+
const titleSlots = container.querySelectorAll('[data-list-slot="title"]');
|
|
100
|
+
expect(titleSlots.length).toBe(sampleData.length);
|
|
101
|
+
expect(titleSlots[0]?.textContent).toBe("John");
|
|
102
|
+
const metaSlots = container.querySelectorAll('[data-list-slot="meta"]');
|
|
103
|
+
expect(Array.from(metaSlots).some((slot) => slot.textContent === "Doe")).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("list rows are a nowrap flex list, not a column grid or labeled cards", () => {
|
|
107
|
+
const listColumns: DataTableColumn<Person>[] = [
|
|
108
|
+
{ accessorKey: "firstName", header: "Name", meta: { role: "title" } },
|
|
109
|
+
{ accessorKey: "lastName", header: "Last Name" },
|
|
110
|
+
{ accessorKey: "email", header: "Email" },
|
|
111
|
+
{ accessorKey: "age", header: "Age", meta: { role: "indicator" } },
|
|
112
|
+
];
|
|
113
|
+
const { container, queryByText } = renderWithProviders(
|
|
114
|
+
<DataTable data={sampleData} columns={listColumns} layout="list" onStateChange={vi.fn()} />,
|
|
115
|
+
);
|
|
116
|
+
const list = container.querySelector('[data-testid="data-table-list"]') as HTMLElement;
|
|
117
|
+
const row = container.querySelector('[data-testid="data-table-list-row"]') as HTMLElement;
|
|
118
|
+
expect(list.getAttribute("data-list-layout")).toBe("list");
|
|
119
|
+
expect(row.getAttribute("data-list-wrap")).toBe("nowrap");
|
|
120
|
+
expect(getComputedStyle(list).display).not.toBe("grid");
|
|
121
|
+
expect(getComputedStyle(row).flexWrap).toBe("nowrap");
|
|
122
|
+
expect(container.querySelector('[data-list-slot="indicator"]')?.textContent).toBe("28");
|
|
123
|
+
// A list is not a form: column headers do not reprint as labels.
|
|
124
|
+
expect(queryByText("Last Name")).toBeNull();
|
|
125
|
+
expect(queryByText("Email")).toBeNull();
|
|
126
|
+
});
|
|
75
127
|
});
|
|
76
128
|
|
|
77
129
|
describe("card anatomy", () => {
|
|
@@ -96,6 +148,43 @@ describe("DataTable card layout", () => {
|
|
|
96
148
|
expect(firstCard.textContent).toContain("28");
|
|
97
149
|
});
|
|
98
150
|
|
|
151
|
+
it("labels field rows from meta.label when the header is a render function", () => {
|
|
152
|
+
const glyphColumns: DataTableColumn<Person>[] = [
|
|
153
|
+
{ id: "firstName", accessorKey: "firstName", header: "First Name" },
|
|
154
|
+
{
|
|
155
|
+
id: "_liked_by",
|
|
156
|
+
accessorKey: "lastName",
|
|
157
|
+
header: () => <span aria-label="Liked">♥</span>,
|
|
158
|
+
meta: { label: "Liked" },
|
|
159
|
+
},
|
|
160
|
+
];
|
|
161
|
+
const { container } = renderWithProviders(
|
|
162
|
+
<DataTable data={sampleData} columns={glyphColumns} onStateChange={vi.fn()} />,
|
|
163
|
+
);
|
|
164
|
+
const [firstCard] = getCards(container);
|
|
165
|
+
expect(within(firstCard).getByText("Liked")).toBeDefined();
|
|
166
|
+
expect(firstCard.textContent).not.toContain("_liked_by");
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it("meta.label wins over a string header; a bare function header falls back to the id", () => {
|
|
170
|
+
const mixedColumns: DataTableColumn<Person>[] = [
|
|
171
|
+
{ id: "firstName", accessorKey: "firstName", header: "First Name" },
|
|
172
|
+
// Explicit channel beats the display string — a glyph header ("♥")
|
|
173
|
+
// is exactly what meta.label exists to replace in card labels.
|
|
174
|
+
{ id: "age", accessorKey: "age", header: "♥", meta: { label: "Age (years)" } },
|
|
175
|
+
// No meta.label + non-string header: the raw id still prints — the
|
|
176
|
+
// fallback stays honest instead of inventing a label.
|
|
177
|
+
{ id: "email_addr", accessorKey: "email", header: () => <span>Email</span> },
|
|
178
|
+
];
|
|
179
|
+
const { container } = renderWithProviders(
|
|
180
|
+
<DataTable data={sampleData} columns={mixedColumns} onStateChange={vi.fn()} />,
|
|
181
|
+
);
|
|
182
|
+
const [firstCard] = getCards(container);
|
|
183
|
+
expect(within(firstCard).getByText("Age (years)")).toBeDefined();
|
|
184
|
+
expect(within(firstCard).queryByText("♥")).toBeNull();
|
|
185
|
+
expect(within(firstCard).getByText("email_addr")).toBeDefined();
|
|
186
|
+
});
|
|
187
|
+
|
|
99
188
|
it("respects column visibility (hidden columns stay hidden in cards)", () => {
|
|
100
189
|
const { container } = renderWithProviders(
|
|
101
190
|
<DataTable
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document-list slot taxonomy (Polaris Index / Frappe list, not a grid).
|
|
3
|
+
*
|
|
4
|
+
* A list row is subject-led: title + stacked muted meta, then a trailing
|
|
5
|
+
* indicator cluster and actions. Remaining columns never lay out as equal
|
|
6
|
+
* grid tracks — that is the table layout.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { DataTableColumn, DataTableField } from "../../types";
|
|
10
|
+
|
|
11
|
+
export type DocumentListSlot = "title" | "indicator" | "meta" | "actions" | "skip";
|
|
12
|
+
|
|
13
|
+
const INDICATOR_FIELDS = new Set<DataTableField>([
|
|
14
|
+
"select",
|
|
15
|
+
"combobox",
|
|
16
|
+
"togglegroup",
|
|
17
|
+
"radiogroup",
|
|
18
|
+
]);
|
|
19
|
+
|
|
20
|
+
const INDICATOR_IDS = new Set(["status", "priority", "workflow_state", "state"]);
|
|
21
|
+
|
|
22
|
+
export function classifyDocumentListSlot(cell: {
|
|
23
|
+
column: { id: string; columnDef: unknown };
|
|
24
|
+
}): DocumentListSlot {
|
|
25
|
+
const id = String(cell.column.id ?? "");
|
|
26
|
+
const def = cell.column.columnDef as DataTableColumn;
|
|
27
|
+
const role = def.meta?.role;
|
|
28
|
+
if (role === "title") return "title";
|
|
29
|
+
if (role === "indicator") return "indicator";
|
|
30
|
+
if (role === "actions") return "actions";
|
|
31
|
+
if (role === "hidden" || role === "skip") return "skip";
|
|
32
|
+
if (id.startsWith("_")) return "actions";
|
|
33
|
+
if (INDICATOR_IDS.has(id) || (def.field != null && INDICATOR_FIELDS.has(def.field))) {
|
|
34
|
+
return "indicator";
|
|
35
|
+
}
|
|
36
|
+
return "meta";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function partitionDocumentListCells<
|
|
40
|
+
TCell extends { id: string; column: { id: string; columnDef: unknown } },
|
|
41
|
+
>(
|
|
42
|
+
visibleCells: TCell[],
|
|
43
|
+
titleCell: TCell | undefined,
|
|
44
|
+
): { indicators: TCell[]; metas: TCell[]; actions: TCell[] } {
|
|
45
|
+
const rest = visibleCells.filter((cell) => cell.id !== titleCell?.id);
|
|
46
|
+
const indicators: TCell[] = [];
|
|
47
|
+
const metas: TCell[] = [];
|
|
48
|
+
const actions: TCell[] = [];
|
|
49
|
+
for (const cell of rest) {
|
|
50
|
+
const slot = classifyDocumentListSlot(cell);
|
|
51
|
+
if (slot === "indicator") indicators.push(cell);
|
|
52
|
+
else if (slot === "actions") actions.push(cell);
|
|
53
|
+
else if (slot === "skip" || slot === "title") continue;
|
|
54
|
+
else metas.push(cell);
|
|
55
|
+
}
|
|
56
|
+
return { indicators, metas, actions };
|
|
57
|
+
}
|