@itwin/components-react 4.16.5 → 4.17.1
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 +16 -1
- package/lib/cjs/components-react/common/HighlightedText.d.ts +1 -0
- package/lib/cjs/components-react/common/HighlightedText.d.ts.map +1 -1
- package/lib/cjs/components-react/common/HighlightedText.js +1 -0
- package/lib/cjs/components-react/common/HighlightedText.js.map +1 -1
- package/lib/cjs/components-react/datepicker/DatePicker.scss +1 -0
- package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -0
- package/lib/cjs/components-react/editors/EditorContainer.d.ts.map +1 -1
- package/lib/cjs/components-react/editors/EditorContainer.js +1 -0
- package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
- package/lib/cjs/components-react/editors/PopupButton.d.ts +1 -0
- package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
- package/lib/cjs/components-react/editors/PopupButton.js +1 -0
- package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
- package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +1 -0
- package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
- package/lib/cjs/components-react/favorite/FavoritePropertyList.js +1 -0
- package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +2 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilder.js +2 -2
- package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +3 -3
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +7 -21
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +5 -6
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +7 -6
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +37 -34
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +50 -27
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +2 -2
- package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -1
- package/lib/cjs/components-react/inputs/ParsedInput.d.ts +1 -0
- package/lib/cjs/components-react/inputs/ParsedInput.d.ts.map +1 -1
- package/lib/cjs/components-react/inputs/ParsedInput.js +1 -0
- package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
- package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -0
- package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
- package/lib/cjs/components-react/properties/LinkHandler.js +1 -0
- package/lib/cjs/components-react/properties/LinkHandler.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
- package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js +47 -60
- package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
- package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +30 -2
- package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
- package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -0
- package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
- package/lib/cjs/components-react/selectable-content/SelectableContent.js +4 -1
- package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.js +1 -0
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/components-react/common/HighlightedText.d.ts +1 -0
- package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
- package/lib/esm/components-react/common/HighlightedText.js +1 -0
- package/lib/esm/components-react/common/HighlightedText.js.map +1 -1
- package/lib/esm/components-react/datepicker/DatePicker.scss +1 -0
- package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -0
- package/lib/esm/components-react/editors/EditorContainer.d.ts.map +1 -1
- package/lib/esm/components-react/editors/EditorContainer.js +1 -0
- package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
- package/lib/esm/components-react/editors/PopupButton.d.ts +1 -0
- package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
- package/lib/esm/components-react/editors/PopupButton.js +1 -0
- package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
- package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +1 -0
- package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
- package/lib/esm/components-react/favorite/FavoritePropertyList.js +1 -0
- package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +2 -0
- package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilder.js +2 -2
- package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +3 -3
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +7 -21
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +5 -6
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +7 -6
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +36 -32
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderState.js +48 -26
- package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +2 -2
- package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -1
- package/lib/esm/components-react/inputs/ParsedInput.d.ts +1 -0
- package/lib/esm/components-react/inputs/ParsedInput.d.ts.map +1 -1
- package/lib/esm/components-react/inputs/ParsedInput.js +1 -0
- package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
- package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -0
- package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
- package/lib/esm/components-react/properties/LinkHandler.js +1 -0
- package/lib/esm/components-react/properties/LinkHandler.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
- package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyRenderer.js +47 -60
- package/lib/esm/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
- package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +7 -2
- package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
- package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -0
- package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
- package/lib/esm/components-react/selectable-content/SelectableContent.js +4 -1
- package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
- package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/NodeContent.js +1 -0
- package/lib/esm/components-react/tree/controlled/component/NodeContent.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/package.json +3 -3
|
@@ -43,17 +43,16 @@ const FilterBuilderLogicalOperator_1 = require("./FilterBuilderLogicalOperator")
|
|
|
43
43
|
* @internal
|
|
44
44
|
*/
|
|
45
45
|
function PropertyFilterBuilderRuleGroupRenderer(props) {
|
|
46
|
-
const { path, group, isGroupOperatorDisabled } = props;
|
|
46
|
+
const { path, group, isGroupOperatorDisabled, allowLastRuleDelete } = props;
|
|
47
47
|
const { actions } = React.useContext(FilterBuilderContext_1.PropertyFilterBuilderContext);
|
|
48
48
|
const { onRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);
|
|
49
49
|
const onOperatorChange = React.useCallback((operator) => {
|
|
50
50
|
actions.setRuleGroupOperator(path, operator);
|
|
51
51
|
}, [path, actions]);
|
|
52
|
-
const showOperator = group.items.length > 1;
|
|
53
52
|
return (React.createElement(itwinui_react_1.Flex, { ref: groupRef, style: { alignSelf: "flex-start" }, className: "fb-group", gap: "0px" },
|
|
54
|
-
|
|
53
|
+
React.createElement(PropertyFilterBuilderRuleGroupOperator, { operator: group.operator, onChange: onOperatorChange, isGroupOperatorDisabled: isGroupOperatorDisabled }),
|
|
55
54
|
React.createElement("div", { className: "fb-wrapper" }, group.items.map((item) => (React.createElement("div", { className: "fb-row", key: item.id },
|
|
56
|
-
React.createElement(PropertyFilterBuilderGroupOrRule, { path: path, item: item, onRuleAdded: onRuleAdded })))))));
|
|
55
|
+
React.createElement(PropertyFilterBuilderGroupOrRule, { path: path, item: item, onRuleAdded: onRuleAdded, allowLastRuleDelete: allowLastRuleDelete })))))));
|
|
57
56
|
}
|
|
58
57
|
exports.PropertyFilterBuilderRuleGroupRenderer = PropertyFilterBuilderRuleGroupRenderer;
|
|
59
58
|
/**
|
|
@@ -66,11 +65,11 @@ function PropertyFilterBuilderRuleGroupOperator(props) {
|
|
|
66
65
|
React.createElement(FilterBuilderLogicalOperator_1.PropertyFilterBuilderLogicalOperator, { className: "fb-group-operator", operator: operator, onOperatorChange: onChange, isDisabled: isGroupOperatorDisabled })));
|
|
67
66
|
}
|
|
68
67
|
exports.PropertyFilterBuilderRuleGroupOperator = PropertyFilterBuilderRuleGroupOperator;
|
|
69
|
-
const PropertyFilterBuilderGroupOrRule = React.memo(function PropertyFilterBuilderGroupOrRule({ path, item, onRuleAdded, }) {
|
|
68
|
+
const PropertyFilterBuilderGroupOrRule = React.memo(function PropertyFilterBuilderGroupOrRule({ path, item, onRuleAdded, allowLastRuleDelete, }) {
|
|
70
69
|
const itemPath = [...path, item.id];
|
|
71
70
|
if ((0, FilterBuilderState_1.isPropertyFilterBuilderRuleGroup)(item))
|
|
72
71
|
return (React.createElement(PropertyFilterBuilderRuleGroupRenderer, { path: itemPath, group: item }));
|
|
73
|
-
return (React.createElement(FilterBuilderRule_1.PropertyFilterBuilderRuleRenderer, { path: itemPath, rule: item, onRuleAdded: onRuleAdded }));
|
|
72
|
+
return (React.createElement(FilterBuilderRule_1.PropertyFilterBuilderRuleRenderer, { path: itemPath, rule: item, onRuleAdded: onRuleAdded, allowLastRuleDelete: allowLastRuleDelete }));
|
|
74
73
|
});
|
|
75
74
|
const useRulePropertyFocus = (currentGroupItemsLength) => {
|
|
76
75
|
const previousGroupItemsLength = React.useRef(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBuilderRuleGroup.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAuC;AACvC,6CAA+B;AAC/B,wDAA4C;AAC5C,iEAAsE;AACtE,2DAAwE;AAKxE,6DAAwE;AAExE,iFAAsF;
|
|
1
|
+
{"version":3,"file":"FilterBuilderRuleGroup.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport \"./FilterBuilderRuleGroup.scss\";\nimport * as React from \"react\";\nimport { Flex } from \"@itwin/itwinui-react\";\nimport { PropertyFilterBuilderContext } from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleRenderer } from \"./FilterBuilderRule\";\nimport type {\n PropertyFilterBuilderRuleGroup,\n PropertyFilterBuilderRuleGroupItem,\n} from \"./FilterBuilderState\";\nimport { isPropertyFilterBuilderRuleGroup } from \"./FilterBuilderState\";\nimport type { PropertyFilterRuleGroupOperator } from \"./Operators\";\nimport { PropertyFilterBuilderLogicalOperator } from \"./FilterBuilderLogicalOperator\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule group. */\n path: string[];\n /** Rule group to render. */\n group: PropertyFilterBuilderRuleGroup;\n /** Controls whether the group operator is toggle-able. */\n isGroupOperatorDisabled?: boolean;\n /** Controls whether the last rule remaining in a group is deletable */\n allowLastRuleDelete?: boolean;\n}\n\n/**\n * Component that renders group of rules in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupRenderer(\n props: PropertyFilterBuilderRuleGroupRendererProps\n) {\n const { path, group, isGroupOperatorDisabled, allowLastRuleDelete } = props;\n const { actions } = React.useContext(PropertyFilterBuilderContext);\n const { onRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);\n\n const onOperatorChange = React.useCallback(\n (operator: `${PropertyFilterRuleGroupOperator}`) => {\n actions.setRuleGroupOperator(path, operator);\n },\n [path, actions]\n );\n\n return (\n <Flex\n ref={groupRef}\n style={{ alignSelf: \"flex-start\" }}\n className=\"fb-group\"\n gap=\"0px\"\n >\n <PropertyFilterBuilderRuleGroupOperator\n operator={group.operator}\n onChange={onOperatorChange}\n isGroupOperatorDisabled={isGroupOperatorDisabled}\n />\n <div className=\"fb-wrapper\">\n {group.items.map((item) => (\n <div className=\"fb-row\" key={item.id}>\n <PropertyFilterBuilderGroupOrRule\n path={path}\n item={item}\n onRuleAdded={onRuleAdded}\n allowLastRuleDelete={allowLastRuleDelete}\n />\n </div>\n ))}\n </div>\n </Flex>\n );\n}\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupOperator]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupOperatorProps {\n /** Currently selected operator. */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Callback that is invoked when selected operator changes. */\n onChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;\n /** Controls whether the group operator is toggle-able. */\n isGroupOperatorDisabled?: boolean;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupOperator(\n props: PropertyFilterBuilderRuleGroupOperatorProps\n) {\n const { operator, isGroupOperatorDisabled, onChange } = props;\n\n return (\n <Flex.Item alignSelf=\"stretch\">\n <PropertyFilterBuilderLogicalOperator\n className=\"fb-group-operator\"\n operator={operator}\n onOperatorChange={onChange}\n isDisabled={isGroupOperatorDisabled}\n />\n </Flex.Item>\n );\n}\ninterface PropertyFilterBuilderGroupOrRuleProps {\n path: string[];\n item: PropertyFilterBuilderRuleGroupItem;\n onRuleAdded: () => void;\n allowLastRuleDelete?: boolean;\n}\n\nconst PropertyFilterBuilderGroupOrRule = React.memo(\n function PropertyFilterBuilderGroupOrRule({\n path,\n item,\n onRuleAdded,\n allowLastRuleDelete,\n }: PropertyFilterBuilderGroupOrRuleProps) {\n const itemPath = [...path, item.id];\n\n if (isPropertyFilterBuilderRuleGroup(item))\n return (\n <PropertyFilterBuilderRuleGroupRenderer path={itemPath} group={item} />\n );\n return (\n <PropertyFilterBuilderRuleRenderer\n path={itemPath}\n rule={item}\n onRuleAdded={onRuleAdded}\n allowLastRuleDelete={allowLastRuleDelete}\n />\n );\n }\n);\n\nconst useRulePropertyFocus = (currentGroupItemsLength: number) => {\n const previousGroupItemsLength = React.useRef<number>(0);\n const isNewRuleAdded = React.useRef<boolean>(false);\n const groupRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n if (\n isNewRuleAdded.current &&\n previousGroupItemsLength.current < currentGroupItemsLength &&\n groupRef.current\n ) {\n const ruleProperties =\n groupRef.current.querySelectorAll<HTMLInputElement>(\n \".fb-property-name input\"\n );\n ruleProperties[ruleProperties.length - 1].focus();\n isNewRuleAdded.current = false;\n }\n previousGroupItemsLength.current = currentGroupItemsLength;\n }, [currentGroupItemsLength]);\n\n return { onRuleAdded: () => (isNewRuleAdded.current = true), groupRef };\n};\n"]}
|
|
@@ -4,12 +4,16 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
.fb-group {
|
|
6
6
|
--border-color: var(--iui-color-border);
|
|
7
|
-
--fb-operator-width:
|
|
7
|
+
--fb-operator-width: 128px;
|
|
8
8
|
--divider-width: var(--iui-size-2xs);
|
|
9
9
|
--divider-background-color: var(--iui-color-border-subtle);
|
|
10
|
+
gap: var(--iui-size-s);
|
|
10
11
|
|
|
11
12
|
.fb-wrapper {
|
|
12
13
|
width: 100%;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: var(--iui-size-xs);
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
.fb-logical-operator {
|
|
@@ -18,17 +22,14 @@
|
|
|
18
22
|
text-align: center;
|
|
19
23
|
background-color: var(--iui-color-background-hover);
|
|
20
24
|
user-select: none;
|
|
25
|
+
-webkit-user-select: none;
|
|
21
26
|
display: grid;
|
|
22
27
|
place-items: center;
|
|
23
28
|
box-sizing: border-box;
|
|
24
|
-
font-size: var(--iui-font-size-2);
|
|
25
29
|
font-weight: var(--iui-font-weight-semibold);
|
|
26
|
-
padding-block: var(--iui-size-s);
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
.fb-group-operator {
|
|
30
|
-
border
|
|
31
|
-
border-color: var(--border-color);
|
|
32
|
-
border-width: 1px 0 1px 1px;
|
|
33
|
+
border: 1px solid var(--border-color);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -21,9 +21,4 @@ export interface PropertyFilterBuilderRuleOperatorProps {
|
|
|
21
21
|
* @internal
|
|
22
22
|
*/
|
|
23
23
|
export declare function PropertyFilterBuilderRuleOperatorRenderer(props: PropertyFilterBuilderRuleOperatorProps): React.JSX.Element;
|
|
24
|
-
/**
|
|
25
|
-
* Function that returns display label for [[PropertyFilterBuilderRuleOperator]].
|
|
26
|
-
* @beta
|
|
27
|
-
*/
|
|
28
|
-
export declare function getPropertyFilterBuilderOperatorLabel(operator: PropertyFilterBuilderRuleOperator): string;
|
|
29
24
|
//# sourceMappingURL=FilterBuilderRuleOperator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBuilderRuleOperator.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleOperator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAIrE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,iCAAiC,CAAC;IAC7C,kEAAkE;IAClE,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,iCAAiC,KAAK,IAAI,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,sCAAsC,qBAkC9C
|
|
1
|
+
{"version":3,"file":"FilterBuilderRuleOperator.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleOperator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAIrE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,iCAAiC,CAAC;IAC7C,kEAAkE;IAClE,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,iCAAiC,KAAK,IAAI,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,sCAAsC,qBAkC9C"}
|
|
@@ -30,17 +30,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
30
30
|
return result;
|
|
31
31
|
};
|
|
32
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.
|
|
33
|
+
exports.PropertyFilterBuilderRuleOperatorRenderer = void 0;
|
|
34
34
|
const React = __importStar(require("react"));
|
|
35
35
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
36
36
|
const Operators_1 = require("./Operators");
|
|
37
|
-
const
|
|
37
|
+
const useTranslation_1 = require("../l10n/useTranslation");
|
|
38
38
|
/**
|
|
39
39
|
* Component that renders [[PropertyFilterBuilderRuleRenderer]] operator selector.
|
|
40
40
|
* @internal
|
|
41
41
|
*/
|
|
42
42
|
function PropertyFilterBuilderRuleOperatorRenderer(props) {
|
|
43
43
|
const { operator, property, onChange } = props;
|
|
44
|
+
const getLabel = usePropertyFilterBuilderOperatorLabels();
|
|
44
45
|
const availableOperators = React.useMemo(() => (0, Operators_1.getPropertyFilterBuilderOperators)(property), [property]);
|
|
45
46
|
const selectedOperator = availableOperators.find((op) => op === operator) ?? availableOperators[0];
|
|
46
47
|
React.useEffect(() => {
|
|
@@ -48,8 +49,8 @@ function PropertyFilterBuilderRuleOperatorRenderer(props) {
|
|
|
48
49
|
}, [onChange, selectedOperator]);
|
|
49
50
|
const availableOptions = React.useMemo(() => availableOperators.map((op) => ({
|
|
50
51
|
value: op,
|
|
51
|
-
label:
|
|
52
|
-
})), [availableOperators]);
|
|
52
|
+
label: getLabel(op),
|
|
53
|
+
})), [availableOperators, getLabel]);
|
|
53
54
|
return (React.createElement("div", { className: "fb-row-condition" },
|
|
54
55
|
React.createElement(itwinui_react_1.Select, { options: availableOptions, value: selectedOperator, onChange: onChange, size: "small" })));
|
|
55
56
|
}
|
|
@@ -58,35 +59,37 @@ exports.PropertyFilterBuilderRuleOperatorRenderer = PropertyFilterBuilderRuleOpe
|
|
|
58
59
|
* Function that returns display label for [[PropertyFilterBuilderRuleOperator]].
|
|
59
60
|
* @beta
|
|
60
61
|
*/
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
62
|
+
function usePropertyFilterBuilderOperatorLabels() {
|
|
63
|
+
const { translate } = (0, useTranslation_1.useTranslation)();
|
|
64
|
+
return React.useCallback((operator) => {
|
|
65
|
+
switch (operator) {
|
|
66
|
+
case "is-true":
|
|
67
|
+
return translate("filterBuilder.operators.isTrue");
|
|
68
|
+
case "is-false":
|
|
69
|
+
return translate("filterBuilder.operators.isFalse");
|
|
70
|
+
case "is-equal":
|
|
71
|
+
return translate("filterBuilder.operators.equal");
|
|
72
|
+
case "is-not-equal":
|
|
73
|
+
return translate("filterBuilder.operators.notEqual");
|
|
74
|
+
case "greater":
|
|
75
|
+
return ">";
|
|
76
|
+
case "greater-or-equal":
|
|
77
|
+
return ">=";
|
|
78
|
+
case "less":
|
|
79
|
+
return "<";
|
|
80
|
+
case "less-or-equal":
|
|
81
|
+
return "<=";
|
|
82
|
+
case "like":
|
|
83
|
+
return translate("filterBuilder.operators.contains");
|
|
84
|
+
case "is-null":
|
|
85
|
+
return translate("filterBuilder.operators.isNull");
|
|
86
|
+
case "is-not-null":
|
|
87
|
+
return translate("filterBuilder.operators.isNotNull");
|
|
88
|
+
case "between":
|
|
89
|
+
return translate("filterBuilder.operators.between");
|
|
90
|
+
case "not-between":
|
|
91
|
+
return translate("filterBuilder.operators.notBetween");
|
|
92
|
+
}
|
|
93
|
+
}, [translate]);
|
|
90
94
|
}
|
|
91
|
-
exports.getPropertyFilterBuilderOperatorLabel = getPropertyFilterBuilderOperatorLabel;
|
|
92
95
|
//# sourceMappingURL=FilterBuilderRuleOperator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBuilderRuleOperator.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleOperator.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,wDAA8C;AAE9C,2CAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"FilterBuilderRuleOperator.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleOperator.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,wDAA8C;AAE9C,2CAAgE;AAChE,2DAAwD;AAexD;;;GAGG;AACH,SAAgB,yCAAyC,CACvD,KAA6C;IAE7C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC/C,MAAM,QAAQ,GAAG,sCAAsC,EAAE,CAAC;IAC1D,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CACtC,GAAG,EAAE,CAAC,IAAA,6CAAiC,EAAC,QAAQ,CAAC,EACjD,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,MAAM,gBAAgB,GACpB,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE5E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CACpC,GAAG,EAAE,CACH,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;KACpB,CAAC,CAAC,EACL,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAC/B,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,kBAAkB;QAC/B,oBAAC,sBAAM,IACL,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,OAAO,GACb,CACE,CACP,CAAC;AACJ,CAAC;AAnCD,8FAmCC;AAED;;;GAGG;AACH,SAAS,sCAAsC;IAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,+BAAc,GAAE,CAAC;IAEvC,OAAO,KAAK,CAAC,WAAW,CACtB,CAAC,QAA2C,EAAE,EAAE;QAC9C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC,gCAAgC,CAAC,CAAC;YACrD,KAAK,UAAU;gBACb,OAAO,SAAS,CAAC,iCAAiC,CAAC,CAAC;YACtD,KAAK,UAAU;gBACb,OAAO,SAAS,CAAC,+BAA+B,CAAC,CAAC;YACpD,KAAK,cAAc;gBACjB,OAAO,SAAS,CAAC,kCAAkC,CAAC,CAAC;YACvD,KAAK,SAAS;gBACZ,OAAO,GAAG,CAAC;YACb,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,GAAG,CAAC;YACb,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,SAAS,CAAC,kCAAkC,CAAC,CAAC;YACvD,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC,gCAAgC,CAAC,CAAC;YACrD,KAAK,aAAa;gBAChB,OAAO,SAAS,CAAC,mCAAmC,CAAC,CAAC;YACxD,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC,iCAAiC,CAAC,CAAC;YACtD,KAAK,aAAa;gBAChB,OAAO,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport * as React from \"react\";\nimport { type PropertyDescription } from \"@itwin/appui-abstract\";\nimport { Select } from \"@itwin/itwinui-react\";\nimport type { PropertyFilterBuilderRuleOperator } from \"./Operators\";\nimport { getPropertyFilterBuilderOperators } from \"./Operators\";\nimport { useTranslation } from \"../l10n/useTranslation\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleOperator]] component.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleOperatorProps {\n /** Currently selected operator. */\n operator?: PropertyFilterBuilderRuleOperator;\n /** Property used in rule for which this operator will be used. */\n property: PropertyDescription;\n /** Callback that is invoked when selected operator changes. */\n onChange: (operator: PropertyFilterBuilderRuleOperator) => void;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleRenderer]] operator selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleOperatorRenderer(\n props: PropertyFilterBuilderRuleOperatorProps\n) {\n const { operator, property, onChange } = props;\n const getLabel = usePropertyFilterBuilderOperatorLabels();\n const availableOperators = React.useMemo(\n () => getPropertyFilterBuilderOperators(property),\n [property]\n );\n const selectedOperator =\n availableOperators.find((op) => op === operator) ?? availableOperators[0];\n\n React.useEffect(() => {\n onChange(selectedOperator);\n }, [onChange, selectedOperator]);\n\n const availableOptions = React.useMemo(\n () =>\n availableOperators.map((op) => ({\n value: op,\n label: getLabel(op),\n })),\n [availableOperators, getLabel]\n );\n\n return (\n <div className=\"fb-row-condition\">\n <Select\n options={availableOptions}\n value={selectedOperator}\n onChange={onChange}\n size={\"small\"}\n />\n </div>\n );\n}\n\n/**\n * Function that returns display label for [[PropertyFilterBuilderRuleOperator]].\n * @beta\n */\nfunction usePropertyFilterBuilderOperatorLabels() {\n const { translate } = useTranslation();\n\n return React.useCallback(\n (operator: PropertyFilterBuilderRuleOperator) => {\n switch (operator) {\n case \"is-true\":\n return translate(\"filterBuilder.operators.isTrue\");\n case \"is-false\":\n return translate(\"filterBuilder.operators.isFalse\");\n case \"is-equal\":\n return translate(\"filterBuilder.operators.equal\");\n case \"is-not-equal\":\n return translate(\"filterBuilder.operators.notEqual\");\n case \"greater\":\n return \">\";\n case \"greater-or-equal\":\n return \">=\";\n case \"less\":\n return \"<\";\n case \"less-or-equal\":\n return \"<=\";\n case \"like\":\n return translate(\"filterBuilder.operators.contains\");\n case \"is-null\":\n return translate(\"filterBuilder.operators.isNull\");\n case \"is-not-null\":\n return translate(\"filterBuilder.operators.isNotNull\");\n case \"between\":\n return translate(\"filterBuilder.operators.between\");\n case \"not-between\":\n return translate(\"filterBuilder.operators.notBetween\");\n }\n },\n [translate]\n );\n}\n"]}
|
|
@@ -65,7 +65,7 @@ export declare class PropertyFilterBuilderActions {
|
|
|
65
65
|
/** Adds new rule or group of rules to the group specified by path. */
|
|
66
66
|
addItem(path: string[], item: "RULE_GROUP" | "RULE" | PropertyFilterRule | PropertyFilterRuleGroup): void;
|
|
67
67
|
/** Removes item specified by path. */
|
|
68
|
-
removeItem(path: string[]): void;
|
|
68
|
+
removeItem(path: string[], allowLastRuleDelete?: boolean): void;
|
|
69
69
|
/** Removes all items from root group. */
|
|
70
70
|
removeAllItems(): void;
|
|
71
71
|
/** Sets operator of rule group specified by the path. */
|
|
@@ -125,9 +125,15 @@ export interface UsePropertyFilterBuilderResult {
|
|
|
125
125
|
* @beta
|
|
126
126
|
*/
|
|
127
127
|
export declare function usePropertyFilterBuilder(props?: UsePropertyFilterBuilderProps): UsePropertyFilterBuilderResult;
|
|
128
|
+
/**
|
|
129
|
+
* Creates default rule validator.
|
|
130
|
+
* @beta
|
|
131
|
+
*/
|
|
132
|
+
export declare function useDefaultPropertyFilterBuilderRuleValidator(): (item: PropertyFilterBuilderRule) => string | undefined;
|
|
128
133
|
/**
|
|
129
134
|
* Default rule validator.
|
|
130
135
|
* @beta
|
|
136
|
+
* @deprecated in 4.17.0. Use `useDefaultPropertyFilterBuilderRuleValidator` instead.
|
|
131
137
|
*/
|
|
132
138
|
export declare function defaultPropertyFilterBuilderRuleValidator(item: PropertyFilterBuilderRule): string | undefined;
|
|
133
139
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,KAAK,EACV,iCAAiC,EACjC,+BAA+B,EAChC,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAKjB;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,SAAS,EAAE,8BAA8B,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,MAAM,kCAAkC,GAC1C,8BAA8B,GAC9B,yBAAyB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAC/C,2BAA2B;IAC3B,KAAK,EAAE,kCAAkC,EAAE,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,iCAAiC,CAAC;IAC7C,iDAAiD;IACjD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,kCAAkC,GACvC,IAAI,IAAI,8BAA8B,CAExC;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IAErC,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,CAChB,MAAM,EAAE,CACN,SAAS,EAAE,0BAA0B,KAClC,0BAA0B,KAC5B,IAAI;IAGX,OAAO,CAAC,WAAW;IAMnB,sEAAsE;IAC/D,OAAO,CACZ,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,kBAAkB,GAAG,uBAAuB;IAgC5E,sCAAsC;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"FilterBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,15 +30,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
30
30
|
return result;
|
|
31
31
|
};
|
|
32
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.buildPropertyFilter = exports.defaultPropertyFilterBuilderRuleValidator = exports.usePropertyFilterBuilder = exports.PropertyFilterBuilderActions = exports.isPropertyFilterBuilderRuleGroup = void 0;
|
|
33
|
+
exports.buildPropertyFilter = exports.defaultPropertyFilterBuilderRuleValidator = exports.useDefaultPropertyFilterBuilderRuleValidator = exports.usePropertyFilterBuilder = exports.PropertyFilterBuilderActions = exports.isPropertyFilterBuilderRuleGroup = void 0;
|
|
34
34
|
const immer_1 = require("immer");
|
|
35
35
|
const React = __importStar(require("react"));
|
|
36
36
|
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
37
37
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
38
38
|
const Operators_1 = require("./Operators");
|
|
39
39
|
const Types_1 = require("./Types");
|
|
40
|
-
const UiComponents_1 = require("../UiComponents");
|
|
41
40
|
const FilterBuilderRangeValue_1 = require("./FilterBuilderRangeValue");
|
|
41
|
+
const useTranslation_1 = require("../l10n/useTranslation");
|
|
42
42
|
/**
|
|
43
43
|
* Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
|
|
44
44
|
* @beta
|
|
@@ -86,7 +86,7 @@ class PropertyFilterBuilderActions {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
/** Removes item specified by path. */
|
|
89
|
-
removeItem(path) {
|
|
89
|
+
removeItem(path, allowLastRuleDelete = false) {
|
|
90
90
|
function removeItemFromGroup(state, pathToItem) {
|
|
91
91
|
const pathToParent = pathToItem.slice(0, -1);
|
|
92
92
|
const parentGroup = findRuleGroup(state.rootGroup, pathToParent);
|
|
@@ -98,7 +98,7 @@ class PropertyFilterBuilderActions {
|
|
|
98
98
|
if (itemIndex === -1) {
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
|
-
if (parentGroup.items.length === 1) {
|
|
101
|
+
if (parentGroup.items.length === 1 && !allowLastRuleDelete) {
|
|
102
102
|
parentGroup.items[0] = createEmptyRule(parentGroup.id);
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
@@ -199,40 +199,63 @@ function usePropertyFilterBuilder(props) {
|
|
|
199
199
|
? convertFilterToState(initialFilter)
|
|
200
200
|
: { rootGroup: createEmptyRuleGroup() });
|
|
201
201
|
const [actions] = React.useState(() => new PropertyFilterBuilderActions(setState));
|
|
202
|
+
const validateRules = useRulesValidation(ruleValidator);
|
|
202
203
|
const buildFilter = React.useCallback((options) => {
|
|
203
|
-
const ruleErrors = validateRules(state.rootGroup
|
|
204
|
+
const ruleErrors = validateRules(state.rootGroup);
|
|
204
205
|
if (!options?.ignoreErrors) {
|
|
205
206
|
actions.setRuleErrorMessages(ruleErrors);
|
|
206
207
|
}
|
|
207
208
|
return ruleErrors.size === 0
|
|
208
209
|
? buildPropertyFilter(state.rootGroup)
|
|
209
210
|
: undefined;
|
|
210
|
-
}, [state.rootGroup, actions,
|
|
211
|
+
}, [state.rootGroup, actions, validateRules]);
|
|
211
212
|
return { rootGroup: state.rootGroup, actions, buildFilter };
|
|
212
213
|
}
|
|
213
214
|
exports.usePropertyFilterBuilder = usePropertyFilterBuilder;
|
|
214
|
-
function
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
215
|
+
function useRulesValidation(ruleValidator) {
|
|
216
|
+
const defaultValidator = useDefaultPropertyFilterBuilderRuleValidator();
|
|
217
|
+
const { translate } = (0, useTranslation_1.useTranslation)();
|
|
218
|
+
return React.useCallback((rootRule) => {
|
|
219
|
+
const ruleIdsAndErrorMessages = new Map();
|
|
220
|
+
const validateRulesInner = (item) => {
|
|
221
|
+
if (isPropertyFilterBuilderRuleGroup(item)) {
|
|
222
|
+
item.items.forEach((itm) => {
|
|
223
|
+
validateRulesInner(itm);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const errorMessage = ruleValidator
|
|
228
|
+
? ruleValidator(item)
|
|
229
|
+
: defaultValidator(item);
|
|
230
|
+
if (errorMessage)
|
|
231
|
+
ruleIdsAndErrorMessages.set(item.id,
|
|
232
|
+
// need to check if error message is a key for translation in case `ruleValidator` is using `defaultPropertyFilterBuilderRuleValidator` internally
|
|
233
|
+
errorMessage.startsWith("filterBuilder.errorMessages")
|
|
234
|
+
? translate(errorMessage)
|
|
235
|
+
: errorMessage);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
validateRulesInner(rootRule);
|
|
239
|
+
return ruleIdsAndErrorMessages;
|
|
240
|
+
}, [ruleValidator, defaultValidator, translate]);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Creates default rule validator.
|
|
244
|
+
* @beta
|
|
245
|
+
*/
|
|
246
|
+
function useDefaultPropertyFilterBuilderRuleValidator() {
|
|
247
|
+
const { translate } = (0, useTranslation_1.useTranslation)();
|
|
248
|
+
return React.useCallback((item) => {
|
|
249
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
250
|
+
const errorMessage = defaultPropertyFilterBuilderRuleValidator(item);
|
|
251
|
+
return errorMessage ? translate(errorMessage) : undefined;
|
|
252
|
+
}, [translate]);
|
|
232
253
|
}
|
|
254
|
+
exports.useDefaultPropertyFilterBuilderRuleValidator = useDefaultPropertyFilterBuilderRuleValidator;
|
|
233
255
|
/**
|
|
234
256
|
* Default rule validator.
|
|
235
257
|
* @beta
|
|
258
|
+
* @deprecated in 4.17.0. Use `useDefaultPropertyFilterBuilderRuleValidator` instead.
|
|
236
259
|
*/
|
|
237
260
|
function defaultPropertyFilterBuilderRuleValidator(item) {
|
|
238
261
|
if (item.property === undefined ||
|
|
@@ -244,7 +267,7 @@ function defaultPropertyFilterBuilderRuleValidator(item) {
|
|
|
244
267
|
return rangeRuleValidator(item.value);
|
|
245
268
|
}
|
|
246
269
|
if (isEmptyValue(item.value)) {
|
|
247
|
-
return
|
|
270
|
+
return "filterBuilder.errorMessages.emptyValue";
|
|
248
271
|
}
|
|
249
272
|
return undefined;
|
|
250
273
|
}
|
|
@@ -252,10 +275,10 @@ exports.defaultPropertyFilterBuilderRuleValidator = defaultPropertyFilterBuilder
|
|
|
252
275
|
function rangeRuleValidator(value) {
|
|
253
276
|
const range = FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.parse(value);
|
|
254
277
|
if (isEmptyValue(range.from) || isEmptyValue(range.to)) {
|
|
255
|
-
return
|
|
278
|
+
return "filterBuilder.errorMessages.emptyValue";
|
|
256
279
|
}
|
|
257
280
|
if (!FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {
|
|
258
|
-
return
|
|
281
|
+
return "filterBuilder.errorMessages.invalidRange";
|
|
259
282
|
}
|
|
260
283
|
return undefined;
|
|
261
284
|
}
|