@osdk/react-components 0.2.0-beta.15 → 0.2.0-beta.16
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 +14 -0
- package/build/browser/base-components/action-button/ActionButton.module.css +0 -4
- package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/browser/base-components/dialog/Dialog.module.css +0 -8
- package/build/browser/base-components/draggable-list/DraggableList.js +4 -2
- package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/browser/base-components/draggable-list/DraggableList.module.css +0 -8
- package/build/browser/filter-list/FilterInput.js +132 -0
- package/build/browser/filter-list/FilterInput.js.map +1 -0
- package/build/browser/filter-list/FilterList.js +91 -0
- package/build/browser/filter-list/FilterList.js.map +1 -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/base/{FilterList.js → BaseFilterList.js} +30 -31
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -0
- package/build/browser/filter-list/base/BaseFilterListApi.js +2 -0
- package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -0
- package/build/browser/filter-list/base/FilterIcons.js +63 -0
- package/build/browser/filter-list/base/FilterIcons.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.module.css +22 -1
- package/build/browser/filter-list/base/FilterList.module.css.js +2 -0
- package/build/browser/filter-list/base/FilterListContent.js +21 -20
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js +8 -3
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.module.css +25 -1
- package/build/browser/filter-list/base/FilterListHeader.module.css.js +3 -0
- package/build/browser/filter-list/base/FilterListItem.js +36 -17
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +58 -2
- package/build/browser/filter-list/base/FilterListItem.module.css.js +2 -0
- package/build/browser/filter-list/base/SortableFilterListItem.js +6 -6
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/index.js +1 -2
- package/build/browser/filter-list/base/index.js.map +1 -1
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +34 -15
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +2 -1
- package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +17 -21
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +25 -19
- package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +6 -4
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -14
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -1
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js +4 -23
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
- package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.js +2 -32
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.module.css +16 -14
- package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +2 -1
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +6 -13
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/TextTagsInput.js +6 -14
- package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/TimelineInput.js +2 -2
- package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/TimelineInput.module.css +14 -12
- package/build/browser/filter-list/base/inputs/shared.module.css +5 -4
- package/build/browser/filter-list/hooks/useFilterListState.js +24 -3
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +56 -0
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +38 -0
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js +105 -0
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +508 -0
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +62 -0
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/MultiDateFilterInput.js +38 -0
- package/build/browser/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +55 -0
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +105 -0
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +129 -0
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js +38 -0
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +55 -0
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js +54 -0
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/TimelineFilterInput.js +49 -0
- package/build/browser/filter-list/inputs/TimelineFilterInput.js.map +1 -0
- package/build/browser/filter-list/inputs/ToggleFilterInput.js +36 -0
- package/build/browser/filter-list/inputs/ToggleFilterInput.js.map +1 -0
- package/build/browser/filter-list/types/AggregationTypes.js +2 -0
- package/build/browser/filter-list/types/AggregationTypes.js.map +1 -0
- package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/browser/filter-list/types/index.js +0 -2
- package/build/browser/filter-list/types/index.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateSerialization.js +42 -0
- package/build/browser/filter-list/utils/filterStateSerialization.js.map +1 -0
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +19 -11
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/filter-list/utils/filterValues.js +26 -0
- package/build/browser/filter-list/utils/filterValues.js.map +1 -1
- package/build/browser/object-table/ColumnConfigDialog.module.css +0 -9
- package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -4
- package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -12
- package/build/browser/public/experimental.js +4 -1
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/shared/ErrorBoundary.module.css +14 -14
- package/build/browser/styles.css +207 -124
- package/build/cjs/public/experimental.cjs +3144 -2551
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +591 -513
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +62 -2
- package/build/esm/base-components/action-button/ActionButton.module.css +0 -4
- package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/esm/base-components/dialog/Dialog.module.css +0 -8
- package/build/esm/base-components/draggable-list/DraggableList.js +4 -2
- package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/esm/base-components/draggable-list/DraggableList.module.css +0 -8
- package/build/esm/filter-list/FilterInput.js +132 -0
- package/build/esm/filter-list/FilterInput.js.map +1 -0
- package/build/esm/filter-list/FilterList.js +91 -0
- package/build/esm/filter-list/FilterList.js.map +1 -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/base/{FilterList.js → BaseFilterList.js} +30 -31
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -0
- package/build/esm/filter-list/base/BaseFilterListApi.js +2 -0
- package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -0
- package/build/esm/filter-list/base/FilterIcons.js +63 -0
- package/build/esm/filter-list/base/FilterIcons.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.module.css +22 -1
- package/build/esm/filter-list/base/FilterListContent.js +21 -20
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js +8 -3
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.module.css +25 -1
- package/build/esm/filter-list/base/FilterListItem.js +36 -17
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +58 -2
- package/build/esm/filter-list/base/SortableFilterListItem.js +6 -6
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/index.js +1 -2
- package/build/esm/filter-list/base/index.js.map +1 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +34 -15
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
- package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +17 -21
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +25 -19
- package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +6 -4
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -14
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js +4 -23
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
- package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.js +2 -32
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.module.css +16 -14
- package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +2 -1
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +6 -13
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/TextTagsInput.js +6 -14
- package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/TimelineInput.js +2 -2
- package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/TimelineInput.module.css +14 -12
- package/build/esm/filter-list/base/inputs/shared.module.css +5 -4
- package/build/esm/filter-list/hooks/useFilterListState.js +24 -3
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +56 -0
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +38 -0
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js +105 -0
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +508 -0
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +62 -0
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/MultiDateFilterInput.js +38 -0
- package/build/esm/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +55 -0
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +105 -0
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +129 -0
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js +38 -0
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +55 -0
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js +54 -0
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/TimelineFilterInput.js +49 -0
- package/build/esm/filter-list/inputs/TimelineFilterInput.js.map +1 -0
- package/build/esm/filter-list/inputs/ToggleFilterInput.js +36 -0
- package/build/esm/filter-list/inputs/ToggleFilterInput.js.map +1 -0
- package/build/esm/filter-list/types/AggregationTypes.js +2 -0
- package/build/esm/filter-list/types/AggregationTypes.js.map +1 -0
- package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/esm/filter-list/types/index.js +0 -2
- package/build/esm/filter-list/types/index.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateSerialization.js +42 -0
- package/build/esm/filter-list/utils/filterStateSerialization.js.map +1 -0
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +19 -11
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/filter-list/utils/filterValues.js +26 -0
- package/build/esm/filter-list/utils/filterValues.js.map +1 -1
- package/build/esm/object-table/ColumnConfigDialog.module.css +0 -9
- package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -4
- package/build/esm/object-table/TableHeaderWithPopover.module.css +0 -12
- package/build/esm/public/experimental.js +4 -1
- package/build/esm/public/experimental.js.map +1 -1
- package/build/esm/shared/ErrorBoundary.module.css +14 -14
- package/build/types/filter-list/{base/FilterInput.d.ts → FilterInput.d.ts} +2 -2
- package/build/types/filter-list/FilterInput.d.ts.map +1 -0
- package/build/types/filter-list/{base/FilterList.d.ts → FilterList.d.ts} +1 -1
- package/build/types/filter-list/FilterList.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +14 -0
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +13 -0
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterList.d.ts +3 -0
- package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -0
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +29 -0
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterIcons.d.ts +4 -0
- package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListContent.d.ts +8 -8
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts +7 -8
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts +7 -8
- package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/index.d.ts +2 -2
- package/build/types/filter-list/base/index.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +7 -13
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +7 -12
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts +10 -13
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +7 -13
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +5 -11
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +7 -12
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/RangeInput.d.ts +7 -14
- package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +7 -13
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +7 -13
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -5
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +14 -0
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts +10 -0
- package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +12 -0
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/{base/inputs → inputs}/LinkedPropertyInput.d.ts +2 -2
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +16 -0
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts +9 -0
- package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +13 -0
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +12 -0
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +17 -0
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +9 -0
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +13 -0
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +13 -0
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/TimelineFilterInput.d.ts +9 -0
- package/build/types/filter-list/inputs/TimelineFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/inputs/ToggleFilterInput.d.ts +9 -0
- package/build/types/filter-list/inputs/ToggleFilterInput.d.ts.map +1 -0
- package/build/types/filter-list/types/AggregationTypes.d.ts +5 -0
- package/build/types/filter-list/types/AggregationTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts +0 -19
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/index.d.ts +0 -2
- package/build/types/filter-list/types/index.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterStateSerialization.d.ts +3 -0
- package/build/types/filter-list/utils/filterStateSerialization.d.ts.map +1 -0
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterValues.d.ts +2 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
- package/build/types/public/experimental.d.ts +4 -1
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +3 -3
- package/build/browser/filter-list/base/FilterInput.js +0 -542
- package/build/browser/filter-list/base/FilterInput.js.map +0 -1
- package/build/browser/filter-list/base/FilterList.js.map +0 -1
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
- package/build/browser/filter-list/types/AddFilterMenuTypes.js +0 -2
- package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +0 -1
- package/build/browser/filter-list/types/FilterPanelTypes.js +0 -2
- package/build/browser/filter-list/types/FilterPanelTypes.js.map +0 -1
- package/build/esm/filter-list/base/FilterInput.js +0 -542
- package/build/esm/filter-list/base/FilterInput.js.map +0 -1
- package/build/esm/filter-list/base/FilterList.js.map +0 -1
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
- package/build/esm/filter-list/types/AddFilterMenuTypes.js +0 -2
- package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +0 -1
- package/build/esm/filter-list/types/FilterPanelTypes.js +0 -2
- package/build/esm/filter-list/types/FilterPanelTypes.js.map +0 -1
- package/build/types/filter-list/base/FilterInput.d.ts.map +0 -1
- package/build/types/filter-list/base/FilterList.d.ts.map +0 -1
- package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +0 -1
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +0 -56
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +0 -1
- package/build/types/filter-list/types/FilterPanelTypes.d.ts +0 -18
- package/build/types/filter-list/types/FilterPanelTypes.d.ts.map +0 -1
|
@@ -18,7 +18,6 @@ import { Button } from "@base-ui/react/button";
|
|
|
18
18
|
import classnames from "classnames";
|
|
19
19
|
import React, { memo, useCallback, useMemo, useState } from "react";
|
|
20
20
|
import { Combobox } from "../../../base-components/combobox/Combobox.js";
|
|
21
|
-
import { usePropertyAggregation } from "../../hooks/usePropertyAggregation.js";
|
|
22
21
|
import sharedStyles from "./shared.module.css";
|
|
23
22
|
import styles from "./TextTagsInput.module.css";
|
|
24
23
|
const TAG_SEPARATOR_PATTERN = /[,\n]/;
|
|
@@ -39,26 +38,19 @@ const TagItem = /*#__PURE__*/memo(function ({
|
|
|
39
38
|
}, "\xD7"));
|
|
40
39
|
});
|
|
41
40
|
function TextTagsInputInner({
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
suggestions,
|
|
42
|
+
isLoading,
|
|
43
|
+
error,
|
|
44
44
|
tags,
|
|
45
45
|
onChange,
|
|
46
|
-
whereClause,
|
|
47
46
|
className,
|
|
48
47
|
style,
|
|
49
48
|
placeholder = "Add a tag...",
|
|
50
49
|
allowCustomTags = true,
|
|
51
|
-
suggestionLimit = 10
|
|
50
|
+
suggestionLimit = 10,
|
|
51
|
+
ariaLabel = "Add tag"
|
|
52
52
|
}) {
|
|
53
53
|
const [inputValue, setInputValue] = useState("");
|
|
54
|
-
const {
|
|
55
|
-
data: suggestions,
|
|
56
|
-
isLoading,
|
|
57
|
-
error
|
|
58
|
-
} = usePropertyAggregation(objectType, propertyKey, {
|
|
59
|
-
limit: suggestionLimit ?? 0,
|
|
60
|
-
where: whereClause
|
|
61
|
-
});
|
|
62
54
|
const filteredSuggestions = useMemo(() => {
|
|
63
55
|
if (!suggestionLimit) return [];
|
|
64
56
|
const lowerInput = inputValue.toLowerCase();
|
|
@@ -126,7 +118,7 @@ function TextTagsInputInner({
|
|
|
126
118
|
placeholder: tags.length > 0 ? "" : placeholder,
|
|
127
119
|
onKeyDown: handleKeyDown,
|
|
128
120
|
onPaste: handlePaste,
|
|
129
|
-
"aria-label":
|
|
121
|
+
"aria-label": ariaLabel
|
|
130
122
|
}), /*#__PURE__*/React.createElement(Combobox.Portal, null, /*#__PURE__*/React.createElement(Combobox.Positioner, null, /*#__PURE__*/React.createElement(Combobox.Popup, null, filteredSuggestions.length === 0 ? allowCustomTags && inputValue.trim() ? /*#__PURE__*/React.createElement(Combobox.Empty, null, "Press Enter to add \"", inputValue, "\"") : /*#__PURE__*/React.createElement(Combobox.Empty, null, suggestionLimit ? "No suggestions" : "Type to add a tag") : filteredSuggestions.map(({
|
|
131
123
|
value,
|
|
132
124
|
count
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextTagsInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Combobox","usePropertyAggregation","sharedStyles","styles","TAG_SEPARATOR_PATTERN","TagItem","tag","onRemove","handleRemove","createElement","className","type","tagRemove","onClick","TextTagsInputInner","objectType","propertyKey","tags","onChange","whereClause","style","placeholder","allowCustomTags","suggestionLimit","inputValue","setInputValue","data","suggestions","isLoading","error","limit","where","filteredSuggestions","lowerInput","toLowerCase","filter","s","trim","value","includes","slice","addTag","trimmedTag","removeTag","t","handleValueChange","newTags","handleInputValueChange","handleKeyDown","e","key","length","preventDefault","handlePaste","pastedText","clipboardData","getData","test","split","map","textTags","errorMessage","message","Root","multiple","onValueChange","onInputValueChange","tagContainer","Input","input","onKeyDown","onPaste","Portal","Positioner","Popup","Empty","count","Item","toLocaleString","loadingMessage","TextTagsInput"],"sources":["TextTagsInput.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 { Button } from \"@base-ui/react/button\";\nimport type {\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport { Combobox } from \"../../../base-components/combobox/Combobox.js\";\nimport { usePropertyAggregation } from \"../../hooks/usePropertyAggregation.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport styles from \"./TextTagsInput.module.css\";\n\nconst TAG_SEPARATOR_PATTERN = /[,\\n]/;\n\ninterface TagItemProps {\n tag: string;\n onRemove: (tag: string) => void;\n}\n\nconst TagItem = memo(function TagItem({ tag, onRemove }: TagItemProps) {\n const handleRemove = useCallback(() => {\n onRemove(tag);\n }, [tag, onRemove]);\n\n return (\n <span className={sharedStyles.tag}>\n {tag}\n <Button\n type=\"button\"\n className={sharedStyles.tagRemove}\n onClick={handleRemove}\n aria-label={`Remove ${tag}`}\n >\n ×\n </Button>\n </span>\n );\n});\n\ninterface TextTagsInputProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n tags: string[];\n onChange: (tags: string[]) => void;\n objectSet?: ObjectSet<Q>;\n whereClause?: WhereClause<Q>;\n className?: string;\n style?: React.CSSProperties;\n placeholder?: string;\n allowCustomTags?: boolean;\n suggestionLimit?: number;\n}\n\nfunction TextTagsInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>({\n objectType,\n propertyKey,\n tags,\n onChange,\n whereClause,\n className,\n style,\n placeholder = \"Add a tag...\",\n allowCustomTags = true,\n suggestionLimit = 10,\n}: TextTagsInputProps<Q, K>): React.ReactElement {\n const [inputValue, setInputValue] = useState(\"\");\n\n const { data: suggestions, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n { limit: suggestionLimit ?? 0, where: whereClause },\n );\n\n const filteredSuggestions = useMemo(() => {\n if (!suggestionLimit) return [];\n const lowerInput = inputValue.toLowerCase();\n return suggestions\n .filter(\n (s) =>\n (!inputValue.trim()\n || s.value.toLowerCase().includes(lowerInput))\n && !tags.includes(s.value),\n )\n .slice(0, suggestionLimit);\n }, [suggestions, inputValue, tags, suggestionLimit]);\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmedTag = tag.trim();\n if (trimmedTag && !tags.includes(trimmedTag)) {\n onChange([...tags, trimmedTag]);\n }\n setInputValue(\"\");\n },\n [tags, onChange],\n );\n\n const removeTag = useCallback(\n (tag: string) => {\n onChange(tags.filter((t) => t !== tag));\n },\n [tags, onChange],\n );\n\n const handleValueChange = useCallback(\n (newTags: string[] | null) => {\n onChange(newTags ?? []);\n },\n [onChange],\n );\n\n const handleInputValueChange = useCallback(\n (value: string) => {\n setInputValue(value);\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && inputValue.trim()) {\n if (filteredSuggestions.length > 0) {\n return;\n }\n e.preventDefault();\n if (allowCustomTags) {\n addTag(inputValue);\n }\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\n removeTag(tags[tags.length - 1]);\n }\n },\n [inputValue, tags, addTag, removeTag, allowCustomTags, filteredSuggestions],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData(\"text\");\n if (TAG_SEPARATOR_PATTERN.test(pastedText)) {\n e.preventDefault();\n const newTags = pastedText\n .split(TAG_SEPARATOR_PATTERN)\n .map((t) => t.trim())\n .filter((t) => t && !tags.includes(t));\n if (newTags.length > 0) {\n onChange([...tags, ...newTags]);\n }\n }\n },\n [tags, onChange],\n );\n\n return (\n <div\n className={classnames(styles.textTags, className)}\n style={style}\n data-loading={isLoading}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading suggestions: {error.message}\n </div>\n )}\n\n <Combobox.Root<string, true>\n multiple\n value={tags}\n onValueChange={handleValueChange}\n inputValue={inputValue}\n onInputValueChange={handleInputValueChange}\n >\n {tags.length > 0 && (\n <div className={sharedStyles.tagContainer}>\n {tags.map((tag) => (\n <TagItem key={tag} tag={tag} onRemove={removeTag} />\n ))}\n </div>\n )}\n\n <Combobox.Input\n className={styles.input}\n placeholder={tags.length > 0 ? \"\" : placeholder}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n aria-label={`Add ${propertyKey} tag`}\n />\n\n <Combobox.Portal>\n <Combobox.Positioner>\n <Combobox.Popup>\n {filteredSuggestions.length === 0\n ? (\n allowCustomTags && inputValue.trim()\n ? (\n <Combobox.Empty>\n Press Enter to add \"{inputValue}\"\n </Combobox.Empty>\n )\n : (\n <Combobox.Empty>\n {suggestionLimit\n ? \"No suggestions\"\n : \"Type to add a tag\"}\n </Combobox.Empty>\n )\n )\n : filteredSuggestions.map(({ value, count }) => (\n <Combobox.Item key={value} value={value}>\n {value} ({count.toLocaleString()})\n </Combobox.Item>\n ))}\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n\n {isLoading && !!suggestionLimit && (\n <div className={sharedStyles.loadingMessage}>\n Loading suggestions...\n </div>\n )}\n </div>\n );\n}\n\nexport const TextTagsInput = memo(\n TextTagsInputInner,\n) as typeof TextTagsInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TextTagsInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Combobox","sharedStyles","styles","TAG_SEPARATOR_PATTERN","TagItem","tag","onRemove","handleRemove","createElement","className","type","tagRemove","onClick","TextTagsInputInner","suggestions","isLoading","error","tags","onChange","style","placeholder","allowCustomTags","suggestionLimit","ariaLabel","inputValue","setInputValue","filteredSuggestions","lowerInput","toLowerCase","filter","s","trim","value","includes","slice","addTag","trimmedTag","removeTag","t","handleValueChange","newTags","handleInputValueChange","handleKeyDown","e","key","length","preventDefault","handlePaste","pastedText","clipboardData","getData","test","split","map","textTags","errorMessage","message","Root","multiple","onValueChange","onInputValueChange","tagContainer","Input","input","onKeyDown","onPaste","Portal","Positioner","Popup","Empty","count","Item","toLocaleString","loadingMessage","TextTagsInput"],"sources":["TextTagsInput.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 { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport { Combobox } from \"../../../base-components/combobox/Combobox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport styles from \"./TextTagsInput.module.css\";\n\nconst TAG_SEPARATOR_PATTERN = /[,\\n]/;\n\ninterface TagItemProps {\n tag: string;\n onRemove: (tag: string) => void;\n}\n\nconst TagItem = memo(function TagItem({ tag, onRemove }: TagItemProps) {\n const handleRemove = useCallback(() => {\n onRemove(tag);\n }, [tag, onRemove]);\n\n return (\n <span className={sharedStyles.tag}>\n {tag}\n <Button\n type=\"button\"\n className={sharedStyles.tagRemove}\n onClick={handleRemove}\n aria-label={`Remove ${tag}`}\n >\n ×\n </Button>\n </span>\n );\n});\n\ninterface TextTagsInputProps {\n suggestions: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n tags: string[];\n onChange: (tags: string[]) => void;\n className?: string;\n style?: React.CSSProperties;\n placeholder?: string;\n allowCustomTags?: boolean;\n suggestionLimit?: number;\n ariaLabel?: string;\n}\n\nfunction TextTagsInputInner({\n suggestions,\n isLoading,\n error,\n tags,\n onChange,\n className,\n style,\n placeholder = \"Add a tag...\",\n allowCustomTags = true,\n suggestionLimit = 10,\n ariaLabel = \"Add tag\",\n}: TextTagsInputProps): React.ReactElement {\n const [inputValue, setInputValue] = useState(\"\");\n\n const filteredSuggestions = useMemo(() => {\n if (!suggestionLimit) return [];\n const lowerInput = inputValue.toLowerCase();\n return suggestions\n .filter(\n (s) =>\n (!inputValue.trim()\n || s.value.toLowerCase().includes(lowerInput))\n && !tags.includes(s.value),\n )\n .slice(0, suggestionLimit);\n }, [suggestions, inputValue, tags, suggestionLimit]);\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmedTag = tag.trim();\n if (trimmedTag && !tags.includes(trimmedTag)) {\n onChange([...tags, trimmedTag]);\n }\n setInputValue(\"\");\n },\n [tags, onChange],\n );\n\n const removeTag = useCallback(\n (tag: string) => {\n onChange(tags.filter((t) => t !== tag));\n },\n [tags, onChange],\n );\n\n const handleValueChange = useCallback(\n (newTags: string[] | null) => {\n onChange(newTags ?? []);\n },\n [onChange],\n );\n\n const handleInputValueChange = useCallback(\n (value: string) => {\n setInputValue(value);\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && inputValue.trim()) {\n if (filteredSuggestions.length > 0) {\n return;\n }\n e.preventDefault();\n if (allowCustomTags) {\n addTag(inputValue);\n }\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\n removeTag(tags[tags.length - 1]);\n }\n },\n [inputValue, tags, addTag, removeTag, allowCustomTags, filteredSuggestions],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData(\"text\");\n if (TAG_SEPARATOR_PATTERN.test(pastedText)) {\n e.preventDefault();\n const newTags = pastedText\n .split(TAG_SEPARATOR_PATTERN)\n .map((t) => t.trim())\n .filter((t) => t && !tags.includes(t));\n if (newTags.length > 0) {\n onChange([...tags, ...newTags]);\n }\n }\n },\n [tags, onChange],\n );\n\n return (\n <div\n className={classnames(styles.textTags, className)}\n style={style}\n data-loading={isLoading}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading suggestions: {error.message}\n </div>\n )}\n\n <Combobox.Root<string, true>\n multiple\n value={tags}\n onValueChange={handleValueChange}\n inputValue={inputValue}\n onInputValueChange={handleInputValueChange}\n >\n {tags.length > 0 && (\n <div className={sharedStyles.tagContainer}>\n {tags.map((tag) => (\n <TagItem key={tag} tag={tag} onRemove={removeTag} />\n ))}\n </div>\n )}\n\n <Combobox.Input\n className={styles.input}\n placeholder={tags.length > 0 ? \"\" : placeholder}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n aria-label={ariaLabel}\n />\n\n <Combobox.Portal>\n <Combobox.Positioner>\n <Combobox.Popup>\n {filteredSuggestions.length === 0\n ? (\n allowCustomTags && inputValue.trim()\n ? (\n <Combobox.Empty>\n Press Enter to add \"{inputValue}\"\n </Combobox.Empty>\n )\n : (\n <Combobox.Empty>\n {suggestionLimit\n ? \"No suggestions\"\n : \"Type to add a tag\"}\n </Combobox.Empty>\n )\n )\n : filteredSuggestions.map(({ value, count }) => (\n <Combobox.Item key={value} value={value}>\n {value} ({count.toLocaleString()})\n </Combobox.Item>\n ))}\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n\n {isLoading && !!suggestionLimit && (\n <div className={sharedStyles.loadingMessage}>\n Loading suggestions...\n </div>\n )}\n </div>\n );\n}\n\nexport const TextTagsInput = memo(\n TextTagsInputInner,\n) as typeof TextTagsInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -47,9 +47,9 @@ function TimelineInputInner({
|
|
|
47
47
|
className: styles.labels
|
|
48
48
|
}, /*#__PURE__*/React.createElement("span", null, formatDateForDisplay(startDate, "—")), /*#__PURE__*/React.createElement("span", null, "to"), /*#__PURE__*/React.createElement("span", null, formatDateForDisplay(endDate, "—")), (startDate || endDate) && /*#__PURE__*/React.createElement(Button, {
|
|
49
49
|
type: "button",
|
|
50
|
-
className: styles.clearButton,
|
|
51
50
|
onClick: handleClear,
|
|
52
|
-
"aria-label": "Clear range"
|
|
51
|
+
"aria-label": "Clear range",
|
|
52
|
+
className: styles.clearButton
|
|
53
53
|
}, "\xD7")), /*#__PURE__*/React.createElement("div", {
|
|
54
54
|
className: styles.brush
|
|
55
55
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimelineInput.js","names":["Button","Input","classnames","React","memo","useCallback","useMemo","formatDateForDisplay","formatDateForInput","parseDateFromInput","styles","TimelineInputInner","startDate","endDate","onChange","className","minDate","maxDate","handleStartChange","e","date","target","value","handleEndChange","handleClear","undefined","startInputMax","endInputMin","createElement","timeline","labels","type","
|
|
1
|
+
{"version":3,"file":"TimelineInput.js","names":["Button","Input","classnames","React","memo","useCallback","useMemo","formatDateForDisplay","formatDateForInput","parseDateFromInput","styles","TimelineInputInner","startDate","endDate","onChange","className","minDate","maxDate","handleStartChange","e","date","target","value","handleEndChange","handleClear","undefined","startInputMax","endInputMin","createElement","timeline","labels","type","onClick","clearButton","brush","input","min","max","TimelineInput"],"sources":["TimelineInput.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 { Button } from \"@base-ui/react/button\";\nimport { Input } from \"@base-ui/react/input\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport {\n formatDateForDisplay,\n formatDateForInput,\n parseDateFromInput,\n} from \"./dateUtils.js\";\nimport styles from \"./TimelineInput.module.css\";\n\ninterface TimelineInputProps {\n startDate: Date | undefined;\n endDate: Date | undefined;\n onChange: (startDate: Date | undefined, endDate: Date | undefined) => void;\n className?: string;\n minDate?: Date;\n maxDate?: Date;\n}\n\nfunction TimelineInputInner({\n startDate,\n endDate,\n onChange,\n className,\n minDate,\n maxDate,\n}: TimelineInputProps): React.ReactElement {\n const handleStartChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const date = parseDateFromInput(e.target.value);\n onChange(date, endDate);\n },\n [onChange, endDate],\n );\n\n const handleEndChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const date = parseDateFromInput(e.target.value);\n onChange(startDate, date);\n },\n [onChange, startDate],\n );\n\n const handleClear = useCallback(() => {\n onChange(undefined, undefined);\n }, [onChange]);\n\n const startInputMax = useMemo(\n () => endDate ?? maxDate,\n [endDate, maxDate],\n );\n const endInputMin = useMemo(\n () => startDate ?? minDate,\n [startDate, minDate],\n );\n\n return (\n <div className={classnames(styles.timeline, className)}>\n <div className={styles.labels}>\n <span>{formatDateForDisplay(startDate, \"—\")}</span>\n <span>to</span>\n <span>{formatDateForDisplay(endDate, \"—\")}</span>\n {(startDate || endDate) && (\n <Button\n type=\"button\"\n onClick={handleClear}\n aria-label=\"Clear range\"\n className={styles.clearButton}\n >\n ×\n </Button>\n )}\n </div>\n\n <div className={styles.brush}>\n <Input\n type=\"date\"\n className={styles.input}\n value={formatDateForInput(startDate)}\n onChange={handleStartChange}\n min={minDate ? formatDateForInput(minDate) : undefined}\n max={startInputMax ? formatDateForInput(startInputMax) : undefined}\n aria-label=\"Start date\"\n />\n <span>—</span>\n <Input\n type=\"date\"\n className={styles.input}\n value={formatDateForInput(endDate)}\n onChange={handleEndChange}\n min={endInputMin ? formatDateForInput(endInputMin) : undefined}\n max={maxDate ? formatDateForInput(maxDate) : undefined}\n aria-label=\"End date\"\n />\n </div>\n </div>\n );\n}\n\nexport const TimelineInput: React.NamedExoticComponent<TimelineInputProps> =\n memo(TimelineInputInner);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,48 +17,50 @@
|
|
|
17
17
|
.timeline {
|
|
18
18
|
display: flex;
|
|
19
19
|
flex-direction: column;
|
|
20
|
-
gap: var(--osdk-filter-range-gap
|
|
20
|
+
gap: var(--osdk-filter-range-gap);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
.labels {
|
|
24
24
|
display: flex;
|
|
25
25
|
align-items: center;
|
|
26
|
-
gap: var(--osdk-
|
|
27
|
-
font-
|
|
28
|
-
|
|
26
|
+
gap: var(--osdk-filter-timeline-labels-gap);
|
|
27
|
+
font-family: var(--osdk-filter-timeline-labels-font-family);
|
|
28
|
+
font-size: var(--osdk-filter-timeline-labels-font-size);
|
|
29
|
+
color: var(--osdk-filter-timeline-labels-color);
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
.clearButton {
|
|
32
33
|
display: flex;
|
|
33
34
|
align-items: center;
|
|
34
35
|
justify-content: center;
|
|
35
|
-
padding:
|
|
36
|
+
padding: var(--osdk-filter-timeline-button-padding);
|
|
36
37
|
border: none;
|
|
37
38
|
background: transparent;
|
|
38
39
|
cursor: pointer;
|
|
39
|
-
color: var(--osdk-
|
|
40
|
-
border-radius: var(--osdk-
|
|
40
|
+
color: var(--osdk-filter-timeline-button-color);
|
|
41
|
+
border-radius: var(--osdk-filter-timeline-button-border-radius);
|
|
41
42
|
margin-left: auto;
|
|
42
43
|
|
|
43
44
|
&:hover {
|
|
44
|
-
background: var(--osdk-
|
|
45
|
-
color: var(--osdk-
|
|
45
|
+
background: var(--osdk-filter-timeline-button-bg-hover);
|
|
46
|
+
color: var(--osdk-filter-timeline-button-color-hover);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
.brush {
|
|
50
51
|
display: flex;
|
|
51
52
|
align-items: center;
|
|
52
|
-
gap: var(--osdk-
|
|
53
|
+
gap: var(--osdk-filter-timeline-labels-gap);
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
.brush span {
|
|
56
|
-
color: var(--osdk-
|
|
57
|
+
color: var(--osdk-filter-timeline-brush-color);
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
.input {
|
|
60
61
|
flex: 1;
|
|
61
|
-
font-
|
|
62
|
+
font-family: var(--osdk-filter-input-font-family);
|
|
63
|
+
font-size: var(--osdk-filter-timeline-input-font-size);
|
|
62
64
|
padding: var(--osdk-filter-input-padding);
|
|
63
65
|
border: var(--osdk-filter-input-border);
|
|
64
66
|
border-radius: var(--osdk-filter-input-border-radius);
|
|
@@ -18,17 +18,18 @@
|
|
|
18
18
|
.loadingMessage,
|
|
19
19
|
.errorMessage,
|
|
20
20
|
.emptyMessage {
|
|
21
|
-
font-
|
|
22
|
-
|
|
21
|
+
font-family: var(--osdk-filter-message-font-family);
|
|
22
|
+
font-size: var(--osdk-filter-message-font-size);
|
|
23
|
+
padding: var(--osdk-filter-message-padding);
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
.loadingMessage,
|
|
26
27
|
.emptyMessage {
|
|
27
|
-
color: var(--osdk-
|
|
28
|
+
color: var(--osdk-filter-message-color-muted);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
.errorMessage {
|
|
31
|
-
color: var(--osdk-
|
|
32
|
+
color: var(--osdk-filter-message-color-danger);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/* Shared tag styles */
|
|
@@ -72,10 +72,19 @@ export function useFilterListState(props) {
|
|
|
72
72
|
filterDefinitions,
|
|
73
73
|
filterOperator = "and",
|
|
74
74
|
onFilterStateChanged,
|
|
75
|
-
onFilterClauseChanged
|
|
75
|
+
onFilterClauseChanged,
|
|
76
|
+
initialFilterStates
|
|
76
77
|
} = props;
|
|
77
78
|
const objectType = objectSet.$objectSetInternals.def;
|
|
78
|
-
const [filterStates, setFilterStates] = useState(() =>
|
|
79
|
+
const [filterStates, setFilterStates] = useState(() => {
|
|
80
|
+
const states = buildInitialStates(filterDefinitions);
|
|
81
|
+
if (initialFilterStates) {
|
|
82
|
+
for (const [key, state] of initialFilterStates) {
|
|
83
|
+
states.set(key, state);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return states;
|
|
87
|
+
});
|
|
79
88
|
const setFilterState = useCallback((filterKey, state) => {
|
|
80
89
|
let newWhereClause;
|
|
81
90
|
setFilterStates(prev => {
|
|
@@ -93,6 +102,17 @@ export function useFilterListState(props) {
|
|
|
93
102
|
}
|
|
94
103
|
}, [filterDefinitions, filterOperator, objectType, onFilterClauseChanged, onFilterStateChanged]);
|
|
95
104
|
const whereClause = useMemo(() => buildWhereClause(filterDefinitions, filterStates, filterOperator, objectType), [filterDefinitions, filterStates, filterOperator, objectType]);
|
|
105
|
+
const perFilterWhereClauses = useMemo(() => {
|
|
106
|
+
const map = new Map();
|
|
107
|
+
if (!filterDefinitions) {
|
|
108
|
+
return map;
|
|
109
|
+
}
|
|
110
|
+
for (const definition of filterDefinitions) {
|
|
111
|
+
const key = getFilterKey(definition);
|
|
112
|
+
map.set(key, buildWhereClause(filterDefinitions, filterStates, filterOperator, objectType, key));
|
|
113
|
+
}
|
|
114
|
+
return map;
|
|
115
|
+
}, [filterDefinitions, filterStates, filterOperator, objectType]);
|
|
96
116
|
const activeFilterCount = useMemo(() => {
|
|
97
117
|
let count = 0;
|
|
98
118
|
for (const state of filterStates.values()) {
|
|
@@ -112,8 +132,9 @@ export function useFilterListState(props) {
|
|
|
112
132
|
filterStates,
|
|
113
133
|
setFilterState,
|
|
114
134
|
whereClause,
|
|
135
|
+
perFilterWhereClauses,
|
|
115
136
|
activeFilterCount,
|
|
116
137
|
reset
|
|
117
|
-
}), [filterStates, setFilterState, whereClause, activeFilterCount, reset]);
|
|
138
|
+
}), [filterStates, setFilterState, whereClause, perFilterWhereClauses, activeFilterCount, reset]);
|
|
118
139
|
}
|
|
119
140
|
//# sourceMappingURL=useFilterListState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterListState.js","names":["useCallback","useMemo","useState","assertUnreachable","buildWhereClause","filterHasActiveState","getFilterKey","buildInitialStates","definitions","states","Map","definition","key","type","state","filterState","set","defaultFilterState","innerState","defaultLinkedFilterState","linkedFilterState","useFilterListState","props","objectSet","filterDefinitions","filterOperator","onFilterStateChanged","onFilterClauseChanged","objectType","$objectSetInternals","def","filterStates","setFilterStates","setFilterState","filterKey","newWhereClause","prev","next","undefined","find","d","whereClause","activeFilterCount","count","values","reset","initialStates"],"sources":["useFilterListState.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 { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { FilterListProps } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { LinkedPropertyFilterState } from \"../types/LinkedFilterTypes.js\";\nimport { assertUnreachable } from \"../utils/assertUnreachable.js\";\nimport { buildWhereClause } from \"../utils/filterStateToWhereClause.js\";\nimport { filterHasActiveState } from \"../utils/filterValues.js\";\nimport { getFilterKey } from \"../utils/getFilterKey.js\";\n\nexport interface UseFilterListStateResult<Q extends ObjectTypeDefinition> {\n filterStates: Map<string, FilterState>;\n setFilterState: (\n filterKey: string,\n state: FilterState,\n ) => void;\n whereClause: WhereClause<Q>;\n activeFilterCount: number;\n reset: () => void;\n}\n\n/**\n * Build initial states from filter definitions.\n * Uses string keys derived from getFilterKey() for stable lookups.\n */\nfunction buildInitialStates<Q extends ObjectTypeDefinition>(\n definitions: FilterListProps<Q>[\"filterDefinitions\"],\n): Map<string, FilterState> {\n const states = new Map<string, FilterState>();\n\n if (!definitions) {\n return states;\n }\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n switch (definition.type) {\n case \"PROPERTY\": {\n const state = definition.filterState;\n if (state) {\n states.set(key, state);\n }\n break;\n }\n case \"HAS_LINK\":\n case \"KEYWORD_SEARCH\":\n case \"CUSTOM\": {\n const state = definition.defaultFilterState;\n if (state) {\n states.set(key, state);\n }\n break;\n }\n case \"LINKED_PROPERTY\": {\n const innerState = definition.defaultLinkedFilterState;\n if (innerState) {\n const state: LinkedPropertyFilterState = {\n type: \"linkedProperty\",\n linkedFilterState: innerState,\n };\n states.set(key, state);\n }\n break;\n }\n default:\n assertUnreachable(definition);\n }\n }\n\n return states;\n}\n\nexport function useFilterListState<Q extends ObjectTypeDefinition>(\n props: FilterListProps<Q>,\n): UseFilterListStateResult<Q> {\n const {\n objectSet,\n filterDefinitions,\n filterOperator = \"and\",\n onFilterStateChanged,\n onFilterClauseChanged,\n } = props;\n\n const objectType = objectSet.$objectSetInternals.def;\n\n const [filterStates, setFilterStates] = useState<\n Map<string, FilterState>\n >(() => buildInitialStates(filterDefinitions));\n\n const setFilterState = useCallback(\n (filterKey: string, state: FilterState) => {\n let newWhereClause: WhereClause<Q> | undefined;\n\n setFilterStates((prev) => {\n const next = new Map(prev);\n next.set(filterKey, state);\n\n newWhereClause = buildWhereClause(\n filterDefinitions,\n next,\n filterOperator,\n objectType,\n );\n\n return next;\n });\n\n if (newWhereClause !== undefined) {\n onFilterClauseChanged?.(newWhereClause);\n }\n const definition = filterDefinitions?.find(\n (d) => getFilterKey(d) === filterKey,\n );\n if (definition) {\n onFilterStateChanged?.(definition, state);\n }\n },\n [\n filterDefinitions,\n filterOperator,\n objectType,\n onFilterClauseChanged,\n onFilterStateChanged,\n ],\n );\n\n const whereClause = useMemo(\n () =>\n buildWhereClause(\n filterDefinitions,\n filterStates,\n filterOperator,\n objectType,\n ),\n [filterDefinitions, filterStates, filterOperator, objectType],\n );\n\n const activeFilterCount = useMemo(() => {\n let count = 0;\n for (const state of filterStates.values()) {\n if (filterHasActiveState(state)) {\n count++;\n }\n }\n return count;\n }, [filterStates]);\n\n const reset = useCallback(() => {\n const initialStates = buildInitialStates(filterDefinitions);\n setFilterStates(initialStates);\n\n const newWhereClause = buildWhereClause(\n filterDefinitions,\n initialStates,\n filterOperator,\n objectType,\n );\n onFilterClauseChanged?.(newWhereClause);\n }, [filterDefinitions, filterOperator, objectType, onFilterClauseChanged]);\n\n return useMemo(() => ({\n filterStates,\n setFilterState,\n whereClause,\n activeFilterCount,\n reset,\n }), [filterStates, setFilterState, whereClause, activeFilterCount, reset]);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useFilterListState.js","names":["useCallback","useMemo","useState","assertUnreachable","buildWhereClause","filterHasActiveState","getFilterKey","buildInitialStates","definitions","states","Map","definition","key","type","state","filterState","set","defaultFilterState","innerState","defaultLinkedFilterState","linkedFilterState","useFilterListState","props","objectSet","filterDefinitions","filterOperator","onFilterStateChanged","onFilterClauseChanged","initialFilterStates","objectType","$objectSetInternals","def","filterStates","setFilterStates","setFilterState","filterKey","newWhereClause","prev","next","undefined","find","d","whereClause","perFilterWhereClauses","map","activeFilterCount","count","values","reset","initialStates"],"sources":["useFilterListState.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 { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { FilterListProps } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { LinkedPropertyFilterState } from \"../types/LinkedFilterTypes.js\";\nimport { assertUnreachable } from \"../utils/assertUnreachable.js\";\nimport { buildWhereClause } from \"../utils/filterStateToWhereClause.js\";\nimport { filterHasActiveState } from \"../utils/filterValues.js\";\nimport { getFilterKey } from \"../utils/getFilterKey.js\";\n\nexport interface UseFilterListStateResult<Q extends ObjectTypeDefinition> {\n filterStates: Map<string, FilterState>;\n setFilterState: (\n filterKey: string,\n state: FilterState,\n ) => void;\n whereClause: WhereClause<Q>;\n perFilterWhereClauses: Map<string, WhereClause<Q>>;\n activeFilterCount: number;\n reset: () => void;\n}\n\n/**\n * Build initial states from filter definitions.\n * Uses string keys derived from getFilterKey() for stable lookups.\n */\nfunction buildInitialStates<Q extends ObjectTypeDefinition>(\n definitions: FilterListProps<Q>[\"filterDefinitions\"],\n): Map<string, FilterState> {\n const states = new Map<string, FilterState>();\n\n if (!definitions) {\n return states;\n }\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n switch (definition.type) {\n case \"PROPERTY\": {\n const state = definition.filterState;\n if (state) {\n states.set(key, state);\n }\n break;\n }\n case \"HAS_LINK\":\n case \"KEYWORD_SEARCH\":\n case \"CUSTOM\": {\n const state = definition.defaultFilterState;\n if (state) {\n states.set(key, state);\n }\n break;\n }\n case \"LINKED_PROPERTY\": {\n const innerState = definition.defaultLinkedFilterState;\n if (innerState) {\n const state: LinkedPropertyFilterState = {\n type: \"linkedProperty\",\n linkedFilterState: innerState,\n };\n states.set(key, state);\n }\n break;\n }\n default:\n assertUnreachable(definition);\n }\n }\n\n return states;\n}\n\nexport function useFilterListState<Q extends ObjectTypeDefinition>(\n props: FilterListProps<Q>,\n): UseFilterListStateResult<Q> {\n const {\n objectSet,\n filterDefinitions,\n filterOperator = \"and\",\n onFilterStateChanged,\n onFilterClauseChanged,\n initialFilterStates,\n } = props;\n\n const objectType = objectSet.$objectSetInternals.def;\n\n const [filterStates, setFilterStates] = useState<\n Map<string, FilterState>\n >(() => {\n const states = buildInitialStates(filterDefinitions);\n if (initialFilterStates) {\n for (const [key, state] of initialFilterStates) {\n states.set(key, state);\n }\n }\n return states;\n });\n\n const setFilterState = useCallback(\n (filterKey: string, state: FilterState) => {\n let newWhereClause: WhereClause<Q> | undefined;\n\n setFilterStates((prev) => {\n const next = new Map(prev);\n next.set(filterKey, state);\n\n newWhereClause = buildWhereClause(\n filterDefinitions,\n next,\n filterOperator,\n objectType,\n );\n\n return next;\n });\n\n if (newWhereClause !== undefined) {\n onFilterClauseChanged?.(newWhereClause);\n }\n const definition = filterDefinitions?.find(\n (d) => getFilterKey(d) === filterKey,\n );\n if (definition) {\n onFilterStateChanged?.(definition, state);\n }\n },\n [\n filterDefinitions,\n filterOperator,\n objectType,\n onFilterClauseChanged,\n onFilterStateChanged,\n ],\n );\n\n const whereClause = useMemo(\n () =>\n buildWhereClause(\n filterDefinitions,\n filterStates,\n filterOperator,\n objectType,\n ),\n [filterDefinitions, filterStates, filterOperator, objectType],\n );\n\n const perFilterWhereClauses = useMemo(() => {\n const map = new Map<string, WhereClause<Q>>();\n if (!filterDefinitions) {\n return map;\n }\n for (const definition of filterDefinitions) {\n const key = getFilterKey(definition);\n map.set(\n key,\n buildWhereClause(\n filterDefinitions,\n filterStates,\n filterOperator,\n objectType,\n key,\n ),\n );\n }\n return map;\n }, [filterDefinitions, filterStates, filterOperator, objectType]);\n\n const activeFilterCount = useMemo(() => {\n let count = 0;\n for (const state of filterStates.values()) {\n if (filterHasActiveState(state)) {\n count++;\n }\n }\n return count;\n }, [filterStates]);\n\n const reset = useCallback(() => {\n const initialStates = buildInitialStates(filterDefinitions);\n setFilterStates(initialStates);\n\n const newWhereClause = buildWhereClause(\n filterDefinitions,\n initialStates,\n filterOperator,\n objectType,\n );\n onFilterClauseChanged?.(newWhereClause);\n }, [filterDefinitions, filterOperator, objectType, onFilterClauseChanged]);\n\n return useMemo(() => ({\n filterStates,\n setFilterState,\n whereClause,\n perFilterWhereClauses,\n activeFilterCount,\n reset,\n }), [\n filterStates,\n setFilterState,\n whereClause,\n perFilterWhereClauses,\n activeFilterCount,\n reset,\n ]);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","usePropertyAggregation","objectType","propertyKey","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","data","countData","isLoading","error","aggregate","where","result","maxCount","values","item","rawValue","$group","count","push","value","isNull","String","Math","max","sort","a","b","limit","length","slice"],"sources":["usePropertyAggregation.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 AggregateOpts,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport { useMemo } from \"react\";\nimport type { AggregationGroupResult } from \"../utils/aggregationHelpers.js\";\n\nexport
|
|
1
|
+
{"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","usePropertyAggregation","objectType","propertyKey","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","data","countData","isLoading","error","aggregate","where","result","maxCount","values","item","rawValue","$group","count","push","value","isNull","String","Math","max","sort","a","b","limit","length","slice"],"sources":["usePropertyAggregation.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 AggregateOpts,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport { useMemo } from \"react\";\nimport type { AggregationGroupResult } from \"../utils/aggregationHelpers.js\";\n\nexport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nimport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nexport interface UsePropertyAggregationResult {\n data: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport interface UsePropertyAggregationOptions<\n Q extends ObjectTypeDefinition = ObjectTypeDefinition,\n> {\n limit?: number;\n where?: WhereClause<Q>;\n}\n\nexport function usePropertyAggregation<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(\n objectType: Q,\n propertyKey: K,\n options?: UsePropertyAggregationOptions<Q>,\n): UsePropertyAggregationResult {\n // AggregateOpts requires specific property keys from Q, but we're dynamically\n // using propertyKey. The cast is unavoidable for this dynamic filter pattern.\n const aggregateOptions = useMemo(\n () =>\n ({\n $select: { $count: \"unordered\" as const },\n $groupBy: {\n [propertyKey as string]: {\n $exact: { $includeNullValue: true },\n },\n },\n }) as AggregateOpts<Q>,\n [propertyKey],\n );\n\n const { data: countData, isLoading, error } = useOsdkAggregation(objectType, {\n aggregate: aggregateOptions,\n where: options?.where,\n });\n\n const result = useMemo(\n (): { data: PropertyAggregationValue[]; maxCount: number } => {\n if (!countData) {\n return { data: [], maxCount: 0 };\n }\n\n const values: PropertyAggregationValue[] = [];\n let maxCount = 0;\n\n // The aggregation result type varies by query structure. Since we're building\n // the query dynamically based on propertyKey, we cast to a known shape that\n // matches the $groupBy + $count aggregation pattern.\n const dataArray = countData as AggregationGroupResult;\n\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n const count = item.$count ?? 0;\n\n if (rawValue == null) {\n values.push({ value: \"\", count, isNull: true });\n } else {\n values.push({ value: String(rawValue), count });\n }\n maxCount = Math.max(maxCount, count);\n }\n\n values.sort((a, b) => b.count - a.count);\n\n if (options?.limit && values.length > options.limit) {\n return { data: values.slice(0, options.limit), maxCount };\n }\n\n return { data: values, maxCount };\n },\n [countData, propertyKey, options?.limit],\n );\n\n return {\n data: result.data,\n maxCount: result.maxCount,\n isLoading,\n error: error ?? null,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,SAASC,OAAO,QAAQ,OAAO;AAqB/B,OAAO,SAASC,sBAAsBA,CAIpCC,UAAa,EACbC,WAAc,EACdC,OAA0C,EACZ;EAC9B;EACA;EACA,MAAMC,gBAAgB,GAAGL,OAAO,CAC9B,OACG;IACCM,OAAO,EAAE;MAAEC,MAAM,EAAE;IAAqB,CAAC;IACzCC,QAAQ,EAAE;MACR,CAACL,WAAW,GAAa;QACvBM,MAAM,EAAE;UAAEC,iBAAiB,EAAE;QAAK;MACpC;IACF;EACF,CAAC,CAAqB,EACxB,CAACP,WAAW,CACd,CAAC;EAED,MAAM;IAAEQ,IAAI,EAAEC,SAAS;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGf,kBAAkB,CAACG,UAAU,EAAE;IAC3Ea,SAAS,EAAEV,gBAAgB;IAC3BW,KAAK,EAAEZ,OAAO,EAAEY;EAClB,CAAC,CAAC;EAEF,MAAMC,MAAM,GAAGjB,OAAO,CACpB,MAA8D;IAC5D,IAAI,CAACY,SAAS,EAAE;MACd,OAAO;QAAED,IAAI,EAAE,EAAE;QAAEO,QAAQ,EAAE;MAAE,CAAC;IAClC;IAEA,MAAMC,MAAkC,GAAG,EAAE;IAC7C,IAAID,QAAQ,GAAG,CAAC;;IAEhB;IACA;IACA;;IAGA,KAAK,MAAME,IAAI,IAFGR,SAAS,EAEG;MAC5B,MAAMS,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACnB,WAAW,CAAW;MACnD,MAAMoB,KAAK,GAAGH,IAAI,CAACb,MAAM,IAAI,CAAC;MAE9B,IAAIc,QAAQ,IAAI,IAAI,EAAE;QACpBF,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAE,EAAE;UAAEF,KAAK;UAAEG,MAAM,EAAE;QAAK,CAAC,CAAC;MACjD,CAAC,MAAM;QACLP,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAEE,MAAM,CAACN,QAAQ,CAAC;UAAEE;QAAM,CAAC,CAAC;MACjD;MACAL,QAAQ,GAAGU,IAAI,CAACC,GAAG,CAACX,QAAQ,EAAEK,KAAK,CAAC;IACtC;IAEAJ,MAAM,CAACW,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACT,KAAK,GAAGQ,CAAC,CAACR,KAAK,CAAC;IAExC,IAAInB,OAAO,EAAE6B,KAAK,IAAId,MAAM,CAACe,MAAM,GAAG9B,OAAO,CAAC6B,KAAK,EAAE;MACnD,OAAO;QAAEtB,IAAI,EAAEQ,MAAM,CAACgB,KAAK,CAAC,CAAC,EAAE/B,OAAO,CAAC6B,KAAK,CAAC;QAAEf;MAAS,CAAC;IAC3D;IAEA,OAAO;MAAEP,IAAI,EAAEQ,MAAM;MAAED;IAAS,CAAC;EACnC,CAAC,EACD,CAACN,SAAS,EAAET,WAAW,EAAEC,OAAO,EAAE6B,KAAK,CACzC,CAAC;EAED,OAAO;IACLtB,IAAI,EAAEM,MAAM,CAACN,IAAI;IACjBO,QAAQ,EAAED,MAAM,CAACC,QAAQ;IACzBL,SAAS;IACTC,KAAK,EAAEA,KAAK,IAAI;EAClB,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 React, { memo, useCallback, useMemo } from "react";
|
|
18
|
+
import { CheckboxListInput } from "../base/inputs/CheckboxListInput.js";
|
|
19
|
+
import { usePropertyAggregation } from "../hooks/usePropertyAggregation.js";
|
|
20
|
+
import { coerceToStringArray } from "../utils/coerceFilterValue.js";
|
|
21
|
+
function CheckboxListFilterInputInner({
|
|
22
|
+
objectType,
|
|
23
|
+
propertyKey,
|
|
24
|
+
filterState,
|
|
25
|
+
onFilterStateChanged,
|
|
26
|
+
whereClause,
|
|
27
|
+
colorMap
|
|
28
|
+
}) {
|
|
29
|
+
const selectedValues = useMemo(() => filterState?.type === "SELECT" ? coerceToStringArray(filterState.selectedValues) : [], [filterState]);
|
|
30
|
+
const isExcluding = filterState?.isExcluding ?? false;
|
|
31
|
+
const handleChange = useCallback(newSelectedValues => {
|
|
32
|
+
onFilterStateChanged({
|
|
33
|
+
type: "SELECT",
|
|
34
|
+
selectedValues: newSelectedValues,
|
|
35
|
+
isExcluding
|
|
36
|
+
});
|
|
37
|
+
}, [onFilterStateChanged, isExcluding]);
|
|
38
|
+
const aggregationOptions = useMemo(() => ({
|
|
39
|
+
where: whereClause
|
|
40
|
+
}), [whereClause]);
|
|
41
|
+
const {
|
|
42
|
+
data,
|
|
43
|
+
isLoading,
|
|
44
|
+
error
|
|
45
|
+
} = usePropertyAggregation(objectType, propertyKey, aggregationOptions);
|
|
46
|
+
return /*#__PURE__*/React.createElement(CheckboxListInput, {
|
|
47
|
+
values: data,
|
|
48
|
+
isLoading: isLoading,
|
|
49
|
+
error: error,
|
|
50
|
+
selectedValues: selectedValues,
|
|
51
|
+
onChange: handleChange,
|
|
52
|
+
colorMap: colorMap
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export const CheckboxListFilterInput = /*#__PURE__*/memo(CheckboxListFilterInputInner);
|
|
56
|
+
//# sourceMappingURL=CheckboxListFilterInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxListFilterInput.js","names":["React","memo","useCallback","useMemo","CheckboxListInput","usePropertyAggregation","coerceToStringArray","CheckboxListFilterInputInner","objectType","propertyKey","filterState","onFilterStateChanged","whereClause","colorMap","selectedValues","type","isExcluding","handleChange","newSelectedValues","aggregationOptions","where","data","isLoading","error","createElement","values","onChange","CheckboxListFilterInput"],"sources":["CheckboxListFilterInput.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 ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { CheckboxListInput } from \"../base/inputs/CheckboxListInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { usePropertyAggregation } from \"../hooks/usePropertyAggregation.js\";\nimport { coerceToStringArray } from \"../utils/coerceFilterValue.js\";\n\ninterface CheckboxListFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n whereClause: WhereClause<Q>;\n colorMap?: Record<string, string>;\n}\n\nfunction CheckboxListFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n propertyKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n colorMap,\n}: CheckboxListFilterInputProps<Q>): React.ReactElement {\n const selectedValues = useMemo(\n () =>\n filterState?.type === \"SELECT\"\n ? coerceToStringArray(filterState.selectedValues)\n : [],\n [filterState],\n );\n const isExcluding = filterState?.isExcluding ?? false;\n\n const handleChange = useCallback(\n (newSelectedValues: string[]) => {\n onFilterStateChanged({\n type: \"SELECT\",\n selectedValues: newSelectedValues,\n isExcluding,\n });\n },\n [onFilterStateChanged, isExcluding],\n );\n\n const aggregationOptions = useMemo(\n () => ({ where: whereClause }),\n [whereClause],\n );\n\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey as PropertyKeys<Q>,\n aggregationOptions,\n );\n\n return (\n <CheckboxListInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={handleChange}\n colorMap={colorMap}\n />\n );\n}\n\nexport const CheckboxListFilterInput: typeof CheckboxListFilterInputInner =\n memo(CheckboxListFilterInputInner) as typeof CheckboxListFilterInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,iBAAiB,QAAQ,qCAAqC;AAEvE,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SAASC,mBAAmB,QAAQ,+BAA+B;AAWnE,SAASC,4BAA4BA,CAAiC;EACpEC,UAAU;EACVC,WAAW;EACXC,WAAW;EACXC,oBAAoB;EACpBC,WAAW;EACXC;AAC+B,CAAC,EAAsB;EACtD,MAAMC,cAAc,GAAGX,OAAO,CAC5B,MACEO,WAAW,EAAEK,IAAI,KAAK,QAAQ,GAC1BT,mBAAmB,CAACI,WAAW,CAACI,cAAc,CAAC,GAC/C,EAAE,EACR,CAACJ,WAAW,CACd,CAAC;EACD,MAAMM,WAAW,GAAGN,WAAW,EAAEM,WAAW,IAAI,KAAK;EAErD,MAAMC,YAAY,GAAGf,WAAW,CAC7BgB,iBAA2B,IAAK;IAC/BP,oBAAoB,CAAC;MACnBI,IAAI,EAAE,QAAQ;MACdD,cAAc,EAAEI,iBAAiB;MACjCF;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACL,oBAAoB,EAAEK,WAAW,CACpC,CAAC;EAED,MAAMG,kBAAkB,GAAGhB,OAAO,CAChC,OAAO;IAAEiB,KAAK,EAAER;EAAY,CAAC,CAAC,EAC9B,CAACA,WAAW,CACd,CAAC;EAED,MAAM;IAAES,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGlB,sBAAsB,CACvDG,UAAU,EACVC,WAAW,EACXU,kBACF,CAAC;EAED,oBACEnB,KAAA,CAAAwB,aAAA,CAACpB,iBAAiB;IAChBqB,MAAM,EAAEJ,IAAK;IACbC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbT,cAAc,EAAEA,cAAe;IAC/BY,QAAQ,EAAET,YAAa;IACvBJ,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAEN;AAEA,OAAO,MAAMc,uBAA4D,gBACvE1B,IAAI,CAACM,4BAA4B,CAAwC","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 React, { memo, useCallback, useMemo } from "react";
|
|
18
|
+
import { ContainsTextInput } from "../base/inputs/ContainsTextInput.js";
|
|
19
|
+
function ContainsTextFilterInputInner({
|
|
20
|
+
propertyKey,
|
|
21
|
+
filterState,
|
|
22
|
+
onFilterStateChanged
|
|
23
|
+
}) {
|
|
24
|
+
const value = useMemo(() => filterState?.type === "CONTAINS_TEXT" ? filterState.value : undefined, [filterState]);
|
|
25
|
+
const handleChange = useCallback(value => {
|
|
26
|
+
onFilterStateChanged({
|
|
27
|
+
type: "CONTAINS_TEXT",
|
|
28
|
+
value
|
|
29
|
+
});
|
|
30
|
+
}, [onFilterStateChanged]);
|
|
31
|
+
return /*#__PURE__*/React.createElement(ContainsTextInput, {
|
|
32
|
+
value: value,
|
|
33
|
+
onChange: handleChange,
|
|
34
|
+
placeholder: `Search ${propertyKey}...`
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export const ContainsTextFilterInput = /*#__PURE__*/memo(ContainsTextFilterInputInner);
|
|
38
|
+
//# sourceMappingURL=ContainsTextFilterInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainsTextFilterInput.js","names":["React","memo","useCallback","useMemo","ContainsTextInput","ContainsTextFilterInputInner","propertyKey","filterState","onFilterStateChanged","value","type","undefined","handleChange","createElement","onChange","placeholder","ContainsTextFilterInput"],"sources":["ContainsTextFilterInput.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 React, { memo, useCallback, useMemo } from \"react\";\nimport { ContainsTextInput } from \"../base/inputs/ContainsTextInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\ninterface ContainsTextFilterInputProps {\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n}\n\nfunction ContainsTextFilterInputInner({\n propertyKey,\n filterState,\n onFilterStateChanged,\n}: ContainsTextFilterInputProps): React.ReactElement {\n const value = useMemo(\n () =>\n filterState?.type === \"CONTAINS_TEXT\"\n ? filterState.value\n : undefined,\n [filterState],\n );\n\n const handleChange = useCallback(\n (value: string | undefined) => {\n onFilterStateChanged({ type: \"CONTAINS_TEXT\", value });\n },\n [onFilterStateChanged],\n );\n\n return (\n <ContainsTextInput\n value={value}\n onChange={handleChange}\n placeholder={`Search ${propertyKey}...`}\n />\n );\n}\n\nexport const ContainsTextFilterInput: React.MemoExoticComponent<\n typeof ContainsTextFilterInputInner\n> = memo(ContainsTextFilterInputInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,iBAAiB,QAAQ,qCAAqC;AASvE,SAASC,4BAA4BA,CAAC;EACpCC,WAAW;EACXC,WAAW;EACXC;AAC4B,CAAC,EAAsB;EACnD,MAAMC,KAAK,GAAGN,OAAO,CACnB,MACEI,WAAW,EAAEG,IAAI,KAAK,eAAe,GACjCH,WAAW,CAACE,KAAK,GACjBE,SAAS,EACf,CAACJ,WAAW,CACd,CAAC;EAED,MAAMK,YAAY,GAAGV,WAAW,CAC7BO,KAAyB,IAAK;IAC7BD,oBAAoB,CAAC;MAAEE,IAAI,EAAE,eAAe;MAAED;IAAM,CAAC,CAAC;EACxD,CAAC,EACD,CAACD,oBAAoB,CACvB,CAAC;EAED,oBACER,KAAA,CAAAa,aAAA,CAACT,iBAAiB;IAChBK,KAAK,EAAEA,KAAM;IACbK,QAAQ,EAAEF,YAAa;IACvBG,WAAW,EAAE,UAAUT,WAAW;EAAM,CACzC,CAAC;AAEN;AAEA,OAAO,MAAMU,uBAEZ,gBAAGf,IAAI,CAACI,4BAA4B,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,105 @@
|
|
|
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 { useOsdkAggregation } from "@osdk/react/experimental";
|
|
18
|
+
import React, { memo, useCallback, useMemo } from "react";
|
|
19
|
+
import { DateRangeInput } from "../base/inputs/DateRangeInput.js";
|
|
20
|
+
import { NullValueWrapper } from "../base/inputs/NullValueWrapper.js";
|
|
21
|
+
import { createGroupByAggregateOptions, createNullCountAggregateOptions, createNullWhereClause } from "../utils/aggregationHelpers.js";
|
|
22
|
+
function DateRangeFilterInputInner({
|
|
23
|
+
objectType,
|
|
24
|
+
propertyKey,
|
|
25
|
+
filterState,
|
|
26
|
+
onFilterStateChanged
|
|
27
|
+
}) {
|
|
28
|
+
const dateRangeState = filterState?.type === "DATE_RANGE" ? filterState : undefined;
|
|
29
|
+
const includeNull = filterState?.includeNull;
|
|
30
|
+
const handleNullChange = useCallback(includeNull => {
|
|
31
|
+
onFilterStateChanged({
|
|
32
|
+
type: "DATE_RANGE",
|
|
33
|
+
minValue: dateRangeState?.minValue,
|
|
34
|
+
maxValue: dateRangeState?.maxValue,
|
|
35
|
+
includeNull
|
|
36
|
+
});
|
|
37
|
+
}, [onFilterStateChanged, dateRangeState?.minValue, dateRangeState?.maxValue]);
|
|
38
|
+
const handleRangeChange = useCallback((minValue, maxValue) => {
|
|
39
|
+
onFilterStateChanged({
|
|
40
|
+
type: "DATE_RANGE",
|
|
41
|
+
minValue,
|
|
42
|
+
maxValue,
|
|
43
|
+
includeNull
|
|
44
|
+
});
|
|
45
|
+
}, [onFilterStateChanged, includeNull]);
|
|
46
|
+
const aggregateOptions = useMemo(() => createGroupByAggregateOptions(propertyKey), [propertyKey]);
|
|
47
|
+
const histogramArgs = useMemo(() => ({
|
|
48
|
+
aggregate: aggregateOptions
|
|
49
|
+
}), [aggregateOptions]);
|
|
50
|
+
const {
|
|
51
|
+
data: aggregateData,
|
|
52
|
+
isLoading: histLoading
|
|
53
|
+
} = useOsdkAggregation(objectType, histogramArgs);
|
|
54
|
+
const valueCountPairs = useMemo(() => {
|
|
55
|
+
if (!aggregateData) return [];
|
|
56
|
+
const pairs = [];
|
|
57
|
+
for (const item of aggregateData) {
|
|
58
|
+
const rawValue = item.$group[propertyKey];
|
|
59
|
+
if (rawValue != null) {
|
|
60
|
+
const date = new Date(String(rawValue));
|
|
61
|
+
if (!isNaN(date.getTime())) {
|
|
62
|
+
pairs.push({
|
|
63
|
+
value: date,
|
|
64
|
+
count: item.$count ?? 0
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return pairs;
|
|
70
|
+
}, [aggregateData, propertyKey]);
|
|
71
|
+
const nullCountAggregateOptions = useMemo(() => createNullCountAggregateOptions(), []);
|
|
72
|
+
const nullWhereClause = useMemo(() => createNullWhereClause(propertyKey), [propertyKey]);
|
|
73
|
+
const nullCountArgs = useMemo(() => ({
|
|
74
|
+
where: nullWhereClause,
|
|
75
|
+
aggregate: nullCountAggregateOptions
|
|
76
|
+
}), [nullWhereClause, nullCountAggregateOptions]);
|
|
77
|
+
const {
|
|
78
|
+
data: nullCountData,
|
|
79
|
+
isLoading: nullLoading,
|
|
80
|
+
error: nullError
|
|
81
|
+
} = useOsdkAggregation(objectType, nullCountArgs);
|
|
82
|
+
const nullCount = useMemo(() => {
|
|
83
|
+
if (!nullCountData) return 0;
|
|
84
|
+
const result = nullCountData;
|
|
85
|
+
if ("$count" in result && typeof result.$count === "number") {
|
|
86
|
+
return result.$count;
|
|
87
|
+
}
|
|
88
|
+
return 0;
|
|
89
|
+
}, [nullCountData]);
|
|
90
|
+
return /*#__PURE__*/React.createElement(NullValueWrapper, {
|
|
91
|
+
nullCount: nullCount,
|
|
92
|
+
isLoading: nullLoading,
|
|
93
|
+
error: nullError,
|
|
94
|
+
includeNull: includeNull,
|
|
95
|
+
onIncludeNullChange: handleNullChange
|
|
96
|
+
}, /*#__PURE__*/React.createElement(DateRangeInput, {
|
|
97
|
+
valueCountPairs: valueCountPairs,
|
|
98
|
+
isLoading: histLoading,
|
|
99
|
+
minValue: dateRangeState?.minValue,
|
|
100
|
+
maxValue: dateRangeState?.maxValue,
|
|
101
|
+
onChange: handleRangeChange
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
export const DateRangeFilterInput = /*#__PURE__*/memo(DateRangeFilterInputInner);
|
|
105
|
+
//# sourceMappingURL=DateRangeFilterInput.js.map
|