@osdk/react-components 0.1.0 → 0.2.0-beta.10
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 +98 -19
- package/README.md +56 -23
- 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__/LinkedPropertyInput.test.js +202 -0
- package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/dateUtils.test.js +55 -0
- package/build/browser/filter-list/__tests__/dateUtils.test.js.map +1 -0
- 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 +203 -0
- package/build/browser/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/browser/filter-list/base/FilterInput.js +542 -0
- package/build/browser/filter-list/base/FilterInput.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.js +77 -0
- package/build/browser/filter-list/base/FilterList.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.module.css +67 -0
- package/build/browser/filter-list/base/FilterList.module.css.js +8 -0
- package/build/browser/filter-list/base/FilterListContent.js +57 -0
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -0
- package/build/browser/filter-list/base/FilterListContent.module.css +27 -0
- package/build/browser/filter-list/base/FilterListContent.module.css.js +7 -0
- package/build/browser/filter-list/base/FilterListHeader.js +58 -0
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -0
- package/build/browser/filter-list/base/FilterListHeader.module.css +127 -0
- package/build/browser/filter-list/base/FilterListHeader.module.css.js +13 -0
- package/build/browser/filter-list/base/FilterListItem.js +75 -0
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -0
- package/build/browser/filter-list/base/FilterListItem.module.css +38 -0
- package/build/browser/filter-list/base/FilterListItem.module.css.js +9 -0
- package/build/browser/filter-list/base/index.js +22 -0
- package/build/browser/filter-list/base/index.js.map +1 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +75 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +42 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js +85 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.module.css +91 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/DateRangeInput.js +37 -0
- package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +237 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.module.css +20 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.module.css.js +6 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.js +98 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +88 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css.js +12 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js +82 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +54 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +100 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +35 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js +76 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +49 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/NumberRangeInput.js +48 -0
- package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/RangeInput.js +187 -0
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/RangeInput.module.css +81 -0
- package/build/browser/filter-list/base/inputs/RangeInput.module.css.js +13 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js +61 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +63 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +95 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css +55 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css.js +8 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.js +141 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.module.css +25 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.module.css.js +7 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.js +74 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.module.css +73 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.js +43 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.module.css +34 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.module.css.js +8 -0
- package/build/browser/filter-list/base/inputs/createHistogramBuckets.js +53 -0
- package/build/browser/filter-list/base/inputs/createHistogramBuckets.js.map +1 -0
- package/build/browser/filter-list/base/inputs/dateUtils.js +57 -0
- package/build/browser/filter-list/base/inputs/dateUtils.js.map +1 -0
- package/build/browser/filter-list/base/inputs/index.js +25 -0
- package/build/browser/filter-list/base/inputs/index.js.map +1 -0
- package/build/browser/filter-list/base/inputs/shared.module.css +79 -0
- package/build/browser/filter-list/base/inputs/shared.module.css.js +11 -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/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/FilterPanelTypes.js +2 -0
- package/build/browser/filter-list/types/FilterPanelTypes.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 +22 -0
- package/build/browser/filter-list/types/index.js.map +1 -0
- package/build/browser/filter-list/utils/aggregationHelpers.js +44 -0
- package/build/browser/filter-list/utils/aggregationHelpers.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/DefaultCellRenderer.js +43 -0
- package/build/browser/object-table/DefaultCellRenderer.js.map +1 -0
- package/build/browser/object-table/EditableCell.js +91 -0
- package/build/browser/object-table/EditableCell.js.map +1 -0
- package/build/browser/object-table/EditableCell.module.css +3 -0
- package/build/browser/object-table/EditableCell.module.css.js +6 -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 +74 -15
- 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/SelectionCells.js +15 -4
- package/build/browser/object-table/SelectionCells.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 +70 -935
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +45 -0
- package/build/browser/object-table/Table.module.css.js +8 -0
- package/build/browser/object-table/TableBody.js +36 -260
- package/build/browser/object-table/TableBody.module.css +22 -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 +83 -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 +108 -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 +62 -0
- package/build/browser/object-table/TableRow.module.css.js +6 -0
- package/build/browser/object-table/__tests__/useEditableTable.test.js +197 -0
- package/build/browser/object-table/__tests__/useEditableTable.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js +14 -2
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -1
- 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__/useObjectTableData.test.js +113 -25
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +48 -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 +16 -3
- 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/useEditableTable.js +57 -0
- package/build/browser/object-table/hooks/useEditableTable.js.map +1 -0
- package/build/browser/object-table/hooks/useObjectTableData.js +42 -7
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useRowSelection.js +31 -10
- 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/getCellId.js +27 -0
- package/build/browser/object-table/utils/getCellId.js.map +1 -0
- 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 +2 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/shared/ErrorBoundary.js +62 -0
- package/build/browser/shared/ErrorBoundary.js.map +1 -0
- package/build/browser/shared/ErrorBoundary.module.css +55 -0
- package/build/browser/shared/ErrorBoundary.module.css.js +8 -0
- package/build/browser/styles.css +3073 -0
- package/build/cjs/public/experimental.cjs +4026 -240
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +1834 -154
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +453 -50
- 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__/LinkedPropertyInput.test.js +202 -0
- package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/dateUtils.test.js +55 -0
- package/build/esm/filter-list/__tests__/dateUtils.test.js.map +1 -0
- 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 +203 -0
- package/build/esm/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/esm/filter-list/base/FilterInput.js +542 -0
- package/build/esm/filter-list/base/FilterInput.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.js +77 -0
- package/build/esm/filter-list/base/FilterList.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.module.css +67 -0
- package/build/esm/filter-list/base/FilterListContent.js +57 -0
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -0
- package/build/esm/filter-list/base/FilterListContent.module.css +27 -0
- package/build/esm/filter-list/base/FilterListHeader.js +58 -0
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -0
- package/build/esm/filter-list/base/FilterListHeader.module.css +127 -0
- package/build/esm/filter-list/base/FilterListItem.js +75 -0
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -0
- package/build/esm/filter-list/base/FilterListItem.module.css +38 -0
- package/build/esm/filter-list/base/index.js +22 -0
- package/build/esm/filter-list/base/index.js.map +1 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +75 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +42 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js +85 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.module.css +91 -0
- package/build/esm/filter-list/base/inputs/DateRangeInput.js +37 -0
- package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +237 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.module.css +20 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.js +98 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +88 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js +82 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +54 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +100 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +35 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js +76 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +49 -0
- package/build/esm/filter-list/base/inputs/NumberRangeInput.js +48 -0
- package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/RangeInput.js +187 -0
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/RangeInput.module.css +81 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js +61 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +63 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +95 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.module.css +55 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.js +141 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.module.css +25 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.js +74 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.module.css +73 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.js +43 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.module.css +34 -0
- package/build/esm/filter-list/base/inputs/createHistogramBuckets.js +53 -0
- package/build/esm/filter-list/base/inputs/createHistogramBuckets.js.map +1 -0
- package/build/esm/filter-list/base/inputs/dateUtils.js +57 -0
- package/build/esm/filter-list/base/inputs/dateUtils.js.map +1 -0
- package/build/esm/filter-list/base/inputs/index.js +25 -0
- package/build/esm/filter-list/base/inputs/index.js.map +1 -0
- package/build/esm/filter-list/base/inputs/shared.module.css +79 -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/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/FilterPanelTypes.js +2 -0
- package/build/esm/filter-list/types/FilterPanelTypes.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 +22 -0
- package/build/esm/filter-list/types/index.js.map +1 -0
- package/build/esm/filter-list/utils/aggregationHelpers.js +44 -0
- package/build/esm/filter-list/utils/aggregationHelpers.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/DefaultCellRenderer.js +43 -0
- package/build/esm/object-table/DefaultCellRenderer.js.map +1 -0
- package/build/esm/object-table/EditableCell.js +91 -0
- package/build/esm/object-table/EditableCell.js.map +1 -0
- package/build/esm/object-table/EditableCell.module.css +3 -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 +74 -15
- 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/SelectionCells.js +15 -4
- package/build/esm/object-table/SelectionCells.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 +25 -8
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +26 -3
- package/build/esm/object-table/TableBody.module.css +2 -0
- package/build/esm/object-table/TableCell.module.css +22 -1
- 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 +9 -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 +56 -25
- package/build/esm/object-table/TableRow.module.css +2 -0
- package/build/esm/object-table/__tests__/useEditableTable.test.js +197 -0
- package/build/esm/object-table/__tests__/useEditableTable.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js +14 -2
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -1
- 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__/useObjectTableData.test.js +113 -25
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +48 -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 +16 -3
- 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/useEditableTable.js +57 -0
- package/build/esm/object-table/hooks/useEditableTable.js.map +1 -0
- package/build/esm/object-table/hooks/useObjectTableData.js +42 -7
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useRowSelection.js +31 -10
- 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/getCellId.js +27 -0
- package/build/esm/object-table/utils/getCellId.js.map +1 -0
- 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 +2 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/esm/shared/ErrorBoundary.js +62 -0
- package/build/esm/shared/ErrorBoundary.js.map +1 -0
- package/build/esm/shared/ErrorBoundary.module.css +55 -0
- 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 +62 -17
- 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__/LinkedPropertyInput.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts.map +1 -0
- 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 +65 -0
- package/build/types/filter-list/__tests__/testUtils.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterInput.d.ts +15 -0
- package/build/types/filter-list/base/FilterInput.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterList.d.ts +4 -0
- package/build/types/filter-list/base/FilterList.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListContent.d.ts +16 -0
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListHeader.d.ts +14 -0
- package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListItem.d.ts +18 -0
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -0
- package/build/types/filter-list/base/index.d.ts +5 -0
- package/build/types/filter-list/base/index.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +21 -0
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ContainsTextInput.d.ts +13 -0
- package/build/types/filter-list/base/inputs/ContainsTextInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts +21 -0
- package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts +12 -0
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +21 -0
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/RangeInput.d.ts +37 -0
- package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts +13 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/TimelineInput.d.ts +11 -0
- package/build/types/filter-list/base/inputs/TimelineInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ToggleInput.d.ts +10 -0
- package/build/types/filter-list/base/inputs/ToggleInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/createHistogramBuckets.d.ts +16 -0
- package/build/types/filter-list/base/inputs/createHistogramBuckets.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/dateUtils.d.ts +17 -0
- package/build/types/filter-list/base/inputs/dateUtils.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/index.d.ts +8 -0
- package/build/types/filter-list/base/inputs/index.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/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 +56 -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/FilterPanelTypes.d.ts +18 -0
- package/build/types/filter-list/types/FilterPanelTypes.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 +89 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/index.d.ts +5 -0
- package/build/types/filter-list/types/index.d.ts.map +1 -0
- package/build/types/filter-list/utils/aggregationHelpers.d.ts +9 -0
- package/build/types/filter-list/utils/aggregationHelpers.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/DefaultCellRenderer.d.ts +3 -0
- package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -0
- package/build/types/object-table/EditableCell.d.ts +10 -0
- package/build/types/object-table/EditableCell.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 +79 -8
- 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 +26 -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/__tests__/useEditableTable.test.d.ts +1 -0
- package/build/types/object-table/__tests__/useEditableTable.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnDefs.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/useEditableTable.d.ts +22 -0
- package/build/types/object-table/hooks/useEditableTable.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +6 -5
- package/build/types/object-table/hooks/useObjectTableData.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/getCellId.d.ts +3 -0
- package/build/types/object-table/utils/getCellId.d.ts.map +1 -0
- package/build/types/object-table/utils/types.d.ts +14 -0
- package/build/types/object-table/utils/types.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +6 -2
- package/build/types/public/experimental.d.ts.map +1 -1
- package/build/types/shared/ErrorBoundary.d.ts +19 -0
- package/build/types/shared/ErrorBoundary.d.ts.map +1 -0
- package/package.json +17 -9
|
@@ -15,29 +15,49 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { OsdkProvider } from "@osdk/react";
|
|
18
|
+
import { useObjectSet, useOsdkObjects } from "@osdk/react/experimental";
|
|
18
19
|
import { renderHook } from "@testing-library/react";
|
|
19
20
|
import * as React from "react";
|
|
20
|
-
import { describe, expect, it, vi } from "vitest";
|
|
21
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
21
22
|
import { useObjectTableData } from "../useObjectTableData.js";
|
|
23
|
+
const TestObjectType = {
|
|
24
|
+
type: "object",
|
|
25
|
+
apiName: "TestObject"
|
|
26
|
+
};
|
|
22
27
|
vi.mock("@osdk/react/experimental", () => ({
|
|
23
28
|
useOsdkObjects: vi.fn((objectType, options) => {
|
|
24
29
|
return {
|
|
25
30
|
data: [],
|
|
26
31
|
isLoading: false,
|
|
27
32
|
error: undefined,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
isFetchingNextPage: false,
|
|
33
|
+
fetchMore: undefined,
|
|
34
|
+
isOptimistic: false,
|
|
31
35
|
// Return the options to verify they were passed correctly
|
|
32
36
|
_testOptions: options
|
|
33
37
|
};
|
|
38
|
+
}),
|
|
39
|
+
useObjectSet: vi.fn((objectSet, options) => {
|
|
40
|
+
return {
|
|
41
|
+
data: [],
|
|
42
|
+
isLoading: false,
|
|
43
|
+
error: undefined,
|
|
44
|
+
fetchMore: vi.fn(),
|
|
45
|
+
totalCount: undefined,
|
|
46
|
+
// Return the options to verify they were passed correctly
|
|
47
|
+
_testOptions: options,
|
|
48
|
+
isOptimistic: false
|
|
49
|
+
};
|
|
34
50
|
})
|
|
35
51
|
}));
|
|
36
|
-
const
|
|
37
|
-
type: "
|
|
38
|
-
apiName: "
|
|
52
|
+
const TestInterfaceType = {
|
|
53
|
+
type: "interface",
|
|
54
|
+
apiName: "TestInterface"
|
|
39
55
|
};
|
|
40
56
|
describe(useObjectTableData, () => {
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
vi.mocked(useOsdkObjects).mockClear();
|
|
59
|
+
vi.mocked(useObjectSet).mockClear();
|
|
60
|
+
});
|
|
41
61
|
const wrapper = (client => {
|
|
42
62
|
return ({
|
|
43
63
|
children
|
|
@@ -47,30 +67,29 @@ describe(useObjectTableData, () => {
|
|
|
47
67
|
}, children);
|
|
48
68
|
};
|
|
49
69
|
})({});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const mockResult = result.current;
|
|
57
|
-
expect(mockResult._testOptions).toEqual({
|
|
58
|
-
withProperties: undefined,
|
|
59
|
-
pageSize: 50,
|
|
60
|
-
orderBy: undefined
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
it("calls useOsdkObjects with filter clause provided", () => {
|
|
70
|
+
const mockObjectSet = {
|
|
71
|
+
$objectSetInternals: {
|
|
72
|
+
def: TestObjectType
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
it("calls useOsdkObjects with filter clause and orderBy provided", () => {
|
|
64
76
|
const filterClause = {
|
|
65
77
|
name: "John"
|
|
66
78
|
};
|
|
79
|
+
const orderBy = [{
|
|
80
|
+
id: "name",
|
|
81
|
+
desc: false
|
|
82
|
+
}];
|
|
67
83
|
const {
|
|
68
84
|
result
|
|
69
|
-
} = renderHook(() => useObjectTableData(TestObjectType, undefined, filterClause), {
|
|
85
|
+
} = renderHook(() => useObjectTableData(TestObjectType, undefined, filterClause, orderBy), {
|
|
70
86
|
wrapper
|
|
71
87
|
});
|
|
72
88
|
const mockResult = result.current;
|
|
73
89
|
expect(mockResult._testOptions.where).toEqual(filterClause);
|
|
90
|
+
expect(mockResult._testOptions.orderBy).toEqual({
|
|
91
|
+
"name": "asc"
|
|
92
|
+
});
|
|
74
93
|
});
|
|
75
94
|
it("calls useOsdkObjects without withProperties when no columnDefinitions provided", () => {
|
|
76
95
|
const {
|
|
@@ -219,9 +238,78 @@ describe(useObjectTableData, () => {
|
|
|
219
238
|
expect(result.current).toHaveProperty("data");
|
|
220
239
|
expect(result.current).toHaveProperty("isLoading");
|
|
221
240
|
expect(result.current).toHaveProperty("error");
|
|
222
|
-
expect(result.current).toHaveProperty("
|
|
223
|
-
|
|
224
|
-
|
|
241
|
+
expect(result.current).toHaveProperty("fetchMore");
|
|
242
|
+
});
|
|
243
|
+
it("when no objectSet provided, only enables useOsdkObjects", () => {
|
|
244
|
+
const {
|
|
245
|
+
result
|
|
246
|
+
} = renderHook(() => useObjectTableData(TestObjectType), {
|
|
247
|
+
wrapper
|
|
248
|
+
});
|
|
249
|
+
expect(useOsdkObjects).toHaveBeenCalledWith(TestObjectType, expect.objectContaining({
|
|
250
|
+
enabled: true,
|
|
251
|
+
pageSize: 50
|
|
252
|
+
}));
|
|
253
|
+
expect(useObjectSet).toHaveBeenCalledWith(undefined, expect.objectContaining({
|
|
254
|
+
enabled: false,
|
|
255
|
+
pageSize: 50
|
|
256
|
+
}));
|
|
257
|
+
});
|
|
258
|
+
it(" when objectSet is provided, only enables useObjectSet", () => {
|
|
259
|
+
const {
|
|
260
|
+
result
|
|
261
|
+
} = renderHook(() => useObjectTableData(TestObjectType, undefined, undefined, undefined, mockObjectSet), {
|
|
262
|
+
wrapper
|
|
263
|
+
});
|
|
264
|
+
expect(useOsdkObjects).toHaveBeenCalledWith(TestObjectType, expect.objectContaining({
|
|
265
|
+
enabled: false,
|
|
266
|
+
pageSize: 50
|
|
267
|
+
}));
|
|
268
|
+
expect(useObjectSet).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
|
|
269
|
+
enabled: true,
|
|
270
|
+
pageSize: 50
|
|
271
|
+
}));
|
|
272
|
+
});
|
|
273
|
+
it("when objectSet is provided but type is interface, only enables useOsdkObjects ", () => {
|
|
274
|
+
renderHook(() => useObjectTableData(TestInterfaceType, undefined, undefined, undefined, mockObjectSet), {
|
|
275
|
+
wrapper
|
|
276
|
+
});
|
|
277
|
+
expect(useOsdkObjects).toHaveBeenCalledWith(TestInterfaceType, expect.objectContaining({
|
|
278
|
+
enabled: true,
|
|
279
|
+
pageSize: 50
|
|
280
|
+
}));
|
|
281
|
+
expect(useObjectSet).toHaveBeenCalledWith(undefined, expect.objectContaining({
|
|
282
|
+
enabled: false,
|
|
283
|
+
pageSize: 50
|
|
284
|
+
}));
|
|
285
|
+
});
|
|
286
|
+
it("passes filter, orderBy and objectSetOptions to useObjectSet", () => {
|
|
287
|
+
const filterClause = {
|
|
288
|
+
name: "John"
|
|
289
|
+
};
|
|
290
|
+
const sorting = [{
|
|
291
|
+
id: "name",
|
|
292
|
+
desc: false
|
|
293
|
+
}];
|
|
294
|
+
const objectSetOptions = {
|
|
295
|
+
union: [mockObjectSet],
|
|
296
|
+
intersect: [],
|
|
297
|
+
subtract: []
|
|
298
|
+
};
|
|
299
|
+
renderHook(() => useObjectTableData(TestObjectType, undefined, filterClause, sorting, mockObjectSet, objectSetOptions), {
|
|
300
|
+
wrapper
|
|
301
|
+
});
|
|
302
|
+
expect(useObjectSet).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
|
|
303
|
+
enabled: true,
|
|
304
|
+
pageSize: 50,
|
|
305
|
+
where: filterClause,
|
|
306
|
+
orderBy: {
|
|
307
|
+
name: "asc"
|
|
308
|
+
},
|
|
309
|
+
union: objectSetOptions.union,
|
|
310
|
+
intersect: objectSetOptions.intersect,
|
|
311
|
+
subtract: objectSetOptions.subtract
|
|
312
|
+
}));
|
|
225
313
|
});
|
|
226
314
|
});
|
|
227
315
|
//# sourceMappingURL=useObjectTableData.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectTableData.test.js","names":["OsdkProvider","renderHook","React","describe","expect","it","vi","useObjectTableData","mock","useOsdkObjects","fn","objectType","options","data","isLoading","error","undefined","fetchNextPage","hasNextPage","isFetchingNextPage","_testOptions","TestObjectType","type","apiName","wrapper","client","children","createElement","result","mockResult","current","toEqual","withProperties","pageSize","orderBy","filterClause","name","where","toBeUndefined","toBe","columnDefinitions","locator","id","mockRdpCreator1","mockRdpCreator2","creator","rdp1","rdp2","mockRdpCreator","rerender","colDefs","initialProps","firstMockResult","firstWithProperties","secondMockResult","toHaveProperty"],"sources":["useObjectTableData.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 SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport { renderHook } from \"@testing-library/react\";\nimport * as React from \"react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useObjectTableData } from \"../useObjectTableData.js\";\n\ninterface MockUseOsdkObjectsReturn {\n data: [];\n isLoading: false;\n error: undefined;\n fetchNextPage: ReturnType<typeof vi.fn>;\n hasNextPage: false;\n isFetchingNextPage: false;\n _testOptions: {\n withProperties?: Record<string, unknown>;\n pageSize: number;\n where?: WhereClause<any>;\n };\n}\n\nvi.mock(\"@osdk/react/experimental\", () => ({\n useOsdkObjects: vi.fn((objectType, options): MockUseOsdkObjectsReturn => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchNextPage: vi.fn(),\n hasNextPage: false,\n isFetchingNextPage: false,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n };\n }),\n}));\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(useObjectTableData, () => {\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return <OsdkProvider client={client}>{children}</OsdkProvider>;\n };\n };\n\n const fakeClient = {} as unknown as Client;\n const wrapper = createWrapper(fakeClient);\n\n it(\"calls useOsdkObjects with pageSize of 50\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseOsdkObjectsReturn;\n expect(mockResult._testOptions).toEqual({\n withProperties: undefined,\n pageSize: 50,\n orderBy: undefined,\n });\n });\n\n it(\"calls useOsdkObjects with filter clause provided\", () => {\n const filterClause = {\n name: \"John\",\n } as unknown as WhereClause<TestObject>;\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType, undefined, filterClause),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseOsdkObjectsReturn;\n expect(mockResult._testOptions.where).toEqual(filterClause);\n });\n\n it(\"calls useOsdkObjects without withProperties when no columnDefinitions provided\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType, undefined),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseOsdkObjectsReturn;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"calls useOsdkObjects without withProperties when columnDefinitions have no RDP columns\", () => {\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 () => useObjectTableData(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseOsdkObjectsReturn;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"extracts RDP creators and passes them to useOsdkObjects\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { rdp1: any; rdp2: any },\n { myFunction: any }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseOsdkObjectsReturn;\n expect(mockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"memoizes withProperties based on columnDefinitions\", () => {\n const mockRdpCreator = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ colDefs }) => useObjectTableData(TestObjectType, colDefs),\n {\n initialProps: { colDefs: columnDefinitions },\n wrapper,\n },\n );\n\n const firstMockResult = result\n .current as unknown as MockUseOsdkObjectsReturn;\n const firstWithProperties = firstMockResult._testOptions.withProperties;\n\n // Rerender with same columnDefinitions reference\n rerender({ colDefs: columnDefinitions });\n\n // Should be the same reference (memoized)\n const secondMockResult = result\n .current as unknown as MockUseOsdkObjectsReturn;\n expect(secondMockResult._testOptions.withProperties).toBe(\n firstWithProperties,\n );\n });\n\n it(\"updates withProperties when columnDefinitions change\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp1: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n ];\n\n type ColDefs =\n | Array<\n ColumnDefinition<TestObject, Record<string, SimplePropertyDef>, {}>\n >\n | undefined;\n\n const { result, rerender } = renderHook(\n ({ colDefs }: { colDefs: ColDefs }) =>\n useObjectTableData(TestObjectType, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n const firstMockResult = result\n .current as unknown as MockUseOsdkObjectsReturn;\n expect(firstMockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp2: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n ];\n\n rerender({ colDefs: updatedColumnDefinitions as ColDefs });\n\n const secondMockResult = result\n .current as unknown as MockUseOsdkObjectsReturn;\n expect(secondMockResult._testOptions.withProperties).toEqual({\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"returns useOsdkObjects result structure\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType),\n { wrapper },\n );\n\n expect(result.current).toHaveProperty(\"data\");\n expect(result.current).toHaveProperty(\"isLoading\");\n expect(result.current).toHaveProperty(\"error\");\n expect(result.current).toHaveProperty(\"fetchNextPage\");\n expect(result.current).toHaveProperty(\"hasNextPage\");\n expect(result.current).toHaveProperty(\"isFetchingNextPage\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useObjectTableData.test.js","names":["OsdkProvider","useObjectSet","useOsdkObjects","renderHook","React","beforeEach","describe","expect","it","vi","useObjectTableData","TestObjectType","type","apiName","mock","fn","objectType","options","data","isLoading","error","undefined","fetchMore","isOptimistic","_testOptions","objectSet","totalCount","TestInterfaceType","mocked","mockClear","wrapper","client","children","createElement","mockObjectSet","$objectSetInternals","def","filterClause","name","orderBy","id","desc","result","mockResult","current","where","toEqual","withProperties","toBeUndefined","pageSize","toBe","columnDefinitions","locator","mockRdpCreator1","mockRdpCreator2","creator","rdp1","rdp2","mockRdpCreator","rerender","colDefs","initialProps","firstMockResult","firstWithProperties","secondMockResult","toHaveProperty","toHaveBeenCalledWith","objectContaining","enabled","anything","sorting","objectSetOptions","union","intersect","subtract"],"sources":["useObjectTableData.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 InterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport type { UseOsdkListResult } from \"@osdk/react/experimental\";\nimport { useObjectSet, useOsdkObjects } from \"@osdk/react/experimental\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport { renderHook } from \"@testing-library/react\";\nimport * as React from \"react\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useObjectTableData } from \"../useObjectTableData.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\ninterface MockReturnType extends UseOsdkListResult<TestObject> {\n _testOptions: {\n withProperties?: Record<string, unknown>;\n pageSize: number;\n where?: WhereClause<any>;\n enabled?: boolean;\n orderBy?: Record<string, \"asc\" | \"desc\">;\n };\n}\n\nvi.mock(\"@osdk/react/experimental\", () => ({\n useOsdkObjects: vi.fn((objectType, options): MockReturnType => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchMore: undefined,\n isOptimistic: false,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n };\n }),\n useObjectSet: vi.fn((objectSet, options): MockReturnType => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchMore: vi.fn(),\n totalCount: undefined,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n isOptimistic: false,\n };\n }),\n}));\n\nconst TestInterfaceType = {\n type: \"interface\",\n apiName: \"TestInterface\",\n} as const satisfies InterfaceDefinition;\n\ndescribe(useObjectTableData, () => {\n beforeEach(() => {\n vi.mocked(useOsdkObjects).mockClear();\n vi.mocked(useObjectSet).mockClear();\n });\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return <OsdkProvider client={client}>{children}</OsdkProvider>;\n };\n };\n\n const fakeClient = {} as unknown as Client;\n const wrapper = createWrapper(fakeClient);\n\n const mockObjectSet = {\n $objectSetInternals: {\n def: TestObjectType,\n },\n } as unknown as ObjectSet<TestObject>;\n\n it(\"calls useOsdkObjects with filter clause and orderBy provided\", () => {\n const filterClause = {\n name: \"John\",\n } as unknown as WhereClause<TestObject>;\n const orderBy: SortingState = [{\n id: \"name\",\n desc: false,\n }];\n const { result } = renderHook(\n () =>\n useObjectTableData(TestObjectType, undefined, filterClause, orderBy),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockReturnType;\n expect(mockResult._testOptions.where).toEqual(filterClause);\n expect(mockResult._testOptions.orderBy).toEqual({\n \"name\": \"asc\",\n });\n });\n\n it(\"calls useOsdkObjects without withProperties when no columnDefinitions provided\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType, undefined),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockReturnType;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"calls useOsdkObjects without withProperties when columnDefinitions have no RDP columns\", () => {\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 () => useObjectTableData(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockReturnType;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"extracts RDP creators and passes them to useOsdkObjects\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { rdp1: any; rdp2: any },\n { myFunction: any }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockReturnType;\n expect(mockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"memoizes withProperties based on columnDefinitions\", () => {\n const mockRdpCreator = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ colDefs }) => useObjectTableData(TestObjectType, colDefs),\n {\n initialProps: { colDefs: columnDefinitions },\n wrapper,\n },\n );\n\n const firstMockResult = result\n .current as unknown as MockReturnType;\n const firstWithProperties = firstMockResult._testOptions.withProperties;\n\n // Rerender with same columnDefinitions reference\n rerender({ colDefs: columnDefinitions });\n\n // Should be the same reference (memoized)\n const secondMockResult = result\n .current as unknown as MockReturnType;\n expect(secondMockResult._testOptions.withProperties).toBe(\n firstWithProperties,\n );\n });\n\n it(\"updates withProperties when columnDefinitions change\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp1: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n ];\n\n type ColDefs =\n | Array<\n ColumnDefinition<TestObject, Record<string, SimplePropertyDef>, {}>\n >\n | undefined;\n\n const { result, rerender } = renderHook(\n ({ colDefs }: { colDefs: ColDefs }) =>\n useObjectTableData(TestObjectType, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n const firstMockResult = result\n .current as unknown as MockReturnType;\n expect(firstMockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp2: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n ];\n\n rerender({ colDefs: updatedColumnDefinitions as ColDefs });\n\n const secondMockResult = result\n .current as unknown as MockReturnType;\n expect(secondMockResult._testOptions.withProperties).toEqual({\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"returns useOsdkObjects result structure\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType),\n { wrapper },\n );\n\n expect(result.current).toHaveProperty(\"data\");\n expect(result.current).toHaveProperty(\"isLoading\");\n expect(result.current).toHaveProperty(\"error\");\n expect(result.current).toHaveProperty(\"fetchMore\");\n });\n\n it(\"when no objectSet provided, only enables useOsdkObjects\", () => {\n const { result } = renderHook(\n () => useObjectTableData(TestObjectType),\n { wrapper },\n );\n\n expect(useOsdkObjects).toHaveBeenCalledWith(\n TestObjectType,\n expect.objectContaining({\n enabled: true,\n pageSize: 50,\n }),\n );\n\n expect(useObjectSet).toHaveBeenCalledWith(\n undefined,\n expect.objectContaining({\n enabled: false,\n pageSize: 50,\n }),\n );\n });\n\n it(\" when objectSet is provided, only enables useObjectSet\", () => {\n const { result } = renderHook(\n () =>\n useObjectTableData(\n TestObjectType,\n undefined,\n undefined,\n undefined,\n mockObjectSet,\n ),\n { wrapper },\n );\n\n expect(useOsdkObjects).toHaveBeenCalledWith(\n TestObjectType,\n expect.objectContaining({\n enabled: false,\n pageSize: 50,\n }),\n );\n\n expect(useObjectSet).toHaveBeenCalledWith(\n expect.anything(),\n expect.objectContaining({\n enabled: true,\n pageSize: 50,\n }),\n );\n });\n\n it(\"when objectSet is provided but type is interface, only enables useOsdkObjects \", () => {\n renderHook(\n () =>\n useObjectTableData(\n TestInterfaceType,\n undefined,\n undefined,\n undefined,\n mockObjectSet as any,\n ),\n { wrapper },\n );\n\n expect(useOsdkObjects).toHaveBeenCalledWith(\n TestInterfaceType,\n expect.objectContaining({\n enabled: true,\n pageSize: 50,\n }),\n );\n\n expect(useObjectSet).toHaveBeenCalledWith(\n undefined,\n expect.objectContaining({\n enabled: false,\n pageSize: 50,\n }),\n );\n });\n\n it(\"passes filter, orderBy and objectSetOptions to useObjectSet\", () => {\n const filterClause = {\n name: \"John\",\n } as unknown as WhereClause<TestObject>;\n const sorting: SortingState = [\n {\n id: \"name\",\n desc: false,\n },\n ];\n const objectSetOptions = {\n union: [mockObjectSet],\n intersect: [],\n subtract: [],\n };\n\n renderHook(\n () =>\n useObjectTableData(\n TestObjectType,\n undefined,\n filterClause,\n sorting,\n mockObjectSet,\n objectSetOptions,\n ),\n { wrapper },\n );\n\n expect(useObjectSet).toHaveBeenCalledWith(\n expect.anything(),\n expect.objectContaining({\n enabled: true,\n pageSize: 50,\n where: filterClause,\n orderBy: { name: \"asc\" },\n union: objectSetOptions.union,\n intersect: objectSetOptions.intersect,\n subtract: objectSetOptions.subtract,\n }),\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
|
|
@@ -312,6 +315,51 @@ describe("useRowSelection", () => {
|
|
|
312
315
|
"item-7": true
|
|
313
316
|
});
|
|
314
317
|
});
|
|
318
|
+
it("shift-click after deselection should select from the last selected row", () => {
|
|
319
|
+
const data = createMockData(7);
|
|
320
|
+
const {
|
|
321
|
+
result
|
|
322
|
+
} = renderHook(() => useRowSelection({
|
|
323
|
+
selectionMode: "multiple",
|
|
324
|
+
data
|
|
325
|
+
}));
|
|
326
|
+
|
|
327
|
+
// Select rows 0, 1, 2
|
|
328
|
+
act(() => {
|
|
329
|
+
result.current.onToggleRow("item-0", 0);
|
|
330
|
+
});
|
|
331
|
+
act(() => {
|
|
332
|
+
result.current.onToggleRow("item-1", 1);
|
|
333
|
+
});
|
|
334
|
+
act(() => {
|
|
335
|
+
result.current.onToggleRow("item-2", 2);
|
|
336
|
+
});
|
|
337
|
+
expect(result.current.rowSelection).toEqual({
|
|
338
|
+
"item-0": true,
|
|
339
|
+
"item-1": true,
|
|
340
|
+
"item-2": true
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
// Deselect row 1 (clears lastSelectedRowIndex)
|
|
344
|
+
act(() => {
|
|
345
|
+
result.current.onToggleRow("item-1", 1);
|
|
346
|
+
});
|
|
347
|
+
expect(result.current.rowSelection).toEqual({
|
|
348
|
+
"item-0": true,
|
|
349
|
+
"item-2": true
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
// Shift-click row 4 - should select from row 2 to row 4
|
|
353
|
+
act(() => {
|
|
354
|
+
result.current.onToggleRow("item-4", 4, true);
|
|
355
|
+
});
|
|
356
|
+
expect(result.current.rowSelection).toEqual({
|
|
357
|
+
"item-0": true,
|
|
358
|
+
"item-2": true,
|
|
359
|
+
"item-3": true,
|
|
360
|
+
"item-4": true
|
|
361
|
+
});
|
|
362
|
+
});
|
|
315
363
|
it("toggles all rows", () => {
|
|
316
364
|
const data = createMockData(3);
|
|
317
365
|
const onRowSelection = vi.fn();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRowSelection.test.js","names":["act","renderHook","describe","expect","it","vi","useRowSelection","TestObjectType","type","apiName","createMockData","count","Array","from","length","_","i","$primaryKey","$objectType","$apiName","$title","data","result","selectionMode","current","rowSelection","toEqual","isAllSelected","toBe","hasSelection","onToggleRow","onToggleAll","onRowSelection","fn","toHaveBeenCalledWith","toHaveBeenLastCalledWith","selectedRows","rerender","initialProps","undefined"],"sources":["useRowSelection.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, Osdk, PrimaryKeyType } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useRowSelection } from \"../useRowSelection.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 data\nfunction createMockData(\n count: number,\n): Array<\n Osdk.Instance<TestObject, \"$allBaseProperties\", never, Record<string, never>>\n> {\n return Array.from({ length: count }, (_, i) => ({\n $primaryKey: `item-${i}` as PrimaryKeyType<TestObject>,\n $objectType: \"TestObject\",\n $apiName: \"TestObject\",\n $title: `Item ${i}`,\n } as Osdk.Instance<\n TestObject,\n \"$allBaseProperties\",\n never,\n Record<string, never>\n >));\n}\n\ndescribe(\"useRowSelection\", () => {\n describe(\"disabled mode (selectionMode: 'none')\", () => {\n it(\"returns empty selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n });\n\n it(\"does not respond to toggle operations\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n });\n });\n\n describe(\"uncontrolled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"selects a single row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n expect(result.current.hasSelection).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n });\n\n it(\"deselects when toggling selected row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n // Select\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n // Deselect\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n\n it(\"replaces selection when selecting different row\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"treats shift-click as a normal click\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n // First click as the lastSelectedRow\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"selects multiple rows independently and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"deselects individual rows\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select two rows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n });\n\n // Deselect one\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n });\n\n it(\"selects range with shift-click and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click to select range\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"selects range in reverse order (shift-click up)\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // First click on row 3\n act(() => {\n result.current.onToggleRow(\"item-3\", 3);\n });\n\n // Shift-click to row 1 (upward)\n act(() => {\n result.current.onToggleRow(\"item-1\", 1, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n });\n\n it(\"shift-click without previous selection does not select range\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Shift-click without previous selection\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n\n it(\"merges range selection with existing selections\", () => {\n const data = createMockData(10);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select row 0\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Select row 5\n act(() => {\n result.current.onToggleRow(\"item-5\", 5);\n });\n\n // Shift-click to row 7 (should keep row 0)\n act(() => {\n result.current.onToggleRow(\"item-7\", 7, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-5\": true,\n \"item-6\": true,\n \"item-7\": true,\n });\n });\n\n it(\"toggles all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n expect(result.current.isAllSelected).toBe(false);\n\n // Select all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Deselect all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n });\n });\n\n describe(\"controlled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows: [data[1].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"calls onRowSelection when toggling but does not update internal state\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows,\n onRowSelection,\n data,\n }),\n {\n initialProps: { selectedRows: [] as PrimaryKeyType<TestObject>[] },\n },\n );\n\n expect(result.current.rowSelection).toEqual({});\n\n // Click row\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Callback is called\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n\n // State doesn't change (controlled)\n expect(result.current.rowSelection).toEqual({});\n\n // Parent updates prop\n rerender({ selectedRows: [data[0].$primaryKey] });\n\n // Now state reflects the prop\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey, data[2].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n });\n\n it(\"calls onRowSelection when toggling rows\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey],\n onRowSelection,\n data,\n })\n );\n\n // Add selection to selectedRows\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Remove selection from selectedRows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([]);\n });\n\n it(\"calls onRowSelection for shift-click range selection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"calls onRowSelection when toggling all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"updates when selectedRows prop changes\", () => {\n const data = createMockData(5);\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows,\n data,\n }),\n {\n initialProps: {\n selectedRows: [data[0].$primaryKey] as PrimaryKeyType<\n TestObject\n >[],\n },\n },\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n rerender({\n selectedRows: [data[1].$primaryKey, data[2].$primaryKey],\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n });\n });\n });\n });\n describe(\"edge cases\", () => {\n it(\"handles undefined data gracefully\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: undefined,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n\n // Should not crash\n act(() => {\n result.current.onToggleAll();\n result.current.onToggleRow(\"item-0\", 0);\n });\n });\n\n it(\"handles empty data array\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: [],\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,GAAG,EAAEC,UAAU,QAAQ,wBAAwB;AACxD,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,QAAQ;AACjD,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE,QAAQ;EACdC,OAAO,EAAE;AACX,CAAyC;AAIzC;AACA,SAASC,cAAcA,CACrBC,KAAa,EAGb;EACA,OAAOC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAEH;EAAM,CAAC,EAAE,CAACI,CAAC,EAAEC,CAAC,MAAM;IAC9CC,WAAW,EAAE,QAAQD,CAAC,EAAgC;IACtDE,WAAW,EAAE,YAAY;IACzBC,QAAQ,EAAE,YAAY;IACtBC,MAAM,EAAE,QAAQJ,CAAC;EACnB,CAAC,CAKC,CAAC;AACL;AAEAd,QAAQ,CAAC,iBAAiB,EAAE,MAAM;EAChCA,QAAQ,CAAC,uCAAuC,EAAE,MAAM;IACtDE,EAAE,CAAC,+BAA+B,EAAE,MAAM;MACxC,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;MAC9B,MAAM;QAAEY;MAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;QACdiB,aAAa,EAAE,MAAM;QACrBF;MACF,CAAC,CACH,CAAC;MAEDlB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAChDzB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;IACjD,CAAC,CAAC;IAEFxB,EAAE,CAAC,uCAAuC,EAAE,MAAM;MAChD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;MAC9B,MAAM;QAAEY;MAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;QACdiB,aAAa,EAAE,MAAM;QACrBF;MACF,CAAC,CACH,CAAC;MAEDrB,GAAG,CAAC,MAAM;QACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;MACzC,CAAC,CAAC;MAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;MAE/C5B,GAAG,CAAC,MAAM;QACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;MAC9B,CAAC,CAAC;MAEF5B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;IACjD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IAClCA,QAAQ,CAAC,uBAAuB,EAAE,MAAM;MACtCE,EAAE,CAAC,+CAA+C,EAAE,MAAM;QACxD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBS,cAAc;UACdX;QACF,CAAC,CACH,CAAC;QAEDrB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAC/DvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;QAC9CzB,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,CAACb,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CAAC,CAAC;MACpE,CAAC,CAAC;MAEFb,EAAE,CAAC,+DAA+D,EAAE,MAAM;QACxE,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBS,cAAc;UACdX;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;;QAE/D;QACA1B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;QAC/CzB,MAAM,CAAC6B,cAAc,CAAC,CAACG,wBAAwB,CAAC,EAAE,CAAC;MACrD,CAAC,CAAC;MAEF/B,EAAE,CAAC,iDAAiD,EAAE,MAAM;QAC1D,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBF;QACF,CAAC,CACH,CAAC;QAEDrB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAE/D1B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAC/DvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;MAChD,CAAC,CAAC;MAEFxB,EAAE,CAAC,sCAAsC,EAAE,MAAM;QAC/C,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBF;QACF,CAAC,CACH,CAAC;QACD;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;MACjE,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFxB,QAAQ,CAAC,yBAAyB,EAAE,MAAM;MACxCE,EAAE,CAAC,8DAA8D,EAAE,MAAM;QACvE,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBS,cAAc;UACdX;QACF,CAAC,CACH,CAAC;QAEDrB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAE/D1B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;QACFvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;QAChDzB,MAAM,CAAC6B,cAAc,CAAC,CAACG,wBAAwB,CAAC,CAC9Cd,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;MACJ,CAAC,CAAC;MAEFb,EAAE,CAAC,2BAA2B,EAAE,MAAM;QACpC,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBF;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QACF9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;;QAEF;QACA1B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;MACjE,CAAC,CAAC;MAEFtB,EAAE,CAAC,yDAAyD,EAAE,MAAM;QAClE,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBS,cAAc;UACdX;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;QACFvB,MAAM,CAAC6B,cAAc,CAAC,CAACG,wBAAwB,CAAC,CAC9Cd,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;MACJ,CAAC,CAAC;MAEFb,EAAE,CAAC,iDAAiD,EAAE,MAAM;QAC1D,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBF;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtB,EAAE,CAAC,8DAA8D,EAAE,MAAM;QACvE,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBF;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;MACjE,CAAC,CAAC;MAEFtB,EAAE,CAAC,iDAAiD,EAAE,MAAM;QAC1D,MAAMiB,IAAI,GAAGX,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBF;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtB,EAAE,CAAC,kBAAkB,EAAE,MAAM;QAC3B,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBS,cAAc;UACdX;QACF,CAAC,CACH,CAAC;QAEDlB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;;QAEhD;QACA5B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF5B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;QACFvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;QAC/CzB,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,CAC1Cb,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;;QAEF;QACAjB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF5B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;QAChDzB,MAAM,CAAC6B,cAAc,CAAC,CAACG,wBAAwB,CAAC,EAAE,CAAC;MACrD,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAChCA,QAAQ,CAAC,uBAAuB,EAAE,MAAM;MACtCE,EAAE,CAAC,4CAA4C,EAAE,MAAM;QACrD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBa,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CAAC;UACnCI;QACF,CAAC,CACH,CAAC;QAEDlB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAC/DvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;MAChD,CAAC,CAAC;MAEFxB,EAAE,CAAC,uEAAuE,EAAE,MAAM;QAChF,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX,MAAM;UAAEe;QAAS,CAAC,GAAGpC,UAAU,CACrC,CAAC;UAAEmC;QAAa,CAAC,KACf9B,eAAe,CAAC;UACdiB,aAAa,EAAE,QAAQ;UACvBa,YAAY;UACZJ,cAAc;UACdX;QACF,CAAC,CAAC,EACJ;UACEiB,YAAY,EAAE;YAAEF,YAAY,EAAE;UAAmC;QACnE,CACF,CAAC;QAEDjC,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;;QAE/C;QACA1B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA3B,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,CAACb,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CAAC,CAAC;;QAElE;QACAd,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;;QAE/C;QACAW,QAAQ,CAAC;UAAED,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW;QAAE,CAAC,CAAC;;QAEjD;QACAd,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;MACjE,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFxB,QAAQ,CAAC,yBAAyB,EAAE,MAAM;MACxCE,EAAE,CAAC,4CAA4C,EAAE,MAAM;QACrD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBa,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EAAEI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CAAC;UACxDI;QACF,CAAC,CACH,CAAC;QAEDlB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtB,EAAE,CAAC,yCAAyC,EAAE,MAAM;QAClD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBa,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CAAC;UACnCe,cAAc;UACdX;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,CAC1Cb,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;;QAEF;QACAjB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF3B,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,EAAE,CAAC;MACjD,CAAC,CAAC;MAEF9B,EAAE,CAAC,sDAAsD,EAAE,MAAM;QAC/D,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBa,YAAY,EAAE,EAAE;UAChBJ,cAAc;UACdX;QACF,CAAC,CACH,CAAC;;QAED;QACArB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;;QAEF;QACA9B,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF3B,MAAM,CAAC6B,cAAc,CAAC,CAACG,wBAAwB,CAAC,CAC9Cd,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;MACJ,CAAC,CAAC;MAEFb,EAAE,CAAC,6CAA6C,EAAE,MAAM;QACtD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAMsB,cAAc,GAAG3B,EAAE,CAAC4B,EAAE,CAAC,CAAC;QAC9B,MAAM;UAAEX;QAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBa,YAAY,EAAE,EAAE;UAChBJ,cAAc;UACdX;QACF,CAAC,CACH,CAAC;QAEDrB,GAAG,CAAC,MAAM;UACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF5B,MAAM,CAAC6B,cAAc,CAAC,CAACE,oBAAoB,CAAC,CAC1Cb,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EACnBI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,CACpB,CAAC;MACJ,CAAC,CAAC;MAEFb,EAAE,CAAC,wCAAwC,EAAE,MAAM;QACjD,MAAMiB,IAAI,GAAGX,cAAc,CAAC,CAAC,CAAC;QAC9B,MAAM;UAAEY,MAAM;UAAEe;QAAS,CAAC,GAAGpC,UAAU,CACrC,CAAC;UAAEmC;QAAa,CAAC,KACf9B,eAAe,CAAC;UACdiB,aAAa,EAAE,UAAU;UACzBa,YAAY;UACZf;QACF,CAAC,CAAC,EACJ;UACEiB,YAAY,EAAE;YACZF,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW;UAGpC;QACF,CACF,CAAC;QAEDd,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAAE,QAAQ,EAAE;QAAK,CAAC,CAAC;QAE/DW,QAAQ,CAAC;UACPD,YAAY,EAAE,CAACf,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW,EAAEI,IAAI,CAAC,CAAC,CAAC,CAACJ,WAAW;QACzD,CAAC,CAAC;QAEFd,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC;UAC1C,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EACFxB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC3BE,EAAE,CAAC,mCAAmC,EAAE,MAAM;MAC5C,MAAM;QAAEkB;MAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;QACdiB,aAAa,EAAE,UAAU;QACzBF,IAAI,EAAEkB;MACR,CAAC,CACH,CAAC;MAEDpC,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAChDzB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACK,YAAY,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;;MAE/C;MACA5B,GAAG,CAAC,MAAM;QACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;QAC5BT,MAAM,CAACE,OAAO,CAACM,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF1B,EAAE,CAAC,0BAA0B,EAAE,MAAM;MACnC,MAAM;QAAEkB;MAAO,CAAC,GAAGrB,UAAU,CAAC,MAC5BK,eAAe,CAAC;QACdiB,aAAa,EAAE,UAAU;QACzBF,IAAI,EAAE;MACR,CAAC,CACH,CAAC;MAEDlB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MAC/CvB,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACG,aAAa,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAEhD5B,GAAG,CAAC,MAAM;QACRsB,MAAM,CAACE,OAAO,CAACO,WAAW,CAAC,CAAC;MAC9B,CAAC,CAAC;MAEF5B,MAAM,CAACmB,MAAM,CAACE,OAAO,CAACC,YAAY,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useRowSelection.test.js","names":["act","renderHook","describe","expect","it","vi","useRowSelection","TestObjectType","type","apiName","createMockData","count","Array","from","length","_","i","$primaryKey","$objectType","$apiName","$title","data","result","selectionMode","current","rowSelection","toEqual","isAllSelected","toBe","hasSelection","enableRowSelection","onToggleRow","onToggleAll","onRowSelection","fn","toHaveBeenCalledWith","toHaveBeenLastCalledWith","selectedRows","rerender","initialProps","undefined"],"sources":["useRowSelection.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, Osdk, PrimaryKeyType } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useRowSelection } from \"../useRowSelection.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 data\nfunction createMockData(\n count: number,\n): Array<\n Osdk.Instance<TestObject, \"$allBaseProperties\", never, Record<string, never>>\n> {\n return Array.from({ length: count }, (_, i) => ({\n $primaryKey: `item-${i}` as PrimaryKeyType<TestObject>,\n $objectType: \"TestObject\",\n $apiName: \"TestObject\",\n $title: `Item ${i}`,\n } as Osdk.Instance<\n TestObject,\n \"$allBaseProperties\",\n never,\n Record<string, never>\n >));\n}\n\ndescribe(\"useRowSelection\", () => {\n describe(\"disabled mode (selectionMode: 'none')\", () => {\n it(\"returns empty selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n expect(result.current.enableRowSelection).toBe(false);\n });\n\n it(\"does not respond to toggle operations\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n });\n });\n\n describe(\"uncontrolled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"selects a single row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.enableRowSelection).toBe(true);\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n expect(result.current.hasSelection).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n });\n\n it(\"deselects when toggling selected row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n // Select\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n // Deselect\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n\n it(\"replaces selection when selecting different row\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"treats shift-click as a normal click\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n // First click as the lastSelectedRow\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"selects multiple rows independently and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(result.current.enableRowSelection).toBe(true);\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"deselects individual rows\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select two rows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n });\n\n // Deselect one\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n });\n\n it(\"selects range with shift-click and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click to select range\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"selects range in reverse order (shift-click up)\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // First click on row 3\n act(() => {\n result.current.onToggleRow(\"item-3\", 3);\n });\n\n // Shift-click to row 1 (upward)\n act(() => {\n result.current.onToggleRow(\"item-1\", 1, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n });\n\n it(\"shift-click without previous selection does not select range\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Shift-click without previous selection\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n\n it(\"merges range selection with existing selections\", () => {\n const data = createMockData(10);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select row 0\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Select row 5\n act(() => {\n result.current.onToggleRow(\"item-5\", 5);\n });\n\n // Shift-click to row 7 (should keep row 0)\n act(() => {\n result.current.onToggleRow(\"item-7\", 7, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-5\": true,\n \"item-6\": true,\n \"item-7\": true,\n });\n });\n\n it(\"shift-click after deselection should select from the last selected row\", () => {\n const data = createMockData(7);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select rows 0, 1, 2\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n \"item-2\": true,\n });\n\n // Deselect row 1 (clears lastSelectedRowIndex)\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n\n // Shift-click row 4 - should select from row 2 to row 4\n act(() => {\n result.current.onToggleRow(\"item-4\", 4, true);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n \"item-3\": true,\n \"item-4\": true,\n });\n });\n\n it(\"toggles all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n expect(result.current.isAllSelected).toBe(false);\n\n // Select all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Deselect all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n });\n });\n\n describe(\"controlled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows: [data[1].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"calls onRowSelection when toggling but does not update internal state\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows,\n onRowSelection,\n data,\n }),\n {\n initialProps: { selectedRows: [] as PrimaryKeyType<TestObject>[] },\n },\n );\n\n expect(result.current.rowSelection).toEqual({});\n\n // Click row\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Callback is called\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n\n // State doesn't change (controlled)\n expect(result.current.rowSelection).toEqual({});\n\n // Parent updates prop\n rerender({ selectedRows: [data[0].$primaryKey] });\n\n // Now state reflects the prop\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey, data[2].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n });\n\n it(\"calls onRowSelection when toggling rows\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey],\n onRowSelection,\n data,\n })\n );\n\n // Add selection to selectedRows\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Remove selection from selectedRows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([]);\n });\n\n it(\"calls onRowSelection for shift-click range selection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"calls onRowSelection when toggling all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"updates when selectedRows prop changes\", () => {\n const data = createMockData(5);\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows,\n data,\n }),\n {\n initialProps: {\n selectedRows: [data[0].$primaryKey] as PrimaryKeyType<\n TestObject\n >[],\n },\n },\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n rerender({\n selectedRows: [data[1].$primaryKey, data[2].$primaryKey],\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n });\n });\n });\n });\n describe(\"edge cases\", () => {\n it(\"handles undefined data gracefully\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: undefined,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n\n // Should not crash\n act(() => {\n result.current.onToggleAll();\n result.current.onToggleRow(\"item-0\", 0);\n });\n });\n\n it(\"handles empty data array\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: [],\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|