@osdk/react-components 0.19.0 → 0.19.1-beta.0
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 +39 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +1 -0
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/browser/filter-list/FilterInput.js +7 -0
- package/build/browser/filter-list/FilterInput.js.map +1 -1
- package/build/browser/filter-list/FilterList.js +8 -2
- package/build/browser/filter-list/FilterList.js.map +1 -1
- 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__/aggregationMocks.js +50 -0
- package/build/browser/filter-list/__tests__/aggregationMocks.js.map +1 -0
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +12 -16
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/browser/filter-list/base/FilterListContent.js +42 -40
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.js +8 -36
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/SortableFilterListItem.js +3 -1
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +3 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +6 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js +2 -1
- package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -3
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js +4 -2
- package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/browser/filter-list/hooks/useDualScopeAggregation.js +70 -0
- package/build/browser/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
- package/build/browser/filter-list/hooks/useFilterListState.js +35 -17
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
- package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +7 -6
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +45 -22
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +9 -7
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +8 -6
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +10 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js +4 -2
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +9 -6
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
- package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -1
- package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -1
- package/build/browser/filter-list/types/LinkedFilterTypes.js +42 -1
- package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/browser/filter-list/types/StaticValuesTypes.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +58 -22
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/filter-list/utils/filterValues.js +148 -2
- package/build/browser/filter-list/utils/filterValues.js.map +1 -1
- package/build/browser/filter-list/utils/narrowObjectSet.js +48 -0
- package/build/browser/filter-list/utils/narrowObjectSet.js.map +1 -0
- package/build/browser/public/experimental/filter-list.js +1 -0
- package/build/browser/public/experimental/filter-list.js.map +1 -1
- package/build/browser/styles.css +17 -0
- package/build/browser/tokens/component-tokens/filter-list.css +5 -0
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-6XRF4IAL.cjs → chunk-2AK24MNP.cjs} +4 -4
- package/build/cjs/{chunk-6XRF4IAL.cjs.map → chunk-2AK24MNP.cjs.map} +1 -1
- package/build/cjs/chunk-3DIODTDY.cjs +11 -0
- package/build/cjs/{chunk-774FGQHO.cjs.map → chunk-3DIODTDY.cjs.map} +1 -1
- package/build/cjs/{chunk-P7R4RWMU.cjs → chunk-3RKGMRPD.cjs} +4 -4
- package/build/cjs/{chunk-P7R4RWMU.cjs.map → chunk-3RKGMRPD.cjs.map} +1 -1
- package/build/cjs/chunk-ACIIYYEL.cjs +11 -0
- package/build/cjs/{chunk-62DGPKOC.cjs.map → chunk-ACIIYYEL.cjs.map} +1 -1
- package/build/cjs/{chunk-3OUALM3K.cjs → chunk-COLGW56W.cjs} +4 -4
- package/build/cjs/{chunk-3OUALM3K.cjs.map → chunk-COLGW56W.cjs.map} +1 -1
- package/build/cjs/{chunk-DKPG7O4B.cjs → chunk-GTFPQHZL.cjs} +5 -4
- package/build/cjs/chunk-GTFPQHZL.cjs.map +1 -0
- package/build/cjs/{chunk-L6QDNMMG.cjs → chunk-K3IJA7WZ.cjs} +4 -4
- package/build/cjs/{chunk-L6QDNMMG.cjs.map → chunk-K3IJA7WZ.cjs.map} +1 -1
- package/build/cjs/chunk-MAQSZDRT.cjs +11 -0
- package/build/cjs/{chunk-S25XCKOA.cjs.map → chunk-MAQSZDRT.cjs.map} +1 -1
- package/build/cjs/chunk-MHMRIDIM.cjs +11 -0
- package/build/cjs/{chunk-SLHKSOQC.cjs.map → chunk-MHMRIDIM.cjs.map} +1 -1
- package/build/cjs/{chunk-BXCHISUQ.cjs → chunk-NOONKE5X.cjs} +3 -3
- package/build/cjs/{chunk-BXCHISUQ.cjs.map → chunk-NOONKE5X.cjs.map} +1 -1
- package/build/cjs/chunk-OEESYGT4.cjs +11 -0
- package/build/cjs/{chunk-3Y4W37E3.cjs.map → chunk-OEESYGT4.cjs.map} +1 -1
- package/build/cjs/{chunk-QOI2FQSL.cjs → chunk-PUZZZTC7.cjs} +372 -157
- package/build/cjs/chunk-PUZZZTC7.cjs.map +1 -0
- package/build/cjs/{chunk-FIAYYZHY.cjs → chunk-QWKUCBXE.cjs} +4 -4
- package/build/cjs/{chunk-FIAYYZHY.cjs.map → chunk-QWKUCBXE.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +4 -4
- package/build/cjs/public/experimental/action-form.d.cts +1 -1
- package/build/cjs/public/experimental/document-viewer.cjs +4 -4
- package/build/cjs/public/experimental/email-viewer.cjs +3 -3
- package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
- package/build/cjs/public/experimental/filter-list.cjs +17 -13
- package/build/cjs/public/experimental/filter-list.css +8 -0
- package/build/cjs/public/experimental/filter-list.css.map +1 -1
- package/build/cjs/public/experimental/filter-list.d.cts +95 -25
- package/build/cjs/public/experimental/image-viewer.cjs +3 -3
- package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
- package/build/cjs/public/experimental/object-table.cjs +8 -8
- package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
- package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
- package/build/cjs/public/experimental/video-viewer.cjs +3 -3
- package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
- package/build/cjs/public/experimental.cjs +50 -46
- package/build/cjs/public/experimental.css +8 -0
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +1 -1
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +1 -0
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/esm/filter-list/FilterInput.js +7 -0
- package/build/esm/filter-list/FilterInput.js.map +1 -1
- package/build/esm/filter-list/FilterList.js +8 -2
- package/build/esm/filter-list/FilterList.js.map +1 -1
- 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__/aggregationMocks.js +50 -0
- package/build/esm/filter-list/__tests__/aggregationMocks.js.map +1 -0
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +12 -16
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/esm/filter-list/base/FilterListContent.js +42 -40
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.js +8 -36
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/SortableFilterListItem.js +3 -1
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +3 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +6 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js +2 -1
- package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -3
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js +4 -2
- package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/esm/filter-list/hooks/useDualScopeAggregation.js +70 -0
- package/build/esm/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
- package/build/esm/filter-list/hooks/useFilterListState.js +35 -17
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
- package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +7 -6
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +45 -22
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +9 -7
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +8 -6
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +10 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js +4 -2
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +9 -6
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
- package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -1
- package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -1
- package/build/esm/filter-list/types/LinkedFilterTypes.js +42 -1
- package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/esm/filter-list/types/StaticValuesTypes.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +58 -22
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/filter-list/utils/filterValues.js +148 -2
- package/build/esm/filter-list/utils/filterValues.js.map +1 -1
- package/build/esm/filter-list/utils/narrowObjectSet.js +48 -0
- package/build/esm/filter-list/utils/narrowObjectSet.js.map +1 -0
- package/build/esm/public/experimental/filter-list.js +1 -0
- package/build/esm/public/experimental/filter-list.js.map +1 -1
- package/build/esm/tokens/component-tokens/filter-list.css +5 -0
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/action-form/FormFieldApi.d.ts +1 -1
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterInput.d.ts +6 -1
- package/build/types/filter-list/FilterInput.d.ts.map +1 -1
- package/build/types/filter-list/FilterList.d.ts.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +30 -15
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +15 -1
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/__tests__/aggregationMocks.d.ts +11 -0
- package/build/types/filter-list/__tests__/aggregationMocks.d.ts.map +1 -0
- package/build/types/filter-list/base/BaseFilterList.d.ts +2 -1
- package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -2
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListContent.d.ts +3 -3
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts +2 -1
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts +2 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts +2 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts +32 -0
- package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts.map +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts +7 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts +13 -0
- package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts.map +1 -0
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +6 -4
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +7 -1
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/StaticValuesFilterInput.d.ts +1 -1
- package/build/types/filter-list/types/CustomRendererTypes.d.ts +2 -2
- package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts +2 -2
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts +34 -4
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/StaticValuesTypes.d.ts +2 -2
- package/build/types/filter-list/types/StaticValuesTypes.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +24 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterValues.d.ts +26 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
- package/build/types/filter-list/utils/narrowObjectSet.d.ts +7 -0
- package/build/types/filter-list/utils/narrowObjectSet.d.ts.map +1 -0
- package/build/types/public/experimental/filter-list.d.ts +3 -1
- package/build/types/public/experimental/filter-list.d.ts.map +1 -1
- package/docs/CSSVariables.md +78 -17
- package/docs/FilterList.md +52 -6
- package/package.json +9 -9
- package/build/cjs/chunk-3Y4W37E3.cjs +0 -11
- package/build/cjs/chunk-62DGPKOC.cjs +0 -11
- package/build/cjs/chunk-774FGQHO.cjs +0 -11
- package/build/cjs/chunk-DKPG7O4B.cjs.map +0 -1
- package/build/cjs/chunk-QOI2FQSL.cjs.map +0 -1
- package/build/cjs/chunk-S25XCKOA.cjs +0 -11
- package/build/cjs/chunk-SLHKSOQC.cjs +0 -11
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 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 { useMemo } from "react";
|
|
18
|
+
import { computeDualScopes } from "../utils/narrowObjectSet.js";
|
|
19
|
+
import { useDualScopeAggregation } from "./useDualScopeAggregation.js";
|
|
20
|
+
export function useFilterPropertyAggregation(objectType, propertyKey, objectSet, whereClause, linkedFilters, options = {}) {
|
|
21
|
+
const {
|
|
22
|
+
sortBy,
|
|
23
|
+
selectedValues,
|
|
24
|
+
limit,
|
|
25
|
+
showFilteredOutValues
|
|
26
|
+
} = options;
|
|
27
|
+
const {
|
|
28
|
+
scoped,
|
|
29
|
+
emptySource
|
|
30
|
+
} = useMemo(() => computeDualScopes(objectSet, whereClause, linkedFilters, showFilteredOutValues), [objectSet, whereClause, linkedFilters, showFilteredOutValues]);
|
|
31
|
+
return useDualScopeAggregation(objectType, propertyKey, scoped, emptySource, {
|
|
32
|
+
sortBy,
|
|
33
|
+
selectedValues,
|
|
34
|
+
limit
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=useFilterPropertyAggregation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilterPropertyAggregation.js","names":["useMemo","computeDualScopes","useDualScopeAggregation","useFilterPropertyAggregation","objectType","propertyKey","objectSet","whereClause","linkedFilters","options","sortBy","selectedValues","limit","showFilteredOutValues","scoped","emptySource"],"sources":["useFilterPropertyAggregation.ts"],"sourcesContent":["/*\n * Copyright 2026 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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useMemo } from \"react\";\nimport type { LinkedFilter } from \"../types/LinkedFilterTypes.js\";\nimport { computeDualScopes } from \"../utils/narrowObjectSet.js\";\nimport { useDualScopeAggregation } from \"./useDualScopeAggregation.js\";\nimport type { UsePropertyAggregationResult } from \"./usePropertyAggregation.js\";\n\nexport interface UseFilterPropertyAggregationOptions {\n limit?: number;\n sortBy?: \"count\" | \"value\";\n selectedValues?: string[];\n showFilteredOutValues?: boolean;\n}\n\nexport function useFilterPropertyAggregation<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(\n objectType: Q,\n propertyKey: K,\n objectSet: ObjectSet<Q> | undefined,\n whereClause: WhereClause<Q>,\n linkedFilters: ReadonlyArray<LinkedFilter<Q>>,\n options: UseFilterPropertyAggregationOptions = {},\n): UsePropertyAggregationResult {\n const { sortBy, selectedValues, limit, showFilteredOutValues } = options;\n\n const { scoped, emptySource } = useMemo(\n () =>\n computeDualScopes(\n objectSet,\n whereClause,\n linkedFilters,\n showFilteredOutValues,\n ),\n [objectSet, whereClause, linkedFilters, showFilteredOutValues],\n );\n\n return useDualScopeAggregation(\n objectType,\n propertyKey,\n scoped,\n emptySource,\n { sortBy, selectedValues, limit },\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,iBAAiB,QAAQ,6BAA6B;AAC/D,SAASC,uBAAuB,QAAQ,8BAA8B;AAUtE,OAAO,SAASC,4BAA4BA,CAI1CC,UAAa,EACbC,WAAc,EACdC,SAAmC,EACnCC,WAA2B,EAC3BC,aAA6C,EAC7CC,OAA4C,GAAG,CAAC,CAAC,EACnB;EAC9B,MAAM;IAAEC,MAAM;IAAEC,cAAc;IAAEC,KAAK;IAAEC;EAAsB,CAAC,GAAGJ,OAAO;EAExE,MAAM;IAAEK,MAAM;IAAEC;EAAY,CAAC,GAAGf,OAAO,CACrC,MACEC,iBAAiB,CACfK,SAAS,EACTC,WAAW,EACXC,aAAa,EACbK,qBACF,CAAC,EACH,CAACP,SAAS,EAAEC,WAAW,EAAEC,aAAa,EAAEK,qBAAqB,CAC/D,CAAC;EAED,OAAOX,uBAAuB,CAC5BE,UAAU,EACVC,WAAW,EACXS,MAAM,EACNC,WAAW,EACX;IAAEL,MAAM;IAAEC,cAAc;IAAEC;EAAM,CAClC,CAAC;AACH","ignoreList":[]}
|
|
@@ -60,23 +60,24 @@ export function usePropertyAggregation(objectType, propertyKey, objectSet, optio
|
|
|
60
60
|
const dataArray = countData;
|
|
61
61
|
|
|
62
62
|
// Build a set of values present in the aggregation so we can identify
|
|
63
|
-
// which active selections need to be synthesized as
|
|
63
|
+
// which active selections need to be synthesized as filtered-out entries.
|
|
64
64
|
const existingValues = new Set();
|
|
65
65
|
for (const item of dataArray) {
|
|
66
66
|
const raw = item.$group[propertyKey];
|
|
67
67
|
existingValues.add(raw == null ? "" : String(raw));
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
// Synthesize
|
|
71
|
-
// results (e.g. saved filters with zero matching rows). They
|
|
72
|
-
// shape as real entries so the loop below handles isNull
|
|
73
|
-
|
|
70
|
+
// Synthesize filtered-out entries for active selections absent from
|
|
71
|
+
// aggregation results (e.g. saved filters with zero matching rows). They
|
|
72
|
+
// use the same shape as real entries so the loop below handles isNull
|
|
73
|
+
// uniformly.
|
|
74
|
+
const filteredOutEntries = activeValues.flatMap(v => existingValues.has(v) ? [] : [{
|
|
74
75
|
$group: {
|
|
75
76
|
[propertyKey]: v
|
|
76
77
|
},
|
|
77
78
|
$count: 0
|
|
78
79
|
}]);
|
|
79
|
-
for (const item of [...dataArray, ...
|
|
80
|
+
for (const item of [...dataArray, ...filteredOutEntries]) {
|
|
80
81
|
const rawValue = item.$group[propertyKey];
|
|
81
82
|
const count = item.$count ?? 0;
|
|
82
83
|
if (rawValue == null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","dedupeEmptyAggregationRows","EMPTY_ACTIVE_VALUES","usePropertyAggregation","objectType","propertyKey","objectSet","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","aggregationArgs","aggregate","where","data","countData","isLoading","error","activeValues","result","maxCount","values","dataArray","existingValues","Set","item","raw","$group","add","String","
|
|
1
|
+
{"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","dedupeEmptyAggregationRows","EMPTY_ACTIVE_VALUES","usePropertyAggregation","objectType","propertyKey","objectSet","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","aggregationArgs","aggregate","where","data","countData","isLoading","error","activeValues","result","maxCount","values","dataArray","existingValues","Set","item","raw","$group","add","String","filteredOutEntries","flatMap","v","has","rawValue","count","push","value","isNull","Math","max","deduped","sortBy","sort","a","b","localeCompare","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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react\";\nimport { useMemo } from \"react\";\nimport type { AggregationGroupResult } from \"../utils/aggregationHelpers.js\";\nimport { dedupeEmptyAggregationRows } from \"../utils/filterValues.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\nconst EMPTY_ACTIVE_VALUES: string[] = [];\n\nexport interface UsePropertyAggregationOptions<\n Q extends ObjectTypeDefinition = ObjectTypeDefinition,\n> {\n limit?: number;\n where?: WhereClause<Q>;\n sortBy?: \"count\" | \"value\";\n /** Selected values to include in results even when they have zero matching\n * rows (e.g. saved filter selections from initialFilterStates). */\n activeValues?: string[];\n}\n\nexport function usePropertyAggregation<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(\n objectType: Q,\n propertyKey: K,\n objectSet: ObjectSet<Q> | undefined,\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 aggregationArgs = useMemo(\n () => ({ aggregate: aggregateOptions, where: options?.where, objectSet }),\n [aggregateOptions, options?.where, objectSet],\n );\n\n const { data: countData, isLoading, error } = useOsdkAggregation(\n objectType,\n aggregationArgs,\n );\n\n const activeValues = options?.activeValues ?? EMPTY_ACTIVE_VALUES;\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 // Build a set of values present in the aggregation so we can identify\n // which active selections need to be synthesized as filtered-out entries.\n const existingValues = new Set<string>();\n for (const item of dataArray) {\n const raw = item.$group[propertyKey as string];\n existingValues.add(raw == null ? \"\" : String(raw));\n }\n\n // Synthesize filtered-out entries for active selections absent from\n // aggregation results (e.g. saved filters with zero matching rows). They\n // use the same shape as real entries so the loop below handles isNull\n // uniformly.\n const filteredOutEntries = activeValues.flatMap((v) =>\n existingValues.has(v)\n ? []\n : [{ $group: { [propertyKey as string]: v }, $count: 0 }]\n );\n\n for (const item of [...dataArray, ...filteredOutEntries]) {\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 const deduped = dedupeEmptyAggregationRows(values);\n\n const sortBy = options?.sortBy ?? \"count\";\n if (sortBy === \"count\") {\n deduped.sort((a, b) =>\n b.count - a.count || a.value.localeCompare(b.value)\n );\n } else {\n deduped.sort((a, b) => a.value.localeCompare(b.value));\n }\n\n if (options?.limit && deduped.length > options.limit) {\n return { data: deduped.slice(0, options.limit), maxCount };\n }\n\n return { data: deduped, maxCount };\n },\n [countData, propertyKey, options?.limit, options?.sortBy, activeValues],\n );\n\n return {\n data: result.data,\n maxCount: result.maxCount,\n isLoading,\n error: error ?? null,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -31,20 +31,30 @@ import { SingleSelectInput } from "../base/inputs/SingleSelectInput.js";
|
|
|
31
31
|
import { TextTagsInput } from "../base/inputs/TextTagsInput.js";
|
|
32
32
|
import { TimelineInput } from "../base/inputs/TimelineInput.js";
|
|
33
33
|
import { ToggleInput } from "../base/inputs/ToggleInput.js";
|
|
34
|
+
import { useDualScopeAggregation } from "../hooks/useDualScopeAggregation.js";
|
|
34
35
|
import { usePropertyAggregation } from "../hooks/usePropertyAggregation.js";
|
|
36
|
+
import { EMPTY_LINKED_FILTERS } from "../types/LinkedFilterTypes.js";
|
|
35
37
|
import { createGroupByAggregateOptions, createNullCountAggregateOptions, createNullWhereClause } from "../utils/aggregationHelpers.js";
|
|
36
38
|
import { coerceToString, coerceToStringArray } from "../utils/coerceFilterValue.js";
|
|
39
|
+
import { narrowObjectSet } from "../utils/narrowObjectSet.js";
|
|
37
40
|
function LinkedPropertyInputInner({
|
|
38
41
|
objectSet,
|
|
42
|
+
whereClause,
|
|
43
|
+
linkedFilters = EMPTY_LINKED_FILTERS,
|
|
39
44
|
definition,
|
|
40
45
|
filterState,
|
|
41
46
|
onFilterStateChanged,
|
|
47
|
+
showFilteredOutValues,
|
|
42
48
|
searchQuery,
|
|
43
49
|
className,
|
|
44
50
|
style,
|
|
45
51
|
layout
|
|
46
52
|
}) {
|
|
47
|
-
const
|
|
53
|
+
const scoped = useMemo(() => narrowObjectSet(objectSet, whereClause, linkedFilters), [objectSet, whereClause, linkedFilters]);
|
|
54
|
+
const linkedObjectSet = useMemo(() => scoped.pivotTo(definition.linkName), [scoped, definition.linkName]);
|
|
55
|
+
// Filtered-out rows on a linked facet compare against the raw source so
|
|
56
|
+
// direct filters surface as count=0 entries on the linked side.
|
|
57
|
+
const emptySourceLinkedObjectSet = useMemo(() => showFilteredOutValues ? objectSet.pivotTo(definition.linkName) : undefined, [showFilteredOutValues, objectSet, definition.linkName]);
|
|
48
58
|
const linkedObjectType = linkedObjectSet.$objectSetInternals.def;
|
|
49
59
|
const linkedPropertyKey = definition.linkedPropertyKey;
|
|
50
60
|
const innerState = filterState?.type === "linkedProperty" ? filterState.linkedFilterState : undefined;
|
|
@@ -154,10 +164,12 @@ function LinkedPropertyInputInner({
|
|
|
154
164
|
return /*#__PURE__*/React.createElement(LinkedMultiSelectInput, {
|
|
155
165
|
objectType: linkedObjectType,
|
|
156
166
|
objectSet: linkedObjectSet,
|
|
167
|
+
emptySourceObjectSet: emptySourceLinkedObjectSet,
|
|
157
168
|
propertyKey: linkedPropertyKey,
|
|
158
169
|
selectedValues: values,
|
|
159
170
|
onChange: onSelectChange,
|
|
160
171
|
showCount: definition.showCount,
|
|
172
|
+
renderValue: definition.renderValue,
|
|
161
173
|
layout: layout
|
|
162
174
|
});
|
|
163
175
|
}
|
|
@@ -167,10 +179,12 @@ function LinkedPropertyInputInner({
|
|
|
167
179
|
return /*#__PURE__*/React.createElement(LinkedSingleSelectInput, {
|
|
168
180
|
objectType: linkedObjectType,
|
|
169
181
|
objectSet: linkedObjectSet,
|
|
182
|
+
emptySourceObjectSet: emptySourceLinkedObjectSet,
|
|
170
183
|
propertyKey: linkedPropertyKey,
|
|
171
184
|
selectedValue: value,
|
|
172
185
|
onChange: onSingleSelectChange,
|
|
173
|
-
showCount: definition.showCount
|
|
186
|
+
showCount: definition.showCount,
|
|
187
|
+
renderValue: definition.renderValue
|
|
174
188
|
});
|
|
175
189
|
}
|
|
176
190
|
case "CONTAINS_TEXT":
|
|
@@ -225,11 +239,13 @@ function LinkedPropertyInputInner({
|
|
|
225
239
|
return /*#__PURE__*/React.createElement(LinkedListogramInput, {
|
|
226
240
|
objectType: linkedObjectType,
|
|
227
241
|
objectSet: linkedObjectSet,
|
|
242
|
+
emptySourceObjectSet: emptySourceLinkedObjectSet,
|
|
228
243
|
propertyKey: linkedPropertyKey,
|
|
229
244
|
selectedValues: selectedValues,
|
|
230
245
|
onChange: onExactMatchChange,
|
|
231
246
|
searchQuery: searchQuery,
|
|
232
|
-
showCount: definition.showCount
|
|
247
|
+
showCount: definition.showCount,
|
|
248
|
+
renderValue: definition.renderValue
|
|
233
249
|
});
|
|
234
250
|
}
|
|
235
251
|
case "TEXT_TAGS":
|
|
@@ -284,20 +300,21 @@ export const LinkedPropertyInput = /*#__PURE__*/memo(LinkedPropertyInputInner);
|
|
|
284
300
|
function LinkedMultiSelectInput({
|
|
285
301
|
objectType,
|
|
286
302
|
objectSet,
|
|
303
|
+
emptySourceObjectSet,
|
|
287
304
|
propertyKey,
|
|
288
305
|
selectedValues,
|
|
289
306
|
onChange,
|
|
290
307
|
showCount,
|
|
308
|
+
renderValue,
|
|
291
309
|
layout
|
|
292
310
|
}) {
|
|
293
|
-
const aggregationOptions = useMemo(() => ({
|
|
294
|
-
activeValues: selectedValues
|
|
295
|
-
}), [selectedValues]);
|
|
296
311
|
const {
|
|
297
312
|
data,
|
|
298
313
|
isLoading,
|
|
299
314
|
error
|
|
300
|
-
} =
|
|
315
|
+
} = useDualScopeAggregation(objectType, propertyKey, objectSet, emptySourceObjectSet, {
|
|
316
|
+
selectedValues
|
|
317
|
+
});
|
|
301
318
|
return /*#__PURE__*/React.createElement(MultiSelectInput, {
|
|
302
319
|
values: data,
|
|
303
320
|
isLoading: isLoading,
|
|
@@ -305,25 +322,28 @@ function LinkedMultiSelectInput({
|
|
|
305
322
|
selectedValues: selectedValues,
|
|
306
323
|
onChange: onChange,
|
|
307
324
|
showCounts: showCount,
|
|
325
|
+
renderValue: renderValue,
|
|
308
326
|
layout: layout
|
|
309
327
|
});
|
|
310
328
|
}
|
|
311
329
|
function LinkedSingleSelectInput({
|
|
312
330
|
objectType,
|
|
313
331
|
objectSet,
|
|
332
|
+
emptySourceObjectSet,
|
|
314
333
|
propertyKey,
|
|
315
334
|
selectedValue,
|
|
316
335
|
onChange,
|
|
317
|
-
showCount
|
|
336
|
+
showCount,
|
|
337
|
+
renderValue
|
|
318
338
|
}) {
|
|
319
|
-
const
|
|
320
|
-
activeValues: selectedValue != null ? [selectedValue] : undefined
|
|
321
|
-
}), [selectedValue]);
|
|
339
|
+
const selectedValues = useMemo(() => selectedValue != null ? [selectedValue] : [], [selectedValue]);
|
|
322
340
|
const {
|
|
323
341
|
data,
|
|
324
342
|
isLoading,
|
|
325
343
|
error
|
|
326
|
-
} =
|
|
344
|
+
} = useDualScopeAggregation(objectType, propertyKey, objectSet, emptySourceObjectSet, {
|
|
345
|
+
selectedValues
|
|
346
|
+
});
|
|
327
347
|
return /*#__PURE__*/React.createElement(SingleSelectInput, {
|
|
328
348
|
values: data,
|
|
329
349
|
isLoading: isLoading,
|
|
@@ -331,27 +351,29 @@ function LinkedSingleSelectInput({
|
|
|
331
351
|
selectedValue: selectedValue,
|
|
332
352
|
onChange: onChange,
|
|
333
353
|
showCounts: showCount,
|
|
354
|
+
renderValue: renderValue,
|
|
334
355
|
ariaLabel: `Select ${propertyKey}`
|
|
335
356
|
});
|
|
336
357
|
}
|
|
337
358
|
function LinkedListogramInput({
|
|
338
359
|
objectType,
|
|
339
360
|
objectSet,
|
|
361
|
+
emptySourceObjectSet,
|
|
340
362
|
propertyKey,
|
|
341
363
|
selectedValues,
|
|
342
364
|
onChange,
|
|
343
365
|
searchQuery,
|
|
344
|
-
showCount
|
|
366
|
+
showCount,
|
|
367
|
+
renderValue
|
|
345
368
|
}) {
|
|
346
|
-
const aggregationOptions = useMemo(() => ({
|
|
347
|
-
activeValues: selectedValues
|
|
348
|
-
}), [selectedValues]);
|
|
349
369
|
const {
|
|
350
370
|
data,
|
|
351
371
|
maxCount,
|
|
352
372
|
isLoading,
|
|
353
373
|
error
|
|
354
|
-
} =
|
|
374
|
+
} = useDualScopeAggregation(objectType, propertyKey, objectSet, emptySourceObjectSet, {
|
|
375
|
+
selectedValues
|
|
376
|
+
});
|
|
355
377
|
return /*#__PURE__*/React.createElement(ListogramInput, {
|
|
356
378
|
values: data,
|
|
357
379
|
maxCount: maxCount,
|
|
@@ -360,9 +382,13 @@ function LinkedListogramInput({
|
|
|
360
382
|
selectedValues: selectedValues,
|
|
361
383
|
onChange: onChange,
|
|
362
384
|
searchQuery: searchQuery,
|
|
363
|
-
showCount: showCount
|
|
385
|
+
showCount: showCount,
|
|
386
|
+
renderValue: renderValue
|
|
364
387
|
});
|
|
365
388
|
}
|
|
389
|
+
const TEXT_TAGS_OPTIONS = {
|
|
390
|
+
limit: 50
|
|
391
|
+
};
|
|
366
392
|
function LinkedTextTagsInput({
|
|
367
393
|
objectType,
|
|
368
394
|
objectSet,
|
|
@@ -370,14 +396,11 @@ function LinkedTextTagsInput({
|
|
|
370
396
|
tags,
|
|
371
397
|
onChange
|
|
372
398
|
}) {
|
|
373
|
-
const aggregationOptions = useMemo(() => ({
|
|
374
|
-
limit: 50
|
|
375
|
-
}), []);
|
|
376
399
|
const {
|
|
377
400
|
data,
|
|
378
401
|
isLoading,
|
|
379
402
|
error
|
|
380
|
-
} = usePropertyAggregation(objectType, propertyKey, objectSet,
|
|
403
|
+
} = usePropertyAggregation(objectType, propertyKey, objectSet, TEXT_TAGS_OPTIONS);
|
|
381
404
|
return /*#__PURE__*/React.createElement(TextTagsInput, {
|
|
382
405
|
suggestions: data,
|
|
383
406
|
isLoading: isLoading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkedPropertyInput.js","names":["useOsdkAggregation","classnames","React","memo","useCallback","useMemo","assertUnreachable","ContainsTextInput","DateRangeHistogramInput","styles","ListogramInput","MultiDateInput","MultiSelectInput","NullValueWrapper","NumberRangeInput","SingleDateInput","SingleSelectInput","TextTagsInput","TimelineInput","ToggleInput","usePropertyAggregation","createGroupByAggregateOptions","createNullCountAggregateOptions","createNullWhereClause","coerceToString","coerceToStringArray","LinkedPropertyInputInner","objectSet","definition","filterState","onFilterStateChanged","searchQuery","className","style","layout","linkedObjectSet","pivotTo","linkName","linkedObjectType","$objectSetInternals","def","linkedPropertyKey","innerState","type","linkedFilterState","undefined","isExcluding","includeNull","wrappedOnChange","innerFilterState","onSelectChange","selectedValues","onSingleSelectChange","selectedValue","onContainsTextChange","value","onToggleChange","enabled","onNumberRangeChange","minValue","maxValue","onDateRangeChange","onExactMatchChange","values","onDateSelectChange","date","onMultiDateChange","dates","onTimelineChange","start","end","startDate","endDate","onNullChange","newIncludeNull","content","linkedFilterComponent","createElement","LinkedMultiSelectInput","objectType","propertyKey","onChange","showCount","LinkedSingleSelectInput","placeholder","String","nr","LinkedNumberRangeInput","dr","LinkedDateRangeInput","exactState","LinkedListogramInput","tags","LinkedTextTagsInput","selectedDate","Date","showClearButton","selectedDates","filter","v","showClearAll","tl","linkedProperty","LinkedPropertyInput","aggregationOptions","activeValues","data","isLoading","error","showCounts","ariaLabel","maxCount","limit","suggestions","suggestionLimit","useLinkedRangeData","aggregateOptions","histogramArgs","aggregate","aggregateData","histLoading","nullCountAggregateOptions","nullWhereClause","nullCountArgs","where","nullCountData","nullLoading","nullCount","result","$count","valueCountPairs","pairs","item","rawValue","$group","parsed","parseFloat","isNaN","push","count","onIncludeNullChange","getTime"],"sources":["LinkedPropertyInput.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 LinkNames,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { ContainsTextInput } from \"../base/inputs/ContainsTextInput.js\";\nimport { DateRangeHistogramInput } from \"../base/inputs/DateRangeHistogramInput.js\";\nimport styles from \"../base/inputs/LinkedPropertyInput.module.css\";\nimport { ListogramInput } from \"../base/inputs/ListogramInput.js\";\nimport { MultiDateInput } from \"../base/inputs/MultiDateInput.js\";\nimport {\n MultiSelectInput,\n type MultiSelectInputLayout,\n} from \"../base/inputs/MultiSelectInput.js\";\nimport { NullValueWrapper } from \"../base/inputs/NullValueWrapper.js\";\nimport { NumberRangeInput } from \"../base/inputs/NumberRangeInput.js\";\nimport { SingleDateInput } from \"../base/inputs/SingleDateInput.js\";\nimport { SingleSelectInput } from \"../base/inputs/SingleSelectInput.js\";\nimport { TextTagsInput } from \"../base/inputs/TextTagsInput.js\";\nimport { TimelineInput } from \"../base/inputs/TimelineInput.js\";\nimport { ToggleInput } from \"../base/inputs/ToggleInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { usePropertyAggregation } from \"../hooks/usePropertyAggregation.js\";\nimport type { LinkedPropertyFilterDefinition } from \"../types/LinkedFilterTypes.js\";\nimport {\n createGroupByAggregateOptions,\n createNullCountAggregateOptions,\n createNullWhereClause,\n} from \"../utils/aggregationHelpers.js\";\nimport {\n coerceToString,\n coerceToStringArray,\n} from \"../utils/coerceFilterValue.js\";\n\ninterface LinkedPropertyInputProps<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n> {\n objectSet: ObjectSet<Q>;\n definition: LinkedPropertyFilterDefinition<\n Q,\n L,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n >;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n searchQuery?: string;\n className?: string;\n style?: React.CSSProperties;\n /** Layout for `MULTI_SELECT` rendering. Forwarded to `MultiSelectInput`. */\n layout?: MultiSelectInputLayout;\n}\n\nfunction LinkedPropertyInputInner<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n>({\n objectSet,\n definition,\n filterState,\n onFilterStateChanged,\n searchQuery,\n className,\n style,\n layout,\n}: LinkedPropertyInputProps<Q, L>): React.ReactElement {\n const linkedObjectSet = useMemo(\n () => objectSet.pivotTo(definition.linkName),\n [objectSet, definition.linkName],\n );\n\n const linkedObjectType = linkedObjectSet.$objectSetInternals.def;\n\n const linkedPropertyKey = definition.linkedPropertyKey as PropertyKeys<\n typeof linkedObjectType\n >;\n\n const innerState = filterState?.type === \"linkedProperty\"\n ? filterState.linkedFilterState\n : undefined;\n\n const isExcluding = innerState?.isExcluding ?? false;\n const includeNull = innerState?.includeNull;\n\n const wrappedOnChange = useCallback(\n (innerFilterState: FilterState) => {\n onFilterStateChanged({\n type: \"linkedProperty\",\n linkedFilterState: innerFilterState,\n });\n },\n [onFilterStateChanged],\n );\n\n const onSelectChange = useCallback(\n (selectedValues: string[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onSingleSelectChange = useCallback(\n (selectedValue: string | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: selectedValue !== undefined ? [selectedValue] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onContainsTextChange = useCallback(\n (value: string | undefined) => {\n wrappedOnChange({ type: \"CONTAINS_TEXT\", value });\n },\n [wrappedOnChange],\n );\n\n const onToggleChange = useCallback(\n (enabled: boolean) => {\n wrappedOnChange({ type: \"TOGGLE\", enabled });\n },\n [wrappedOnChange],\n );\n\n const onNumberRangeChange = useCallback(\n (minValue: number | undefined, maxValue: number | undefined) => {\n wrappedOnChange({\n type: \"NUMBER_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onDateRangeChange = useCallback(\n (minValue: Date | undefined, maxValue: Date | undefined) => {\n wrappedOnChange({\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onExactMatchChange = useCallback(\n (values: string[]) => {\n wrappedOnChange({\n type: \"EXACT_MATCH\",\n values,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onDateSelectChange = useCallback(\n (date: Date | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: date !== undefined ? [date] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onMultiDateChange = useCallback(\n (dates: Date[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: dates,\n });\n },\n [wrappedOnChange],\n );\n\n const onTimelineChange = useCallback(\n (start: Date | undefined, end: Date | undefined) => {\n wrappedOnChange({\n type: \"TIMELINE\",\n startDate: start,\n endDate: end,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onNullChange = useCallback(\n (newIncludeNull: boolean) => {\n if (innerState?.type === \"NUMBER_RANGE\") {\n wrappedOnChange({ ...innerState, includeNull: newIncludeNull });\n } else if (innerState?.type === \"DATE_RANGE\") {\n wrappedOnChange({ ...innerState, includeNull: newIncludeNull });\n } else {\n wrappedOnChange({\n type: \"NUMBER_RANGE\",\n minValue: undefined,\n maxValue: undefined,\n includeNull: newIncludeNull,\n });\n }\n },\n [wrappedOnChange, innerState],\n );\n\n const content = (() => {\n switch (definition.linkedFilterComponent) {\n case \"MULTI_SELECT\": {\n const values = innerState?.type === \"SELECT\"\n ? coerceToStringArray(innerState.selectedValues)\n : [];\n return (\n <LinkedMultiSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={values}\n onChange={onSelectChange}\n showCount={definition.showCount}\n layout={layout}\n />\n );\n }\n\n case \"SINGLE_SELECT\": {\n const value = innerState?.type === \"SELECT\"\n ? coerceToString(innerState.selectedValues[0])\n : undefined;\n return (\n <LinkedSingleSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValue={value}\n onChange={onSingleSelectChange}\n showCount={definition.showCount}\n />\n );\n }\n\n case \"CONTAINS_TEXT\": {\n const value = innerState?.type === \"CONTAINS_TEXT\"\n ? innerState.value\n : undefined;\n return (\n <ContainsTextInput\n value={value}\n onChange={onContainsTextChange}\n placeholder={`Search ${String(definition.linkedPropertyKey)}...`}\n />\n );\n }\n\n case \"TOGGLE\": {\n const enabled = innerState?.type === \"TOGGLE\"\n ? innerState.enabled\n : false;\n return (\n <ToggleInput\n enabled={enabled}\n onChange={onToggleChange}\n />\n );\n }\n\n case \"NUMBER_RANGE\": {\n const nr = innerState?.type === \"NUMBER_RANGE\" ? innerState : undefined;\n return (\n <LinkedNumberRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={nr?.minValue}\n maxValue={nr?.maxValue}\n includeNull={nr?.includeNull}\n onChange={onNumberRangeChange}\n onNullChange={onNullChange}\n />\n );\n }\n\n case \"DATE_RANGE\": {\n const dr = innerState?.type === \"DATE_RANGE\" ? innerState : undefined;\n return (\n <LinkedDateRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={dr?.minValue}\n maxValue={dr?.maxValue}\n includeNull={dr?.includeNull}\n onChange={onDateRangeChange}\n onNullChange={onNullChange}\n />\n );\n }\n\n case \"LISTOGRAM\": {\n const exactState = innerState?.type === \"EXACT_MATCH\"\n ? innerState\n : undefined;\n const selectedValues = exactState\n ? coerceToStringArray(exactState.values)\n : [];\n return (\n <LinkedListogramInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={selectedValues}\n onChange={onExactMatchChange}\n searchQuery={searchQuery}\n showCount={definition.showCount}\n />\n );\n }\n\n case \"TEXT_TAGS\": {\n const exactState = innerState?.type === \"EXACT_MATCH\"\n ? innerState\n : undefined;\n const tags = exactState ? coerceToStringArray(exactState.values) : [];\n return (\n <LinkedTextTagsInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n tags={tags}\n onChange={onExactMatchChange}\n />\n );\n }\n\n case \"SINGLE_DATE\": {\n const selectedDate = innerState?.type === \"SELECT\"\n ? (innerState.selectedValues[0] instanceof Date\n ? innerState.selectedValues[0]\n : undefined)\n : undefined;\n return (\n <SingleDateInput\n selectedDate={selectedDate}\n onChange={onDateSelectChange}\n showClearButton={true}\n />\n );\n }\n\n case \"MULTI_DATE\": {\n const selectedDates = innerState?.type === \"SELECT\"\n ? innerState.selectedValues.filter(\n (v): v is Date => v instanceof Date,\n )\n : [];\n return (\n <MultiDateInput\n selectedDates={selectedDates}\n onChange={onMultiDateChange}\n showClearAll={true}\n />\n );\n }\n\n case \"TIMELINE\": {\n const tl = innerState?.type === \"TIMELINE\" ? innerState : undefined;\n return (\n <TimelineInput\n startDate={tl?.startDate}\n endDate={tl?.endDate}\n onChange={onTimelineChange}\n />\n );\n }\n\n default:\n return assertUnreachable(definition.linkedFilterComponent);\n }\n })();\n\n return (\n <div className={classnames(styles.linkedProperty, className)} style={style}>\n {content}\n </div>\n );\n}\n\nexport const LinkedPropertyInput: typeof LinkedPropertyInputInner = memo(\n LinkedPropertyInputInner,\n) as typeof LinkedPropertyInputInner;\n\ninterface LinkedAggregationInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n propertyKey: PropertyKeys<Q>;\n}\n\ninterface LinkedMultiSelectInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValues: string[];\n onChange: (values: string[]) => void;\n showCount?: boolean;\n layout?: MultiSelectInputLayout;\n}\n\nfunction LinkedMultiSelectInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n selectedValues,\n onChange,\n showCount,\n layout,\n}: LinkedMultiSelectInputProps<Q>): React.ReactElement {\n const aggregationOptions = useMemo(\n () => ({ activeValues: selectedValues }),\n [selectedValues],\n );\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n objectSet,\n aggregationOptions,\n );\n\n return (\n <MultiSelectInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={onChange}\n showCounts={showCount}\n layout={layout}\n />\n );\n}\n\ninterface LinkedSingleSelectInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValue: string | undefined;\n onChange: (value: string | undefined) => void;\n showCount?: boolean;\n}\n\nfunction LinkedSingleSelectInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n selectedValue,\n onChange,\n showCount,\n}: LinkedSingleSelectInputProps<Q>): React.ReactElement {\n const aggregationOptions = useMemo(\n () => ({\n activeValues: selectedValue != null ? [selectedValue] : undefined,\n }),\n [selectedValue],\n );\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n objectSet,\n aggregationOptions,\n );\n\n return (\n <SingleSelectInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValue={selectedValue}\n onChange={onChange}\n showCounts={showCount}\n ariaLabel={`Select ${propertyKey as string}`}\n />\n );\n}\n\ninterface LinkedListogramInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchQuery?: string;\n showCount?: boolean;\n}\n\nfunction LinkedListogramInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n selectedValues,\n onChange,\n searchQuery,\n showCount,\n}: LinkedListogramInputProps<Q>): React.ReactElement {\n const aggregationOptions = useMemo(\n () => ({ activeValues: selectedValues }),\n [selectedValues],\n );\n const { data, maxCount, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n objectSet,\n aggregationOptions,\n );\n\n return (\n <ListogramInput\n values={data}\n maxCount={maxCount}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={onChange}\n searchQuery={searchQuery}\n showCount={showCount}\n />\n );\n}\n\ninterface LinkedTextTagsInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n tags: string[];\n onChange: (values: string[]) => void;\n}\n\nfunction LinkedTextTagsInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n tags,\n onChange,\n}: LinkedTextTagsInputProps<Q>): React.ReactElement {\n const aggregationOptions = useMemo(() => ({ limit: 50 }), []);\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n objectSet,\n aggregationOptions,\n );\n return (\n <TextTagsInput\n suggestions={data}\n isLoading={isLoading}\n error={error}\n tags={tags}\n onChange={onChange}\n suggestionLimit={10}\n />\n );\n}\n\ninterface LinkedRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n includeNull?: boolean;\n onNullChange: (include: boolean) => void;\n}\n\nfunction useLinkedRangeData<Q extends ObjectTypeDefinition>(\n objectType: Q,\n propertyKey: PropertyKeys<Q>,\n objectSet: ObjectSet<Q>,\n) {\n const aggregateOptions = useMemo(\n () => createGroupByAggregateOptions<Q>(propertyKey as string),\n [propertyKey],\n );\n\n const histogramArgs = useMemo(\n () => ({ aggregate: aggregateOptions, objectSet }),\n [aggregateOptions, objectSet],\n );\n const { data: aggregateData, isLoading: histLoading } = useOsdkAggregation(\n objectType,\n histogramArgs,\n );\n\n const nullCountAggregateOptions = useMemo(\n () => createNullCountAggregateOptions<Q>(),\n [],\n );\n\n const nullWhereClause = useMemo(\n () => createNullWhereClause<Q>(propertyKey as string),\n [propertyKey],\n );\n\n const nullCountArgs = useMemo(\n () => ({\n where: nullWhereClause,\n aggregate: nullCountAggregateOptions,\n objectSet,\n }),\n [nullWhereClause, nullCountAggregateOptions, objectSet],\n );\n const { data: nullCountData, isLoading: nullLoading } = useOsdkAggregation(\n objectType,\n nullCountArgs,\n );\n\n const nullCount = useMemo(() => {\n if (!nullCountData) return 0;\n const result = nullCountData as { $count?: number } | Iterable<unknown>;\n if (\"$count\" in result && typeof result.$count === \"number\") {\n return result.$count;\n }\n return 0;\n }, [nullCountData]);\n\n return { aggregateData, histLoading, nullCount, nullLoading };\n}\n\ninterface LinkedNumberRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedRangeInputProps<Q>\n{\n minValue: number | undefined;\n maxValue: number | undefined;\n onChange: (min: number | undefined, max: number | undefined) => void;\n}\n\nfunction LinkedNumberRangeInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n minValue,\n maxValue,\n includeNull,\n onChange,\n onNullChange,\n}: LinkedNumberRangeInputProps<Q>): React.ReactElement {\n const { aggregateData, histLoading, nullCount, nullLoading } =\n useLinkedRangeData(objectType, propertyKey, objectSet);\n\n const valueCountPairs = useMemo<Array<{ value: number; count: number }>>(\n () => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: number; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n if (rawValue != null) {\n const parsed = parseFloat(String(rawValue));\n if (!isNaN(parsed)) {\n pairs.push({ value: parsed, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n },\n [aggregateData, propertyKey],\n );\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={nullLoading}\n includeNull={includeNull}\n onIncludeNullChange={onNullChange}\n >\n <NumberRangeInput\n valueCountPairs={valueCountPairs}\n isLoading={histLoading}\n minValue={minValue}\n maxValue={maxValue}\n onChange={onChange}\n />\n </NullValueWrapper>\n );\n}\n\ninterface LinkedDateRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedRangeInputProps<Q>\n{\n minValue: Date | undefined;\n maxValue: Date | undefined;\n onChange: (min: Date | undefined, max: Date | undefined) => void;\n}\n\nfunction LinkedDateRangeInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n minValue,\n maxValue,\n includeNull,\n onChange,\n onNullChange,\n}: LinkedDateRangeInputProps<Q>): React.ReactElement {\n const { aggregateData, histLoading, nullCount, nullLoading } =\n useLinkedRangeData(objectType, propertyKey, objectSet);\n\n const valueCountPairs = useMemo<Array<{ value: Date; count: number }>>(() => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: Date; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n if (rawValue != null) {\n const date = new Date(String(rawValue));\n if (!isNaN(date.getTime())) {\n pairs.push({ value: date, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n }, [aggregateData, propertyKey]);\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={nullLoading}\n includeNull={includeNull}\n onIncludeNullChange={onNullChange}\n >\n <DateRangeHistogramInput\n valueCountPairs={valueCountPairs}\n isLoading={histLoading}\n minValue={minValue}\n maxValue={maxValue}\n onChange={onChange}\n />\n </NullValueWrapper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkedPropertyInput.js","names":["useOsdkAggregation","classnames","React","memo","useCallback","useMemo","assertUnreachable","ContainsTextInput","DateRangeHistogramInput","styles","ListogramInput","MultiDateInput","MultiSelectInput","NullValueWrapper","NumberRangeInput","SingleDateInput","SingleSelectInput","TextTagsInput","TimelineInput","ToggleInput","useDualScopeAggregation","usePropertyAggregation","EMPTY_LINKED_FILTERS","createGroupByAggregateOptions","createNullCountAggregateOptions","createNullWhereClause","coerceToString","coerceToStringArray","narrowObjectSet","LinkedPropertyInputInner","objectSet","whereClause","linkedFilters","definition","filterState","onFilterStateChanged","showFilteredOutValues","searchQuery","className","style","layout","scoped","linkedObjectSet","pivotTo","linkName","emptySourceLinkedObjectSet","undefined","linkedObjectType","$objectSetInternals","def","linkedPropertyKey","innerState","type","linkedFilterState","isExcluding","includeNull","wrappedOnChange","innerFilterState","onSelectChange","selectedValues","onSingleSelectChange","selectedValue","onContainsTextChange","value","onToggleChange","enabled","onNumberRangeChange","minValue","maxValue","onDateRangeChange","onExactMatchChange","values","onDateSelectChange","date","onMultiDateChange","dates","onTimelineChange","start","end","startDate","endDate","onNullChange","newIncludeNull","content","linkedFilterComponent","createElement","LinkedMultiSelectInput","objectType","emptySourceObjectSet","propertyKey","onChange","showCount","renderValue","LinkedSingleSelectInput","placeholder","String","nr","LinkedNumberRangeInput","dr","LinkedDateRangeInput","exactState","LinkedListogramInput","tags","LinkedTextTagsInput","selectedDate","Date","showClearButton","selectedDates","filter","v","showClearAll","tl","linkedProperty","LinkedPropertyInput","data","isLoading","error","showCounts","ariaLabel","maxCount","TEXT_TAGS_OPTIONS","limit","suggestions","suggestionLimit","useLinkedRangeData","aggregateOptions","histogramArgs","aggregate","aggregateData","histLoading","nullCountAggregateOptions","nullWhereClause","nullCountArgs","where","nullCountData","nullLoading","nullCount","result","$count","valueCountPairs","pairs","item","rawValue","$group","parsed","parseFloat","isNaN","push","count","onIncludeNullChange","getTime"],"sources":["LinkedPropertyInput.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 LinkNames,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { ContainsTextInput } from \"../base/inputs/ContainsTextInput.js\";\nimport { DateRangeHistogramInput } from \"../base/inputs/DateRangeHistogramInput.js\";\nimport styles from \"../base/inputs/LinkedPropertyInput.module.css\";\nimport { ListogramInput } from \"../base/inputs/ListogramInput.js\";\nimport { MultiDateInput } from \"../base/inputs/MultiDateInput.js\";\nimport {\n MultiSelectInput,\n type MultiSelectInputLayout,\n} from \"../base/inputs/MultiSelectInput.js\";\nimport { NullValueWrapper } from \"../base/inputs/NullValueWrapper.js\";\nimport { NumberRangeInput } from \"../base/inputs/NumberRangeInput.js\";\nimport { SingleDateInput } from \"../base/inputs/SingleDateInput.js\";\nimport { SingleSelectInput } from \"../base/inputs/SingleSelectInput.js\";\nimport { TextTagsInput } from \"../base/inputs/TextTagsInput.js\";\nimport { TimelineInput } from \"../base/inputs/TimelineInput.js\";\nimport { ToggleInput } from \"../base/inputs/ToggleInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { useDualScopeAggregation } from \"../hooks/useDualScopeAggregation.js\";\nimport { usePropertyAggregation } from \"../hooks/usePropertyAggregation.js\";\nimport {\n EMPTY_LINKED_FILTERS,\n type LinkedFilter,\n type LinkedPropertyFilterDefinition,\n} from \"../types/LinkedFilterTypes.js\";\nimport {\n createGroupByAggregateOptions,\n createNullCountAggregateOptions,\n createNullWhereClause,\n} from \"../utils/aggregationHelpers.js\";\nimport {\n coerceToString,\n coerceToStringArray,\n} from \"../utils/coerceFilterValue.js\";\nimport { narrowObjectSet } from \"../utils/narrowObjectSet.js\";\n\ninterface LinkedPropertyInputProps<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n> {\n objectSet: ObjectSet<Q>;\n whereClause: WhereClause<Q>;\n linkedFilters?: ReadonlyArray<LinkedFilter<Q>>;\n definition: LinkedPropertyFilterDefinition<\n Q,\n L,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n >;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n showFilteredOutValues?: boolean;\n searchQuery?: string;\n className?: string;\n style?: React.CSSProperties;\n layout?: MultiSelectInputLayout;\n}\n\nfunction LinkedPropertyInputInner<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n>({\n objectSet,\n whereClause,\n linkedFilters = EMPTY_LINKED_FILTERS,\n definition,\n filterState,\n onFilterStateChanged,\n showFilteredOutValues,\n searchQuery,\n className,\n style,\n layout,\n}: LinkedPropertyInputProps<Q, L>): React.ReactElement {\n const scoped = useMemo(\n () => narrowObjectSet(objectSet, whereClause, linkedFilters),\n [objectSet, whereClause, linkedFilters],\n );\n const linkedObjectSet = useMemo(\n () => scoped.pivotTo(definition.linkName),\n [scoped, definition.linkName],\n );\n // Filtered-out rows on a linked facet compare against the raw source so\n // direct filters surface as count=0 entries on the linked side.\n const emptySourceLinkedObjectSet = useMemo(\n () =>\n showFilteredOutValues\n ? objectSet.pivotTo(definition.linkName)\n : undefined,\n [showFilteredOutValues, objectSet, definition.linkName],\n );\n\n const linkedObjectType = linkedObjectSet.$objectSetInternals.def;\n\n const linkedPropertyKey = definition.linkedPropertyKey as PropertyKeys<\n typeof linkedObjectType\n >;\n\n const innerState = filterState?.type === \"linkedProperty\"\n ? filterState.linkedFilterState\n : undefined;\n\n const isExcluding = innerState?.isExcluding ?? false;\n const includeNull = innerState?.includeNull;\n\n const wrappedOnChange = useCallback(\n (innerFilterState: FilterState) => {\n onFilterStateChanged({\n type: \"linkedProperty\",\n linkedFilterState: innerFilterState,\n });\n },\n [onFilterStateChanged],\n );\n\n const onSelectChange = useCallback(\n (selectedValues: string[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onSingleSelectChange = useCallback(\n (selectedValue: string | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: selectedValue !== undefined ? [selectedValue] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onContainsTextChange = useCallback(\n (value: string | undefined) => {\n wrappedOnChange({ type: \"CONTAINS_TEXT\", value });\n },\n [wrappedOnChange],\n );\n\n const onToggleChange = useCallback(\n (enabled: boolean) => {\n wrappedOnChange({ type: \"TOGGLE\", enabled });\n },\n [wrappedOnChange],\n );\n\n const onNumberRangeChange = useCallback(\n (minValue: number | undefined, maxValue: number | undefined) => {\n wrappedOnChange({\n type: \"NUMBER_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onDateRangeChange = useCallback(\n (minValue: Date | undefined, maxValue: Date | undefined) => {\n wrappedOnChange({\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onExactMatchChange = useCallback(\n (values: string[]) => {\n wrappedOnChange({\n type: \"EXACT_MATCH\",\n values,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onDateSelectChange = useCallback(\n (date: Date | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: date !== undefined ? [date] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onMultiDateChange = useCallback(\n (dates: Date[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: dates,\n });\n },\n [wrappedOnChange],\n );\n\n const onTimelineChange = useCallback(\n (start: Date | undefined, end: Date | undefined) => {\n wrappedOnChange({\n type: \"TIMELINE\",\n startDate: start,\n endDate: end,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onNullChange = useCallback(\n (newIncludeNull: boolean) => {\n if (innerState?.type === \"NUMBER_RANGE\") {\n wrappedOnChange({ ...innerState, includeNull: newIncludeNull });\n } else if (innerState?.type === \"DATE_RANGE\") {\n wrappedOnChange({ ...innerState, includeNull: newIncludeNull });\n } else {\n wrappedOnChange({\n type: \"NUMBER_RANGE\",\n minValue: undefined,\n maxValue: undefined,\n includeNull: newIncludeNull,\n });\n }\n },\n [wrappedOnChange, innerState],\n );\n\n const content = (() => {\n switch (definition.linkedFilterComponent) {\n case \"MULTI_SELECT\": {\n const values = innerState?.type === \"SELECT\"\n ? coerceToStringArray(innerState.selectedValues)\n : [];\n return (\n <LinkedMultiSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n emptySourceObjectSet={emptySourceLinkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={values}\n onChange={onSelectChange}\n showCount={definition.showCount}\n renderValue={definition.renderValue}\n layout={layout}\n />\n );\n }\n\n case \"SINGLE_SELECT\": {\n const value = innerState?.type === \"SELECT\"\n ? coerceToString(innerState.selectedValues[0])\n : undefined;\n return (\n <LinkedSingleSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n emptySourceObjectSet={emptySourceLinkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValue={value}\n onChange={onSingleSelectChange}\n showCount={definition.showCount}\n renderValue={definition.renderValue}\n />\n );\n }\n\n case \"CONTAINS_TEXT\": {\n const value = innerState?.type === \"CONTAINS_TEXT\"\n ? innerState.value\n : undefined;\n return (\n <ContainsTextInput\n value={value}\n onChange={onContainsTextChange}\n placeholder={`Search ${String(definition.linkedPropertyKey)}...`}\n />\n );\n }\n\n case \"TOGGLE\": {\n const enabled = innerState?.type === \"TOGGLE\"\n ? innerState.enabled\n : false;\n return (\n <ToggleInput\n enabled={enabled}\n onChange={onToggleChange}\n />\n );\n }\n\n case \"NUMBER_RANGE\": {\n const nr = innerState?.type === \"NUMBER_RANGE\" ? innerState : undefined;\n return (\n <LinkedNumberRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={nr?.minValue}\n maxValue={nr?.maxValue}\n includeNull={nr?.includeNull}\n onChange={onNumberRangeChange}\n onNullChange={onNullChange}\n />\n );\n }\n\n case \"DATE_RANGE\": {\n const dr = innerState?.type === \"DATE_RANGE\" ? innerState : undefined;\n return (\n <LinkedDateRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={dr?.minValue}\n maxValue={dr?.maxValue}\n includeNull={dr?.includeNull}\n onChange={onDateRangeChange}\n onNullChange={onNullChange}\n />\n );\n }\n\n case \"LISTOGRAM\": {\n const exactState = innerState?.type === \"EXACT_MATCH\"\n ? innerState\n : undefined;\n const selectedValues = exactState\n ? coerceToStringArray(exactState.values)\n : [];\n return (\n <LinkedListogramInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n emptySourceObjectSet={emptySourceLinkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={selectedValues}\n onChange={onExactMatchChange}\n searchQuery={searchQuery}\n showCount={definition.showCount}\n renderValue={definition.renderValue}\n />\n );\n }\n\n case \"TEXT_TAGS\": {\n const exactState = innerState?.type === \"EXACT_MATCH\"\n ? innerState\n : undefined;\n const tags = exactState ? coerceToStringArray(exactState.values) : [];\n return (\n <LinkedTextTagsInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n tags={tags}\n onChange={onExactMatchChange}\n />\n );\n }\n\n case \"SINGLE_DATE\": {\n const selectedDate = innerState?.type === \"SELECT\"\n ? (innerState.selectedValues[0] instanceof Date\n ? innerState.selectedValues[0]\n : undefined)\n : undefined;\n return (\n <SingleDateInput\n selectedDate={selectedDate}\n onChange={onDateSelectChange}\n showClearButton={true}\n />\n );\n }\n\n case \"MULTI_DATE\": {\n const selectedDates = innerState?.type === \"SELECT\"\n ? innerState.selectedValues.filter(\n (v): v is Date => v instanceof Date,\n )\n : [];\n return (\n <MultiDateInput\n selectedDates={selectedDates}\n onChange={onMultiDateChange}\n showClearAll={true}\n />\n );\n }\n\n case \"TIMELINE\": {\n const tl = innerState?.type === \"TIMELINE\" ? innerState : undefined;\n return (\n <TimelineInput\n startDate={tl?.startDate}\n endDate={tl?.endDate}\n onChange={onTimelineChange}\n />\n );\n }\n\n default:\n return assertUnreachable(definition.linkedFilterComponent);\n }\n })();\n\n return (\n <div className={classnames(styles.linkedProperty, className)} style={style}>\n {content}\n </div>\n );\n}\n\nexport const LinkedPropertyInput: typeof LinkedPropertyInputInner = memo(\n LinkedPropertyInputInner,\n) as typeof LinkedPropertyInputInner;\n\ninterface LinkedAggregationInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n emptySourceObjectSet?: ObjectSet<Q>;\n propertyKey: PropertyKeys<Q>;\n}\n\ninterface LinkedMultiSelectInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValues: string[];\n onChange: (values: string[]) => void;\n showCount?: boolean;\n renderValue?: (value: string) => React.ReactNode;\n layout?: MultiSelectInputLayout;\n}\n\nfunction LinkedMultiSelectInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n emptySourceObjectSet,\n propertyKey,\n selectedValues,\n onChange,\n showCount,\n renderValue,\n layout,\n}: LinkedMultiSelectInputProps<Q>): React.ReactElement {\n const { data, isLoading, error } = useDualScopeAggregation(\n objectType,\n propertyKey,\n objectSet,\n emptySourceObjectSet,\n { selectedValues },\n );\n\n return (\n <MultiSelectInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={onChange}\n showCounts={showCount}\n renderValue={renderValue}\n layout={layout}\n />\n );\n}\n\ninterface LinkedSingleSelectInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValue: string | undefined;\n onChange: (value: string | undefined) => void;\n showCount?: boolean;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction LinkedSingleSelectInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n emptySourceObjectSet,\n propertyKey,\n selectedValue,\n onChange,\n showCount,\n renderValue,\n}: LinkedSingleSelectInputProps<Q>): React.ReactElement {\n const selectedValues = useMemo(\n () => selectedValue != null ? [selectedValue] : [],\n [selectedValue],\n );\n const { data, isLoading, error } = useDualScopeAggregation(\n objectType,\n propertyKey,\n objectSet,\n emptySourceObjectSet,\n { selectedValues },\n );\n\n return (\n <SingleSelectInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValue={selectedValue}\n onChange={onChange}\n showCounts={showCount}\n renderValue={renderValue}\n ariaLabel={`Select ${propertyKey as string}`}\n />\n );\n}\n\ninterface LinkedListogramInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchQuery?: string;\n showCount?: boolean;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction LinkedListogramInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n emptySourceObjectSet,\n propertyKey,\n selectedValues,\n onChange,\n searchQuery,\n showCount,\n renderValue,\n}: LinkedListogramInputProps<Q>): React.ReactElement {\n const { data, maxCount, isLoading, error } = useDualScopeAggregation(\n objectType,\n propertyKey,\n objectSet,\n emptySourceObjectSet,\n { selectedValues },\n );\n\n return (\n <ListogramInput\n values={data}\n maxCount={maxCount}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={onChange}\n searchQuery={searchQuery}\n showCount={showCount}\n renderValue={renderValue}\n />\n );\n}\n\ninterface LinkedTextTagsInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n tags: string[];\n onChange: (values: string[]) => void;\n}\n\nconst TEXT_TAGS_OPTIONS = { limit: 50 } as const;\n\nfunction LinkedTextTagsInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n tags,\n onChange,\n}: LinkedTextTagsInputProps<Q>): React.ReactElement {\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n objectSet,\n TEXT_TAGS_OPTIONS,\n );\n return (\n <TextTagsInput\n suggestions={data}\n isLoading={isLoading}\n error={error}\n tags={tags}\n onChange={onChange}\n suggestionLimit={10}\n />\n );\n}\n\ninterface LinkedRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedAggregationInputProps<Q>\n{\n includeNull?: boolean;\n onNullChange: (include: boolean) => void;\n}\n\nfunction useLinkedRangeData<Q extends ObjectTypeDefinition>(\n objectType: Q,\n propertyKey: PropertyKeys<Q>,\n objectSet: ObjectSet<Q>,\n) {\n const aggregateOptions = useMemo(\n () => createGroupByAggregateOptions<Q>(propertyKey as string),\n [propertyKey],\n );\n\n const histogramArgs = useMemo(\n () => ({ aggregate: aggregateOptions, objectSet }),\n [aggregateOptions, objectSet],\n );\n const { data: aggregateData, isLoading: histLoading } = useOsdkAggregation(\n objectType,\n histogramArgs,\n );\n\n const nullCountAggregateOptions = useMemo(\n () => createNullCountAggregateOptions<Q>(),\n [],\n );\n\n const nullWhereClause = useMemo(\n () => createNullWhereClause<Q>(propertyKey as string),\n [propertyKey],\n );\n\n const nullCountArgs = useMemo(\n () => ({\n where: nullWhereClause,\n aggregate: nullCountAggregateOptions,\n objectSet,\n }),\n [nullWhereClause, nullCountAggregateOptions, objectSet],\n );\n const { data: nullCountData, isLoading: nullLoading } = useOsdkAggregation(\n objectType,\n nullCountArgs,\n );\n\n const nullCount = useMemo(() => {\n if (!nullCountData) return 0;\n const result = nullCountData as { $count?: number } | Iterable<unknown>;\n if (\"$count\" in result && typeof result.$count === \"number\") {\n return result.$count;\n }\n return 0;\n }, [nullCountData]);\n\n return { aggregateData, histLoading, nullCount, nullLoading };\n}\n\ninterface LinkedNumberRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedRangeInputProps<Q>\n{\n minValue: number | undefined;\n maxValue: number | undefined;\n onChange: (min: number | undefined, max: number | undefined) => void;\n}\n\nfunction LinkedNumberRangeInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n minValue,\n maxValue,\n includeNull,\n onChange,\n onNullChange,\n}: LinkedNumberRangeInputProps<Q>): React.ReactElement {\n const { aggregateData, histLoading, nullCount, nullLoading } =\n useLinkedRangeData(objectType, propertyKey, objectSet);\n\n const valueCountPairs = useMemo<Array<{ value: number; count: number }>>(\n () => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: number; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n if (rawValue != null) {\n const parsed = parseFloat(String(rawValue));\n if (!isNaN(parsed)) {\n pairs.push({ value: parsed, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n },\n [aggregateData, propertyKey],\n );\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={nullLoading}\n includeNull={includeNull}\n onIncludeNullChange={onNullChange}\n >\n <NumberRangeInput\n valueCountPairs={valueCountPairs}\n isLoading={histLoading}\n minValue={minValue}\n maxValue={maxValue}\n onChange={onChange}\n />\n </NullValueWrapper>\n );\n}\n\ninterface LinkedDateRangeInputProps<Q extends ObjectTypeDefinition>\n extends LinkedRangeInputProps<Q>\n{\n minValue: Date | undefined;\n maxValue: Date | undefined;\n onChange: (min: Date | undefined, max: Date | undefined) => void;\n}\n\nfunction LinkedDateRangeInput<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n minValue,\n maxValue,\n includeNull,\n onChange,\n onNullChange,\n}: LinkedDateRangeInputProps<Q>): React.ReactElement {\n const { aggregateData, histLoading, nullCount, nullLoading } =\n useLinkedRangeData(objectType, propertyKey, objectSet);\n\n const valueCountPairs = useMemo<Array<{ value: Date; count: number }>>(() => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: Date; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n if (rawValue != null) {\n const date = new Date(String(rawValue));\n if (!isNaN(date.getTime())) {\n pairs.push({ value: date, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n }, [aggregateData, propertyKey]);\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={nullLoading}\n includeNull={includeNull}\n onIncludeNullChange={onNullChange}\n >\n <DateRangeHistogramInput\n valueCountPairs={valueCountPairs}\n isLoading={histLoading}\n minValue={minValue}\n maxValue={maxValue}\n onChange={onChange}\n />\n </NullValueWrapper>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAASA,kBAAkB,QAAQ,aAAa;AAChD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,iBAAiB,QAAQ,mCAAmC;AACrE,SAASC,iBAAiB,QAAQ,qCAAqC;AACvE,SAASC,uBAAuB,QAAQ,2CAA2C;AACnF,OAAOC,MAAM,MAAM,+CAA+C;AAClE,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SACEC,gBAAgB,QAEX,oCAAoC;AAC3C,SAASC,gBAAgB,QAAQ,oCAAoC;AACrE,SAASC,gBAAgB,QAAQ,oCAAoC;AACrE,SAASC,eAAe,QAAQ,mCAAmC;AACnE,SAASC,iBAAiB,QAAQ,qCAAqC;AACvE,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,WAAW,QAAQ,+BAA+B;AAE3D,SAASC,uBAAuB,QAAQ,qCAAqC;AAC7E,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SACEC,oBAAoB,QAGf,+BAA+B;AACtC,SACEC,6BAA6B,EAC7BC,+BAA+B,EAC/BC,qBAAqB,QAChB,gCAAgC;AACvC,SACEC,cAAc,EACdC,mBAAmB,QACd,+BAA+B;AACtC,SAASC,eAAe,QAAQ,6BAA6B;AAwB7D,SAASC,wBAAwBA,CAG/B;EACAC,SAAS;EACTC,WAAW;EACXC,aAAa,GAAGV,oBAAoB;EACpCW,UAAU;EACVC,WAAW;EACXC,oBAAoB;EACpBC,qBAAqB;EACrBC,WAAW;EACXC,SAAS;EACTC,KAAK;EACLC;AAC8B,CAAC,EAAsB;EACrD,MAAMC,MAAM,GAAGpC,OAAO,CACpB,MAAMuB,eAAe,CAACE,SAAS,EAAEC,WAAW,EAAEC,aAAa,CAAC,EAC5D,CAACF,SAAS,EAAEC,WAAW,EAAEC,aAAa,CACxC,CAAC;EACD,MAAMU,eAAe,GAAGrC,OAAO,CAC7B,MAAMoC,MAAM,CAACE,OAAO,CAACV,UAAU,CAACW,QAAQ,CAAC,EACzC,CAACH,MAAM,EAAER,UAAU,CAACW,QAAQ,CAC9B,CAAC;EACD;EACA;EACA,MAAMC,0BAA0B,GAAGxC,OAAO,CACxC,MACE+B,qBAAqB,GACjBN,SAAS,CAACa,OAAO,CAACV,UAAU,CAACW,QAAQ,CAAC,GACtCE,SAAS,EACf,CAACV,qBAAqB,EAAEN,SAAS,EAAEG,UAAU,CAACW,QAAQ,CACxD,CAAC;EAED,MAAMG,gBAAgB,GAAGL,eAAe,CAACM,mBAAmB,CAACC,GAAG;EAEhE,MAAMC,iBAAiB,GAAGjB,UAAU,CAACiB,iBAEpC;EAED,MAAMC,UAAU,GAAGjB,WAAW,EAAEkB,IAAI,KAAK,gBAAgB,GACrDlB,WAAW,CAACmB,iBAAiB,GAC7BP,SAAS;EAEb,MAAMQ,WAAW,GAAGH,UAAU,EAAEG,WAAW,IAAI,KAAK;EACpD,MAAMC,WAAW,GAAGJ,UAAU,EAAEI,WAAW;EAE3C,MAAMC,eAAe,GAAGpD,WAAW,CAChCqD,gBAA6B,IAAK;IACjCtB,oBAAoB,CAAC;MACnBiB,IAAI,EAAE,gBAAgB;MACtBC,iBAAiB,EAAEI;IACrB,CAAC,CAAC;EACJ,CAAC,EACD,CAACtB,oBAAoB,CACvB,CAAC;EAED,MAAMuB,cAAc,GAAGtD,WAAW,CAC/BuD,cAAwB,IAAK;IAC5BH,eAAe,CAAC;MACdJ,IAAI,EAAE,QAAQ;MACdO,cAAc;MACdL;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACE,eAAe,EAAEF,WAAW,CAC/B,CAAC;EAED,MAAMM,oBAAoB,GAAGxD,WAAW,CACrCyD,aAAiC,IAAK;IACrCL,eAAe,CAAC;MACdJ,IAAI,EAAE,QAAQ;MACdO,cAAc,EAAEE,aAAa,KAAKf,SAAS,GAAG,CAACe,aAAa,CAAC,GAAG,EAAE;MAClEP;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACE,eAAe,EAAEF,WAAW,CAC/B,CAAC;EAED,MAAMQ,oBAAoB,GAAG1D,WAAW,CACrC2D,KAAyB,IAAK;IAC7BP,eAAe,CAAC;MAAEJ,IAAI,EAAE,eAAe;MAAEW;IAAM,CAAC,CAAC;EACnD,CAAC,EACD,CAACP,eAAe,CAClB,CAAC;EAED,MAAMQ,cAAc,GAAG5D,WAAW,CAC/B6D,OAAgB,IAAK;IACpBT,eAAe,CAAC;MAAEJ,IAAI,EAAE,QAAQ;MAAEa;IAAQ,CAAC,CAAC;EAC9C,CAAC,EACD,CAACT,eAAe,CAClB,CAAC;EAED,MAAMU,mBAAmB,GAAG9D,WAAW,CACrC,CAAC+D,QAA4B,EAAEC,QAA4B,KAAK;IAC9DZ,eAAe,CAAC;MACdJ,IAAI,EAAE,cAAc;MACpBe,QAAQ;MACRC,QAAQ;MACRb;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACC,eAAe,EAAED,WAAW,CAC/B,CAAC;EAED,MAAMc,iBAAiB,GAAGjE,WAAW,CACnC,CAAC+D,QAA0B,EAAEC,QAA0B,KAAK;IAC1DZ,eAAe,CAAC;MACdJ,IAAI,EAAE,YAAY;MAClBe,QAAQ;MACRC,QAAQ;MACRb;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACC,eAAe,EAAED,WAAW,CAC/B,CAAC;EAED,MAAMe,kBAAkB,GAAGlE,WAAW,CACnCmE,MAAgB,IAAK;IACpBf,eAAe,CAAC;MACdJ,IAAI,EAAE,aAAa;MACnBmB,MAAM;MACNjB;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACE,eAAe,EAAEF,WAAW,CAC/B,CAAC;EAED,MAAMkB,kBAAkB,GAAGpE,WAAW,CACnCqE,IAAsB,IAAK;IAC1BjB,eAAe,CAAC;MACdJ,IAAI,EAAE,QAAQ;MACdO,cAAc,EAAEc,IAAI,KAAK3B,SAAS,GAAG,CAAC2B,IAAI,CAAC,GAAG,EAAE;MAChDnB;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACE,eAAe,EAAEF,WAAW,CAC/B,CAAC;EAED,MAAMoB,iBAAiB,GAAGtE,WAAW,CAClCuE,KAAa,IAAK;IACjBnB,eAAe,CAAC;MACdJ,IAAI,EAAE,QAAQ;MACdO,cAAc,EAAEgB;IAClB,CAAC,CAAC;EACJ,CAAC,EACD,CAACnB,eAAe,CAClB,CAAC;EAED,MAAMoB,gBAAgB,GAAGxE,WAAW,CAClC,CAACyE,KAAuB,EAAEC,GAAqB,KAAK;IAClDtB,eAAe,CAAC;MACdJ,IAAI,EAAE,UAAU;MAChB2B,SAAS,EAAEF,KAAK;MAChBG,OAAO,EAAEF,GAAG;MACZxB;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACE,eAAe,EAAEF,WAAW,CAC/B,CAAC;EAED,MAAM2B,YAAY,GAAG7E,WAAW,CAC7B8E,cAAuB,IAAK;IAC3B,IAAI/B,UAAU,EAAEC,IAAI,KAAK,cAAc,EAAE;MACvCI,eAAe,CAAC;QAAE,GAAGL,UAAU;QAAEI,WAAW,EAAE2B;MAAe,CAAC,CAAC;IACjE,CAAC,MAAM,IAAI/B,UAAU,EAAEC,IAAI,KAAK,YAAY,EAAE;MAC5CI,eAAe,CAAC;QAAE,GAAGL,UAAU;QAAEI,WAAW,EAAE2B;MAAe,CAAC,CAAC;IACjE,CAAC,MAAM;MACL1B,eAAe,CAAC;QACdJ,IAAI,EAAE,cAAc;QACpBe,QAAQ,EAAErB,SAAS;QACnBsB,QAAQ,EAAEtB,SAAS;QACnBS,WAAW,EAAE2B;MACf,CAAC,CAAC;IACJ;EACF,CAAC,EACD,CAAC1B,eAAe,EAAEL,UAAU,CAC9B,CAAC;EAED,MAAMgC,OAAO,GAAG,CAAC,MAAM;IACrB,QAAQlD,UAAU,CAACmD,qBAAqB;MACtC,KAAK,cAAc;QAAE;UACnB,MAAMb,MAAM,GAAGpB,UAAU,EAAEC,IAAI,KAAK,QAAQ,GACxCzB,mBAAmB,CAACwB,UAAU,CAACQ,cAAc,CAAC,GAC9C,EAAE;UACN,oBACEzD,KAAA,CAAAmF,aAAA,CAACC,sBAAsB;YACrBC,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B8C,oBAAoB,EAAE3C,0BAA2B;YACjD4C,WAAW,EAAEvC,iBAAkB;YAC/BS,cAAc,EAAEY,MAAO;YACvBmB,QAAQ,EAAEhC,cAAe;YACzBiC,SAAS,EAAE1D,UAAU,CAAC0D,SAAU;YAChCC,WAAW,EAAE3D,UAAU,CAAC2D,WAAY;YACpCpD,MAAM,EAAEA;UAAO,CAChB,CAAC;QAEN;MAEA,KAAK,eAAe;QAAE;UACpB,MAAMuB,KAAK,GAAGZ,UAAU,EAAEC,IAAI,KAAK,QAAQ,GACvC1B,cAAc,CAACyB,UAAU,CAACQ,cAAc,CAAC,CAAC,CAAC,CAAC,GAC5Cb,SAAS;UACb,oBACE5C,KAAA,CAAAmF,aAAA,CAACQ,uBAAuB;YACtBN,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B8C,oBAAoB,EAAE3C,0BAA2B;YACjD4C,WAAW,EAAEvC,iBAAkB;YAC/BW,aAAa,EAAEE,KAAM;YACrB2B,QAAQ,EAAE9B,oBAAqB;YAC/B+B,SAAS,EAAE1D,UAAU,CAAC0D,SAAU;YAChCC,WAAW,EAAE3D,UAAU,CAAC2D;UAAY,CACrC,CAAC;QAEN;MAEA,KAAK,eAAe;QAAE;UACpB,MAAM7B,KAAK,GAAGZ,UAAU,EAAEC,IAAI,KAAK,eAAe,GAC9CD,UAAU,CAACY,KAAK,GAChBjB,SAAS;UACb,oBACE5C,KAAA,CAAAmF,aAAA,CAAC9E,iBAAiB;YAChBwD,KAAK,EAAEA,KAAM;YACb2B,QAAQ,EAAE5B,oBAAqB;YAC/BgC,WAAW,EAAE,UAAUC,MAAM,CAAC9D,UAAU,CAACiB,iBAAiB,CAAC;UAAM,CAClE,CAAC;QAEN;MAEA,KAAK,QAAQ;QAAE;UACb,MAAMe,OAAO,GAAGd,UAAU,EAAEC,IAAI,KAAK,QAAQ,GACzCD,UAAU,CAACc,OAAO,GAClB,KAAK;UACT,oBACE/D,KAAA,CAAAmF,aAAA,CAAClE,WAAW;YACV8C,OAAO,EAAEA,OAAQ;YACjByB,QAAQ,EAAE1B;UAAe,CAC1B,CAAC;QAEN;MAEA,KAAK,cAAc;QAAE;UACnB,MAAMgC,EAAE,GAAG7C,UAAU,EAAEC,IAAI,KAAK,cAAc,GAAGD,UAAU,GAAGL,SAAS;UACvE,oBACE5C,KAAA,CAAAmF,aAAA,CAACY,sBAAsB;YACrBV,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B+C,WAAW,EAAEvC,iBAAkB;YAC/BiB,QAAQ,EAAE6B,EAAE,EAAE7B,QAAS;YACvBC,QAAQ,EAAE4B,EAAE,EAAE5B,QAAS;YACvBb,WAAW,EAAEyC,EAAE,EAAEzC,WAAY;YAC7BmC,QAAQ,EAAExB,mBAAoB;YAC9Be,YAAY,EAAEA;UAAa,CAC5B,CAAC;QAEN;MAEA,KAAK,YAAY;QAAE;UACjB,MAAMiB,EAAE,GAAG/C,UAAU,EAAEC,IAAI,KAAK,YAAY,GAAGD,UAAU,GAAGL,SAAS;UACrE,oBACE5C,KAAA,CAAAmF,aAAA,CAACc,oBAAoB;YACnBZ,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B+C,WAAW,EAAEvC,iBAAkB;YAC/BiB,QAAQ,EAAE+B,EAAE,EAAE/B,QAAS;YACvBC,QAAQ,EAAE8B,EAAE,EAAE9B,QAAS;YACvBb,WAAW,EAAE2C,EAAE,EAAE3C,WAAY;YAC7BmC,QAAQ,EAAErB,iBAAkB;YAC5BY,YAAY,EAAEA;UAAa,CAC5B,CAAC;QAEN;MAEA,KAAK,WAAW;QAAE;UAChB,MAAMmB,UAAU,GAAGjD,UAAU,EAAEC,IAAI,KAAK,aAAa,GACjDD,UAAU,GACVL,SAAS;UACb,MAAMa,cAAc,GAAGyC,UAAU,GAC7BzE,mBAAmB,CAACyE,UAAU,CAAC7B,MAAM,CAAC,GACtC,EAAE;UACN,oBACErE,KAAA,CAAAmF,aAAA,CAACgB,oBAAoB;YACnBd,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B8C,oBAAoB,EAAE3C,0BAA2B;YACjD4C,WAAW,EAAEvC,iBAAkB;YAC/BS,cAAc,EAAEA,cAAe;YAC/B+B,QAAQ,EAAEpB,kBAAmB;YAC7BjC,WAAW,EAAEA,WAAY;YACzBsD,SAAS,EAAE1D,UAAU,CAAC0D,SAAU;YAChCC,WAAW,EAAE3D,UAAU,CAAC2D;UAAY,CACrC,CAAC;QAEN;MAEA,KAAK,WAAW;QAAE;UAChB,MAAMQ,UAAU,GAAGjD,UAAU,EAAEC,IAAI,KAAK,aAAa,GACjDD,UAAU,GACVL,SAAS;UACb,MAAMwD,IAAI,GAAGF,UAAU,GAAGzE,mBAAmB,CAACyE,UAAU,CAAC7B,MAAM,CAAC,GAAG,EAAE;UACrE,oBACErE,KAAA,CAAAmF,aAAA,CAACkB,mBAAmB;YAClBhB,UAAU,EAAExC,gBAAiB;YAC7BjB,SAAS,EAAEY,eAAgB;YAC3B+C,WAAW,EAAEvC,iBAAkB;YAC/BoD,IAAI,EAAEA,IAAK;YACXZ,QAAQ,EAAEpB;UAAmB,CAC9B,CAAC;QAEN;MAEA,KAAK,aAAa;QAAE;UAClB,MAAMkC,YAAY,GAAGrD,UAAU,EAAEC,IAAI,KAAK,QAAQ,GAC7CD,UAAU,CAACQ,cAAc,CAAC,CAAC,CAAC,YAAY8C,IAAI,GAC3CtD,UAAU,CAACQ,cAAc,CAAC,CAAC,CAAC,GAC5Bb,SAAS,GACXA,SAAS;UACb,oBACE5C,KAAA,CAAAmF,aAAA,CAACtE,eAAe;YACdyF,YAAY,EAAEA,YAAa;YAC3Bd,QAAQ,EAAElB,kBAAmB;YAC7BkC,eAAe,EAAE;UAAK,CACvB,CAAC;QAEN;MAEA,KAAK,YAAY;QAAE;UACjB,MAAMC,aAAa,GAAGxD,UAAU,EAAEC,IAAI,KAAK,QAAQ,GAC/CD,UAAU,CAACQ,cAAc,CAACiD,MAAM,CAC/BC,CAAC,IAAgBA,CAAC,YAAYJ,IACjC,CAAC,GACC,EAAE;UACN,oBACEvG,KAAA,CAAAmF,aAAA,CAAC1E,cAAc;YACbgG,aAAa,EAAEA,aAAc;YAC7BjB,QAAQ,EAAEhB,iBAAkB;YAC5BoC,YAAY,EAAE;UAAK,CACpB,CAAC;QAEN;MAEA,KAAK,UAAU;QAAE;UACf,MAAMC,EAAE,GAAG5D,UAAU,EAAEC,IAAI,KAAK,UAAU,GAAGD,UAAU,GAAGL,SAAS;UACnE,oBACE5C,KAAA,CAAAmF,aAAA,CAACnE,aAAa;YACZ6D,SAAS,EAAEgC,EAAE,EAAEhC,SAAU;YACzBC,OAAO,EAAE+B,EAAE,EAAE/B,OAAQ;YACrBU,QAAQ,EAAEd;UAAiB,CAC5B,CAAC;QAEN;MAEA;QACE,OAAOtE,iBAAiB,CAAC2B,UAAU,CAACmD,qBAAqB,CAAC;IAC9D;EACF,CAAC,EAAE,CAAC;EAEJ,oBACElF,KAAA,CAAAmF,aAAA;IAAK/C,SAAS,EAAErC,UAAU,CAACQ,MAAM,CAACuG,cAAc,EAAE1E,SAAS,CAAE;IAACC,KAAK,EAAEA;EAAM,GACxE4C,OACE,CAAC;AAEV;AAEA,OAAO,MAAM8B,mBAAoD,gBAAG9G,IAAI,CACtE0B,wBACF,CAAoC;AAmBpC,SAASyD,sBAAsBA,CAAiC;EAC9DC,UAAU;EACVzD,SAAS;EACT0D,oBAAoB;EACpBC,WAAW;EACX9B,cAAc;EACd+B,QAAQ;EACRC,SAAS;EACTC,WAAW;EACXpD;AAC8B,CAAC,EAAsB;EACrD,MAAM;IAAE0E,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGhG,uBAAuB,CACxDmE,UAAU,EACVE,WAAW,EACX3D,SAAS,EACT0D,oBAAoB,EACpB;IAAE7B;EAAe,CACnB,CAAC;EAED,oBACEzD,KAAA,CAAAmF,aAAA,CAACzE,gBAAgB;IACf2D,MAAM,EAAE2C,IAAK;IACbC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbzD,cAAc,EAAEA,cAAe;IAC/B+B,QAAQ,EAAEA,QAAS;IACnB2B,UAAU,EAAE1B,SAAU;IACtBC,WAAW,EAAEA,WAAY;IACzBpD,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN;AAWA,SAASqD,uBAAuBA,CAAiC;EAC/DN,UAAU;EACVzD,SAAS;EACT0D,oBAAoB;EACpBC,WAAW;EACX5B,aAAa;EACb6B,QAAQ;EACRC,SAAS;EACTC;AAC+B,CAAC,EAAsB;EACtD,MAAMjC,cAAc,GAAGtD,OAAO,CAC5B,MAAMwD,aAAa,IAAI,IAAI,GAAG,CAACA,aAAa,CAAC,GAAG,EAAE,EAClD,CAACA,aAAa,CAChB,CAAC;EACD,MAAM;IAAEqD,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGhG,uBAAuB,CACxDmE,UAAU,EACVE,WAAW,EACX3D,SAAS,EACT0D,oBAAoB,EACpB;IAAE7B;EAAe,CACnB,CAAC;EAED,oBACEzD,KAAA,CAAAmF,aAAA,CAACrE,iBAAiB;IAChBuD,MAAM,EAAE2C,IAAK;IACbC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbvD,aAAa,EAAEA,aAAc;IAC7B6B,QAAQ,EAAEA,QAAS;IACnB2B,UAAU,EAAE1B,SAAU;IACtBC,WAAW,EAAEA,WAAY;IACzB0B,SAAS,EAAE,UAAU7B,WAAW;EAAa,CAC9C,CAAC;AAEN;AAYA,SAASY,oBAAoBA,CAAiC;EAC5Dd,UAAU;EACVzD,SAAS;EACT0D,oBAAoB;EACpBC,WAAW;EACX9B,cAAc;EACd+B,QAAQ;EACRrD,WAAW;EACXsD,SAAS;EACTC;AAC4B,CAAC,EAAsB;EACnD,MAAM;IAAEsB,IAAI;IAAEK,QAAQ;IAAEJ,SAAS;IAAEC;EAAM,CAAC,GAAGhG,uBAAuB,CAClEmE,UAAU,EACVE,WAAW,EACX3D,SAAS,EACT0D,oBAAoB,EACpB;IAAE7B;EAAe,CACnB,CAAC;EAED,oBACEzD,KAAA,CAAAmF,aAAA,CAAC3E,cAAc;IACb6D,MAAM,EAAE2C,IAAK;IACbK,QAAQ,EAAEA,QAAS;IACnBJ,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbzD,cAAc,EAAEA,cAAe;IAC/B+B,QAAQ,EAAEA,QAAS;IACnBrD,WAAW,EAAEA,WAAY;IACzBsD,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA;EAAY,CAC1B,CAAC;AAEN;AASA,MAAM4B,iBAAiB,GAAG;EAAEC,KAAK,EAAE;AAAG,CAAU;AAEhD,SAASlB,mBAAmBA,CAAiC;EAC3DhB,UAAU;EACVzD,SAAS;EACT2D,WAAW;EACXa,IAAI;EACJZ;AAC2B,CAAC,EAAsB;EAClD,MAAM;IAAEwB,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAG/F,sBAAsB,CACvDkE,UAAU,EACVE,WAAW,EACX3D,SAAS,EACT0F,iBACF,CAAC;EACD,oBACEtH,KAAA,CAAAmF,aAAA,CAACpE,aAAa;IACZyG,WAAW,EAAER,IAAK;IAClBC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbd,IAAI,EAAEA,IAAK;IACXZ,QAAQ,EAAEA,QAAS;IACnBiC,eAAe,EAAE;EAAG,CACrB,CAAC;AAEN;AASA,SAASC,kBAAkBA,CACzBrC,UAAa,EACbE,WAA4B,EAC5B3D,SAAuB,EACvB;EACA,MAAM+F,gBAAgB,GAAGxH,OAAO,CAC9B,MAAMkB,6BAA6B,CAAIkE,WAAqB,CAAC,EAC7D,CAACA,WAAW,CACd,CAAC;EAED,MAAMqC,aAAa,GAAGzH,OAAO,CAC3B,OAAO;IAAE0H,SAAS,EAAEF,gBAAgB;IAAE/F;EAAU,CAAC,CAAC,EAClD,CAAC+F,gBAAgB,EAAE/F,SAAS,CAC9B,CAAC;EACD,MAAM;IAAEoF,IAAI,EAAEc,aAAa;IAAEb,SAAS,EAAEc;EAAY,CAAC,GAAGjI,kBAAkB,CACxEuF,UAAU,EACVuC,aACF,CAAC;EAED,MAAMI,yBAAyB,GAAG7H,OAAO,CACvC,MAAMmB,+BAA+B,CAAI,CAAC,EAC1C,EACF,CAAC;EAED,MAAM2G,eAAe,GAAG9H,OAAO,CAC7B,MAAMoB,qBAAqB,CAAIgE,WAAqB,CAAC,EACrD,CAACA,WAAW,CACd,CAAC;EAED,MAAM2C,aAAa,GAAG/H,OAAO,CAC3B,OAAO;IACLgI,KAAK,EAAEF,eAAe;IACtBJ,SAAS,EAAEG,yBAAyB;IACpCpG;EACF,CAAC,CAAC,EACF,CAACqG,eAAe,EAAED,yBAAyB,EAAEpG,SAAS,CACxD,CAAC;EACD,MAAM;IAAEoF,IAAI,EAAEoB,aAAa;IAAEnB,SAAS,EAAEoB;EAAY,CAAC,GAAGvI,kBAAkB,CACxEuF,UAAU,EACV6C,aACF,CAAC;EAED,MAAMI,SAAS,GAAGnI,OAAO,CAAC,MAAM;IAC9B,IAAI,CAACiI,aAAa,EAAE,OAAO,CAAC;IAC5B,MAAMG,MAAM,GAAGH,aAAwD;IACvE,IAAI,QAAQ,IAAIG,MAAM,IAAI,OAAOA,MAAM,CAACC,MAAM,KAAK,QAAQ,EAAE;MAC3D,OAAOD,MAAM,CAACC,MAAM;IACtB;IACA,OAAO,CAAC;EACV,CAAC,EAAE,CAACJ,aAAa,CAAC,CAAC;EAEnB,OAAO;IAAEN,aAAa;IAAEC,WAAW;IAAEO,SAAS;IAAED;EAAY,CAAC;AAC/D;AAUA,SAAStC,sBAAsBA,CAAiC;EAC9DV,UAAU;EACVzD,SAAS;EACT2D,WAAW;EACXtB,QAAQ;EACRC,QAAQ;EACRb,WAAW;EACXmC,QAAQ;EACRT;AAC8B,CAAC,EAAsB;EACrD,MAAM;IAAE+C,aAAa;IAAEC,WAAW;IAAEO,SAAS;IAAED;EAAY,CAAC,GAC1DX,kBAAkB,CAACrC,UAAU,EAAEE,WAAW,EAAE3D,SAAS,CAAC;EAExD,MAAM6G,eAAe,GAAGtI,OAAO,CAC7B,MAAM;IACJ,IAAI,CAAC2H,aAAa,EAAE,OAAO,EAAE;IAK7B,MAAMY,KAA8C,GAAG,EAAE;IACzD,KAAK,MAAMC,IAAI,IALGb,aAAa,EAKD;MAC5B,MAAMc,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACtD,WAAW,CAAW;MACnD,IAAIqD,QAAQ,IAAI,IAAI,EAAE;QACpB,MAAME,MAAM,GAAGC,UAAU,CAAClD,MAAM,CAAC+C,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAACI,KAAK,CAACF,MAAM,CAAC,EAAE;UAClBJ,KAAK,CAACO,IAAI,CAAC;YAAEpF,KAAK,EAAEiF,MAAM;YAAEI,KAAK,EAAEP,IAAI,CAACH,MAAM,IAAI;UAAE,CAAC,CAAC;QACxD;MACF;IACF;IACA,OAAOE,KAAK;EACd,CAAC,EACD,CAACZ,aAAa,EAAEvC,WAAW,CAC7B,CAAC;EAED,oBACEvF,KAAA,CAAAmF,aAAA,CAACxE,gBAAgB;IACf2H,SAAS,EAAEA,SAAU;IACrBrB,SAAS,EAAEoB,WAAY;IACvBhF,WAAW,EAAEA,WAAY;IACzB8F,mBAAmB,EAAEpE;EAAa,gBAElC/E,KAAA,CAAAmF,aAAA,CAACvE,gBAAgB;IACf6H,eAAe,EAAEA,eAAgB;IACjCxB,SAAS,EAAEc,WAAY;IACvB9D,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBsB,QAAQ,EAAEA;EAAS,CACpB,CACe,CAAC;AAEvB;AAUA,SAASS,oBAAoBA,CAAiC;EAC5DZ,UAAU;EACVzD,SAAS;EACT2D,WAAW;EACXtB,QAAQ;EACRC,QAAQ;EACRb,WAAW;EACXmC,QAAQ;EACRT;AAC4B,CAAC,EAAsB;EACnD,MAAM;IAAE+C,aAAa;IAAEC,WAAW;IAAEO,SAAS;IAAED;EAAY,CAAC,GAC1DX,kBAAkB,CAACrC,UAAU,EAAEE,WAAW,EAAE3D,SAAS,CAAC;EAExD,MAAM6G,eAAe,GAAGtI,OAAO,CAAwC,MAAM;IAC3E,IAAI,CAAC2H,aAAa,EAAE,OAAO,EAAE;IAK7B,MAAMY,KAA4C,GAAG,EAAE;IACvD,KAAK,MAAMC,IAAI,IALGb,aAAa,EAKD;MAC5B,MAAMc,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACtD,WAAW,CAAW;MACnD,IAAIqD,QAAQ,IAAI,IAAI,EAAE;QACpB,MAAMrE,IAAI,GAAG,IAAIgC,IAAI,CAACV,MAAM,CAAC+C,QAAQ,CAAC,CAAC;QACvC,IAAI,CAACI,KAAK,CAACzE,IAAI,CAAC6E,OAAO,CAAC,CAAC,CAAC,EAAE;UAC1BV,KAAK,CAACO,IAAI,CAAC;YAAEpF,KAAK,EAAEU,IAAI;YAAE2E,KAAK,EAAEP,IAAI,CAACH,MAAM,IAAI;UAAE,CAAC,CAAC;QACtD;MACF;IACF;IACA,OAAOE,KAAK;EACd,CAAC,EAAE,CAACZ,aAAa,EAAEvC,WAAW,CAAC,CAAC;EAEhC,oBACEvF,KAAA,CAAAmF,aAAA,CAACxE,gBAAgB;IACf2H,SAAS,EAAEA,SAAU;IACrBrB,SAAS,EAAEoB,WAAY;IACvBhF,WAAW,EAAEA,WAAY;IACzB8F,mBAAmB,EAAEpE;EAAa,gBAElC/E,KAAA,CAAAmF,aAAA,CAAC7E,uBAAuB;IACtBmI,eAAe,EAAEA,eAAgB;IACjCxB,SAAS,EAAEc,WAAY;IACvB9D,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBsB,QAAQ,EAAEA;EAAS,CACpB,CACe,CAAC;AAEvB","ignoreList":[]}
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
import React, { memo, useCallback, useMemo } from "react";
|
|
18
18
|
import { FilterInputExcludeRow } from "../base/FilterInputExcludeRow.js";
|
|
19
19
|
import { ListogramInput } from "../base/inputs/ListogramInput.js";
|
|
20
|
-
import {
|
|
20
|
+
import { useFilterPropertyAggregation } from "../hooks/useFilterPropertyAggregation.js";
|
|
21
|
+
import { EMPTY_LINKED_FILTERS } from "../types/LinkedFilterTypes.js";
|
|
21
22
|
import { coerceToStringArray } from "../utils/coerceFilterValue.js";
|
|
22
23
|
function ListogramFilterInputInner({
|
|
23
24
|
objectType,
|
|
@@ -26,6 +27,8 @@ function ListogramFilterInputInner({
|
|
|
26
27
|
filterState,
|
|
27
28
|
onFilterStateChanged,
|
|
28
29
|
whereClause,
|
|
30
|
+
linkedFilters = EMPTY_LINKED_FILTERS,
|
|
31
|
+
showFilteredOutValues,
|
|
29
32
|
colorMap,
|
|
30
33
|
displayMode,
|
|
31
34
|
showCount,
|
|
@@ -51,17 +54,16 @@ function ListogramFilterInputInner({
|
|
|
51
54
|
});
|
|
52
55
|
}, [onFilterStateChanged, isExcluding]);
|
|
53
56
|
const sortBy = displayMode === "minimal" ? "value" : "count";
|
|
54
|
-
const aggregationOptions = useMemo(() => ({
|
|
55
|
-
where: whereClause,
|
|
56
|
-
sortBy,
|
|
57
|
-
activeValues: selectedValues
|
|
58
|
-
}), [whereClause, sortBy, selectedValues]);
|
|
59
57
|
const {
|
|
60
58
|
data,
|
|
61
59
|
maxCount,
|
|
62
60
|
isLoading,
|
|
63
61
|
error
|
|
64
|
-
} =
|
|
62
|
+
} = useFilterPropertyAggregation(objectType, propertyKey, objectSet, whereClause, linkedFilters, {
|
|
63
|
+
sortBy,
|
|
64
|
+
selectedValues,
|
|
65
|
+
showFilteredOutValues
|
|
66
|
+
});
|
|
65
67
|
return /*#__PURE__*/React.createElement(FilterInputExcludeRow, {
|
|
66
68
|
excludeRowOpen: excludeRowOpen,
|
|
67
69
|
filterState: filterState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListogramFilterInput.js","names":["React","memo","useCallback","useMemo","FilterInputExcludeRow","ListogramInput","
|
|
1
|
+
{"version":3,"file":"ListogramFilterInput.js","names":["React","memo","useCallback","useMemo","FilterInputExcludeRow","ListogramInput","useFilterPropertyAggregation","EMPTY_LINKED_FILTERS","coerceToStringArray","ListogramFilterInputInner","objectType","objectSet","propertyKey","filterState","onFilterStateChanged","whereClause","linkedFilters","showFilteredOutValues","colorMap","displayMode","showCount","maxVisibleItems","searchQuery","excludeRowOpen","renderValue","selectedValues","type","values","isExcluding","handleClearAll","handleChange","sortBy","data","maxCount","isLoading","error","createElement","totalValueCount","length","onClearAll","onChange","ListogramFilterInput"],"sources":["ListogramFilterInput.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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { FilterInputExcludeRow } from \"../base/FilterInputExcludeRow.js\";\nimport { ListogramInput } from \"../base/inputs/ListogramInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { useFilterPropertyAggregation } from \"../hooks/useFilterPropertyAggregation.js\";\nimport {\n EMPTY_LINKED_FILTERS,\n type LinkedFilter,\n} from \"../types/LinkedFilterTypes.js\";\nimport { coerceToStringArray } from \"../utils/coerceFilterValue.js\";\n\ninterface ListogramFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet?: ObjectSet<Q>;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n whereClause: WhereClause<Q>;\n linkedFilters?: ReadonlyArray<LinkedFilter<Q>>;\n showFilteredOutValues?: boolean;\n colorMap?: Record<string, string>;\n displayMode?: \"full\" | \"count\" | \"minimal\";\n showCount?: boolean;\n maxVisibleItems?: number;\n searchQuery?: string;\n excludeRowOpen?: boolean;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction ListogramFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n linkedFilters = EMPTY_LINKED_FILTERS,\n showFilteredOutValues,\n colorMap,\n displayMode,\n showCount,\n maxVisibleItems,\n searchQuery,\n excludeRowOpen,\n renderValue,\n}: ListogramFilterInputProps<Q>): React.ReactElement {\n const selectedValues = useMemo(\n () =>\n filterState?.type === \"EXACT_MATCH\"\n ? coerceToStringArray(filterState.values)\n : [],\n [filterState],\n );\n const isExcluding = filterState?.isExcluding ?? false;\n\n const handleClearAll = useCallback(() => {\n onFilterStateChanged({\n type: \"EXACT_MATCH\",\n values: [],\n isExcluding,\n });\n }, [onFilterStateChanged, isExcluding]);\n\n const handleChange = useCallback(\n (values: string[]) => {\n onFilterStateChanged({\n type: \"EXACT_MATCH\",\n values,\n isExcluding,\n });\n },\n [onFilterStateChanged, isExcluding],\n );\n\n const sortBy = displayMode === \"minimal\"\n ? \"value\" as const\n : \"count\" as const;\n\n const { data, maxCount, isLoading, error } = useFilterPropertyAggregation(\n objectType,\n propertyKey as PropertyKeys<Q>,\n objectSet,\n whereClause,\n linkedFilters,\n { sortBy, selectedValues, showFilteredOutValues },\n );\n\n return (\n <FilterInputExcludeRow\n excludeRowOpen={excludeRowOpen}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n totalValueCount={data.length}\n onClearAll={handleClearAll}\n >\n <ListogramInput\n values={data}\n maxCount={maxCount}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={handleChange}\n colorMap={colorMap}\n displayMode={displayMode}\n showCount={showCount}\n isExcluding={isExcluding}\n maxVisibleItems={maxVisibleItems}\n searchQuery={searchQuery}\n renderValue={renderValue}\n />\n </FilterInputExcludeRow>\n );\n}\n\nexport const ListogramFilterInput: typeof ListogramFilterInputInner = memo(\n ListogramFilterInputInner,\n) as typeof ListogramFilterInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,cAAc,QAAQ,kCAAkC;AAEjE,SAASC,4BAA4B,QAAQ,0CAA0C;AACvF,SACEC,oBAAoB,QAEf,+BAA+B;AACtC,SAASC,mBAAmB,QAAQ,+BAA+B;AAoBnE,SAASC,yBAAyBA,CAAiC;EACjEC,UAAU;EACVC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,oBAAoB;EACpBC,WAAW;EACXC,aAAa,GAAGT,oBAAoB;EACpCU,qBAAqB;EACrBC,QAAQ;EACRC,WAAW;EACXC,SAAS;EACTC,eAAe;EACfC,WAAW;EACXC,cAAc;EACdC;AAC4B,CAAC,EAAsB;EACnD,MAAMC,cAAc,GAAGtB,OAAO,CAC5B,MACEU,WAAW,EAAEa,IAAI,KAAK,aAAa,GAC/BlB,mBAAmB,CAACK,WAAW,CAACc,MAAM,CAAC,GACvC,EAAE,EACR,CAACd,WAAW,CACd,CAAC;EACD,MAAMe,WAAW,GAAGf,WAAW,EAAEe,WAAW,IAAI,KAAK;EAErD,MAAMC,cAAc,GAAG3B,WAAW,CAAC,MAAM;IACvCY,oBAAoB,CAAC;MACnBY,IAAI,EAAE,aAAa;MACnBC,MAAM,EAAE,EAAE;MACVC;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACd,oBAAoB,EAAEc,WAAW,CAAC,CAAC;EAEvC,MAAME,YAAY,GAAG5B,WAAW,CAC7ByB,MAAgB,IAAK;IACpBb,oBAAoB,CAAC;MACnBY,IAAI,EAAE,aAAa;MACnBC,MAAM;MACNC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACd,oBAAoB,EAAEc,WAAW,CACpC,CAAC;EAED,MAAMG,MAAM,GAAGZ,WAAW,KAAK,SAAS,GACpC,OAAO,GACP,OAAgB;EAEpB,MAAM;IAAEa,IAAI;IAAEC,QAAQ;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAG7B,4BAA4B,CACvEI,UAAU,EACVE,WAAW,EACXD,SAAS,EACTI,WAAW,EACXC,aAAa,EACb;IAAEe,MAAM;IAAEN,cAAc;IAAER;EAAsB,CAClD,CAAC;EAED,oBACEjB,KAAA,CAAAoC,aAAA,CAAChC,qBAAqB;IACpBmB,cAAc,EAAEA,cAAe;IAC/BV,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CuB,eAAe,EAAEL,IAAI,CAACM,MAAO;IAC7BC,UAAU,EAAEV;EAAe,gBAE3B7B,KAAA,CAAAoC,aAAA,CAAC/B,cAAc;IACbsB,MAAM,EAAEK,IAAK;IACbC,QAAQ,EAAEA,QAAS;IACnBC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbV,cAAc,EAAEA,cAAe;IAC/Be,QAAQ,EAAEV,YAAa;IACvBZ,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBC,SAAS,EAAEA,SAAU;IACrBQ,WAAW,EAAEA,WAAY;IACzBP,eAAe,EAAEA,eAAgB;IACjCC,WAAW,EAAEA,WAAY;IACzBE,WAAW,EAAEA;EAAY,CAC1B,CACoB,CAAC;AAE5B;AAEA,OAAO,MAAMiB,oBAAsD,gBAAGxC,IAAI,CACxEQ,yBACF,CAAqC","ignoreList":[]}
|