@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
|
@@ -1,161 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
+
*/
|
|
3
16
|
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import { createPortal } from "react-dom";
|
|
9
|
-
import { useCallback, useState } from "react";
|
|
10
|
-
var css = '/*\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\n.osdkCellContextMenu {\n position: fixed;\n z-index: var(--osdk-surface-z-index-2);\n}\n';
|
|
11
|
-
if (typeof document !== "undefined") {
|
|
12
|
-
const style = document.createElement("style");
|
|
13
|
-
style.textContent = css;
|
|
14
|
-
document.head.appendChild(style);
|
|
15
|
-
}
|
|
16
|
-
var CellContextMenu_default = { "osdkCellContextMenu": "osdkCellContextMenu" };
|
|
17
|
-
function CellContextMenu({
|
|
18
|
-
cell,
|
|
19
|
-
position,
|
|
20
|
-
onClose,
|
|
21
|
-
renderContent
|
|
22
|
-
}) {
|
|
23
|
-
const ref = useRef(null);
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const handleClickOutside = (event) => {
|
|
26
|
-
if (ref.current && !ref.current.contains(event.target)) {
|
|
27
|
-
onClose();
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
document.addEventListener("mousedown", handleClickOutside);
|
|
31
|
-
return () => {
|
|
32
|
-
document.removeEventListener("mousedown", handleClickOutside);
|
|
33
|
-
};
|
|
34
|
-
}, [onClose]);
|
|
35
|
-
return /* @__PURE__ */ createPortal(/* @__PURE__ */ React.createElement("div", {
|
|
36
|
-
ref,
|
|
37
|
-
className: CellContextMenu_default.osdkCellContextMenu,
|
|
38
|
-
style: {
|
|
39
|
-
left: position.left,
|
|
40
|
-
top: position.top,
|
|
41
|
-
minWidth: position.width
|
|
42
|
-
}
|
|
43
|
-
}, renderContent(cell.row.original, cell)), document.body);
|
|
44
|
-
}
|
|
45
|
-
var useCellContextMenu = ({
|
|
46
|
-
tdRef
|
|
47
|
-
}) => {
|
|
48
|
-
const [popoverPosition, setPopoverPosition] = useState(null);
|
|
49
|
-
const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);
|
|
50
|
-
const handleOpenContextMenu = useCallback((event) => {
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
event.stopPropagation();
|
|
53
|
-
if (tdRef.current) {
|
|
54
|
-
const rect = tdRef.current.getBoundingClientRect();
|
|
55
|
-
const position = {
|
|
56
|
-
left: rect.left,
|
|
57
|
-
top: rect.bottom,
|
|
58
|
-
width: rect.width
|
|
59
|
-
};
|
|
60
|
-
setPopoverPosition(position);
|
|
61
|
-
setIsContextMenuOpen(true);
|
|
62
|
-
}
|
|
63
|
-
}, [tdRef]);
|
|
64
|
-
const handleCloseContextMenu = useCallback(() => {
|
|
65
|
-
setIsContextMenuOpen(false);
|
|
66
|
-
setPopoverPosition(null);
|
|
67
|
-
}, []);
|
|
68
|
-
return {
|
|
69
|
-
isContextMenuOpen,
|
|
70
|
-
handleOpenContextMenu,
|
|
71
|
-
handleCloseContextMenu,
|
|
72
|
-
popoverPosition
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
var css2 = '/*\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\n.osdkTableCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-size: var(--osdk-table-cell-fontSize);\n color: var(--osdk-table-cell-color);\n background-color: inherit;\n border-right: var(--osdk-table-cell-divider);\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableCell[data-pinned="left"],\n.osdkTableCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-1);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableCell[data-pinned="right"]:not(:has(~ [data-pinned="right"]):nth-child(n+2)) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableCellContent:not(:has([role="checkbox"])) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n}\n';
|
|
76
|
-
if (typeof document !== "undefined") {
|
|
77
|
-
const style = document.createElement("style");
|
|
78
|
-
style.textContent = css2;
|
|
79
|
-
document.head.appendChild(style);
|
|
80
|
-
}
|
|
81
|
-
var TableCell_default = { "osdkTableCell": "osdkTableCell", "osdkTableCellContent": "osdkTableCellContent" };
|
|
82
|
-
var SELECTION_COLUMN_ID = "__selection__";
|
|
83
|
-
function getColumnPinningStyles(column) {
|
|
84
|
-
const isPinned = column.getIsPinned();
|
|
85
|
-
return {
|
|
86
|
-
columnStyles: {
|
|
87
|
-
left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
|
|
88
|
-
right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
|
|
89
|
-
width: column.getSize()
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function TableCell({
|
|
94
|
-
cell,
|
|
95
|
-
renderCellContextMenu
|
|
96
|
-
}) {
|
|
97
|
-
const tdRef = useRef2(null);
|
|
98
|
-
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
99
|
-
const {
|
|
100
|
-
isContextMenuOpen,
|
|
101
|
-
handleOpenContextMenu,
|
|
102
|
-
handleCloseContextMenu,
|
|
103
|
-
popoverPosition
|
|
104
|
-
} = useCellContextMenu({
|
|
105
|
-
tdRef
|
|
106
|
-
});
|
|
107
|
-
const {
|
|
108
|
-
columnStyles
|
|
109
|
-
} = getColumnPinningStyles(cell.column);
|
|
110
|
-
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("td", {
|
|
111
|
-
ref: tdRef,
|
|
112
|
-
"data-pinned": cell.column.getIsPinned(),
|
|
113
|
-
className: TableCell_default.osdkTableCell,
|
|
114
|
-
style: columnStyles,
|
|
115
|
-
onContextMenu: handleOpenContextMenu
|
|
116
|
-
}, /* @__PURE__ */ React2.createElement("div", {
|
|
117
|
-
className: TableCell_default.osdkTableCellContent
|
|
118
|
-
}, flexRender(cell.column.columnDef.cell, cell.getContext()))), !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu && /* @__PURE__ */ React2.createElement(CellContextMenu, {
|
|
119
|
-
cell,
|
|
120
|
-
position: popoverPosition,
|
|
121
|
-
onClose: handleCloseContextMenu,
|
|
122
|
-
renderContent: renderCellContextMenu
|
|
123
|
-
}));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// build/browser/object-table/TableRow.module.css
|
|
127
|
-
var css3 = '/*\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\n.osdkTableRow {\n position: absolute;\n display: flex;\n background-color: var(--osdk-table-row-bg-default);\n border-top: var(--osdk-table-row-divider);\n border-bottom: var(--osdk-table-border-width) solid transparent;\n\n &:last-child {\n border-bottom: var(--osdk-table-border);\n }\n\n /* Zebra rows */\n &:nth-child(even) {\n background-color: var(\n --osdk-table-row-bg-alternate,\n var(--osdk-table-row-bg-default)\n );\n }\n\n &:hover {\n z-index: 1;\n background-color: var(\n --osdk-table-row-bg-hover,\n var(--osdk-surface-background-color-default-hover)\n );\n border-top-color: var(--osdk-table-row-border-color-hover);\n border-bottom-color: var(--osdk-table-row-border-color-hover);\n }\n\n &[data-selected="true"] {\n z-index: 2;\n background-color: var(--osdk-table-row-bg-active);\n border-top-color: var(--osdk-table-row-border-color-active);\n border-bottom-color: var(--osdk-table-row-border-color-active);\n }\n\n &[data-selected="true"] + &[data-selected="true"] {\n border-top-color: transparent;\n }\n\n &[data-selected="true"]:has(+ &[data-selected="true"]) {\n border-bottom-color: transparent;\n }\n}\n';
|
|
128
|
-
if (typeof document !== "undefined") {
|
|
129
|
-
const style = document.createElement("style");
|
|
130
|
-
style.textContent = css3;
|
|
131
|
-
document.head.appendChild(style);
|
|
132
|
-
}
|
|
133
|
-
var TableRow_default = { "osdkTableRow": "osdkTableRow" };
|
|
134
|
-
|
|
135
|
-
// build/browser/object-table/TableRow.js
|
|
136
|
-
function TableRow({
|
|
17
|
+
import React, { useCallback } from "react";
|
|
18
|
+
import { TableCell } from "./TableCell.js";
|
|
19
|
+
import styles from "./TableRow.module.css.js";
|
|
20
|
+
export function TableRow({
|
|
137
21
|
row,
|
|
138
22
|
virtualRow,
|
|
139
23
|
onRowClick,
|
|
140
24
|
renderCellContextMenu
|
|
141
25
|
}) {
|
|
142
|
-
const handleClick =
|
|
26
|
+
const handleClick = useCallback(() => {
|
|
143
27
|
onRowClick?.(row.original);
|
|
144
28
|
}, [onRowClick, row.original]);
|
|
145
|
-
return
|
|
29
|
+
return /*#__PURE__*/React.createElement("tr", {
|
|
146
30
|
"data-selected": row.getIsSelected(),
|
|
147
|
-
className:
|
|
31
|
+
className: styles.osdkTableRow,
|
|
148
32
|
style: {
|
|
149
33
|
height: `${virtualRow.size}px`,
|
|
150
34
|
transform: `translateY(${virtualRow.start}px)`
|
|
151
35
|
},
|
|
152
36
|
onClick: handleClick
|
|
153
|
-
}, row.getVisibleCells().map(
|
|
37
|
+
}, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement(TableCell, {
|
|
154
38
|
key: cell.id,
|
|
155
|
-
cell,
|
|
156
|
-
renderCellContextMenu
|
|
39
|
+
cell: cell,
|
|
40
|
+
renderCellContextMenu: renderCellContextMenu
|
|
157
41
|
})));
|
|
158
42
|
}
|
|
159
|
-
|
|
160
|
-
TableRow
|
|
161
|
-
};
|
|
43
|
+
//# sourceMappingURL=TableRow.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
.osdkTableRow {
|
|
18
|
+
position: absolute;
|
|
19
|
+
display: flex;
|
|
20
|
+
background-color: var(--osdk-table-row-bg-default);
|
|
21
|
+
border-top: var(--osdk-table-row-divider);
|
|
22
|
+
border-bottom: var(--osdk-table-border-width) solid transparent;
|
|
23
|
+
|
|
24
|
+
&:last-child {
|
|
25
|
+
border-bottom: var(--osdk-table-border);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Zebra rows */
|
|
29
|
+
&:nth-child(even) {
|
|
30
|
+
background-color: var(
|
|
31
|
+
--osdk-table-row-bg-alternate,
|
|
32
|
+
var(--osdk-table-row-bg-default)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
z-index: 1;
|
|
38
|
+
background-color: var(
|
|
39
|
+
--osdk-table-row-bg-hover,
|
|
40
|
+
var(--osdk-surface-background-color-default-hover)
|
|
41
|
+
);
|
|
42
|
+
border-top-color: var(--osdk-table-row-border-color-hover);
|
|
43
|
+
border-bottom-color: var(--osdk-table-row-border-color-hover);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&[data-selected="true"] {
|
|
47
|
+
z-index: 2;
|
|
48
|
+
background-color: var(--osdk-table-row-bg-active);
|
|
49
|
+
border-top-color: var(--osdk-table-row-border-color-active);
|
|
50
|
+
border-bottom-color: var(--osdk-table-row-border-color-active);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&[data-selected="true"] + &[data-selected="true"] {
|
|
54
|
+
border-top-color: transparent;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&[data-selected="true"]:has(+ &[data-selected="true"]) {
|
|
58
|
+
border-bottom-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -14,165 +14,187 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
import { describe, expect, it } from "vitest";
|
|
17
|
+
import { act, renderHook } from "@testing-library/react";
|
|
18
|
+
import { describe, expect, it, vi } from "vitest";
|
|
19
|
+
import { SELECTION_COLUMN_ID } from "../../utils/constants.js";
|
|
19
20
|
import { useColumnVisibility } from "../useColumnVisibility.js";
|
|
20
21
|
const TestObjectType = {
|
|
21
22
|
type: "object",
|
|
22
23
|
apiName: "TestObject"
|
|
23
24
|
};
|
|
25
|
+
// Helper to create mock ColumnDef objects that mirror what useColumnDefs would produce
|
|
26
|
+
function createMockColumn(id, isVisible) {
|
|
27
|
+
return {
|
|
28
|
+
id,
|
|
29
|
+
meta: isVisible !== undefined ? {
|
|
30
|
+
isVisible
|
|
31
|
+
} : undefined
|
|
32
|
+
};
|
|
33
|
+
}
|
|
24
34
|
describe(useColumnVisibility, () => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}];
|
|
45
|
-
const {
|
|
46
|
-
result
|
|
47
|
-
} = renderHook(() => useColumnVisibility({
|
|
48
|
-
columnDefinitions
|
|
49
|
-
}));
|
|
50
|
-
expect(result.current).toEqual({});
|
|
51
|
-
});
|
|
52
|
-
it("handles mixed column types with different visibility states", async () => {
|
|
53
|
-
const columnDefinitions = [{
|
|
54
|
-
locator: {
|
|
55
|
-
type: "property",
|
|
56
|
-
id: "name"
|
|
57
|
-
},
|
|
58
|
-
isVisible: true
|
|
59
|
-
}, {
|
|
60
|
-
locator: {
|
|
61
|
-
type: "function",
|
|
62
|
-
id: "myFunction"
|
|
63
|
-
},
|
|
64
|
-
isVisible: false
|
|
65
|
-
}, {
|
|
66
|
-
locator: {
|
|
67
|
-
type: "rdp",
|
|
68
|
-
id: "myRdp",
|
|
69
|
-
creator: () => ({})
|
|
70
|
-
},
|
|
71
|
-
isVisible: true
|
|
72
|
-
}, {
|
|
73
|
-
locator: {
|
|
74
|
-
type: "property",
|
|
75
|
-
id: "email"
|
|
76
|
-
}
|
|
77
|
-
}];
|
|
78
|
-
const {
|
|
79
|
-
result
|
|
80
|
-
} = renderHook(() => useColumnVisibility({
|
|
81
|
-
columnDefinitions
|
|
82
|
-
}));
|
|
83
|
-
await waitFor(() => {
|
|
84
|
-
expect(result.current).toEqual({
|
|
35
|
+
describe("column visibility", () => {
|
|
36
|
+
it("returns empty columnVisibility when no columnDefinitions provided", () => {
|
|
37
|
+
const allColumns = [];
|
|
38
|
+
const {
|
|
39
|
+
result
|
|
40
|
+
} = renderHook(() => useColumnVisibility({
|
|
41
|
+
allColumns
|
|
42
|
+
}));
|
|
43
|
+
expect(result.current.columnVisibility).toEqual({});
|
|
44
|
+
});
|
|
45
|
+
it("initializes all columns as visible by default", () => {
|
|
46
|
+
const allColumns = [createMockColumn("name"), createMockColumn("email")];
|
|
47
|
+
const {
|
|
48
|
+
result
|
|
49
|
+
} = renderHook(() => useColumnVisibility({
|
|
50
|
+
allColumns
|
|
51
|
+
}));
|
|
52
|
+
expect(result.current.columnVisibility).toEqual({
|
|
85
53
|
name: true,
|
|
86
|
-
|
|
87
|
-
myRdp: true
|
|
54
|
+
email: true
|
|
88
55
|
});
|
|
89
56
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
type: "property",
|
|
104
|
-
id: "name"
|
|
105
|
-
},
|
|
106
|
-
isVisible: true
|
|
107
|
-
}]
|
|
108
|
-
}
|
|
57
|
+
it("handles mixed column types with different visibility states", () => {
|
|
58
|
+
const allColumns = [createMockColumn("name", true), createMockColumn("myFunction", false), createMockColumn("myRdp", true), createMockColumn("email")];
|
|
59
|
+
const {
|
|
60
|
+
result
|
|
61
|
+
} = renderHook(() => useColumnVisibility({
|
|
62
|
+
allColumns
|
|
63
|
+
}));
|
|
64
|
+
expect(result.current.columnVisibility).toEqual({
|
|
65
|
+
name: true,
|
|
66
|
+
myFunction: false,
|
|
67
|
+
myRdp: true,
|
|
68
|
+
email: true
|
|
69
|
+
});
|
|
109
70
|
});
|
|
110
|
-
|
|
111
|
-
|
|
71
|
+
it("updates columnVisibility when columnDefinitions change", () => {
|
|
72
|
+
const initialColumns = [createMockColumn("name", true)];
|
|
73
|
+
const {
|
|
74
|
+
result,
|
|
75
|
+
rerender
|
|
76
|
+
} = renderHook(({
|
|
77
|
+
allColumns
|
|
78
|
+
}) => useColumnVisibility({
|
|
79
|
+
allColumns
|
|
80
|
+
}), {
|
|
81
|
+
initialProps: {
|
|
82
|
+
allColumns: initialColumns
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
expect(result.current.columnVisibility).toEqual({
|
|
112
86
|
name: true
|
|
113
87
|
});
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
id: "name"
|
|
120
|
-
},
|
|
121
|
-
isVisible: false
|
|
122
|
-
}, {
|
|
123
|
-
locator: {
|
|
124
|
-
type: "property",
|
|
125
|
-
id: "email"
|
|
126
|
-
},
|
|
127
|
-
isVisible: true
|
|
128
|
-
}]
|
|
129
|
-
});
|
|
130
|
-
await waitFor(() => {
|
|
131
|
-
expect(result.current).toEqual({
|
|
88
|
+
const updatedColumns = [createMockColumn("name", false), createMockColumn("email", true)];
|
|
89
|
+
rerender({
|
|
90
|
+
allColumns: updatedColumns
|
|
91
|
+
});
|
|
92
|
+
expect(result.current.columnVisibility).toEqual({
|
|
132
93
|
name: false,
|
|
133
94
|
email: true
|
|
134
95
|
});
|
|
135
96
|
});
|
|
136
97
|
});
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
isVisible: false
|
|
155
|
-
}, {
|
|
156
|
-
locator: {
|
|
157
|
-
type: "property",
|
|
158
|
-
id: "id"
|
|
159
|
-
}
|
|
160
|
-
}];
|
|
161
|
-
const {
|
|
162
|
-
result
|
|
163
|
-
} = renderHook(() => useColumnVisibility({
|
|
164
|
-
columnDefinitions
|
|
165
|
-
}));
|
|
166
|
-
await waitFor(() => {
|
|
167
|
-
expect(result.current).toEqual({
|
|
98
|
+
describe("onColumnVisibilityChanged callback", () => {
|
|
99
|
+
it("calls onColumnVisibilityChanged when visibility changed", () => {
|
|
100
|
+
const onColumnVisibilityChanged = vi.fn();
|
|
101
|
+
const allColumns = [createMockColumn("name", true), createMockColumn("email", true)];
|
|
102
|
+
const {
|
|
103
|
+
result
|
|
104
|
+
} = renderHook(() => useColumnVisibility({
|
|
105
|
+
allColumns,
|
|
106
|
+
onColumnVisibilityChanged
|
|
107
|
+
}));
|
|
108
|
+
act(() => {
|
|
109
|
+
result.current.onColumnVisibilityChange(prev => ({
|
|
110
|
+
...prev,
|
|
111
|
+
email: false
|
|
112
|
+
}));
|
|
113
|
+
});
|
|
114
|
+
expect(result.current.columnVisibility).toEqual({
|
|
168
115
|
name: true,
|
|
169
|
-
|
|
116
|
+
email: false
|
|
170
117
|
});
|
|
118
|
+
expect(onColumnVisibilityChanged).toHaveBeenCalledWith([{
|
|
119
|
+
columnId: "name",
|
|
120
|
+
isVisible: true
|
|
121
|
+
}, {
|
|
122
|
+
columnId: "email",
|
|
123
|
+
isVisible: false
|
|
124
|
+
}]);
|
|
171
125
|
});
|
|
126
|
+
it("does not call callback when callback is not provided", () => {
|
|
127
|
+
const allColumns = [createMockColumn("name", true)];
|
|
128
|
+
const {
|
|
129
|
+
result
|
|
130
|
+
} = renderHook(() => useColumnVisibility({
|
|
131
|
+
allColumns
|
|
132
|
+
}));
|
|
172
133
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
134
|
+
// Should not throw
|
|
135
|
+
act(() => {
|
|
136
|
+
result.current.onColumnVisibilityChange({
|
|
137
|
+
name: false
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
expect(result.current.columnVisibility).toEqual({
|
|
141
|
+
name: false
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe("column ordering", () => {
|
|
146
|
+
it("initializes column order from column definitions", () => {
|
|
147
|
+
const allColumns = [createMockColumn("name"), createMockColumn("email"), createMockColumn("age")];
|
|
148
|
+
const {
|
|
149
|
+
result
|
|
150
|
+
} = renderHook(() => useColumnVisibility({
|
|
151
|
+
allColumns
|
|
152
|
+
}));
|
|
153
|
+
expect(result.current.columnOrder).toEqual(["name", "email", "age"]);
|
|
154
|
+
});
|
|
155
|
+
it("includes selection column first when hasSelectionColumn is true", () => {
|
|
156
|
+
const allColumns = [createMockColumn(SELECTION_COLUMN_ID), createMockColumn("name"), createMockColumn("email")];
|
|
157
|
+
const {
|
|
158
|
+
result
|
|
159
|
+
} = renderHook(() => useColumnVisibility({
|
|
160
|
+
allColumns
|
|
161
|
+
}));
|
|
162
|
+
expect(result.current.columnOrder).toEqual([SELECTION_COLUMN_ID, "name", "email"]);
|
|
163
|
+
});
|
|
164
|
+
it("updates column order when onColumnOrderChange is called", () => {
|
|
165
|
+
const allColumns = [createMockColumn("name"), createMockColumn("email"), createMockColumn("age")];
|
|
166
|
+
const {
|
|
167
|
+
result
|
|
168
|
+
} = renderHook(() => useColumnVisibility({
|
|
169
|
+
allColumns
|
|
170
|
+
}));
|
|
171
|
+
expect(result.current.columnOrder).toEqual(["name", "email", "age"]);
|
|
172
|
+
act(() => {
|
|
173
|
+
result.current.onColumnOrderChange(["email", "age", "name"]);
|
|
174
|
+
});
|
|
175
|
+
expect(result.current.columnOrder).toEqual(["email", "age", "name"]);
|
|
176
|
+
});
|
|
177
|
+
it("updates column order when columnDefinitions change", () => {
|
|
178
|
+
const initialColumns = [createMockColumn("name"), createMockColumn("email")];
|
|
179
|
+
const {
|
|
180
|
+
result,
|
|
181
|
+
rerender
|
|
182
|
+
} = renderHook(({
|
|
183
|
+
allColumns
|
|
184
|
+
}) => useColumnVisibility({
|
|
185
|
+
allColumns
|
|
186
|
+
}), {
|
|
187
|
+
initialProps: {
|
|
188
|
+
allColumns: initialColumns
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
expect(result.current.columnOrder).toEqual(["name", "email"]);
|
|
192
|
+
const updatedColumns = [createMockColumn("age"), createMockColumn("name"), createMockColumn("email")];
|
|
193
|
+
rerender({
|
|
194
|
+
allColumns: updatedColumns
|
|
195
|
+
});
|
|
196
|
+
expect(result.current.columnOrder).toEqual(["age", "name", "email"]);
|
|
197
|
+
});
|
|
176
198
|
});
|
|
177
199
|
});
|
|
178
200
|
//# sourceMappingURL=useColumnVisibility.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnVisibility.test.js","names":["renderHook","waitFor","describe","expect","it","useColumnVisibility","TestObjectType","type","apiName","result","columnDefinitions","undefined","current","toBeUndefined","locator","id","toEqual","isVisible","creator","name","myFunction","myRdp","rerender","initialProps","email","age","not","toHaveProperty"],"sources":["useColumnVisibility.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 {\n DerivedProperty,\n ObjectTypeDefinition,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { renderHook, waitFor } from \"@testing-library/react\";\nimport { describe, expect, it } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useColumnVisibility } from \"../useColumnVisibility.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\ndescribe(useColumnVisibility, () => {\n it(\"returns undefined columnVisibility when no columnDefinitions provided\", () => {\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current).toBeUndefined();\n });\n\n it(\"returns empty columnVisibility when columnDefinitions have no isVisible properties\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n expect(result.current).toEqual({});\n });\n\n it(\"handles mixed column types with different visibility states\", async () => {\n const mockRdpCreator = (() => ({})) as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { myRdp: SimplePropertyDef },\n { myFunction: QueryDefinition<{}> }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n isVisible: false,\n },\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n myFunction: false,\n myRdp: true,\n });\n });\n });\n\n it(\"updates columnVisibility when columnDefinitions change\", async () => {\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ columnDefinitions }) =>\n useColumnVisibility({\n columnDefinitions,\n }),\n {\n initialProps: { columnDefinitions: initialColumnDefinitions },\n },\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n });\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n rerender({ columnDefinitions: updatedColumnDefinitions });\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: false,\n email: true,\n });\n });\n });\n\n it(\"only includes columns with explicit isVisible in the visibility state\", async () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"age\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"id\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n age: false,\n });\n });\n\n // Verify that columns without isVisible are not in the state\n expect(result.current).not.toHaveProperty(\"email\");\n expect(result.current).not.toHaveProperty(\"id\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useColumnVisibility.test.js","names":["act","renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useColumnVisibility","TestObjectType","type","apiName","createMockColumn","id","isVisible","meta","undefined","allColumns","result","current","columnVisibility","toEqual","name","email","myFunction","myRdp","initialColumns","rerender","initialProps","updatedColumns","onColumnVisibilityChanged","fn","onColumnVisibilityChange","prev","toHaveBeenCalledWith","columnId","columnOrder","onColumnOrderChange"],"sources":["useColumnVisibility.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 } from \"@osdk/api\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useColumnVisibility } from \"../useColumnVisibility.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\n// Helper to create mock ColumnDef objects that mirror what useColumnDefs would produce\nfunction createMockColumn<T>(\n id: string,\n isVisible?: boolean,\n): ColumnDef<T> {\n return {\n id,\n meta: isVisible !== undefined ? { isVisible } : undefined,\n } as ColumnDef<T>;\n}\n\ndescribe(useColumnVisibility, () => {\n describe(\"column visibility\", () => {\n it(\"returns empty columnVisibility when no columnDefinitions provided\", () => {\n const allColumns: ColumnDef<unknown>[] = [];\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({});\n });\n\n it(\"initializes all columns as visible by default\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n email: true,\n });\n });\n\n it(\"handles mixed column types with different visibility states\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n createMockColumn(\"myFunction\", false),\n createMockColumn(\"myRdp\", true),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n myFunction: false,\n myRdp: true,\n email: true,\n });\n });\n\n it(\"updates columnVisibility when columnDefinitions change\", () => {\n const initialColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n ];\n\n const { result, rerender } = renderHook(\n ({ allColumns }) =>\n useColumnVisibility<TestObject>({\n allColumns,\n }),\n {\n initialProps: { allColumns: initialColumns },\n },\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n });\n\n const updatedColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", false),\n createMockColumn(\"email\", true),\n ];\n\n rerender({ allColumns: updatedColumns });\n\n expect(result.current.columnVisibility).toEqual({\n name: false,\n email: true,\n });\n });\n });\n\n describe(\"onColumnVisibilityChanged callback\", () => {\n it(\"calls onColumnVisibilityChanged when visibility changed\", () => {\n const onColumnVisibilityChanged = vi.fn();\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n createMockColumn(\"email\", true),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n onColumnVisibilityChanged,\n })\n );\n\n act(() => {\n result.current.onColumnVisibilityChange((prev) => ({\n ...prev,\n email: false,\n }));\n });\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n email: false,\n });\n\n expect(onColumnVisibilityChanged).toHaveBeenCalledWith([\n { columnId: \"name\", isVisible: true },\n { columnId: \"email\", isVisible: false },\n ]);\n });\n\n it(\"does not call callback when callback is not provided\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n // Should not throw\n act(() => {\n result.current.onColumnVisibilityChange({\n name: false,\n });\n });\n\n expect(result.current.columnVisibility).toEqual({\n name: false,\n });\n });\n });\n\n describe(\"column ordering\", () => {\n it(\"initializes column order from column definitions\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n createMockColumn(\"age\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\", \"age\"]);\n });\n\n it(\"includes selection column first when hasSelectionColumn is true\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(SELECTION_COLUMN_ID),\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\n SELECTION_COLUMN_ID,\n \"name\",\n \"email\",\n ]);\n });\n\n it(\"updates column order when onColumnOrderChange is called\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n createMockColumn(\"age\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\", \"age\"]);\n\n act(() => {\n result.current.onColumnOrderChange([\"email\", \"age\", \"name\"]);\n });\n\n expect(result.current.columnOrder).toEqual([\"email\", \"age\", \"name\"]);\n });\n\n it(\"updates column order when columnDefinitions change\", () => {\n const initialColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result, rerender } = renderHook(\n ({ allColumns }) =>\n useColumnVisibility<TestObject>({\n allColumns,\n }),\n {\n initialProps: { allColumns: initialColumns },\n },\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\"]);\n\n const updatedColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"age\"),\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n rerender({ allColumns: updatedColumns });\n\n expect(result.current.columnOrder).toEqual([\"age\", \"name\", \"email\"]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -45,6 +45,7 @@ describe("useRowSelection", () => {
|
|
|
45
45
|
expect(result.current.rowSelection).toEqual({});
|
|
46
46
|
expect(result.current.isAllSelected).toBe(false);
|
|
47
47
|
expect(result.current.hasSelection).toBe(false);
|
|
48
|
+
expect(result.current.enableRowSelection).toBe(false);
|
|
48
49
|
});
|
|
49
50
|
it("does not respond to toggle operations", () => {
|
|
50
51
|
const data = createMockData(5);
|
|
@@ -81,6 +82,7 @@ describe("useRowSelection", () => {
|
|
|
81
82
|
act(() => {
|
|
82
83
|
result.current.onToggleRow("item-0", 0);
|
|
83
84
|
});
|
|
85
|
+
expect(result.current.enableRowSelection).toBe(true);
|
|
84
86
|
expect(result.current.rowSelection).toEqual({
|
|
85
87
|
"item-0": true
|
|
86
88
|
});
|
|
@@ -178,6 +180,7 @@ describe("useRowSelection", () => {
|
|
|
178
180
|
act(() => {
|
|
179
181
|
result.current.onToggleRow("item-2", 2);
|
|
180
182
|
});
|
|
183
|
+
expect(result.current.enableRowSelection).toBe(true);
|
|
181
184
|
expect(result.current.rowSelection).toEqual({
|
|
182
185
|
"item-0": true,
|
|
183
186
|
"item-2": true
|