@osdk/react-components 0.2.0-beta.1 → 0.2.0-beta.3
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/CHANGELOG.md +35 -0
- package/README.md +21 -5
- package/build/browser/base-components/action-button/ActionButton.js +31 -0
- package/build/browser/base-components/action-button/ActionButton.js.map +1 -0
- package/build/browser/base-components/action-button/ActionButton.module.css +70 -0
- package/build/browser/base-components/action-button/ActionButton.module.css.js +8 -0
- package/build/browser/base-components/checkbox/Checkbox.js +27 -32
- package/build/browser/base-components/checkbox/Checkbox.module.css +79 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css.js +7 -0
- package/build/browser/base-components/combobox/Combobox.js +124 -0
- package/build/browser/base-components/combobox/Combobox.js.map +1 -0
- package/build/browser/base-components/combobox/Combobox.module.css +177 -0
- package/build/browser/base-components/combobox/Combobox.module.css.js +16 -0
- package/build/browser/base-components/dialog/Dialog.js +52 -0
- package/build/browser/base-components/dialog/Dialog.js.map +1 -0
- package/build/browser/base-components/dialog/Dialog.module.css +101 -0
- package/build/browser/base-components/dialog/Dialog.module.css.js +13 -0
- package/build/browser/base-components/draggable-list/DraggableList.js +155 -0
- package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -0
- package/build/browser/base-components/draggable-list/DraggableList.module.css +108 -0
- package/build/browser/base-components/draggable-list/DraggableList.module.css.js +11 -0
- package/build/browser/base-components/search-bar/SearchBar.js +44 -0
- package/build/browser/base-components/search-bar/SearchBar.js.map +1 -0
- package/build/browser/base-components/search-bar/SearchBar.module.css +53 -0
- package/build/browser/base-components/search-bar/SearchBar.module.css.js +8 -0
- package/build/browser/base-components/select/Select.js +89 -0
- package/build/browser/base-components/select/Select.js.map +1 -0
- package/build/browser/base-components/select/Select.module.css +138 -0
- package/build/browser/base-components/select/Select.module.css.js +11 -0
- package/build/browser/base-components/switch/Switch.js +33 -0
- package/build/browser/base-components/switch/Switch.js.map +1 -0
- package/build/browser/base-components/switch/Switch.module.css +91 -0
- package/build/browser/base-components/switch/Switch.module.css.js +7 -0
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +296 -0
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/getFilterKey.test.js +53 -0
- package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/testUtils.js +192 -0
- package/build/browser/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
- package/build/browser/filter-list/hooks/useDebouncedValue.js +52 -0
- package/build/browser/filter-list/hooks/useDebouncedValue.js.map +1 -0
- package/build/browser/filter-list/hooks/useFilterListState.js +119 -0
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +92 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -0
- package/build/browser/filter-list/types/AddFilterMenuTypes.js +2 -0
- package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +1 -0
- package/build/browser/filter-list/types/CustomRendererTypes.js +2 -0
- package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -0
- package/build/browser/filter-list/types/KeywordSearchTypes.js +2 -0
- package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -0
- package/build/browser/filter-list/types/LinkedFilterTypes.js +2 -0
- package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -0
- package/build/browser/filter-list/types/index.js +21 -0
- package/build/browser/filter-list/types/index.js.map +1 -0
- package/build/browser/filter-list/utils/assertUnreachable.js +25 -0
- package/build/browser/filter-list/utils/assertUnreachable.js.map +1 -0
- package/build/browser/filter-list/utils/coerceFilterValue.js +33 -0
- package/build/browser/filter-list/utils/coerceFilterValue.js.map +1 -0
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +337 -0
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -0
- package/build/browser/filter-list/utils/filterValues.js +55 -0
- package/build/browser/filter-list/utils/filterValues.js.map +1 -0
- package/build/browser/filter-list/utils/getFilterKey.js +34 -0
- package/build/browser/filter-list/utils/getFilterKey.js.map +1 -0
- package/build/browser/object-table/CellContextMenu.js +23 -20
- package/build/browser/object-table/CellContextMenu.module.css +20 -0
- package/build/browser/object-table/CellContextMenu.module.css.js +6 -0
- package/build/browser/object-table/ColumnConfigDialog.js +259 -0
- package/build/browser/object-table/ColumnConfigDialog.js.map +1 -0
- package/build/browser/object-table/ColumnConfigDialog.module.css +247 -0
- package/build/browser/object-table/ColumnConfigDialog.module.css.js +29 -0
- package/build/browser/object-table/LoadingCell.js +24 -29
- package/build/browser/object-table/LoadingCell.module.css +48 -0
- package/build/browser/object-table/LoadingCell.module.css.js +8 -0
- package/build/browser/object-table/LoadingRow.js +24 -50
- package/build/browser/object-table/LoadingStateTable.js +49 -343
- package/build/browser/object-table/LoadingStateTable.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.js +178 -0
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -0
- package/build/browser/object-table/MultiColumnSortDialog.module.css +195 -0
- package/build/browser/object-table/MultiColumnSortDialog.module.css.js +22 -0
- package/build/browser/object-table/NonIdealState.js +23 -20
- package/build/browser/object-table/NonIdealState.module.css +27 -0
- package/build/browser/object-table/NonIdealState.module.css.js +7 -0
- package/build/browser/object-table/ObjectTable.js +43 -13
- package/build/browser/object-table/ObjectTable.js.map +1 -1
- package/build/browser/object-table/ObjectTableApi.js.map +1 -1
- package/build/browser/object-table/SortableItemsList.js +35 -0
- package/build/browser/object-table/SortableItemsList.js.map +1 -0
- package/build/browser/object-table/Table.js +54 -934
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +29 -0
- package/build/browser/object-table/Table.module.css.js +6 -0
- package/build/browser/object-table/TableBody.js +36 -260
- package/build/browser/object-table/TableBody.module.css +20 -0
- package/build/browser/object-table/TableBody.module.css.js +6 -0
- package/build/browser/object-table/TableCell.js +31 -111
- package/build/browser/object-table/TableCell.module.css +73 -0
- package/build/browser/object-table/TableCell.module.css.js +8 -0
- package/build/browser/object-table/TableHeader.js +126 -216
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +106 -0
- package/build/browser/object-table/TableHeader.module.css.js +10 -0
- package/build/browser/object-table/TableHeaderContent.js +21 -18
- package/build/browser/object-table/TableHeaderContent.module.css +30 -0
- package/build/browser/object-table/TableHeaderContent.module.css.js +6 -0
- package/build/browser/object-table/TableHeaderWithPopover.js +110 -93
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/browser/object-table/TableHeaderWithPopover.module.css +141 -0
- package/build/browser/object-table/TableHeaderWithPopover.module.css.js +17 -0
- package/build/browser/object-table/TableRow.js +26 -144
- package/build/browser/object-table/TableRow.module.css +60 -0
- package/build/browser/object-table/TableRow.module.css.js +6 -0
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +3 -0
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnDefs.js +7 -2
- package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnResize.js +45 -0
- package/build/browser/object-table/hooks/useColumnResize.js.map +1 -0
- package/build/browser/object-table/hooks/useColumnVisibility.js +52 -20
- package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/browser/object-table/hooks/useRowSelection.js +8 -7
- package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/browser/object-table/hooks/useSelectionColumn.js +15 -6
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/browser/object-table/utils/types.js +2 -0
- package/build/browser/object-table/utils/types.js.map +1 -0
- package/build/browser/public/experimental.js +1 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/styles.css +1875 -0
- package/build/cjs/public/experimental.cjs +1036 -197
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +659 -29
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +435 -44
- package/build/esm/base-components/action-button/ActionButton.js +31 -0
- package/build/esm/base-components/action-button/ActionButton.js.map +1 -0
- package/build/esm/base-components/action-button/ActionButton.module.css +70 -0
- package/build/esm/base-components/checkbox/Checkbox.module.css +1 -1
- package/build/esm/base-components/combobox/Combobox.js +124 -0
- package/build/esm/base-components/combobox/Combobox.js.map +1 -0
- package/build/esm/base-components/combobox/Combobox.module.css +177 -0
- package/build/esm/base-components/dialog/Dialog.js +52 -0
- package/build/esm/base-components/dialog/Dialog.js.map +1 -0
- package/build/esm/base-components/dialog/Dialog.module.css +101 -0
- package/build/esm/base-components/draggable-list/DraggableList.js +155 -0
- package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -0
- package/build/esm/base-components/draggable-list/DraggableList.module.css +108 -0
- package/build/esm/base-components/search-bar/SearchBar.js +44 -0
- package/build/esm/base-components/search-bar/SearchBar.js.map +1 -0
- package/build/esm/base-components/search-bar/SearchBar.module.css +53 -0
- package/build/esm/base-components/select/Select.js +89 -0
- package/build/esm/base-components/select/Select.js.map +1 -0
- package/build/esm/base-components/select/Select.module.css +138 -0
- package/build/esm/base-components/switch/Switch.js +33 -0
- package/build/esm/base-components/switch/Switch.js.map +1 -0
- package/build/esm/base-components/switch/Switch.module.css +91 -0
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js +296 -0
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/getFilterKey.test.js +53 -0
- package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/testUtils.js +192 -0
- package/build/esm/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
- package/build/esm/filter-list/hooks/useDebouncedValue.js +52 -0
- package/build/esm/filter-list/hooks/useDebouncedValue.js.map +1 -0
- package/build/esm/filter-list/hooks/useFilterListState.js +119 -0
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +92 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -0
- package/build/esm/filter-list/types/AddFilterMenuTypes.js +2 -0
- package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +1 -0
- package/build/esm/filter-list/types/CustomRendererTypes.js +2 -0
- package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -0
- package/build/esm/filter-list/types/KeywordSearchTypes.js +2 -0
- package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -0
- package/build/esm/filter-list/types/LinkedFilterTypes.js +2 -0
- package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -0
- package/build/esm/filter-list/types/index.js +21 -0
- package/build/esm/filter-list/types/index.js.map +1 -0
- package/build/esm/filter-list/utils/assertUnreachable.js +25 -0
- package/build/esm/filter-list/utils/assertUnreachable.js.map +1 -0
- package/build/esm/filter-list/utils/coerceFilterValue.js +33 -0
- package/build/esm/filter-list/utils/coerceFilterValue.js.map +1 -0
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +337 -0
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -0
- package/build/esm/filter-list/utils/filterValues.js +55 -0
- package/build/esm/filter-list/utils/filterValues.js.map +1 -0
- package/build/esm/filter-list/utils/getFilterKey.js +34 -0
- package/build/esm/filter-list/utils/getFilterKey.js.map +1 -0
- package/build/esm/object-table/ColumnConfigDialog.js +259 -0
- package/build/esm/object-table/ColumnConfigDialog.js.map +1 -0
- package/build/esm/object-table/ColumnConfigDialog.module.css +247 -0
- package/build/esm/object-table/LoadingStateTable.js +4 -4
- package/build/esm/object-table/LoadingStateTable.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.js +178 -0
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -0
- package/build/esm/object-table/MultiColumnSortDialog.module.css +195 -0
- package/build/esm/object-table/NonIdealState.module.css +2 -3
- package/build/esm/object-table/ObjectTable.js +43 -13
- package/build/esm/object-table/ObjectTable.js.map +1 -1
- package/build/esm/object-table/ObjectTableApi.js.map +1 -1
- package/build/esm/object-table/SortableItemsList.js +35 -0
- package/build/esm/object-table/SortableItemsList.js.map +1 -0
- package/build/esm/object-table/Table.js +9 -7
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +9 -2
- package/build/esm/object-table/TableCell.module.css +11 -0
- package/build/esm/object-table/TableHeader.js +93 -6
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +7 -2
- package/build/esm/object-table/TableHeaderWithPopover.js +53 -22
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/esm/object-table/TableHeaderWithPopover.module.css +54 -23
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +3 -0
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnDefs.js +7 -2
- package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnResize.js +45 -0
- package/build/esm/object-table/hooks/useColumnResize.js.map +1 -0
- package/build/esm/object-table/hooks/useColumnVisibility.js +52 -20
- package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/esm/object-table/hooks/useRowSelection.js +8 -7
- package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/esm/object-table/hooks/useSelectionColumn.js +15 -6
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/esm/object-table/utils/types.js +2 -0
- package/build/esm/object-table/utils/types.js.map +1 -0
- package/build/esm/public/experimental.js +1 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/base-components/action-button/ActionButton.d.ts +5 -0
- package/build/types/base-components/action-button/ActionButton.d.ts.map +1 -0
- package/build/types/base-components/combobox/Combobox.d.ts +52 -0
- package/build/types/base-components/combobox/Combobox.d.ts.map +1 -0
- package/build/types/base-components/dialog/Dialog.d.ts +10 -0
- package/build/types/base-components/dialog/Dialog.d.ts.map +1 -0
- package/build/types/base-components/draggable-list/DraggableList.d.ts +17 -0
- package/build/types/base-components/draggable-list/DraggableList.d.ts.map +1 -0
- package/build/types/base-components/search-bar/SearchBar.d.ts +11 -0
- package/build/types/base-components/search-bar/SearchBar.d.ts.map +1 -0
- package/build/types/base-components/select/Select.d.ts +34 -0
- package/build/types/base-components/select/Select.d.ts.map +1 -0
- package/build/types/base-components/switch/Switch.d.ts +10 -0
- package/build/types/base-components/switch/Switch.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +63 -12
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +101 -53
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/testUtils.d.ts +59 -0
- package/build/types/filter-list/__tests__/testUtils.d.ts.map +1 -0
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +1 -0
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +1 -0
- package/build/types/filter-list/hooks/useDebouncedValue.d.ts +11 -0
- package/build/types/filter-list/hooks/useDebouncedValue.d.ts.map +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts +11 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +20 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -0
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +61 -0
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/CustomRendererTypes.d.ts +76 -0
- package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts +56 -0
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts +70 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/index.d.ts +4 -0
- package/build/types/filter-list/types/index.d.ts.map +1 -0
- package/build/types/filter-list/utils/assertUnreachable.d.ts +6 -0
- package/build/types/filter-list/utils/assertUnreachable.d.ts.map +1 -0
- package/build/types/filter-list/utils/coerceFilterValue.d.ts +11 -0
- package/build/types/filter-list/utils/coerceFilterValue.d.ts.map +1 -0
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +16 -0
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -0
- package/build/types/filter-list/utils/filterValues.d.ts +5 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -0
- package/build/types/filter-list/utils/getFilterKey.d.ts +3 -0
- package/build/types/filter-list/utils/getFilterKey.d.ts.map +1 -0
- package/build/types/object-table/ColumnConfigDialog.d.ts +18 -0
- package/build/types/object-table/ColumnConfigDialog.d.ts.map +1 -0
- package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
- package/build/types/object-table/MultiColumnSortDialog.d.ts +15 -0
- package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -0
- package/build/types/object-table/ObjectTable.d.ts +1 -1
- package/build/types/object-table/ObjectTable.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +41 -6
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/SortableItemsList.d.ts +13 -0
- package/build/types/object-table/SortableItemsList.d.ts.map +1 -0
- package/build/types/object-table/Table.d.ts +12 -1
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableHeader.d.ts +3 -1
- package/build/types/object-table/TableHeader.d.ts.map +1 -1
- package/build/types/object-table/TableHeaderWithPopover.d.ts +30 -6
- package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -1
- package/build/types/object-table/hooks/useColumnResize.d.ts +10 -0
- package/build/types/object-table/hooks/useColumnResize.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnVisibility.d.ts +18 -7
- package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -1
- package/build/types/object-table/hooks/useRowSelection.d.ts +5 -4
- package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
- package/build/types/object-table/utils/types.d.ts +5 -0
- package/build/types/object-table/utils/types.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +2 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +16 -8
|
@@ -128,6 +128,19 @@ describe("useTableSorting", () => {
|
|
|
128
128
|
desc: false
|
|
129
129
|
}]);
|
|
130
130
|
});
|
|
131
|
+
it("enables sorting when orderBy is provided with onOrderByChanged", () => {
|
|
132
|
+
const orderBy = [{
|
|
133
|
+
property: "name",
|
|
134
|
+
direction: "asc"
|
|
135
|
+
}];
|
|
136
|
+
const onOrderByChanged = vi.fn();
|
|
137
|
+
const {
|
|
138
|
+
result
|
|
139
|
+
} = renderHook(() => useTableSorting({
|
|
140
|
+
orderBy,
|
|
141
|
+
onOrderByChanged
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
131
144
|
it("when both orderBy and defaultOrderBy are provided, orderBy takes precedence", () => {
|
|
132
145
|
const orderBy = [{
|
|
133
146
|
property: "name",
|
|
@@ -207,5 +220,282 @@ describe("useTableSorting", () => {
|
|
|
207
220
|
}]);
|
|
208
221
|
});
|
|
209
222
|
});
|
|
223
|
+
describe("multisort scenarios", () => {
|
|
224
|
+
it("supports sorting by multiple columns simultaneously", () => {
|
|
225
|
+
const onOrderByChanged = vi.fn();
|
|
226
|
+
const {
|
|
227
|
+
result
|
|
228
|
+
} = renderHook(() => useTableSorting({
|
|
229
|
+
onOrderByChanged
|
|
230
|
+
}));
|
|
231
|
+
act(() => {
|
|
232
|
+
result.current.onSortingChange([{
|
|
233
|
+
id: "name",
|
|
234
|
+
desc: false
|
|
235
|
+
}, {
|
|
236
|
+
id: "age",
|
|
237
|
+
desc: true
|
|
238
|
+
}, {
|
|
239
|
+
id: "email",
|
|
240
|
+
desc: false
|
|
241
|
+
}]);
|
|
242
|
+
});
|
|
243
|
+
expect(result.current.sorting).toEqual([{
|
|
244
|
+
id: "name",
|
|
245
|
+
desc: false
|
|
246
|
+
}, {
|
|
247
|
+
id: "age",
|
|
248
|
+
desc: true
|
|
249
|
+
}, {
|
|
250
|
+
id: "email",
|
|
251
|
+
desc: false
|
|
252
|
+
}]);
|
|
253
|
+
expect(onOrderByChanged).toHaveBeenCalledWith([{
|
|
254
|
+
property: "name",
|
|
255
|
+
direction: "asc"
|
|
256
|
+
}, {
|
|
257
|
+
property: "age",
|
|
258
|
+
direction: "desc"
|
|
259
|
+
}, {
|
|
260
|
+
property: "email",
|
|
261
|
+
direction: "asc"
|
|
262
|
+
}]);
|
|
263
|
+
});
|
|
264
|
+
it("initializes with multiple columns in defaultOrderBy", () => {
|
|
265
|
+
const defaultOrderBy = [{
|
|
266
|
+
property: "name",
|
|
267
|
+
direction: "asc"
|
|
268
|
+
}, {
|
|
269
|
+
property: "age",
|
|
270
|
+
direction: "desc"
|
|
271
|
+
}, {
|
|
272
|
+
property: "email",
|
|
273
|
+
direction: "asc"
|
|
274
|
+
}];
|
|
275
|
+
const {
|
|
276
|
+
result
|
|
277
|
+
} = renderHook(() => useTableSorting({
|
|
278
|
+
defaultOrderBy
|
|
279
|
+
}));
|
|
280
|
+
expect(result.current.sorting).toEqual([{
|
|
281
|
+
id: "name",
|
|
282
|
+
desc: false
|
|
283
|
+
}, {
|
|
284
|
+
id: "age",
|
|
285
|
+
desc: true
|
|
286
|
+
}, {
|
|
287
|
+
id: "email",
|
|
288
|
+
desc: false
|
|
289
|
+
}]);
|
|
290
|
+
});
|
|
291
|
+
it("preserves order of sort columns when adding a new sort", () => {
|
|
292
|
+
const onOrderByChanged = vi.fn();
|
|
293
|
+
const {
|
|
294
|
+
result
|
|
295
|
+
} = renderHook(() => useTableSorting({
|
|
296
|
+
defaultOrderBy: [{
|
|
297
|
+
property: "name",
|
|
298
|
+
direction: "asc"
|
|
299
|
+
}],
|
|
300
|
+
onOrderByChanged
|
|
301
|
+
}));
|
|
302
|
+
|
|
303
|
+
// Add a second sort column
|
|
304
|
+
act(() => {
|
|
305
|
+
result.current.onSortingChange([{
|
|
306
|
+
id: "name",
|
|
307
|
+
desc: false
|
|
308
|
+
}, {
|
|
309
|
+
id: "age",
|
|
310
|
+
desc: true
|
|
311
|
+
}]);
|
|
312
|
+
});
|
|
313
|
+
expect(result.current.sorting).toEqual([{
|
|
314
|
+
id: "name",
|
|
315
|
+
desc: false
|
|
316
|
+
}, {
|
|
317
|
+
id: "age",
|
|
318
|
+
desc: true
|
|
319
|
+
}]);
|
|
320
|
+
expect(onOrderByChanged).toHaveBeenCalledWith([{
|
|
321
|
+
property: "name",
|
|
322
|
+
direction: "asc"
|
|
323
|
+
}, {
|
|
324
|
+
property: "age",
|
|
325
|
+
direction: "desc"
|
|
326
|
+
}]);
|
|
327
|
+
});
|
|
328
|
+
it("supports removing a column from multisort", () => {
|
|
329
|
+
const onOrderByChanged = vi.fn();
|
|
330
|
+
const {
|
|
331
|
+
result
|
|
332
|
+
} = renderHook(() => useTableSorting({
|
|
333
|
+
defaultOrderBy: [{
|
|
334
|
+
property: "name",
|
|
335
|
+
direction: "asc"
|
|
336
|
+
}, {
|
|
337
|
+
property: "age",
|
|
338
|
+
direction: "desc"
|
|
339
|
+
}, {
|
|
340
|
+
property: "email",
|
|
341
|
+
direction: "asc"
|
|
342
|
+
}],
|
|
343
|
+
onOrderByChanged
|
|
344
|
+
}));
|
|
345
|
+
|
|
346
|
+
// Remove the middle sort column
|
|
347
|
+
act(() => {
|
|
348
|
+
result.current.onSortingChange([{
|
|
349
|
+
id: "name",
|
|
350
|
+
desc: false
|
|
351
|
+
}, {
|
|
352
|
+
id: "email",
|
|
353
|
+
desc: false
|
|
354
|
+
}]);
|
|
355
|
+
});
|
|
356
|
+
expect(result.current.sorting).toEqual([{
|
|
357
|
+
id: "name",
|
|
358
|
+
desc: false
|
|
359
|
+
}, {
|
|
360
|
+
id: "email",
|
|
361
|
+
desc: false
|
|
362
|
+
}]);
|
|
363
|
+
expect(onOrderByChanged).toHaveBeenCalledWith([{
|
|
364
|
+
property: "name",
|
|
365
|
+
direction: "asc"
|
|
366
|
+
}, {
|
|
367
|
+
property: "email",
|
|
368
|
+
direction: "asc"
|
|
369
|
+
}]);
|
|
370
|
+
});
|
|
371
|
+
it("supports changing direction of one column in multisort", () => {
|
|
372
|
+
const onOrderByChanged = vi.fn();
|
|
373
|
+
const {
|
|
374
|
+
result
|
|
375
|
+
} = renderHook(() => useTableSorting({
|
|
376
|
+
defaultOrderBy: [{
|
|
377
|
+
property: "name",
|
|
378
|
+
direction: "asc"
|
|
379
|
+
}, {
|
|
380
|
+
property: "age",
|
|
381
|
+
direction: "asc"
|
|
382
|
+
}],
|
|
383
|
+
onOrderByChanged
|
|
384
|
+
}));
|
|
385
|
+
|
|
386
|
+
// Change direction of second column
|
|
387
|
+
act(() => {
|
|
388
|
+
result.current.onSortingChange([{
|
|
389
|
+
id: "name",
|
|
390
|
+
desc: false
|
|
391
|
+
}, {
|
|
392
|
+
id: "age",
|
|
393
|
+
desc: true
|
|
394
|
+
}]);
|
|
395
|
+
});
|
|
396
|
+
expect(result.current.sorting).toEqual([{
|
|
397
|
+
id: "name",
|
|
398
|
+
desc: false
|
|
399
|
+
}, {
|
|
400
|
+
id: "age",
|
|
401
|
+
desc: true
|
|
402
|
+
}]);
|
|
403
|
+
expect(onOrderByChanged).toHaveBeenCalledWith([{
|
|
404
|
+
property: "name",
|
|
405
|
+
direction: "asc"
|
|
406
|
+
}, {
|
|
407
|
+
property: "age",
|
|
408
|
+
direction: "desc"
|
|
409
|
+
}]);
|
|
410
|
+
});
|
|
411
|
+
it("supports reordering sort columns", () => {
|
|
412
|
+
const onOrderByChanged = vi.fn();
|
|
413
|
+
const {
|
|
414
|
+
result
|
|
415
|
+
} = renderHook(() => useTableSorting({
|
|
416
|
+
defaultOrderBy: [{
|
|
417
|
+
property: "name",
|
|
418
|
+
direction: "asc"
|
|
419
|
+
}, {
|
|
420
|
+
property: "age",
|
|
421
|
+
direction: "desc"
|
|
422
|
+
}],
|
|
423
|
+
onOrderByChanged
|
|
424
|
+
}));
|
|
425
|
+
|
|
426
|
+
// Reorder: age becomes primary, name becomes secondary
|
|
427
|
+
act(() => {
|
|
428
|
+
result.current.onSortingChange([{
|
|
429
|
+
id: "age",
|
|
430
|
+
desc: true
|
|
431
|
+
}, {
|
|
432
|
+
id: "name",
|
|
433
|
+
desc: false
|
|
434
|
+
}]);
|
|
435
|
+
});
|
|
436
|
+
expect(result.current.sorting).toEqual([{
|
|
437
|
+
id: "age",
|
|
438
|
+
desc: true
|
|
439
|
+
}, {
|
|
440
|
+
id: "name",
|
|
441
|
+
desc: false
|
|
442
|
+
}]);
|
|
443
|
+
expect(onOrderByChanged).toHaveBeenCalledWith([{
|
|
444
|
+
property: "age",
|
|
445
|
+
direction: "desc"
|
|
446
|
+
}, {
|
|
447
|
+
property: "name",
|
|
448
|
+
direction: "asc"
|
|
449
|
+
}]);
|
|
450
|
+
});
|
|
451
|
+
it("controlled mode with multisort reflects orderBy changes", () => {
|
|
452
|
+
const onOrderByChanged = vi.fn();
|
|
453
|
+
const {
|
|
454
|
+
result,
|
|
455
|
+
rerender
|
|
456
|
+
} = renderHook(({
|
|
457
|
+
orderBy
|
|
458
|
+
}) => useTableSorting({
|
|
459
|
+
orderBy,
|
|
460
|
+
onOrderByChanged
|
|
461
|
+
}), {
|
|
462
|
+
initialProps: {
|
|
463
|
+
orderBy: [{
|
|
464
|
+
property: "name",
|
|
465
|
+
direction: "asc"
|
|
466
|
+
}]
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
expect(result.current.sorting).toEqual([{
|
|
470
|
+
id: "name",
|
|
471
|
+
desc: false
|
|
472
|
+
}]);
|
|
473
|
+
|
|
474
|
+
// Parent adds more sort columns
|
|
475
|
+
|
|
476
|
+
rerender({
|
|
477
|
+
orderBy: [{
|
|
478
|
+
property: "name",
|
|
479
|
+
direction: "asc"
|
|
480
|
+
}, {
|
|
481
|
+
property: "age",
|
|
482
|
+
direction: "desc"
|
|
483
|
+
}, {
|
|
484
|
+
property: "email",
|
|
485
|
+
direction: "asc"
|
|
486
|
+
}]
|
|
487
|
+
});
|
|
488
|
+
expect(result.current.sorting).toEqual([{
|
|
489
|
+
id: "name",
|
|
490
|
+
desc: false
|
|
491
|
+
}, {
|
|
492
|
+
id: "age",
|
|
493
|
+
desc: true
|
|
494
|
+
}, {
|
|
495
|
+
id: "email",
|
|
496
|
+
desc: false
|
|
497
|
+
}]);
|
|
498
|
+
});
|
|
499
|
+
});
|
|
210
500
|
});
|
|
211
501
|
//# sourceMappingURL=useTableSorting.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSorting.test.js","names":["act","renderHook","describe","expect","it","vi","useTableSorting","TestObjectType","type","apiName","result","current","sorting","toEqual","defaultOrderBy","property","direction","id","desc","onSortingChange","onOrderByChanged","fn","toHaveBeenCalledWith","orderBy","rerender","initialProps"],"sources":["useTableSorting.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useTableSorting } from \"../useTableSorting.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useTableSorting\", () => {\n describe(\"uncontrolled mode\", () => {\n it(\"initializes with empty sorting state when no defaultOrderBy provided\", () => {\n const { result } = renderHook(() => useTableSorting({}));\n\n expect(result.current.sorting).toEqual([]);\n });\n\n it(\"initializes with defaultOrderBy when provided\", () => {\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n it(\"updates internal sorting state when onSortingChange is called\", () => {\n const { result } = renderHook(() => useTableSorting<TestObject>({}));\n\n expect(result.current.sorting).toEqual([]);\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged with converted format when sorting changes\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n onOrderByChanged,\n })\n );\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"handles clearing sorting\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n act(() => {\n result.current.onSortingChange([]);\n });\n\n expect(result.current.sorting).toEqual([]);\n expect(onOrderByChanged).toHaveBeenCalledWith([]);\n });\n });\n\n describe(\"controlled mode\", () => {\n it(\"uses orderBy prop for sorting state\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"when both orderBy and defaultOrderBy are provided, orderBy takes precedence\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged when sorting changes but does not update internal state\", () => {\n const onOrderByChanged = vi.fn();\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result, rerender } = renderHook(\n ({ orderBy }) =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n }),\n {\n initialProps: { orderBy },\n },\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Change sorting\n act(() => {\n result.current.onSortingChange([\n { id: \"age\", desc: true },\n ]);\n });\n\n // Callback is called\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"age\", direction: \"desc\" },\n ]);\n\n // State doesn't change (controlled)\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Parent updates prop\n const newOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n rerender({ orderBy: newOrderBy });\n\n // Now state reflects the prop\n expect(result.current.sorting).toEqual([\n { id: \"age\", desc: true },\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useTableSorting.test.js","names":["act","renderHook","describe","expect","it","vi","useTableSorting","TestObjectType","type","apiName","result","current","sorting","toEqual","defaultOrderBy","property","direction","id","desc","onSortingChange","onOrderByChanged","fn","toHaveBeenCalledWith","orderBy","rerender","initialProps"],"sources":["useTableSorting.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useTableSorting } from \"../useTableSorting.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useTableSorting\", () => {\n describe(\"uncontrolled mode\", () => {\n it(\"initializes with empty sorting state when no defaultOrderBy provided\", () => {\n const { result } = renderHook(() => useTableSorting({}));\n\n expect(result.current.sorting).toEqual([]);\n });\n\n it(\"initializes with defaultOrderBy when provided\", () => {\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n it(\"updates internal sorting state when onSortingChange is called\", () => {\n const { result } = renderHook(() => useTableSorting<TestObject>({}));\n\n expect(result.current.sorting).toEqual([]);\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged with converted format when sorting changes\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n onOrderByChanged,\n })\n );\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"handles clearing sorting\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n act(() => {\n result.current.onSortingChange([]);\n });\n\n expect(result.current.sorting).toEqual([]);\n expect(onOrderByChanged).toHaveBeenCalledWith([]);\n });\n });\n\n describe(\"controlled mode\", () => {\n it(\"uses orderBy prop for sorting state\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"enables sorting when orderBy is provided with onOrderByChanged\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n const onOrderByChanged = vi.fn();\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n })\n );\n });\n\n it(\"when both orderBy and defaultOrderBy are provided, orderBy takes precedence\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged when sorting changes but does not update internal state\", () => {\n const onOrderByChanged = vi.fn();\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result, rerender } = renderHook(\n ({ orderBy }) =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n }),\n {\n initialProps: { orderBy },\n },\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Change sorting\n act(() => {\n result.current.onSortingChange([\n { id: \"age\", desc: true },\n ]);\n });\n\n // Callback is called\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"age\", direction: \"desc\" },\n ]);\n\n // State doesn't change (controlled)\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Parent updates prop\n const newOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n rerender({ orderBy: newOrderBy });\n\n // Now state reflects the prop\n expect(result.current.sorting).toEqual([\n { id: \"age\", desc: true },\n ]);\n });\n });\n\n describe(\"multisort scenarios\", () => {\n it(\"supports sorting by multiple columns simultaneously\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n onOrderByChanged,\n })\n );\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n { property: \"email\", direction: \"asc\" },\n ]);\n });\n\n it(\"initializes with multiple columns in defaultOrderBy\", () => {\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n\n it(\"preserves order of sort columns when adding a new sort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Add a second sort column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"supports removing a column from multisort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Remove the middle sort column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"email\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"email\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"email\", direction: \"asc\" },\n ]);\n });\n\n it(\"supports changing direction of one column in multisort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Change direction of second column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"supports reordering sort columns\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Reorder: age becomes primary, name becomes secondary\n act(() => {\n result.current.onSortingChange([\n { id: \"age\", desc: true },\n { id: \"name\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"age\", desc: true },\n { id: \"name\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"age\", direction: \"desc\" },\n { property: \"name\", direction: \"asc\" },\n ]);\n });\n\n it(\"controlled mode with multisort reflects orderBy changes\", () => {\n const onOrderByChanged = vi.fn();\n const initialOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result, rerender } = renderHook(\n ({ orderBy }) =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n }),\n {\n initialProps: { orderBy: initialOrderBy },\n },\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Parent adds more sort columns\n const newOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n rerender({ orderBy: newOrderBy });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -52,14 +52,19 @@ function getColumnsFromColumnDefinitions(columnDefinitions, objectProperties) {
|
|
|
52
52
|
orderable,
|
|
53
53
|
filterable,
|
|
54
54
|
renderCell,
|
|
55
|
-
renderHeader
|
|
55
|
+
renderHeader,
|
|
56
|
+
columnName
|
|
56
57
|
} = col;
|
|
57
58
|
const propertyMetadata = locator.type === "property" ? objectProperties?.[locator.id] : undefined;
|
|
58
59
|
const colKey = locator.id;
|
|
59
60
|
const colDef = {
|
|
60
61
|
id: colKey,
|
|
61
62
|
accessorKey: colKey,
|
|
62
|
-
header: renderHeader ?? propertyMetadata?.displayName,
|
|
63
|
+
header: renderHeader ?? (columnName || propertyMetadata?.displayName),
|
|
64
|
+
meta: {
|
|
65
|
+
columnName: columnName || propertyMetadata?.displayName,
|
|
66
|
+
isVisible: col.isVisible !== false
|
|
67
|
+
},
|
|
63
68
|
size: width,
|
|
64
69
|
...(minWidth ? {
|
|
65
70
|
minSize: minWidth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnDefs.js","names":["useOsdkMetadata","useMemo","useColumnDefs","objectType","columnDefinitions","metadata","loading","error","columns","objectProperties","properties","getColumnsFromColumnDefinitions","getDefaultColumns","map","col","locator","width","minWidth","maxWidth","resizable","orderable","filterable","renderCell","renderHeader","propertyMetadata","type","id","undefined","colKey","colDef","accessorKey","header","displayName","size","minSize","maxSize","enableResizing","enableSorting","enableColumnFilter","cell","cellContext","object","row","original","getValue","Object","entries","key","property"],"sources":["useColumnDefs.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectMetadata,\n ObjectOrInterfaceDefinition,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { useOsdkMetadata } from \"@osdk/react\";\nimport type { AccessorColumnDef } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition } from \"../ObjectTableApi.js\";\n\ninterface UseColumnDefsResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> {\n columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[];\n\n loading: boolean;\n\n error: string | undefined;\n}\n\n/**\n * Hook which builds column definitions for tanstack-table given the objectSet\n */\nexport function useColumnDefs<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): UseColumnDefsResult<Q, RDPs> {\n const { metadata, loading, error } = useOsdkMetadata(objectType);\n\n const columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[] = useMemo(() => {\n const objectProperties = metadata?.properties;\n // If columnDefinitions is provided, construct colDefs with it\n if (columnDefinitions) {\n return getColumnsFromColumnDefinitions<Q, RDPs, FunctionColumns>(\n columnDefinitions,\n objectProperties,\n );\n }\n\n // If not, return the default columns from the object properties\n return getDefaultColumns<Q, RDPs>(objectProperties);\n }, [columnDefinitions, metadata?.properties]);\n\n return { columns, loading, error };\n}\n\nfunction getColumnsFromColumnDefinitions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n return columnDefinitions.map((col) => {\n const {\n locator,\n width,\n minWidth,\n maxWidth,\n resizable,\n orderable,\n filterable,\n renderCell,\n renderHeader,\n } = col;\n\n const propertyMetadata = locator.type === \"property\"\n ? objectProperties?.[locator.id]\n : undefined;\n\n const colKey = locator.id as string;\n\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n id: colKey,\n accessorKey: colKey,\n header: renderHeader ?? propertyMetadata?.displayName,\n size: width,\n ...(minWidth ? { minSize: minWidth } : {}),\n ...(maxWidth ? { maxSize: maxWidth } : {}),\n enableResizing: resizable,\n enableSorting: orderable,\n enableColumnFilter: filterable,\n cell: (cellContext) => {\n const object: Osdk.Instance<\n Q,\n \"$allBaseProperties\",\n PropertyKeys<Q>,\n RDPs\n > = cellContext.row.original;\n\n return renderCell\n ? renderCell(object, locator)\n : cellContext.getValue();\n },\n };\n\n return colDef;\n });\n}\n\nfunction getDefaultColumns<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n>(\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n if (!objectProperties) return [];\n\n return Object.entries(objectProperties).map(([key, property]) => {\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n accessorKey: key,\n header: property.displayName ?? key,\n };\n return colDef;\n });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA,SAASA,eAAe,QAAQ,aAAa;AAE7C,SAASC,OAAO,QAAQ,OAAO;AAgB/B;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAW3BC,UAAa,EACbC,iBAAqE,EACvC;EAC9B,MAAM;IAAEC,QAAQ;IAAEC,OAAO;IAAEC;EAAM,CAAC,GAAGP,eAAe,CAACG,UAAU,CAAC;EAEhE,MAAMK,OAEH,GAAGP,OAAO,CAAC,MAAM;IAClB,MAAMQ,gBAAgB,GAAGJ,QAAQ,EAAEK,UAAU;IAC7C;IACA,IAAIN,iBAAiB,EAAE;MACrB,OAAOO,+BAA+B,CACpCP,iBAAiB,EACjBK,gBACF,CAAC;IACH;;IAEA;IACA,OAAOG,iBAAiB,CAAUH,gBAAgB,CAAC;EACrD,CAAC,EAAE,CAACL,iBAAiB,EAAEC,QAAQ,EAAEK,UAAU,CAAC,CAAC;EAE7C,OAAO;IAAEF,OAAO;IAAEF,OAAO;IAAEC;EAAM,CAAC;AACpC;AAEA,SAASI,+BAA+BA,CAWtCP,iBAAoE,EACpEK,gBAAuD,EAKvD;EACA,OAAOL,iBAAiB,CAACS,GAAG,CAAEC,GAAG,IAAK;IACpC,MAAM;MACJC,OAAO;MACPC,KAAK;MACLC,QAAQ;MACRC,QAAQ;MACRC,SAAS;MACTC,SAAS;MACTC,UAAU;MACVC,UAAU;MACVC;IACF,CAAC,
|
|
1
|
+
{"version":3,"file":"useColumnDefs.js","names":["useOsdkMetadata","useMemo","useColumnDefs","objectType","columnDefinitions","metadata","loading","error","columns","objectProperties","properties","getColumnsFromColumnDefinitions","getDefaultColumns","map","col","locator","width","minWidth","maxWidth","resizable","orderable","filterable","renderCell","renderHeader","columnName","propertyMetadata","type","id","undefined","colKey","colDef","accessorKey","header","displayName","meta","isVisible","size","minSize","maxSize","enableResizing","enableSorting","enableColumnFilter","cell","cellContext","object","row","original","getValue","Object","entries","key","property"],"sources":["useColumnDefs.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectMetadata,\n ObjectOrInterfaceDefinition,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { useOsdkMetadata } from \"@osdk/react\";\nimport type { AccessorColumnDef } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition } from \"../ObjectTableApi.js\";\n\ninterface UseColumnDefsResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> {\n columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[];\n\n loading: boolean;\n\n error: string | undefined;\n}\n\n/**\n * Hook which builds column definitions for tanstack-table given the objectSet\n */\nexport function useColumnDefs<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): UseColumnDefsResult<Q, RDPs> {\n const { metadata, loading, error } = useOsdkMetadata(objectType);\n\n const columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[] = useMemo(() => {\n const objectProperties = metadata?.properties;\n // If columnDefinitions is provided, construct colDefs with it\n if (columnDefinitions) {\n return getColumnsFromColumnDefinitions<Q, RDPs, FunctionColumns>(\n columnDefinitions,\n objectProperties,\n );\n }\n\n // If not, return the default columns from the object properties\n return getDefaultColumns<Q, RDPs>(objectProperties);\n }, [columnDefinitions, metadata?.properties]);\n\n return { columns, loading, error };\n}\n\nfunction getColumnsFromColumnDefinitions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n return columnDefinitions.map((col) => {\n const {\n locator,\n width,\n minWidth,\n maxWidth,\n resizable,\n orderable,\n filterable,\n renderCell,\n renderHeader,\n columnName,\n } = col;\n\n const propertyMetadata = locator.type === \"property\"\n ? objectProperties?.[locator.id]\n : undefined;\n\n const colKey = locator.id as string;\n\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n id: colKey,\n accessorKey: colKey,\n header: renderHeader ?? (columnName || propertyMetadata?.displayName),\n meta: {\n columnName: columnName || propertyMetadata?.displayName,\n isVisible: col.isVisible !== false,\n },\n size: width,\n ...(minWidth ? { minSize: minWidth } : {}),\n ...(maxWidth ? { maxSize: maxWidth } : {}),\n enableResizing: resizable,\n enableSorting: orderable,\n enableColumnFilter: filterable,\n cell: (cellContext) => {\n const object: Osdk.Instance<\n Q,\n \"$allBaseProperties\",\n PropertyKeys<Q>,\n RDPs\n > = cellContext.row.original;\n\n return renderCell\n ? renderCell(object, locator)\n : cellContext.getValue();\n },\n };\n\n return colDef;\n });\n}\n\nfunction getDefaultColumns<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n>(\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n if (!objectProperties) return [];\n\n return Object.entries(objectProperties).map(([key, property]) => {\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n accessorKey: key,\n header: property.displayName ?? key,\n };\n return colDef;\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { useCallback, useState } from "react";
|
|
18
|
+
export const useColumnResize = ({
|
|
19
|
+
onColumnResize
|
|
20
|
+
}) => {
|
|
21
|
+
const [columnSizing, setColumnSizing] = useState({});
|
|
22
|
+
const onColumnSizingChange = useCallback(updater => {
|
|
23
|
+
setColumnSizing(prev => {
|
|
24
|
+
const newState = typeof updater === "function" ? updater(prev) : updater;
|
|
25
|
+
if (onColumnResize) {
|
|
26
|
+
for (const columnId of Object.keys(newState)) {
|
|
27
|
+
if (newState[columnId] !== prev[columnId]) {
|
|
28
|
+
onColumnResize(columnId, newState[columnId]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const columnId of Object.keys(prev)) {
|
|
32
|
+
if (!(columnId in newState)) {
|
|
33
|
+
onColumnResize(columnId, null);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return newState;
|
|
38
|
+
});
|
|
39
|
+
}, [onColumnResize]);
|
|
40
|
+
return {
|
|
41
|
+
columnSizing,
|
|
42
|
+
onColumnSizingChange
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=useColumnResize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnResize.js","names":["useCallback","useState","useColumnResize","onColumnResize","columnSizing","setColumnSizing","onColumnSizingChange","updater","prev","newState","columnId","Object","keys"],"sources":["useColumnResize.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ColumnSizingState, OnChangeFn } from \"@tanstack/react-table\";\nimport { useCallback, useState } from \"react\";\n\ninterface UseColumnResizeProps {\n onColumnResize?: (columnId: string, newWidth: number | null) => void;\n}\n\ninterface UseColumnResizeResults {\n columnSizing: ColumnSizingState;\n onColumnSizingChange: OnChangeFn<ColumnSizingState>;\n}\n\nexport const useColumnResize = ({\n onColumnResize,\n}: UseColumnResizeProps): UseColumnResizeResults => {\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n const onColumnSizingChange: OnChangeFn<ColumnSizingState> = useCallback(\n (updater) => {\n setColumnSizing((prev) => {\n const newState = typeof updater === \"function\"\n ? updater(prev)\n : updater;\n\n if (onColumnResize) {\n for (const columnId of Object.keys(newState)) {\n if (newState[columnId] !== prev[columnId]) {\n onColumnResize(columnId, newState[columnId]);\n }\n }\n for (const columnId of Object.keys(prev)) {\n if (!(columnId in newState)) {\n onColumnResize(columnId, null);\n }\n }\n }\n\n return newState;\n });\n },\n [onColumnResize],\n );\n\n return { columnSizing, onColumnSizingChange };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAW7C,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC;AACoB,CAAC,KAA6B;EAClD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGJ,QAAQ,CAAoB,CAAC,CAAC,CAAC;EAEvE,MAAMK,oBAAmD,GAAGN,WAAW,CACpEO,OAAO,IAAK;IACXF,eAAe,CAAEG,IAAI,IAAK;MACxB,MAAMC,QAAQ,GAAG,OAAOF,OAAO,KAAK,UAAU,GAC1CA,OAAO,CAACC,IAAI,CAAC,GACbD,OAAO;MAEX,IAAIJ,cAAc,EAAE;QAClB,KAAK,MAAMO,QAAQ,IAAIC,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,EAAE;UAC5C,IAAIA,QAAQ,CAACC,QAAQ,CAAC,KAAKF,IAAI,CAACE,QAAQ,CAAC,EAAE;YACzCP,cAAc,CAACO,QAAQ,EAAED,QAAQ,CAACC,QAAQ,CAAC,CAAC;UAC9C;QACF;QACA,KAAK,MAAMA,QAAQ,IAAIC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC,EAAE;UACxC,IAAI,EAAEE,QAAQ,IAAID,QAAQ,CAAC,EAAE;YAC3BN,cAAc,CAACO,QAAQ,EAAE,IAAI,CAAC;UAChC;QACF;MACF;MAEA,OAAOD,QAAQ;IACjB,CAAC,CAAC;EACJ,CAAC,EACD,CAACN,cAAc,CACjB,CAAC;EAED,OAAO;IAAEC,YAAY;IAAEE;EAAqB,CAAC;AAC/C,CAAC","ignoreList":[]}
|
|
@@ -14,28 +14,60 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { useCallback, useEffect, useState } from "react";
|
|
18
18
|
export const useColumnVisibility = ({
|
|
19
|
-
|
|
19
|
+
allColumns,
|
|
20
|
+
onColumnVisibilityChanged
|
|
20
21
|
}) => {
|
|
21
|
-
const columnVisibility =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
const [columnVisibility, setColumnVisibility] = useState(() => getColumnVisibilityState(allColumns));
|
|
23
|
+
const [columnOrder, setColumnOrder] = useState(() => getColumnOrder(allColumns));
|
|
24
|
+
|
|
25
|
+
// TODO: Explore other ways to respond to props changes for controlled mode
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
setColumnVisibility(getColumnVisibilityState(allColumns));
|
|
28
|
+
}, [allColumns]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setColumnOrder(getColumnOrder(allColumns));
|
|
31
|
+
}, [allColumns]);
|
|
32
|
+
const onColumnVisibilityChange = useCallback(updaterOrValue => {
|
|
33
|
+
setColumnVisibility(prev => {
|
|
34
|
+
const newState = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
|
|
35
|
+
if (onColumnVisibilityChanged) {
|
|
36
|
+
const changes = Object.entries(newState).map(([columnId, isVisible]) => ({
|
|
37
|
+
columnId,
|
|
38
|
+
isVisible
|
|
39
|
+
}));
|
|
40
|
+
onColumnVisibilityChanged(changes);
|
|
41
|
+
}
|
|
42
|
+
return newState;
|
|
43
|
+
});
|
|
44
|
+
}, [onColumnVisibilityChanged]);
|
|
45
|
+
const onColumnOrderChange = useCallback(updaterOrValue => {
|
|
46
|
+
setColumnOrder(prev => {
|
|
47
|
+
const newState = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
|
|
48
|
+
return newState;
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
return {
|
|
52
|
+
columnVisibility,
|
|
53
|
+
onColumnVisibilityChange,
|
|
54
|
+
columnOrder,
|
|
55
|
+
onColumnOrderChange
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
const getColumnVisibilityState = allColumns => {
|
|
59
|
+
return allColumns.reduce((acc, col) => {
|
|
60
|
+
const colId = col.id ?? col.accessorKey;
|
|
61
|
+
if (colId) {
|
|
62
|
+
return {
|
|
63
|
+
...acc,
|
|
64
|
+
[colId]: col.meta?.isVisible !== false
|
|
65
|
+
};
|
|
37
66
|
}
|
|
38
|
-
|
|
39
|
-
|
|
67
|
+
return acc;
|
|
68
|
+
}, {});
|
|
69
|
+
};
|
|
70
|
+
const getColumnOrder = allColumns => {
|
|
71
|
+
return allColumns.map(col => col.id ?? col.accessorKey).filter(id => id != null);
|
|
40
72
|
};
|
|
41
73
|
//# sourceMappingURL=useColumnVisibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnVisibility.js","names":["
|
|
1
|
+
{"version":3,"file":"useColumnVisibility.js","names":["useCallback","useEffect","useState","useColumnVisibility","allColumns","onColumnVisibilityChanged","columnVisibility","setColumnVisibility","getColumnVisibilityState","columnOrder","setColumnOrder","getColumnOrder","onColumnVisibilityChange","updaterOrValue","prev","newState","changes","Object","entries","map","columnId","isVisible","onColumnOrderChange","reduce","acc","col","colId","id","accessorKey","meta","filter"],"sources":["useColumnVisibility.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectOrInterfaceDefinition,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport type {\n ColumnDef,\n ColumnOrderState,\n OnChangeFn,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ninterface UseColumnVisibilityProps<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n TData = unknown,\n> {\n allColumns: ColumnDef<TData>[];\n onColumnVisibilityChanged?: (\n newStates: Array<{\n columnId: PropertyKeys<Q> | keyof RDPs | keyof FunctionColumns;\n isVisible: boolean;\n }>,\n ) => void;\n}\n\ninterface UseColumnVisibilityResult {\n columnVisibility: VisibilityState;\n onColumnVisibilityChange: OnChangeFn<VisibilityState>;\n columnOrder: ColumnOrderState;\n onColumnOrderChange: OnChangeFn<ColumnOrderState>;\n}\n\nexport const useColumnVisibility = <\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n TData = unknown,\n>(\n {\n allColumns,\n onColumnVisibilityChanged,\n }: UseColumnVisibilityProps<Q, RDPs, FunctionColumns, TData>,\n): UseColumnVisibilityResult => {\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n () => getColumnVisibilityState<TData>(allColumns),\n );\n\n const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(\n () => getColumnOrder(allColumns),\n );\n\n // TODO: Explore other ways to respond to props changes for controlled mode\n useEffect(() => {\n setColumnVisibility(getColumnVisibilityState<TData>(allColumns));\n }, [allColumns]);\n\n useEffect(() => {\n setColumnOrder(getColumnOrder(allColumns));\n }, [allColumns]);\n\n const onColumnVisibilityChange: OnChangeFn<VisibilityState> = useCallback(\n (updaterOrValue) => {\n setColumnVisibility((prev) => {\n const newState = typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n if (onColumnVisibilityChanged) {\n const changes = Object.entries(newState).map(\n ([columnId, isVisible]) => ({\n columnId,\n isVisible,\n }),\n );\n onColumnVisibilityChanged(changes);\n }\n\n return newState;\n });\n },\n [onColumnVisibilityChanged],\n );\n\n const onColumnOrderChange: OnChangeFn<ColumnOrderState> = useCallback(\n (updaterOrValue) => {\n setColumnOrder((prev) => {\n const newState = typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n return newState;\n });\n },\n [],\n );\n\n return {\n columnVisibility,\n onColumnVisibilityChange,\n columnOrder,\n onColumnOrderChange,\n };\n};\n\nconst getColumnVisibilityState = <TData>(\n allColumns: ColumnDef<TData>[],\n): VisibilityState => {\n return allColumns.reduce(\n (acc, col) => {\n const colId = col.id ?? (col as { accessorKey?: string }).accessorKey;\n if (colId) {\n return {\n ...acc,\n [colId]: col.meta?.isVisible !== false,\n };\n }\n return acc;\n },\n {},\n );\n};\n\nconst getColumnOrder = <TData>(\n allColumns: ColumnDef<TData>[],\n): ColumnOrderState => {\n return allColumns\n .map(col => col.id ?? (col as { accessorKey?: string }).accessorKey)\n .filter((id): id is string => id != null);\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AA2BxD,OAAO,MAAMC,mBAAmB,GAAGA,CASjC;EACEC,UAAU;EACVC;AACyD,CAAC,KAC9B;EAC9B,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGL,QAAQ,CACtD,MAAMM,wBAAwB,CAAQJ,UAAU,CAClD,CAAC;EAED,MAAM,CAACK,WAAW,EAAEC,cAAc,CAAC,GAAGR,QAAQ,CAC5C,MAAMS,cAAc,CAACP,UAAU,CACjC,CAAC;;EAED;EACAH,SAAS,CAAC,MAAM;IACdM,mBAAmB,CAACC,wBAAwB,CAAQJ,UAAU,CAAC,CAAC;EAClE,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAEhBH,SAAS,CAAC,MAAM;IACdS,cAAc,CAACC,cAAc,CAACP,UAAU,CAAC,CAAC;EAC5C,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAEhB,MAAMQ,wBAAqD,GAAGZ,WAAW,CACtEa,cAAc,IAAK;IAClBN,mBAAmB,CAAEO,IAAI,IAAK;MAC5B,MAAMC,QAAQ,GAAG,OAAOF,cAAc,KAAK,UAAU,GACjDA,cAAc,CAACC,IAAI,CAAC,GACpBD,cAAc;MAElB,IAAIR,yBAAyB,EAAE;QAC7B,MAAMW,OAAO,GAAGC,MAAM,CAACC,OAAO,CAACH,QAAQ,CAAC,CAACI,GAAG,CAC1C,CAAC,CAACC,QAAQ,EAAEC,SAAS,CAAC,MAAM;UAC1BD,QAAQ;UACRC;QACF,CAAC,CACH,CAAC;QACDhB,yBAAyB,CAACW,OAAO,CAAC;MACpC;MAEA,OAAOD,QAAQ;IACjB,CAAC,CAAC;EACJ,CAAC,EACD,CAACV,yBAAyB,CAC5B,CAAC;EAED,MAAMiB,mBAAiD,GAAGtB,WAAW,CAClEa,cAAc,IAAK;IAClBH,cAAc,CAAEI,IAAI,IAAK;MACvB,MAAMC,QAAQ,GAAG,OAAOF,cAAc,KAAK,UAAU,GACjDA,cAAc,CAACC,IAAI,CAAC,GACpBD,cAAc;MAClB,OAAOE,QAAQ;IACjB,CAAC,CAAC;EACJ,CAAC,EACD,EACF,CAAC;EAED,OAAO;IACLT,gBAAgB;IAChBM,wBAAwB;IACxBH,WAAW;IACXa;EACF,CAAC;AACH,CAAC;AAED,MAAMd,wBAAwB,GAC5BJ,UAA8B,IACV;EACpB,OAAOA,UAAU,CAACmB,MAAM,CACtB,CAACC,GAAG,EAAEC,GAAG,KAAK;IACZ,MAAMC,KAAK,GAAGD,GAAG,CAACE,EAAE,IAAKF,GAAG,CAA8BG,WAAW;IACrE,IAAIF,KAAK,EAAE;MACT,OAAO;QACL,GAAGF,GAAG;QACN,CAACE,KAAK,GAAGD,GAAG,CAACI,IAAI,EAAER,SAAS,KAAK;MACnC,CAAC;IACH;IACA,OAAOG,GAAG;EACZ,CAAC,EACD,CAAC,CACH,CAAC;AACH,CAAC;AAED,MAAMb,cAAc,GAClBP,UAA8B,IACT;EACrB,OAAOA,UAAU,CACde,GAAG,CAACM,GAAG,IAAIA,GAAG,CAACE,EAAE,IAAKF,GAAG,CAA8BG,WAAW,CAAC,CACnEE,MAAM,CAAEH,EAAE,IAAmBA,EAAE,IAAI,IAAI,CAAC;AAC7C,CAAC","ignoreList":[]}
|