@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListItemApi.js","names":[],"sources":["FilterListItemApi.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n CompileTimeMetadata,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WirePropertyTypes,\n} from \"@osdk/api\";\
|
|
1
|
+
{"version":3,"file":"FilterListItemApi.js","names":[],"sources":["FilterListItemApi.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n CompileTimeMetadata,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport type { CustomFilterState } from \"./types/CustomRendererTypes.js\";\nimport type { KeywordSearchFilterState } from \"./types/KeywordSearchTypes.js\";\nimport type {\n HasLinkFilterState,\n LinkedPropertyFilterState,\n} from \"./types/LinkedFilterTypes.js\";\n\n/**\n * Helper type to extract the property type from an ObjectTypeDefinition given a property key\n */\nexport type PropertyTypeFromKey<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> = CompileTimeMetadata<Q>[\"properties\"][K][\"type\"];\n\n/**\n * All available filter component types\n */\nexport type FilterComponentType =\n | \"LISTOGRAM\"\n | \"DATE_RANGE\"\n | \"NUMBER_RANGE\"\n | \"TEXT_TAGS\"\n | \"CONTAINS_TEXT\"\n | \"SINGLE_SELECT\"\n | \"MULTI_SELECT\"\n | \"SINGLE_DATE\"\n | \"MULTI_DATE\"\n | \"TIMELINE\"\n | \"CHECKBOX_LIST\"\n | \"TOGGLE\";\n\n/**\n * Gets valid component types for a given property type\n */\nexport type ValidComponentsForPropertyType<P extends WirePropertyTypes> =\n P extends \"boolean\"\n ? \"LISTOGRAM\" | \"CHECKBOX_LIST\" | \"SINGLE_SELECT\" | \"TOGGLE\"\n : P extends \"string\" ?\n | \"LISTOGRAM\"\n | \"TEXT_TAGS\"\n | \"CONTAINS_TEXT\"\n | \"SINGLE_SELECT\"\n | \"MULTI_SELECT\"\n | \"CHECKBOX_LIST\"\n : P extends \"datetime\" | \"timestamp\"\n ? \"DATE_RANGE\" | \"SINGLE_DATE\" | \"MULTI_DATE\" | \"TIMELINE\"\n : P extends\n | \"double\"\n | \"integer\"\n | \"long\"\n | \"float\"\n | \"short\"\n | \"byte\"\n | \"decimal\" ? \"NUMBER_RANGE\" | \"SINGLE_SELECT\" | \"MULTI_SELECT\"\n : never;\n\n/**\n * Union of all possible filter states\n */\nexport type FilterState =\n | ExactMatchFilterState<string | boolean>\n | DateRangeFilterState\n | ContainsTextFilterState\n | NumberRangeFilterState\n | SelectFilterState<string | boolean | number>\n | SelectFilterState<Date>\n | TimelineFilterState\n | ToggleFilterState\n | HasLinkFilterState\n | LinkedPropertyFilterState\n | KeywordSearchFilterState\n | CustomFilterState;\n\n/**\n * Maps component types to their corresponding state types\n */\nexport interface FilterStateByComponentType {\n LISTOGRAM: ExactMatchFilterState<string | boolean>;\n DATE_RANGE: DateRangeFilterState;\n TEXT_TAGS: ExactMatchFilterState<string>;\n CONTAINS_TEXT: ContainsTextFilterState;\n NUMBER_RANGE: NumberRangeFilterState;\n SINGLE_SELECT: SelectFilterState<string | boolean | number>;\n MULTI_SELECT: SelectFilterState<string | boolean | number>;\n SINGLE_DATE: SelectFilterState<Date>;\n MULTI_DATE: SelectFilterState<Date>;\n TIMELINE: TimelineFilterState;\n CHECKBOX_LIST: SelectFilterState<string>;\n TOGGLE: ToggleFilterState;\n}\n\n/**\n * All filter state discriminator types\n */\nexport type FilterStateType =\n | \"EXACT_MATCH\"\n | \"DATE_RANGE\"\n | \"NUMBER_RANGE\"\n | \"CONTAINS_TEXT\"\n | \"SELECT\"\n | \"TIMELINE\"\n | \"TOGGLE\"\n | \"hasLink\"\n | \"linkedProperty\"\n | \"keywordSearch\"\n | \"custom\";\n\n/**\n * Base interface for all filter states\n * Contains common properties shared across all filter types\n */\nexport interface BaseFilterState {\n /**\n * The type of filter component\n */\n type: FilterStateType;\n\n /**\n * If true, the objects satisfying the filter are excluded\n * @default false\n */\n isExcluding?: boolean;\n\n /**\n * If true, include objects that have no value\n * @default false\n */\n includeNull?: boolean;\n}\n\nexport interface ExactMatchFilterState<T = string | boolean>\n extends BaseFilterState\n{\n type: \"EXACT_MATCH\";\n values: T[];\n}\n\nexport interface DateRangeFilterState extends BaseFilterState {\n type: \"DATE_RANGE\";\n /**\n * The earliest date the user can select\n */\n minValue?: Date;\n /**\n * The latest date the user can select\n */\n maxValue?: Date;\n}\n\nexport interface ContainsTextFilterState extends BaseFilterState {\n type: \"CONTAINS_TEXT\";\n value?: string;\n}\n\nexport interface NumberRangeFilterState extends BaseFilterState {\n type: \"NUMBER_RANGE\";\n /**\n * Minimum numeric value (inclusive)\n */\n minValue?: number;\n /**\n * Maximum numeric value (inclusive)\n */\n maxValue?: number;\n}\n\n/**\n * Consolidated state type for select-based filters.\n * Used by SINGLE_SELECT, MULTI_SELECT, SINGLE_DATE, MULTI_DATE, and CHECKBOX_LIST.\n */\nexport interface SelectFilterState<T = string | boolean | number | Date>\n extends BaseFilterState\n{\n type: \"SELECT\";\n selectedValues: T[];\n}\n\nexport interface TimelineFilterState extends BaseFilterState {\n type: \"TIMELINE\";\n startDate?: Date;\n endDate?: Date;\n granularity?: \"day\" | \"week\" | \"month\" | \"quarter\" | \"year\";\n}\n\nexport interface ToggleFilterState extends BaseFilterState {\n type: \"TOGGLE\";\n enabled: boolean;\n}\n\n/**\n * A property filter definition specifies configuration for filtering on a single property\n *\n * The component type C must be compatible with the property type derived from the key.\n * For example, boolean properties can only use LISTOGRAM, CHECKBOX_LIST, or SINGLE_SELECT,\n * while string properties can use LISTOGRAM, TEXT_TAGS, CONTAINS_TEXT, SINGLE_SELECT, MULTI_SELECT, or CHECKBOX_LIST.\n */\nexport interface PropertyFilterDefinition<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q> = PropertyKeys<Q>,\n C extends ValidComponentsForPropertyType<\n PropertyTypeFromKey<Q, K>\n > = ValidComponentsForPropertyType<PropertyTypeFromKey<Q, K>>,\n> {\n /**\n * Discriminator for filter definition type\n */\n type: \"PROPERTY\";\n\n /**\n * Optional unique identifier for stable keying across filter reorders.\n */\n id?: string;\n\n /**\n * The property key to filter on\n */\n key: K;\n\n /**\n * Display label for the filter\n */\n label?: string;\n\n /**\n * The filter component type to render\n * Must be compatible with the property type derived from the key, see ValidComponentsForPropertyType\n */\n filterComponent: C;\n\n /**\n * The current state of the filter.\n * If provided, the filter is controlled.\n */\n filterState: FilterStateByComponentType[C];\n\n /**\n * Controls whether this filter is rendered.\n * When false, the filter is hidden but its state is preserved.\n * @default true\n */\n isVisible?: boolean;\n}\n\n/**\n * Props for a single filter list item component.\n * Extends PropertyFilterDefinition with runtime props for rendering.\n */\nexport interface FilterListItemProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q> = PropertyKeys<Q>,\n C extends ValidComponentsForPropertyType<\n PropertyTypeFromKey<Q, K>\n > = ValidComponentsForPropertyType<PropertyTypeFromKey<Q, K>>,\n> extends PropertyFilterDefinition<Q, K, C> {\n objectSet: ObjectSet<Q>;\n\n /**\n * Called when the state of the filter changes.\n * Required in controlled mode.\n */\n onFilterStateChanged: (state: FilterStateByComponentType[C]) => void;\n\n onFilterRemoved?: (key: PropertyKeys<Q>) => void;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
20
|
+
import { LinkedPropertyInput } from "../base/inputs/LinkedPropertyInput.js";
|
|
21
|
+
const MockLinkedObjectType = {
|
|
22
|
+
apiName: "Office",
|
|
23
|
+
type: "object",
|
|
24
|
+
__DefinitionMetadata: {
|
|
25
|
+
primaryKeyApiName: "officeId",
|
|
26
|
+
primaryKeyType: "string",
|
|
27
|
+
properties: {
|
|
28
|
+
officeId: {
|
|
29
|
+
type: "string",
|
|
30
|
+
multiplicity: false
|
|
31
|
+
},
|
|
32
|
+
name: {
|
|
33
|
+
type: "string",
|
|
34
|
+
multiplicity: false
|
|
35
|
+
},
|
|
36
|
+
capacity: {
|
|
37
|
+
type: "integer",
|
|
38
|
+
multiplicity: false
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
function createMockObjectSet() {
|
|
44
|
+
return {
|
|
45
|
+
$objectSetInternals: {
|
|
46
|
+
def: {
|
|
47
|
+
apiName: "Employee",
|
|
48
|
+
type: "object"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
pivotTo: vi.fn().mockReturnValue({
|
|
52
|
+
$objectSetInternals: {
|
|
53
|
+
def: MockLinkedObjectType
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function createDefinition(linkedFilterComponent) {
|
|
59
|
+
return {
|
|
60
|
+
type: "LINKED_PROPERTY",
|
|
61
|
+
linkName: "primaryOffice",
|
|
62
|
+
linkedPropertyKey: "name",
|
|
63
|
+
linkedFilterComponent,
|
|
64
|
+
linkedFilterState: {
|
|
65
|
+
type: "SELECT",
|
|
66
|
+
selectedValues: []
|
|
67
|
+
},
|
|
68
|
+
filterState: {
|
|
69
|
+
type: "linkedProperty",
|
|
70
|
+
linkedFilterState: {
|
|
71
|
+
type: "SELECT",
|
|
72
|
+
selectedValues: []
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
describe("LinkedPropertyInput", () => {
|
|
78
|
+
afterEach(() => {
|
|
79
|
+
cleanup();
|
|
80
|
+
});
|
|
81
|
+
describe("state wrapping", () => {
|
|
82
|
+
it("wraps child onChange in LINKED_PROPERTY state", () => {
|
|
83
|
+
const mockObjectSet = createMockObjectSet();
|
|
84
|
+
const onFilterStateChanged = vi.fn();
|
|
85
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
86
|
+
objectSet: mockObjectSet,
|
|
87
|
+
definition: createDefinition("TOGGLE"),
|
|
88
|
+
filterState: undefined,
|
|
89
|
+
onFilterStateChanged: onFilterStateChanged
|
|
90
|
+
}));
|
|
91
|
+
const toggle = screen.getByRole("switch");
|
|
92
|
+
toggle.click();
|
|
93
|
+
expect(onFilterStateChanged).toHaveBeenCalledWith({
|
|
94
|
+
type: "linkedProperty",
|
|
95
|
+
linkedFilterState: {
|
|
96
|
+
type: "TOGGLE",
|
|
97
|
+
enabled: true
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe("state unwrapping", () => {
|
|
103
|
+
it("extracts linkedFilterState from LINKED_PROPERTY wrapper", () => {
|
|
104
|
+
const mockObjectSet = createMockObjectSet();
|
|
105
|
+
const onFilterStateChanged = vi.fn();
|
|
106
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
107
|
+
objectSet: mockObjectSet,
|
|
108
|
+
definition: createDefinition("TOGGLE"),
|
|
109
|
+
filterState: {
|
|
110
|
+
type: "linkedProperty",
|
|
111
|
+
linkedFilterState: {
|
|
112
|
+
type: "TOGGLE",
|
|
113
|
+
enabled: true
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
onFilterStateChanged: onFilterStateChanged
|
|
117
|
+
}));
|
|
118
|
+
const toggle = screen.getByRole("switch");
|
|
119
|
+
expect(toggle.getAttribute("aria-checked")).toBe("true");
|
|
120
|
+
});
|
|
121
|
+
it("handles undefined filterState gracefully", () => {
|
|
122
|
+
const mockObjectSet = createMockObjectSet();
|
|
123
|
+
const onFilterStateChanged = vi.fn();
|
|
124
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
125
|
+
objectSet: mockObjectSet,
|
|
126
|
+
definition: createDefinition("TOGGLE"),
|
|
127
|
+
filterState: undefined,
|
|
128
|
+
onFilterStateChanged: onFilterStateChanged
|
|
129
|
+
}));
|
|
130
|
+
const toggle = screen.getByRole("switch");
|
|
131
|
+
expect(toggle.getAttribute("aria-checked")).toBe("false");
|
|
132
|
+
});
|
|
133
|
+
it("handles filterState with wrong type gracefully", () => {
|
|
134
|
+
const mockObjectSet = createMockObjectSet();
|
|
135
|
+
const onFilterStateChanged = vi.fn();
|
|
136
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
137
|
+
objectSet: mockObjectSet,
|
|
138
|
+
definition: createDefinition("TOGGLE"),
|
|
139
|
+
filterState: {
|
|
140
|
+
type: "SELECT",
|
|
141
|
+
selectedValues: ["value1"]
|
|
142
|
+
},
|
|
143
|
+
onFilterStateChanged: onFilterStateChanged
|
|
144
|
+
}));
|
|
145
|
+
const toggle = screen.getByRole("switch");
|
|
146
|
+
expect(toggle.getAttribute("aria-checked")).toBe("false");
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("ObjectSet pivoting", () => {
|
|
150
|
+
it("calls pivotTo with correct link name", () => {
|
|
151
|
+
const mockObjectSet = createMockObjectSet();
|
|
152
|
+
const onFilterStateChanged = vi.fn();
|
|
153
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
154
|
+
objectSet: mockObjectSet,
|
|
155
|
+
definition: createDefinition("TOGGLE"),
|
|
156
|
+
filterState: undefined,
|
|
157
|
+
onFilterStateChanged: onFilterStateChanged
|
|
158
|
+
}));
|
|
159
|
+
expect(mockObjectSet.pivotTo).toHaveBeenCalledWith("primaryOffice");
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe("component selection", () => {
|
|
163
|
+
it("renders ToggleInput for TOGGLE component", () => {
|
|
164
|
+
const mockObjectSet = createMockObjectSet();
|
|
165
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
166
|
+
objectSet: mockObjectSet,
|
|
167
|
+
definition: createDefinition("TOGGLE"),
|
|
168
|
+
filterState: undefined,
|
|
169
|
+
onFilterStateChanged: vi.fn()
|
|
170
|
+
}));
|
|
171
|
+
expect(screen.getByRole("switch")).toBeTruthy();
|
|
172
|
+
});
|
|
173
|
+
it("renders ContainsTextInput for CONTAINS_TEXT component", () => {
|
|
174
|
+
const mockObjectSet = createMockObjectSet();
|
|
175
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
176
|
+
objectSet: mockObjectSet,
|
|
177
|
+
definition: createDefinition("CONTAINS_TEXT"),
|
|
178
|
+
filterState: undefined,
|
|
179
|
+
onFilterStateChanged: vi.fn()
|
|
180
|
+
}));
|
|
181
|
+
expect(screen.getByRole("textbox")).toBeTruthy();
|
|
182
|
+
expect(screen.getByPlaceholderText("Search name...")).toBeTruthy();
|
|
183
|
+
});
|
|
184
|
+
it("renders SingleDateInput for SINGLE_DATE component", () => {
|
|
185
|
+
const mockObjectSet = createMockObjectSet();
|
|
186
|
+
const definition = {
|
|
187
|
+
...createDefinition("CHECKBOX_LIST"),
|
|
188
|
+
linkedFilterComponent: "SINGLE_DATE"
|
|
189
|
+
};
|
|
190
|
+
render(/*#__PURE__*/React.createElement(LinkedPropertyInput, {
|
|
191
|
+
objectSet: mockObjectSet,
|
|
192
|
+
definition: definition,
|
|
193
|
+
filterState: undefined,
|
|
194
|
+
onFilterStateChanged: vi.fn()
|
|
195
|
+
}));
|
|
196
|
+
const dateInput = screen.getByLabelText("Select date");
|
|
197
|
+
expect(dateInput).toBeTruthy();
|
|
198
|
+
expect(dateInput.getAttribute("type")).toBe("date");
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
//# sourceMappingURL=LinkedPropertyInput.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkedPropertyInput.test.js","names":["cleanup","render","screen","React","afterEach","describe","expect","it","vi","LinkedPropertyInput","MockLinkedObjectType","apiName","type","__DefinitionMetadata","primaryKeyApiName","primaryKeyType","properties","officeId","multiplicity","name","capacity","createMockObjectSet","$objectSetInternals","def","pivotTo","fn","mockReturnValue","createDefinition","linkedFilterComponent","linkName","linkedPropertyKey","linkedFilterState","selectedValues","filterState","mockObjectSet","onFilterStateChanged","createElement","objectSet","definition","undefined","toggle","getByRole","click","toHaveBeenCalledWith","enabled","getAttribute","toBe","toBeTruthy","getByPlaceholderText","dateInput","getByLabelText"],"sources":["LinkedPropertyInput.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 { ObjectSet, ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\nimport { cleanup, render, screen } from \"@testing-library/react\";\nimport React from \"react\";\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { LinkedPropertyInput } from \"../base/inputs/LinkedPropertyInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { LinkedPropertyFilterDefinition } from \"../types/LinkedFilterTypes.js\";\n\nconst MockLinkedObjectType = {\n apiName: \"Office\",\n type: \"object\",\n __DefinitionMetadata: {\n primaryKeyApiName: \"officeId\",\n primaryKeyType: \"string\",\n properties: {\n officeId: { type: \"string\", multiplicity: false },\n name: { type: \"string\", multiplicity: false },\n capacity: { type: \"integer\", multiplicity: false },\n },\n },\n} as unknown as ObjectTypeDefinition;\n\nfunction createMockObjectSet() {\n const linkedObjectSet = {\n $objectSetInternals: {\n def: MockLinkedObjectType,\n },\n };\n\n return {\n $objectSetInternals: {\n def: {\n apiName: \"Employee\",\n type: \"object\",\n } as ObjectTypeDefinition,\n },\n pivotTo: vi.fn().mockReturnValue(linkedObjectSet),\n } as unknown as ObjectSet<ObjectTypeDefinition>;\n}\n\nfunction createDefinition(\n linkedFilterComponent:\n | \"CHECKBOX_LIST\"\n | \"MULTI_SELECT\"\n | \"SINGLE_SELECT\"\n | \"CONTAINS_TEXT\"\n | \"TOGGLE\"\n | \"NUMBER_RANGE\"\n | \"DATE_RANGE\"\n | \"TIMELINE\"\n | \"LISTOGRAM\"\n | \"TEXT_TAGS\"\n | \"SINGLE_DATE\"\n | \"MULTI_DATE\",\n): LinkedPropertyFilterDefinition<\n ObjectTypeDefinition,\n string,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n> {\n return {\n type: \"LINKED_PROPERTY\",\n linkName: \"primaryOffice\",\n linkedPropertyKey: \"name\" as PropertyKeys<ObjectTypeDefinition>,\n linkedFilterComponent,\n linkedFilterState: { type: \"SELECT\", selectedValues: [] },\n filterState: {\n type: \"linkedProperty\",\n linkedFilterState: { type: \"SELECT\", selectedValues: [] },\n },\n } as LinkedPropertyFilterDefinition<\n ObjectTypeDefinition,\n string,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n >;\n}\n\ndescribe(\"LinkedPropertyInput\", () => {\n afterEach(() => {\n cleanup();\n });\n\n describe(\"state wrapping\", () => {\n it(\"wraps child onChange in LINKED_PROPERTY state\", () => {\n const mockObjectSet = createMockObjectSet();\n const onFilterStateChanged = vi.fn();\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={undefined}\n onFilterStateChanged={onFilterStateChanged}\n />,\n );\n\n const toggle = screen.getByRole(\"switch\");\n toggle.click();\n\n expect(onFilterStateChanged).toHaveBeenCalledWith({\n type: \"linkedProperty\",\n linkedFilterState: {\n type: \"TOGGLE\",\n enabled: true,\n },\n });\n });\n });\n\n describe(\"state unwrapping\", () => {\n it(\"extracts linkedFilterState from LINKED_PROPERTY wrapper\", () => {\n const mockObjectSet = createMockObjectSet();\n const onFilterStateChanged = vi.fn();\n\n const filterState: FilterState = {\n type: \"linkedProperty\",\n linkedFilterState: {\n type: \"TOGGLE\",\n enabled: true,\n },\n };\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n />,\n );\n\n const toggle = screen.getByRole(\"switch\");\n expect(toggle.getAttribute(\"aria-checked\")).toBe(\"true\");\n });\n\n it(\"handles undefined filterState gracefully\", () => {\n const mockObjectSet = createMockObjectSet();\n const onFilterStateChanged = vi.fn();\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={undefined}\n onFilterStateChanged={onFilterStateChanged}\n />,\n );\n\n const toggle = screen.getByRole(\"switch\");\n expect(toggle.getAttribute(\"aria-checked\")).toBe(\"false\");\n });\n\n it(\"handles filterState with wrong type gracefully\", () => {\n const mockObjectSet = createMockObjectSet();\n const onFilterStateChanged = vi.fn();\n\n const wrongState: FilterState = {\n type: \"SELECT\",\n selectedValues: [\"value1\"],\n };\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={wrongState}\n onFilterStateChanged={onFilterStateChanged}\n />,\n );\n\n const toggle = screen.getByRole(\"switch\");\n expect(toggle.getAttribute(\"aria-checked\")).toBe(\"false\");\n });\n });\n\n describe(\"ObjectSet pivoting\", () => {\n it(\"calls pivotTo with correct link name\", () => {\n const mockObjectSet = createMockObjectSet();\n const onFilterStateChanged = vi.fn();\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={undefined}\n onFilterStateChanged={onFilterStateChanged}\n />,\n );\n\n expect(mockObjectSet.pivotTo).toHaveBeenCalledWith(\"primaryOffice\");\n });\n });\n\n describe(\"component selection\", () => {\n it(\"renders ToggleInput for TOGGLE component\", () => {\n const mockObjectSet = createMockObjectSet();\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"TOGGLE\")}\n filterState={undefined}\n onFilterStateChanged={vi.fn()}\n />,\n );\n\n expect(screen.getByRole(\"switch\")).toBeTruthy();\n });\n\n it(\"renders ContainsTextInput for CONTAINS_TEXT component\", () => {\n const mockObjectSet = createMockObjectSet();\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={createDefinition(\"CONTAINS_TEXT\")}\n filterState={undefined}\n onFilterStateChanged={vi.fn()}\n />,\n );\n\n expect(screen.getByRole(\"textbox\")).toBeTruthy();\n expect(screen.getByPlaceholderText(\"Search name...\")).toBeTruthy();\n });\n\n it(\"renders SingleDateInput for SINGLE_DATE component\", () => {\n const mockObjectSet = createMockObjectSet();\n const definition = {\n ...createDefinition(\"CHECKBOX_LIST\"),\n linkedFilterComponent: \"SINGLE_DATE\" as const,\n } as LinkedPropertyFilterDefinition<\n ObjectTypeDefinition,\n string,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n >;\n\n render(\n <LinkedPropertyInput\n objectSet={mockObjectSet}\n definition={definition}\n filterState={undefined}\n onFilterStateChanged={vi.fn()}\n />,\n );\n\n const dateInput = screen.getByLabelText(\"Select date\");\n expect(dateInput).toBeTruthy();\n expect(dateInput.getAttribute(\"type\")).toBe(\"date\");\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { describe, expect, it } from "vitest";
|
|
18
|
+
import { formatDateForDisplay, formatDateForInput, parseDateFromInput, parseDateFromISO } from "../base/inputs/dateUtils.js";
|
|
19
|
+
describe("formatDateForInput", () => {
|
|
20
|
+
it("formats a date to YYYY-MM-DD", () => {
|
|
21
|
+
expect(formatDateForInput(new Date(2024, 0, 3))).toBe("2024-01-03");
|
|
22
|
+
expect(formatDateForInput(undefined)).toBe("");
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("parseDateFromInput", () => {
|
|
26
|
+
it("parses YYYY-MM-DD to local midnight", () => {
|
|
27
|
+
const date = parseDateFromInput("2024-06-15");
|
|
28
|
+
expect(date.getFullYear()).toBe(2024);
|
|
29
|
+
expect(date.getMonth()).toBe(5);
|
|
30
|
+
expect(date.getDate()).toBe(15);
|
|
31
|
+
expect(date.getHours()).toBe(0);
|
|
32
|
+
});
|
|
33
|
+
it("returns undefined for empty or invalid input", () => {
|
|
34
|
+
expect(parseDateFromInput("")).toBeUndefined();
|
|
35
|
+
expect(parseDateFromInput("not-a-date")).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("formatDateForDisplay", () => {
|
|
39
|
+
it("returns fallback for undefined, formats date otherwise", () => {
|
|
40
|
+
expect(formatDateForDisplay(undefined, "N/A")).toBe("N/A");
|
|
41
|
+
expect(formatDateForDisplay(undefined)).toBe("");
|
|
42
|
+
expect(formatDateForDisplay(new Date(2024, 5, 15))).toContain("2024");
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("parseDateFromISO", () => {
|
|
46
|
+
it("parses ISO strings and passes through Date objects", () => {
|
|
47
|
+
const existing = new Date(2024, 5, 15);
|
|
48
|
+
expect(parseDateFromISO(existing)).toBe(existing);
|
|
49
|
+
expect(parseDateFromISO("2024-06-15T12:00:00Z")).toBeInstanceOf(Date);
|
|
50
|
+
expect(parseDateFromISO(undefined)).toBeUndefined();
|
|
51
|
+
expect(parseDateFromISO(null)).toBeUndefined();
|
|
52
|
+
expect(parseDateFromISO("not-a-date")).toBeUndefined();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=dateUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateUtils.test.js","names":["describe","expect","it","formatDateForDisplay","formatDateForInput","parseDateFromInput","parseDateFromISO","Date","toBe","undefined","date","getFullYear","getMonth","getDate","getHours","toBeUndefined","toContain","existing","toBeInstanceOf"],"sources":["dateUtils.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { describe, expect, it } from \"vitest\";\nimport {\n formatDateForDisplay,\n formatDateForInput,\n parseDateFromInput,\n parseDateFromISO,\n} from \"../base/inputs/dateUtils.js\";\n\ndescribe(\"formatDateForInput\", () => {\n it(\"formats a date to YYYY-MM-DD\", () => {\n expect(formatDateForInput(new Date(2024, 0, 3))).toBe(\"2024-01-03\");\n expect(formatDateForInput(undefined)).toBe(\"\");\n });\n});\n\ndescribe(\"parseDateFromInput\", () => {\n it(\"parses YYYY-MM-DD to local midnight\", () => {\n const date = parseDateFromInput(\"2024-06-15\")!;\n expect(date.getFullYear()).toBe(2024);\n expect(date.getMonth()).toBe(5);\n expect(date.getDate()).toBe(15);\n expect(date.getHours()).toBe(0);\n });\n\n it(\"returns undefined for empty or invalid input\", () => {\n expect(parseDateFromInput(\"\")).toBeUndefined();\n expect(parseDateFromInput(\"not-a-date\")).toBeUndefined();\n });\n});\n\ndescribe(\"formatDateForDisplay\", () => {\n it(\"returns fallback for undefined, formats date otherwise\", () => {\n expect(formatDateForDisplay(undefined, \"N/A\")).toBe(\"N/A\");\n expect(formatDateForDisplay(undefined)).toBe(\"\");\n expect(formatDateForDisplay(new Date(2024, 5, 15))).toContain(\"2024\");\n });\n});\n\ndescribe(\"parseDateFromISO\", () => {\n it(\"parses ISO strings and passes through Date objects\", () => {\n const existing = new Date(2024, 5, 15);\n expect(parseDateFromISO(existing)).toBe(existing);\n expect(parseDateFromISO(\"2024-06-15T12:00:00Z\")).toBeInstanceOf(Date);\n expect(parseDateFromISO(undefined)).toBeUndefined();\n expect(parseDateFromISO(null)).toBeUndefined();\n expect(parseDateFromISO(\"not-a-date\")).toBeUndefined();\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SACEC,oBAAoB,EACpBC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,QACX,6BAA6B;AAEpCN,QAAQ,CAAC,oBAAoB,EAAE,MAAM;EACnCE,EAAE,CAAC,8BAA8B,EAAE,MAAM;IACvCD,MAAM,CAACG,kBAAkB,CAAC,IAAIG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,YAAY,CAAC;IACnEP,MAAM,CAACG,kBAAkB,CAACK,SAAS,CAAC,CAAC,CAACD,IAAI,CAAC,EAAE,CAAC;EAChD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFR,QAAQ,CAAC,oBAAoB,EAAE,MAAM;EACnCE,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC9C,MAAMQ,IAAI,GAAGL,kBAAkB,CAAC,YAAY,CAAE;IAC9CJ,MAAM,CAACS,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC,CAACH,IAAI,CAAC,IAAI,CAAC;IACrCP,MAAM,CAACS,IAAI,CAACE,QAAQ,CAAC,CAAC,CAAC,CAACJ,IAAI,CAAC,CAAC,CAAC;IAC/BP,MAAM,CAACS,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,CAACL,IAAI,CAAC,EAAE,CAAC;IAC/BP,MAAM,CAACS,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACN,IAAI,CAAC,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFN,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACvDD,MAAM,CAACI,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAACU,aAAa,CAAC,CAAC;IAC9Cd,MAAM,CAACI,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAACU,aAAa,CAAC,CAAC;EAC1D,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFf,QAAQ,CAAC,sBAAsB,EAAE,MAAM;EACrCE,EAAE,CAAC,wDAAwD,EAAE,MAAM;IACjED,MAAM,CAACE,oBAAoB,CAACM,SAAS,EAAE,KAAK,CAAC,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;IAC1DP,MAAM,CAACE,oBAAoB,CAACM,SAAS,CAAC,CAAC,CAACD,IAAI,CAAC,EAAE,CAAC;IAChDP,MAAM,CAACE,oBAAoB,CAAC,IAAII,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAACS,SAAS,CAAC,MAAM,CAAC;EACvE,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFhB,QAAQ,CAAC,kBAAkB,EAAE,MAAM;EACjCE,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7D,MAAMe,QAAQ,GAAG,IAAIV,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IACtCN,MAAM,CAACK,gBAAgB,CAACW,QAAQ,CAAC,CAAC,CAACT,IAAI,CAACS,QAAQ,CAAC;IACjDhB,MAAM,CAACK,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAACY,cAAc,CAACX,IAAI,CAAC;IACrEN,MAAM,CAACK,gBAAgB,CAACG,SAAS,CAAC,CAAC,CAACM,aAAa,CAAC,CAAC;IACnDd,MAAM,CAACK,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAACS,aAAa,CAAC,CAAC;IAC9Cd,MAAM,CAACK,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAACS,aAAa,CAAC,CAAC;EACxD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { describe, expect, it } from "vitest";
|
|
18
|
+
import { buildWhereClause } from "../utils/filterStateToWhereClause.js";
|
|
19
|
+
import { getFilterKey } from "../utils/getFilterKey.js";
|
|
20
|
+
import { createContainsTextState, createCustomFilterDef, createDateRangeState, createHasLinkFilterDef, createKeywordSearchFilterDef, createNumberRangeState, createPropertyFilterDef, createSelectState, createToggleState } from "./testUtils.js";
|
|
21
|
+
function stateMap(...entries) {
|
|
22
|
+
return new Map(entries.map(([def, state]) => [getFilterKey(def), state]));
|
|
23
|
+
}
|
|
24
|
+
describe("buildWhereClause", () => {
|
|
25
|
+
it("returns empty object for undefined definitions", () => {
|
|
26
|
+
const result = buildWhereClause(undefined, new Map(), "and");
|
|
27
|
+
expect(result).toEqual({});
|
|
28
|
+
});
|
|
29
|
+
it("builds $in clause for CHECKBOX_LIST", () => {
|
|
30
|
+
const def = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["a", "b"]));
|
|
31
|
+
const filterStates = stateMap([def, createSelectState(["a", "b"])]);
|
|
32
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
33
|
+
expect(result).toEqual({
|
|
34
|
+
name: {
|
|
35
|
+
$in: ["a", "b"]
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it("wraps with $not when CHECKBOX_LIST isExcluding", () => {
|
|
40
|
+
const def = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["a"], {
|
|
41
|
+
isExcluding: true
|
|
42
|
+
}));
|
|
43
|
+
const filterStates = stateMap([def, createSelectState(["a"], {
|
|
44
|
+
isExcluding: true
|
|
45
|
+
})]);
|
|
46
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
47
|
+
expect(result).toEqual({
|
|
48
|
+
name: {
|
|
49
|
+
$not: "a"
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it("builds $containsAnyTerm for CONTAINS_TEXT", () => {
|
|
54
|
+
const def = createPropertyFilterDef("name", "CONTAINS_TEXT", createContainsTextState("test"));
|
|
55
|
+
const filterStates = stateMap([def, createContainsTextState("test")]);
|
|
56
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
57
|
+
expect(result).toEqual({
|
|
58
|
+
name: {
|
|
59
|
+
$containsAnyTerm: "test"
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
it("returns boolean for TOGGLE", () => {
|
|
64
|
+
const def = createPropertyFilterDef("active", "TOGGLE", createToggleState(true));
|
|
65
|
+
const filterStates = stateMap([def, createToggleState(true)]);
|
|
66
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
67
|
+
expect(result).toEqual({
|
|
68
|
+
active: true
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
it("builds $gte for NUMBER_RANGE min", () => {
|
|
72
|
+
const def = createPropertyFilterDef("age", "NUMBER_RANGE", createNumberRangeState(18, undefined));
|
|
73
|
+
const filterStates = stateMap([def, createNumberRangeState(18, undefined)]);
|
|
74
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
75
|
+
expect(result).toEqual({
|
|
76
|
+
age: {
|
|
77
|
+
$gte: 18
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
it("builds $and for NUMBER_RANGE min+max", () => {
|
|
82
|
+
const def = createPropertyFilterDef("age", "NUMBER_RANGE", createNumberRangeState(18, 65));
|
|
83
|
+
const filterStates = stateMap([def, createNumberRangeState(18, 65)]);
|
|
84
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
85
|
+
expect(result).toEqual({
|
|
86
|
+
age: {
|
|
87
|
+
$and: [{
|
|
88
|
+
$gte: 18
|
|
89
|
+
}, {
|
|
90
|
+
$lte: 65
|
|
91
|
+
}]
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it("includes $isNull with $or when includeNull", () => {
|
|
96
|
+
const def = createPropertyFilterDef("age", "NUMBER_RANGE", createNumberRangeState(18, undefined, {
|
|
97
|
+
includeNull: true
|
|
98
|
+
}));
|
|
99
|
+
const filterStates = stateMap([def, createNumberRangeState(18, undefined, {
|
|
100
|
+
includeNull: true
|
|
101
|
+
})]);
|
|
102
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
103
|
+
expect(result).toEqual({
|
|
104
|
+
age: {
|
|
105
|
+
$or: [{
|
|
106
|
+
$gte: 18
|
|
107
|
+
}, {
|
|
108
|
+
$isNull: true
|
|
109
|
+
}]
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
it("builds date comparison for DATE_RANGE", () => {
|
|
114
|
+
const minDate = new Date("2024-01-01T00:00:00.000Z");
|
|
115
|
+
const maxDate = new Date("2024-12-31T23:59:59.999Z");
|
|
116
|
+
const def = createPropertyFilterDef("createdAt", "DATE_RANGE", createDateRangeState(minDate, maxDate));
|
|
117
|
+
const filterStates = stateMap([def, createDateRangeState(minDate, maxDate)]);
|
|
118
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
119
|
+
expect(result).toEqual({
|
|
120
|
+
createdAt: {
|
|
121
|
+
$and: [{
|
|
122
|
+
$gte: minDate.toISOString()
|
|
123
|
+
}, {
|
|
124
|
+
$lte: maxDate.toISOString()
|
|
125
|
+
}]
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
it("combines multiple filters with $and", () => {
|
|
130
|
+
const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["John"]));
|
|
131
|
+
const activeDef = createPropertyFilterDef("active", "TOGGLE", createToggleState(true));
|
|
132
|
+
const filterStates = stateMap([nameDef, createSelectState(["John"])], [activeDef, createToggleState(true)]);
|
|
133
|
+
const result = buildWhereClause([nameDef, activeDef], filterStates, "and");
|
|
134
|
+
expect(result).toEqual({
|
|
135
|
+
$and: [{
|
|
136
|
+
name: "John"
|
|
137
|
+
}, {
|
|
138
|
+
active: true
|
|
139
|
+
}]
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
it("combines multiple filters with $or", () => {
|
|
143
|
+
const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["John"]));
|
|
144
|
+
const activeDef = createPropertyFilterDef("active", "TOGGLE", createToggleState(true));
|
|
145
|
+
const filterStates = stateMap([nameDef, createSelectState(["John"])], [activeDef, createToggleState(true)]);
|
|
146
|
+
const result = buildWhereClause([nameDef, activeDef], filterStates, "or");
|
|
147
|
+
expect(result).toEqual({
|
|
148
|
+
$or: [{
|
|
149
|
+
name: "John"
|
|
150
|
+
}, {
|
|
151
|
+
active: true
|
|
152
|
+
}]
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
it("returns single clause without wrapper for one filter", () => {
|
|
156
|
+
const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["John"]));
|
|
157
|
+
const activeDef = createPropertyFilterDef("active", "TOGGLE", createToggleState(false));
|
|
158
|
+
const filterStates = stateMap([nameDef, createSelectState(["John"])]);
|
|
159
|
+
const result = buildWhereClause([nameDef, activeDef], filterStates, "and");
|
|
160
|
+
expect(result).toEqual({
|
|
161
|
+
name: "John"
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
it("builds $isNotNull for hasLink filter", () => {
|
|
165
|
+
const def = createHasLinkFilterDef("employees");
|
|
166
|
+
const filterStates = stateMap([def, {
|
|
167
|
+
type: "hasLink",
|
|
168
|
+
hasLink: true
|
|
169
|
+
}]);
|
|
170
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
171
|
+
expect(result).toEqual({
|
|
172
|
+
employees: {
|
|
173
|
+
$isNotNull: true
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
it("emits no clause for hasLink filter when hasLink is false", () => {
|
|
178
|
+
const def = createHasLinkFilterDef("employees");
|
|
179
|
+
const filterStates = stateMap([def, {
|
|
180
|
+
type: "hasLink",
|
|
181
|
+
hasLink: false
|
|
182
|
+
}]);
|
|
183
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
184
|
+
expect(result).toEqual({});
|
|
185
|
+
});
|
|
186
|
+
it("builds $containsAllTerms for keywordSearch filter with AND operator", () => {
|
|
187
|
+
const def = createKeywordSearchFilterDef(["name"]);
|
|
188
|
+
const filterStates = stateMap([def, {
|
|
189
|
+
type: "keywordSearch",
|
|
190
|
+
searchTerm: "test",
|
|
191
|
+
operator: "AND"
|
|
192
|
+
}]);
|
|
193
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
194
|
+
expect(result).toEqual({
|
|
195
|
+
name: {
|
|
196
|
+
$containsAllTerms: "test"
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
it("builds $containsAnyTerm for keywordSearch filter with OR operator", () => {
|
|
201
|
+
const def = createKeywordSearchFilterDef(["name"]);
|
|
202
|
+
const filterStates = stateMap([def, {
|
|
203
|
+
type: "keywordSearch",
|
|
204
|
+
searchTerm: "test",
|
|
205
|
+
operator: "OR"
|
|
206
|
+
}]);
|
|
207
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
208
|
+
expect(result).toEqual({
|
|
209
|
+
name: {
|
|
210
|
+
$containsAnyTerm: "test"
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
it("builds $or for multi-property keywordSearch filter", () => {
|
|
215
|
+
const def = createKeywordSearchFilterDef(["name", "email"]);
|
|
216
|
+
const filterStates = stateMap([def, {
|
|
217
|
+
type: "keywordSearch",
|
|
218
|
+
searchTerm: "test",
|
|
219
|
+
operator: "OR"
|
|
220
|
+
}]);
|
|
221
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
222
|
+
expect(result).toEqual({
|
|
223
|
+
$or: [{
|
|
224
|
+
name: {
|
|
225
|
+
$containsAnyTerm: "test"
|
|
226
|
+
}
|
|
227
|
+
}, {
|
|
228
|
+
email: {
|
|
229
|
+
$containsAnyTerm: "test"
|
|
230
|
+
}
|
|
231
|
+
}]
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
it("builds $not wrapper for keywordSearch filter with isExcluding", () => {
|
|
235
|
+
const def = createKeywordSearchFilterDef(["name"]);
|
|
236
|
+
const filterStates = stateMap([def, {
|
|
237
|
+
type: "keywordSearch",
|
|
238
|
+
searchTerm: "test",
|
|
239
|
+
operator: "AND",
|
|
240
|
+
isExcluding: true
|
|
241
|
+
}]);
|
|
242
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
243
|
+
expect(result).toEqual({
|
|
244
|
+
name: {
|
|
245
|
+
$not: {
|
|
246
|
+
$containsAllTerms: "test"
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
it("calls toWhereClause for custom filter", () => {
|
|
252
|
+
const baseDef = createCustomFilterDef("myFilter");
|
|
253
|
+
const def = {
|
|
254
|
+
...baseDef,
|
|
255
|
+
toWhereClause: () => ({
|
|
256
|
+
customProp: {
|
|
257
|
+
$eq: "test"
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
};
|
|
261
|
+
const filterStates = stateMap([def, {
|
|
262
|
+
type: "custom",
|
|
263
|
+
customState: {
|
|
264
|
+
value: "test"
|
|
265
|
+
}
|
|
266
|
+
}]);
|
|
267
|
+
const result = buildWhereClause([def], filterStates, "and");
|
|
268
|
+
expect(result).toEqual({
|
|
269
|
+
customProp: {
|
|
270
|
+
$eq: "test"
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
it("preserves state when filters are reordered", () => {
|
|
275
|
+
const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState(["John"]));
|
|
276
|
+
const activeDef = createPropertyFilterDef("active", "TOGGLE", createToggleState(true));
|
|
277
|
+
const filterStates = stateMap([nameDef, createSelectState(["John"])], [activeDef, createToggleState(true)]);
|
|
278
|
+
const result1 = buildWhereClause([nameDef, activeDef], filterStates, "and");
|
|
279
|
+
const result2 = buildWhereClause([activeDef, nameDef], filterStates, "and");
|
|
280
|
+
expect(result1).toEqual({
|
|
281
|
+
$and: [{
|
|
282
|
+
name: "John"
|
|
283
|
+
}, {
|
|
284
|
+
active: true
|
|
285
|
+
}]
|
|
286
|
+
});
|
|
287
|
+
expect(result2).toEqual({
|
|
288
|
+
$and: [{
|
|
289
|
+
active: true
|
|
290
|
+
}, {
|
|
291
|
+
name: "John"
|
|
292
|
+
}]
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
//# sourceMappingURL=filterStateToWhereClause.test.js.map
|