@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.
Files changed (150) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/lib/cjs/components-react/common/HighlightedText.d.ts +1 -0
  3. package/lib/cjs/components-react/common/HighlightedText.d.ts.map +1 -1
  4. package/lib/cjs/components-react/common/HighlightedText.js +1 -0
  5. package/lib/cjs/components-react/common/HighlightedText.js.map +1 -1
  6. package/lib/cjs/components-react/datepicker/DatePicker.scss +1 -0
  7. package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -0
  8. package/lib/cjs/components-react/editors/EditorContainer.d.ts.map +1 -1
  9. package/lib/cjs/components-react/editors/EditorContainer.js +1 -0
  10. package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
  11. package/lib/cjs/components-react/editors/PopupButton.d.ts +1 -0
  12. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  13. package/lib/cjs/components-react/editors/PopupButton.js +1 -0
  14. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  15. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +1 -0
  16. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  17. package/lib/cjs/components-react/favorite/FavoritePropertyList.js +1 -0
  18. package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
  19. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +2 -0
  20. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  21. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +2 -2
  22. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  23. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
  24. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  25. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +3 -3
  26. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  27. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +7 -21
  28. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
  29. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  30. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +5 -6
  31. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  32. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +7 -6
  33. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
  34. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  35. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +37 -34
  36. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  37. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
  38. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  39. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +50 -27
  40. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  41. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -1
  42. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +2 -2
  43. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -1
  44. package/lib/cjs/components-react/inputs/ParsedInput.d.ts +1 -0
  45. package/lib/cjs/components-react/inputs/ParsedInput.d.ts.map +1 -1
  46. package/lib/cjs/components-react/inputs/ParsedInput.js +1 -0
  47. package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
  48. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -0
  49. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  50. package/lib/cjs/components-react/properties/LinkHandler.js +1 -0
  51. package/lib/cjs/components-react/properties/LinkHandler.js.map +1 -1
  52. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
  53. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
  54. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js +47 -60
  55. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  56. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
  57. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
  58. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +30 -2
  59. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  60. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
  61. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  62. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
  63. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  64. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -0
  65. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  66. package/lib/cjs/components-react/selectable-content/SelectableContent.js +4 -1
  67. package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
  68. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
  69. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  70. package/lib/cjs/components-react/tree/controlled/component/NodeContent.js +1 -0
  71. package/lib/cjs/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  72. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
  73. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  74. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
  75. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  76. package/lib/esm/components-react/common/HighlightedText.d.ts +1 -0
  77. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  78. package/lib/esm/components-react/common/HighlightedText.js +1 -0
  79. package/lib/esm/components-react/common/HighlightedText.js.map +1 -1
  80. package/lib/esm/components-react/datepicker/DatePicker.scss +1 -0
  81. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -0
  82. package/lib/esm/components-react/editors/EditorContainer.d.ts.map +1 -1
  83. package/lib/esm/components-react/editors/EditorContainer.js +1 -0
  84. package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
  85. package/lib/esm/components-react/editors/PopupButton.d.ts +1 -0
  86. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  87. package/lib/esm/components-react/editors/PopupButton.js +1 -0
  88. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  89. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +1 -0
  90. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  91. package/lib/esm/components-react/favorite/FavoritePropertyList.js +1 -0
  92. package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
  93. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +2 -0
  94. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  95. package/lib/esm/components-react/filter-builder/FilterBuilder.js +2 -2
  96. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  97. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
  98. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  99. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +3 -3
  100. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  101. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +7 -21
  102. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
  103. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  104. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +5 -6
  105. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  106. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +7 -6
  107. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
  108. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  109. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +36 -32
  110. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  111. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
  112. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  113. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +48 -26
  114. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  115. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -1
  116. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +2 -2
  117. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -1
  118. package/lib/esm/components-react/inputs/ParsedInput.d.ts +1 -0
  119. package/lib/esm/components-react/inputs/ParsedInput.d.ts.map +1 -1
  120. package/lib/esm/components-react/inputs/ParsedInput.js +1 -0
  121. package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
  122. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -0
  123. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  124. package/lib/esm/components-react/properties/LinkHandler.js +1 -0
  125. package/lib/esm/components-react/properties/LinkHandler.js.map +1 -1
  126. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
  127. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
  128. package/lib/esm/components-react/properties/renderers/PropertyRenderer.js +47 -60
  129. package/lib/esm/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  130. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
  131. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
  132. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +7 -2
  133. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  134. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
  135. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  136. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
  137. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  138. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -0
  139. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  140. package/lib/esm/components-react/selectable-content/SelectableContent.js +4 -1
  141. package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
  142. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
  143. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  144. package/lib/esm/components-react/tree/controlled/component/NodeContent.js +1 -0
  145. package/lib/esm/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  146. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
  147. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  148. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
  149. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  150. 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
- showOperator ? (React.createElement(PropertyFilterBuilderRuleGroupOperator, { operator: group.operator, onChange: onOperatorChange, isGroupOperatorDisabled: isGroupOperatorDisabled })) : null,
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":"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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}\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 } = 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 const showOperator = group.items.length > 1;\n\n return (\n <Flex\n ref={groupRef}\n style={{ alignSelf: \"flex-start\" }}\n className=\"fb-group\"\n gap=\"0px\"\n >\n {showOperator ? (\n <PropertyFilterBuilderRuleGroupOperator\n operator={group.operator}\n onChange={onOperatorChange}\n isGroupOperatorDisabled={isGroupOperatorDisabled}\n />\n ) : null}\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 />\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}\n\nconst PropertyFilterBuilderGroupOrRule = React.memo(\n function PropertyFilterBuilderGroupOrRule({\n path,\n item,\n onRuleAdded,\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 />\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"]}
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;AAiBtF;;;GAGG;AACH,SAAgB,sCAAsC,CACpD,KAAkD;IAElD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,mDAA4B,CAAC,CAAC;IACnE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3E,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACxC,CAAC,QAA8C,EAAE,EAAE;QACjD,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC,EACD,CAAC,IAAI,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,OAAO,CACL,oBAAC,oBAAI,IACH,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAClC,SAAS,EAAC,UAAU,EACpB,GAAG,EAAC,KAAK;QAET,oBAAC,sCAAsC,IACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,uBAAuB,EAAE,uBAAuB,GAChD;QACF,6BAAK,SAAS,EAAC,YAAY,IACxB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,6BAAK,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE;YAClC,oBAAC,gCAAgC,IAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,GACxC,CACE,CACP,CAAC,CACE,CACD,CACR,CAAC;AACJ,CAAC;AAxCD,wFAwCC;AAeD;;;GAGG;AACH,SAAgB,sCAAsC,CACpD,KAAkD;IAElD,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE9D,OAAO,CACL,oBAAC,oBAAI,CAAC,IAAI,IAAC,SAAS,EAAC,SAAS;QAC5B,oBAAC,mEAAoC,IACnC,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,QAAQ,EAC1B,UAAU,EAAE,uBAAuB,GACnC,CACQ,CACb,CAAC;AACJ,CAAC;AAfD,wFAeC;AAQD,MAAM,gCAAgC,GAAG,KAAK,CAAC,IAAI,CACjD,SAAS,gCAAgC,CAAC,EACxC,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,mBAAmB,GACmB;IACtC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAA,qDAAgC,EAAC,IAAI,CAAC;QACxC,OAAO,CACL,oBAAC,sCAAsC,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAI,CACxE,CAAC;IACJ,OAAO,CACL,oBAAC,qDAAiC,IAChC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,GACxC,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,uBAA+B,EAAE,EAAE;IAC/D,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAAS,CAAC,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAU,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IACE,cAAc,CAAC,OAAO;YACtB,wBAAwB,CAAC,OAAO,GAAG,uBAAuB;YAC1D,QAAQ,CAAC,OAAO,EAChB,CAAC;YACD,MAAM,cAAc,GAClB,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAC/B,yBAAyB,CAC1B,CAAC;YACJ,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAClD,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,CAAC;QACD,wBAAwB,CAAC,OAAO,GAAG,uBAAuB,CAAC;IAC7D,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9B,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC1E,CAAC,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 \"./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: 110px;
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-style: solid;
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;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,iCAAiC,UA8B5C"}
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.getPropertyFilterBuilderOperatorLabel = exports.PropertyFilterBuilderRuleOperatorRenderer = void 0;
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 UiComponents_1 = require("../UiComponents");
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: getPropertyFilterBuilderOperatorLabel(op),
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 getPropertyFilterBuilderOperatorLabel(operator) {
62
- switch (operator) {
63
- case "is-true":
64
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.isTrue");
65
- case "is-false":
66
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.isFalse");
67
- case "is-equal":
68
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.equal");
69
- case "is-not-equal":
70
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.notEqual");
71
- case "greater":
72
- return ">";
73
- case "greater-or-equal":
74
- return ">=";
75
- case "less":
76
- return "<";
77
- case "less-or-equal":
78
- return "<=";
79
- case "like":
80
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.contains");
81
- case "is-null":
82
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.isNull");
83
- case "is-not-null":
84
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.isNotNull");
85
- case "between":
86
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.between");
87
- case "not-between":
88
- return UiComponents_1.UiComponents.translate("filterBuilder.operators.notBetween");
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,kDAA+C;AAe/C;;;GAGG;AACH,SAAgB,yCAAyC,CACvD,KAA6C;IAE7C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE/C,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,qCAAqC,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC,EACL,CAAC,kBAAkB,CAAC,CACrB,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,SAAgB,qCAAqC,CACnD,QAA2C;IAE3C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,2BAAY,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAClE,KAAK,UAAU;YACb,OAAO,2BAAY,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACnE,KAAK,UAAU;YACb,OAAO,2BAAY,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACjE,KAAK,cAAc;YACjB,OAAO,2BAAY,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QACpE,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,2BAAY,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QACpE,KAAK,SAAS;YACZ,OAAO,2BAAY,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAClE,KAAK,aAAa;YAChB,OAAO,2BAAY,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACrE,KAAK,SAAS;YACZ,OAAO,2BAAY,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACnE,KAAK,aAAa;YAChB,OAAO,2BAAY,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AA/BD,sFA+BC","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 { UiComponents } from \"../UiComponents\";\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\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: getPropertyFilterBuilderOperatorLabel(op),\n })),\n [availableOperators]\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 */\nexport function getPropertyFilterBuilderOperatorLabel(\n operator: PropertyFilterBuilderRuleOperator\n) {\n switch (operator) {\n case \"is-true\":\n return UiComponents.translate(\"filterBuilder.operators.isTrue\");\n case \"is-false\":\n return UiComponents.translate(\"filterBuilder.operators.isFalse\");\n case \"is-equal\":\n return UiComponents.translate(\"filterBuilder.operators.equal\");\n case \"is-not-equal\":\n return UiComponents.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 UiComponents.translate(\"filterBuilder.operators.contains\");\n case \"is-null\":\n return UiComponents.translate(\"filterBuilder.operators.isNull\");\n case \"is-not-null\":\n return UiComponents.translate(\"filterBuilder.operators.isNotNull\");\n case \"between\":\n return UiComponents.translate(\"filterBuilder.operators.between\");\n case \"not-between\":\n return UiComponents.translate(\"filterBuilder.operators.notBetween\");\n }\n}\n"]}
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":"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"}
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, ruleValidator);
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, ruleValidator]);
211
+ }, [state.rootGroup, actions, validateRules]);
211
212
  return { rootGroup: state.rootGroup, actions, buildFilter };
212
213
  }
213
214
  exports.usePropertyFilterBuilder = usePropertyFilterBuilder;
214
- function validateRules(rule, ruleValidator) {
215
- const ruleIdsAndErrorMessages = new Map();
216
- const validateRulesInner = (item) => {
217
- if (isPropertyFilterBuilderRuleGroup(item)) {
218
- item.items.forEach((itm) => {
219
- validateRulesInner(itm);
220
- });
221
- }
222
- else {
223
- const errorMessage = ruleValidator
224
- ? ruleValidator(item)
225
- : defaultPropertyFilterBuilderRuleValidator(item);
226
- if (errorMessage)
227
- ruleIdsAndErrorMessages.set(item.id, errorMessage);
228
- }
229
- };
230
- validateRulesInner(rule);
231
- return ruleIdsAndErrorMessages;
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 UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
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 UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
278
+ return "filterBuilder.errorMessages.emptyValue";
256
279
  }
257
280
  if (!FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {
258
- return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.invalidRange");
281
+ return "filterBuilder.errorMessages.invalidRange";
259
282
  }
260
283
  return undefined;
261
284
  }