@itwin/components-react 4.16.4 → 4.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +14 -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/editors/EditorContainer.d.ts +1 -0
  7. package/lib/cjs/components-react/editors/EditorContainer.d.ts.map +1 -1
  8. package/lib/cjs/components-react/editors/EditorContainer.js +1 -0
  9. package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
  10. package/lib/cjs/components-react/editors/PopupButton.d.ts +1 -0
  11. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  12. package/lib/cjs/components-react/editors/PopupButton.js +1 -0
  13. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  14. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +1 -0
  15. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  16. package/lib/cjs/components-react/favorite/FavoritePropertyList.js +1 -0
  17. package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
  18. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +2 -0
  19. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  20. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +2 -2
  21. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  22. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
  23. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  24. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +2 -2
  25. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  26. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
  27. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  28. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +4 -4
  29. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  30. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
  31. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  32. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +37 -34
  33. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  34. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
  35. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  36. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +50 -27
  37. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  38. package/lib/cjs/components-react/inputs/ParsedInput.d.ts +1 -0
  39. package/lib/cjs/components-react/inputs/ParsedInput.d.ts.map +1 -1
  40. package/lib/cjs/components-react/inputs/ParsedInput.js +1 -0
  41. package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
  42. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -0
  43. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  44. package/lib/cjs/components-react/properties/LinkHandler.js +1 -0
  45. package/lib/cjs/components-react/properties/LinkHandler.js.map +1 -1
  46. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
  47. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
  48. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js +47 -60
  49. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  50. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
  51. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
  52. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +30 -2
  53. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  54. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
  55. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  56. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
  57. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  58. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -0
  59. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  60. package/lib/cjs/components-react/selectable-content/SelectableContent.js +4 -1
  61. package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
  62. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
  63. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  64. package/lib/cjs/components-react/tree/controlled/component/NodeContent.js +1 -0
  65. package/lib/cjs/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  66. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
  67. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  68. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
  69. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  70. package/lib/esm/components-react/common/HighlightedText.d.ts +1 -0
  71. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  72. package/lib/esm/components-react/common/HighlightedText.js +1 -0
  73. package/lib/esm/components-react/common/HighlightedText.js.map +1 -1
  74. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -0
  75. package/lib/esm/components-react/editors/EditorContainer.d.ts.map +1 -1
  76. package/lib/esm/components-react/editors/EditorContainer.js +1 -0
  77. package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
  78. package/lib/esm/components-react/editors/PopupButton.d.ts +1 -0
  79. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  80. package/lib/esm/components-react/editors/PopupButton.js +1 -0
  81. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  82. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +1 -0
  83. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  84. package/lib/esm/components-react/favorite/FavoritePropertyList.js +1 -0
  85. package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
  86. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +2 -0
  87. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  88. package/lib/esm/components-react/filter-builder/FilterBuilder.js +2 -2
  89. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  90. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +2 -0
  91. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  92. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +2 -2
  93. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  94. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +2 -0
  95. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  96. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +4 -4
  97. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  98. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +0 -5
  99. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  100. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +36 -32
  101. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  102. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +7 -1
  103. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  104. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +48 -26
  105. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  106. package/lib/esm/components-react/inputs/ParsedInput.d.ts +1 -0
  107. package/lib/esm/components-react/inputs/ParsedInput.d.ts.map +1 -1
  108. package/lib/esm/components-react/inputs/ParsedInput.js +1 -0
  109. package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
  110. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -0
  111. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  112. package/lib/esm/components-react/properties/LinkHandler.js +1 -0
  113. package/lib/esm/components-react/properties/LinkHandler.js.map +1 -1
  114. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +4 -21
  115. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts.map +1 -1
  116. package/lib/esm/components-react/properties/renderers/PropertyRenderer.js +47 -60
  117. package/lib/esm/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  118. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts +2 -1
  119. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.d.ts.map +1 -1
  120. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js +7 -2
  121. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  122. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +1 -0
  123. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  124. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +3 -1
  125. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  126. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -0
  127. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  128. package/lib/esm/components-react/selectable-content/SelectableContent.js +4 -1
  129. package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
  130. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +1 -0
  131. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  132. package/lib/esm/components-react/tree/controlled/component/NodeContent.js +1 -0
  133. package/lib/esm/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  134. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -0
  135. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  136. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -0
  137. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  138. package/package.json +3 -3
@@ -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,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5C,OAAO,CACL,oBAAC,oBAAI,IACH,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAClC,SAAS,EAAC,UAAU,EACpB,GAAG,EAAC,KAAK;QAER,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,sCAAsC,IACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,uBAAuB,EAAE,uBAAuB,GAChD,CACH,CAAC,CAAC,CAAC,IAAI;QACR,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;AA5CD,wFA4CC;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 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 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"]}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderState.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"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 type { Draft } from \"immer\";\nimport { produce } from \"immer\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport type {\n PropertyFilterBuilderRuleOperator,\n PropertyFilterRuleGroupOperator,\n} from \"./Operators\";\nimport {\n isUnaryPropertyFilterBuilderOperator,\n isUnaryPropertyFilterOperator,\n} from \"./Operators\";\nimport type {\n PropertyFilter,\n PropertyFilterRule,\n PropertyFilterRuleGroup,\n} from \"./Types\";\nimport { isPropertyFilterRuleGroup } from \"./Types\";\nimport { UiComponents } from \"../UiComponents\";\nimport { PropertyFilterBuilderRuleRangeValue } from \"./FilterBuilderRangeValue\";\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport interface PropertyFilterBuilderState {\n /** Root group of rules in [[PropertyFilterBuilder]] component. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n}\n\n/**\n * Type that describes [[PropertyFilterBuilder]] component group item.\n * @beta\n */\nexport type PropertyFilterBuilderRuleGroupItem =\n | PropertyFilterBuilderRuleGroup\n | PropertyFilterBuilderRule;\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component rule group.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleGroup {\n /** Id of this rule group. */\n id: string;\n /** Id of rule group that this group is nested in. */\n groupId?: string;\n /** Operator that should join items in this group. */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Items in this group. */\n items: PropertyFilterBuilderRuleGroupItem[];\n}\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component single rule.\n * @beta\n */\nexport interface PropertyFilterBuilderRule {\n /** Id of this rule. */\n id: string;\n /** Id of rule group that this rule is nested in. */\n groupId: string;\n /** Property used in this rule. */\n property?: PropertyDescription;\n /** Operator that should be used to compare property value. */\n operator?: PropertyFilterBuilderRuleOperator;\n /** Value that property should be compared to. */\n value?: PropertyValue;\n /** Error message of this rule. */\n errorMessage?: string;\n}\n\n/**\n * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].\n * @beta\n */\nexport function isPropertyFilterBuilderRuleGroup(\n item: PropertyFilterBuilderRuleGroupItem\n): item is PropertyFilterBuilderRuleGroup {\n return (item as any).items !== undefined;\n}\n\n/**\n * Actions for controlling [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport class PropertyFilterBuilderActions {\n constructor(\n private setState: (\n setter: (\n prevState: PropertyFilterBuilderState\n ) => PropertyFilterBuilderState\n ) => void\n ) {}\n\n private updateState(\n updater: (state: Draft<PropertyFilterBuilderState>) => void\n ) {\n this.setState(produce(updater));\n }\n\n /** Adds new rule or group of rules to the group specified by path. */\n public addItem(\n path: string[],\n item: \"RULE_GROUP\" | \"RULE\" | PropertyFilterRule | PropertyFilterRuleGroup\n ) {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n\n if (item === \"RULE\" || item === \"RULE_GROUP\") {\n const newItem =\n item === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(newItem);\n return;\n }\n\n if (isPropertyFilterRuleGroup(item)) {\n const itemId = Guid.createValue();\n const newItem: PropertyFilterBuilderRuleGroup = {\n id: itemId,\n groupId: parentGroup.id,\n operator: item.operator,\n\n items: item.rules.map((rule) => getRuleGroupItem(rule, itemId)),\n };\n parentGroup.items.push(newItem);\n return;\n }\n\n parentGroup.items.push(getRuleItem(item, parentGroup.id));\n });\n }\n\n /** Removes item specified by path. */\n public removeItem(path: string[]) {\n function removeItemFromGroup(\n state: Draft<PropertyFilterBuilderState>,\n pathToItem: string[]\n ) {\n const pathToParent = pathToItem.slice(0, -1);\n const parentGroup = findRuleGroup(state.rootGroup, pathToParent);\n if (!parentGroup) {\n return;\n }\n\n const itemId = pathToItem[pathToItem.length - 1];\n const itemIndex = parentGroup.items.findIndex(\n (item) => item.id === itemId\n );\n if (itemIndex === -1) {\n return;\n }\n if (parentGroup.items.length === 1) {\n parentGroup.items[0] = createEmptyRule(parentGroup.id);\n return;\n }\n parentGroup.items.splice(itemIndex, 1);\n }\n\n this.updateState((state) => {\n removeItemFromGroup(state, path);\n });\n }\n\n /** Removes all items from root group. */\n public removeAllItems() {\n this.updateState((state) => {\n state.rootGroup = createEmptyRuleGroup();\n });\n }\n\n /** Sets operator of rule group specified by the path. */\n public setRuleGroupOperator(\n path: string[],\n operator: `${PropertyFilterRuleGroupOperator}`\n ) {\n this.updateState((state) => {\n const group = findRuleGroup(state.rootGroup, path);\n if (!group) {\n return;\n }\n group.operator = operator;\n });\n }\n\n /** Sets property of rule specified by the path. */\n public setRuleProperty(path: string[], property?: PropertyDescription) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n rule.property = property;\n rule.operator = undefined;\n rule.value = undefined;\n rule.errorMessage = undefined;\n });\n }\n\n /** Sets operator of rule specified by the path. */\n public setRuleOperator(\n path: string[],\n operator: PropertyFilterBuilderRuleOperator\n ) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n if (isUnaryPropertyFilterBuilderOperator(operator)) {\n rule.value = undefined;\n }\n if (\n operator !== rule.operator &&\n !areOperatorsSimilar(operator, rule.operator)\n ) {\n rule.value = undefined;\n }\n rule.operator = operator;\n });\n }\n\n /** Sets value of rule specified by the path. */\n public setRuleValue(path: string[], value: PropertyValue) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n rule.value = value;\n });\n }\n\n /**\n * Sets error messages of the rules specified by id.\n * If rule id is not present in the map, then its error message will be cleared.\n */\n public setRuleErrorMessages(ruleIdsAndErrorMessages: Map<string, string>) {\n this.updateState((state) => {\n const setErrorMessages = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n setErrorMessages(itm);\n });\n } else {\n item.errorMessage = ruleIdsAndErrorMessages.get(item.id);\n }\n };\n\n setErrorMessages(state.rootGroup);\n });\n }\n}\n\n/**\n * Props for [[usePropertyFilterBuilder]]\n * @beta\n */\nexport interface UsePropertyFilterBuilderProps {\n /** Initial filter for [[PropertyFilterBuilder]] */\n initialFilter?: PropertyFilter;\n /** Custom rule validator to be used when [[UsePropertyFilterBuilderResult.buildFilter]] is invoked. Should return error message or `undefined`, if rule is valid. */\n ruleValidator?: (rule: PropertyFilterBuilderRule) => string | undefined;\n}\n\n/**\n * Options for [[UsePropertyFilterBuilderResult.buildFilter]].\n * @beta\n */\nexport interface BuildFilterOptions {\n /**\n * Specifies whether errors encountered while validating filter rules should be ignored and not persisted in state.\n * This is useful in case component needs to get filter matching rule validator but does not want to show errors in UI.\n */\n ignoreErrors?: boolean;\n}\n\n/**\n * Type for [[usePropertyFilterBuilder]] return object.\n * @beta\n */\nexport interface UsePropertyFilterBuilderResult {\n /** Root group of the [[PropertyFilterBuilder]]. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n /** Actions for manipulating [[PropertyFilterBuilder]] state. */\n actions: PropertyFilterBuilderActions;\n /**\n * Validates and builds [[PropertyFilter]] based on current state. It uses [[defaultPropertyFilterBuilderRuleValidator]] or\n * custom validator provided through [[UsePropertyFilterBuilderProps]] to validate each rule.\n * @returns [[PropertyFilter]] if all rules are valid, `undefined` otherwise.\n */\n buildFilter: (options?: BuildFilterOptions) => PropertyFilter | undefined;\n}\n\n/**\n * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes\n * state from supplied initial filter.\n * @beta\n */\nexport function usePropertyFilterBuilder(\n props?: UsePropertyFilterBuilderProps\n): UsePropertyFilterBuilderResult {\n const { initialFilter, ruleValidator } = props ?? {\n initialFilter: undefined,\n ruleValidator: undefined,\n };\n const [state, setState] = React.useState<PropertyFilterBuilderState>(\n initialFilter\n ? convertFilterToState(initialFilter)\n : { rootGroup: createEmptyRuleGroup() }\n );\n\n const [actions] = React.useState(\n () => new PropertyFilterBuilderActions(setState)\n );\n\n const buildFilter = React.useCallback(\n (options?: BuildFilterOptions) => {\n const ruleErrors = validateRules(state.rootGroup, ruleValidator);\n if (!options?.ignoreErrors) {\n actions.setRuleErrorMessages(ruleErrors);\n }\n\n return ruleErrors.size === 0\n ? buildPropertyFilter(state.rootGroup)\n : undefined;\n },\n [state.rootGroup, actions, ruleValidator]\n );\n return { rootGroup: state.rootGroup, actions, buildFilter };\n}\n\nfunction validateRules(\n rule: PropertyFilterBuilderRuleGroupItem,\n ruleValidator?: (item: PropertyFilterBuilderRule) => string | undefined\n) {\n const ruleIdsAndErrorMessages = new Map<string, string>();\n\n const validateRulesInner = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n validateRulesInner(itm);\n });\n } else {\n const errorMessage = ruleValidator\n ? ruleValidator(item)\n : defaultPropertyFilterBuilderRuleValidator(item);\n if (errorMessage) ruleIdsAndErrorMessages.set(item.id, errorMessage);\n }\n };\n\n validateRulesInner(rule);\n\n return ruleIdsAndErrorMessages;\n}\n\n/**\n * Default rule validator.\n * @beta\n */\nexport function defaultPropertyFilterBuilderRuleValidator(\n item: PropertyFilterBuilderRule\n): string | undefined {\n if (\n item.property === undefined ||\n item.operator === undefined ||\n isUnaryPropertyFilterBuilderOperator(item.operator)\n ) {\n return undefined;\n }\n if (item.operator === \"between\" || item.operator === \"not-between\") {\n return rangeRuleValidator(item.value);\n }\n if (isEmptyValue(item.value)) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\n }\n return undefined;\n}\n\nfunction rangeRuleValidator(value?: PropertyValue) {\n const range = PropertyFilterBuilderRuleRangeValue.parse(value);\n if (isEmptyValue(range.from) || isEmptyValue(range.to)) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\n }\n if (!PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {\n return UiComponents.translate(\"filterBuilder.errorMessages.invalidRange\");\n }\n return undefined;\n}\n\n/** @internal */\nexport function buildPropertyFilter(\n groupItem: PropertyFilterBuilderRuleGroupItem\n): PropertyFilter | undefined {\n if (isPropertyFilterBuilderRuleGroup(groupItem))\n return buildPropertyFilterFromRuleGroup(groupItem);\n return buildPropertyFilterFromRule(groupItem);\n}\n\nfunction buildPropertyFilterFromRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup\n): PropertyFilter | undefined {\n const rules = new Array<PropertyFilter>();\n for (const item of rootGroup.items) {\n const rule = buildPropertyFilter(item);\n if (rule) rules.push(rule);\n }\n\n if (rules.length === 0) return undefined;\n\n if (rules.length === 1 && !isPropertyFilterRuleGroup(rules[0])) {\n return rules[0];\n }\n\n return {\n operator: rootGroup.operator,\n rules,\n };\n}\n\nfunction buildPropertyFilterFromRule(\n rule: PropertyFilterBuilderRule\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (!property || operator === undefined) {\n return undefined;\n }\n\n if (operator === \"between\" || operator === \"not-between\") {\n return buildPropertyFilterFromRangeRule({\n ...rule,\n property,\n operator,\n value,\n });\n }\n\n if (!isUnaryPropertyFilterOperator(operator) && isEmptyValue(value)) {\n return undefined;\n }\n\n return { property, operator, value };\n}\n\nfunction buildPropertyFilterFromRangeRule(\n rule: PropertyFilterBuilderRule & {\n property: PropertyDescription;\n operator: \"between\" | \"not-between\";\n }\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (\n !value ||\n value.valueFormat !== PropertyValueFormat.Primitive ||\n typeof value.value !== \"string\"\n ) {\n return undefined;\n }\n\n const { to, from } = PropertyFilterBuilderRuleRangeValue.parse(value);\n if (isEmptyValue(to) || isEmptyValue(from)) {\n return undefined;\n }\n\n return {\n operator: operator === \"between\" ? \"and\" : \"or\",\n rules: [\n {\n property,\n operator: operator === \"between\" ? \"greater-or-equal\" : \"less\",\n value: from,\n },\n {\n property,\n operator: operator === \"between\" ? \"less-or-equal\" : \"greater\",\n value: to,\n },\n ],\n };\n}\n\nfunction createEmptyRule(groupId: string): PropertyFilterBuilderRule {\n return {\n id: Guid.createValue(),\n groupId,\n };\n}\n\nfunction createEmptyRuleGroup(\n groupId?: string\n): PropertyFilterBuilderRuleGroup {\n const id = Guid.createValue();\n return {\n id,\n groupId,\n operator: \"and\",\n items: [createEmptyRule(id)],\n };\n}\n\nfunction findRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRuleGroup | undefined {\n if (path.length === 0) return rootGroup;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))\n return undefined;\n\n return findRuleGroup(currentItem, rest);\n}\n\nfunction findRule(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRule | undefined {\n if (path.length === 0) return undefined;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem) return undefined;\n\n if (isPropertyFilterBuilderRuleGroup(currentItem))\n return findRule(currentItem, rest);\n\n return currentItem;\n}\nfunction getRuleGroupItem(\n filter: PropertyFilter,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n const rangeRule = getRangeRuleItems(filter, parentId);\n\n return rangeRule\n ? rangeRule\n : {\n id,\n groupId: parentId,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n };\n }\n return getRuleItem(filter, id);\n}\n\nfunction getRuleItem(filter: PropertyFilterRule, parentId: string) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n property: filter.property,\n operator: filter.operator,\n value: filter.value,\n };\n}\n\nfunction getRangeRuleItems(\n group: PropertyFilterRuleGroup,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem | undefined {\n if (group.rules.length !== 2) {\n return undefined;\n }\n\n const [from, to] = group.rules;\n if (\n isPropertyFilterRuleGroup(from) ||\n !from.value ||\n from.value.valueFormat !== PropertyValueFormat.Primitive ||\n isPropertyFilterRuleGroup(to) ||\n !to.value ||\n to.value.valueFormat !== PropertyValueFormat.Primitive ||\n from.property.name !== to.property.name\n ) {\n return undefined;\n }\n\n if (\n from.operator === \"greater-or-equal\" &&\n to.operator === \"less-or-equal\" &&\n group.operator === \"and\"\n ) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n operator: \"between\",\n property: from.property,\n value: PropertyFilterBuilderRuleRangeValue.serialize({\n from: from.value,\n to: to.value,\n }),\n };\n }\n\n if (\n from.operator === \"less\" &&\n to.operator === \"greater\" &&\n group.operator === \"or\"\n ) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n operator: \"not-between\",\n property: from.property,\n value: PropertyFilterBuilderRuleRangeValue.serialize({\n from: from.value,\n to: to.value,\n }),\n };\n }\n\n return undefined;\n}\n\nfunction convertFilterToState(\n filter: PropertyFilter\n): PropertyFilterBuilderState {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n return {\n rootGroup: {\n id,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n },\n };\n }\n return {\n rootGroup: {\n id,\n operator: \"and\",\n items: [getRuleItem(filter, id)],\n },\n };\n}\n\nfunction isEmptyValue(value?: PropertyValue) {\n return (\n value?.valueFormat !== PropertyValueFormat.Primitive ||\n value.value === undefined ||\n value.value === \"\"\n );\n}\n\nfunction areOperatorsSimilar(\n firstOperator?: PropertyFilterBuilderRuleOperator,\n secondOperator?: PropertyFilterBuilderRuleOperator\n) {\n return (\n (isOperatorEqualOrIsNotEqual(firstOperator) &&\n isOperatorEqualOrIsNotEqual(secondOperator)) ||\n (isInequalityOperator(firstOperator) &&\n isInequalityOperator(secondOperator)) ||\n (isRangeOperator(firstOperator) && isRangeOperator(secondOperator))\n );\n}\n\nfunction isOperatorEqualOrIsNotEqual(\n operator?: PropertyFilterBuilderRuleOperator\n) {\n return operator === \"is-equal\" || operator === \"is-not-equal\";\n}\n\nfunction isInequalityOperator(operator?: PropertyFilterBuilderRuleOperator) {\n return (\n operator === \"less\" ||\n operator === \"less-or-equal\" ||\n operator === \"greater\" ||\n operator === \"greater-or-equal\"\n );\n}\n\nfunction isRangeOperator(operator?: PropertyFilterBuilderRuleOperator) {\n return operator === \"between\" || operator === \"not-between\";\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderState.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"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 type { Draft } from \"immer\";\nimport { produce } from \"immer\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport type {\n PropertyFilterBuilderRuleOperator,\n PropertyFilterRuleGroupOperator,\n} from \"./Operators\";\nimport {\n isUnaryPropertyFilterBuilderOperator,\n isUnaryPropertyFilterOperator,\n} from \"./Operators\";\nimport type {\n PropertyFilter,\n PropertyFilterRule,\n PropertyFilterRuleGroup,\n} from \"./Types\";\nimport { isPropertyFilterRuleGroup } from \"./Types\";\nimport { PropertyFilterBuilderRuleRangeValue } from \"./FilterBuilderRangeValue\";\nimport { useTranslation } from \"../l10n/useTranslation\";\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport interface PropertyFilterBuilderState {\n /** Root group of rules in [[PropertyFilterBuilder]] component. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n}\n\n/**\n * Type that describes [[PropertyFilterBuilder]] component group item.\n * @beta\n */\nexport type PropertyFilterBuilderRuleGroupItem =\n | PropertyFilterBuilderRuleGroup\n | PropertyFilterBuilderRule;\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component rule group.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleGroup {\n /** Id of this rule group. */\n id: string;\n /** Id of rule group that this group is nested in. */\n groupId?: string;\n /** Operator that should join items in this group. */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Items in this group. */\n items: PropertyFilterBuilderRuleGroupItem[];\n}\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component single rule.\n * @beta\n */\nexport interface PropertyFilterBuilderRule {\n /** Id of this rule. */\n id: string;\n /** Id of rule group that this rule is nested in. */\n groupId: string;\n /** Property used in this rule. */\n property?: PropertyDescription;\n /** Operator that should be used to compare property value. */\n operator?: PropertyFilterBuilderRuleOperator;\n /** Value that property should be compared to. */\n value?: PropertyValue;\n /** Error message of this rule. */\n errorMessage?: string;\n}\n\n/**\n * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].\n * @beta\n */\nexport function isPropertyFilterBuilderRuleGroup(\n item: PropertyFilterBuilderRuleGroupItem\n): item is PropertyFilterBuilderRuleGroup {\n return (item as any).items !== undefined;\n}\n\n/**\n * Actions for controlling [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport class PropertyFilterBuilderActions {\n constructor(\n private setState: (\n setter: (\n prevState: PropertyFilterBuilderState\n ) => PropertyFilterBuilderState\n ) => void\n ) {}\n\n private updateState(\n updater: (state: Draft<PropertyFilterBuilderState>) => void\n ) {\n this.setState(produce(updater));\n }\n\n /** Adds new rule or group of rules to the group specified by path. */\n public addItem(\n path: string[],\n item: \"RULE_GROUP\" | \"RULE\" | PropertyFilterRule | PropertyFilterRuleGroup\n ) {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n\n if (item === \"RULE\" || item === \"RULE_GROUP\") {\n const newItem =\n item === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(newItem);\n return;\n }\n\n if (isPropertyFilterRuleGroup(item)) {\n const itemId = Guid.createValue();\n const newItem: PropertyFilterBuilderRuleGroup = {\n id: itemId,\n groupId: parentGroup.id,\n operator: item.operator,\n\n items: item.rules.map((rule) => getRuleGroupItem(rule, itemId)),\n };\n parentGroup.items.push(newItem);\n return;\n }\n\n parentGroup.items.push(getRuleItem(item, parentGroup.id));\n });\n }\n\n /** Removes item specified by path. */\n public removeItem(path: string[], allowLastRuleDelete: boolean = false) {\n function removeItemFromGroup(\n state: Draft<PropertyFilterBuilderState>,\n pathToItem: string[]\n ) {\n const pathToParent = pathToItem.slice(0, -1);\n const parentGroup = findRuleGroup(state.rootGroup, pathToParent);\n if (!parentGroup) {\n return;\n }\n\n const itemId = pathToItem[pathToItem.length - 1];\n const itemIndex = parentGroup.items.findIndex(\n (item) => item.id === itemId\n );\n if (itemIndex === -1) {\n return;\n }\n if (parentGroup.items.length === 1 && !allowLastRuleDelete) {\n parentGroup.items[0] = createEmptyRule(parentGroup.id);\n return;\n }\n parentGroup.items.splice(itemIndex, 1);\n }\n\n this.updateState((state) => {\n removeItemFromGroup(state, path);\n });\n }\n\n /** Removes all items from root group. */\n public removeAllItems() {\n this.updateState((state) => {\n state.rootGroup = createEmptyRuleGroup();\n });\n }\n\n /** Sets operator of rule group specified by the path. */\n public setRuleGroupOperator(\n path: string[],\n operator: `${PropertyFilterRuleGroupOperator}`\n ) {\n this.updateState((state) => {\n const group = findRuleGroup(state.rootGroup, path);\n if (!group) {\n return;\n }\n group.operator = operator;\n });\n }\n\n /** Sets property of rule specified by the path. */\n public setRuleProperty(path: string[], property?: PropertyDescription) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n rule.property = property;\n rule.operator = undefined;\n rule.value = undefined;\n rule.errorMessage = undefined;\n });\n }\n\n /** Sets operator of rule specified by the path. */\n public setRuleOperator(\n path: string[],\n operator: PropertyFilterBuilderRuleOperator\n ) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n if (isUnaryPropertyFilterBuilderOperator(operator)) {\n rule.value = undefined;\n }\n if (\n operator !== rule.operator &&\n !areOperatorsSimilar(operator, rule.operator)\n ) {\n rule.value = undefined;\n }\n rule.operator = operator;\n });\n }\n\n /** Sets value of rule specified by the path. */\n public setRuleValue(path: string[], value: PropertyValue) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) {\n return;\n }\n rule.value = value;\n });\n }\n\n /**\n * Sets error messages of the rules specified by id.\n * If rule id is not present in the map, then its error message will be cleared.\n */\n public setRuleErrorMessages(ruleIdsAndErrorMessages: Map<string, string>) {\n this.updateState((state) => {\n const setErrorMessages = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n setErrorMessages(itm);\n });\n } else {\n item.errorMessage = ruleIdsAndErrorMessages.get(item.id);\n }\n };\n\n setErrorMessages(state.rootGroup);\n });\n }\n}\n\n/**\n * Props for [[usePropertyFilterBuilder]]\n * @beta\n */\nexport interface UsePropertyFilterBuilderProps {\n /** Initial filter for [[PropertyFilterBuilder]] */\n initialFilter?: PropertyFilter;\n /** Custom rule validator to be used when [[UsePropertyFilterBuilderResult.buildFilter]] is invoked. Should return error message or `undefined`, if rule is valid. */\n ruleValidator?: (rule: PropertyFilterBuilderRule) => string | undefined;\n}\n\n/**\n * Options for [[UsePropertyFilterBuilderResult.buildFilter]].\n * @beta\n */\nexport interface BuildFilterOptions {\n /**\n * Specifies whether errors encountered while validating filter rules should be ignored and not persisted in state.\n * This is useful in case component needs to get filter matching rule validator but does not want to show errors in UI.\n */\n ignoreErrors?: boolean;\n}\n\n/**\n * Type for [[usePropertyFilterBuilder]] return object.\n * @beta\n */\nexport interface UsePropertyFilterBuilderResult {\n /** Root group of the [[PropertyFilterBuilder]]. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n /** Actions for manipulating [[PropertyFilterBuilder]] state. */\n actions: PropertyFilterBuilderActions;\n /**\n * Validates and builds [[PropertyFilter]] based on current state. It uses [[defaultPropertyFilterBuilderRuleValidator]] or\n * custom validator provided through [[UsePropertyFilterBuilderProps]] to validate each rule.\n * @returns [[PropertyFilter]] if all rules are valid, `undefined` otherwise.\n */\n buildFilter: (options?: BuildFilterOptions) => PropertyFilter | undefined;\n}\n\n/**\n * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes\n * state from supplied initial filter.\n * @beta\n */\nexport function usePropertyFilterBuilder(\n props?: UsePropertyFilterBuilderProps\n): UsePropertyFilterBuilderResult {\n const { initialFilter, ruleValidator } = props ?? {\n initialFilter: undefined,\n ruleValidator: undefined,\n };\n const [state, setState] = React.useState<PropertyFilterBuilderState>(\n initialFilter\n ? convertFilterToState(initialFilter)\n : { rootGroup: createEmptyRuleGroup() }\n );\n\n const [actions] = React.useState(\n () => new PropertyFilterBuilderActions(setState)\n );\n\n const validateRules = useRulesValidation(ruleValidator);\n const buildFilter = React.useCallback(\n (options?: BuildFilterOptions) => {\n const ruleErrors = validateRules(state.rootGroup);\n if (!options?.ignoreErrors) {\n actions.setRuleErrorMessages(ruleErrors);\n }\n\n return ruleErrors.size === 0\n ? buildPropertyFilter(state.rootGroup)\n : undefined;\n },\n [state.rootGroup, actions, validateRules]\n );\n return { rootGroup: state.rootGroup, actions, buildFilter };\n}\n\nfunction useRulesValidation(\n ruleValidator?: (item: PropertyFilterBuilderRule) => string | undefined\n) {\n const defaultValidator = useDefaultPropertyFilterBuilderRuleValidator();\n const { translate } = useTranslation();\n return React.useCallback(\n (rootRule: PropertyFilterBuilderRuleGroupItem) => {\n const ruleIdsAndErrorMessages = new Map<string, string>();\n const validateRulesInner = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n validateRulesInner(itm);\n });\n } else {\n const errorMessage = ruleValidator\n ? ruleValidator(item)\n : defaultValidator(item);\n if (errorMessage)\n ruleIdsAndErrorMessages.set(\n item.id,\n // need to check if error message is a key for translation in case `ruleValidator` is using `defaultPropertyFilterBuilderRuleValidator` internally\n errorMessage.startsWith(\"filterBuilder.errorMessages\")\n ? translate(errorMessage)\n : errorMessage\n );\n }\n };\n validateRulesInner(rootRule);\n return ruleIdsAndErrorMessages;\n },\n [ruleValidator, defaultValidator, translate]\n );\n}\n\n/**\n * Creates default rule validator.\n * @beta\n */\nexport function useDefaultPropertyFilterBuilderRuleValidator() {\n const { translate } = useTranslation();\n return React.useCallback(\n (item: PropertyFilterBuilderRule) => {\n // eslint-disable-next-line deprecation/deprecation\n const errorMessage = defaultPropertyFilterBuilderRuleValidator(item);\n return errorMessage ? translate(errorMessage) : undefined;\n },\n [translate]\n );\n}\n\n/**\n * Default rule validator.\n * @beta\n * @deprecated in 4.17.0. Use `useDefaultPropertyFilterBuilderRuleValidator` instead.\n */\nexport function defaultPropertyFilterBuilderRuleValidator(\n item: PropertyFilterBuilderRule\n): string | undefined {\n if (\n item.property === undefined ||\n item.operator === undefined ||\n isUnaryPropertyFilterBuilderOperator(item.operator)\n ) {\n return undefined;\n }\n if (item.operator === \"between\" || item.operator === \"not-between\") {\n return rangeRuleValidator(item.value);\n }\n if (isEmptyValue(item.value)) {\n return \"filterBuilder.errorMessages.emptyValue\";\n }\n return undefined;\n}\n\nfunction rangeRuleValidator(value?: PropertyValue) {\n const range = PropertyFilterBuilderRuleRangeValue.parse(value);\n if (isEmptyValue(range.from) || isEmptyValue(range.to)) {\n return \"filterBuilder.errorMessages.emptyValue\";\n }\n if (!PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {\n return \"filterBuilder.errorMessages.invalidRange\";\n }\n return undefined;\n}\n\n/** @internal */\nexport function buildPropertyFilter(\n groupItem: PropertyFilterBuilderRuleGroupItem\n): PropertyFilter | undefined {\n if (isPropertyFilterBuilderRuleGroup(groupItem))\n return buildPropertyFilterFromRuleGroup(groupItem);\n return buildPropertyFilterFromRule(groupItem);\n}\n\nfunction buildPropertyFilterFromRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup\n): PropertyFilter | undefined {\n const rules = new Array<PropertyFilter>();\n for (const item of rootGroup.items) {\n const rule = buildPropertyFilter(item);\n if (rule) rules.push(rule);\n }\n\n if (rules.length === 0) return undefined;\n\n if (rules.length === 1 && !isPropertyFilterRuleGroup(rules[0])) {\n return rules[0];\n }\n\n return {\n operator: rootGroup.operator,\n rules,\n };\n}\n\nfunction buildPropertyFilterFromRule(\n rule: PropertyFilterBuilderRule\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (!property || operator === undefined) {\n return undefined;\n }\n\n if (operator === \"between\" || operator === \"not-between\") {\n return buildPropertyFilterFromRangeRule({\n ...rule,\n property,\n operator,\n value,\n });\n }\n\n if (!isUnaryPropertyFilterOperator(operator) && isEmptyValue(value)) {\n return undefined;\n }\n\n return { property, operator, value };\n}\n\nfunction buildPropertyFilterFromRangeRule(\n rule: PropertyFilterBuilderRule & {\n property: PropertyDescription;\n operator: \"between\" | \"not-between\";\n }\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (\n !value ||\n value.valueFormat !== PropertyValueFormat.Primitive ||\n typeof value.value !== \"string\"\n ) {\n return undefined;\n }\n\n const { to, from } = PropertyFilterBuilderRuleRangeValue.parse(value);\n if (isEmptyValue(to) || isEmptyValue(from)) {\n return undefined;\n }\n\n return {\n operator: operator === \"between\" ? \"and\" : \"or\",\n rules: [\n {\n property,\n operator: operator === \"between\" ? \"greater-or-equal\" : \"less\",\n value: from,\n },\n {\n property,\n operator: operator === \"between\" ? \"less-or-equal\" : \"greater\",\n value: to,\n },\n ],\n };\n}\n\nfunction createEmptyRule(groupId: string): PropertyFilterBuilderRule {\n return {\n id: Guid.createValue(),\n groupId,\n };\n}\n\nfunction createEmptyRuleGroup(\n groupId?: string\n): PropertyFilterBuilderRuleGroup {\n const id = Guid.createValue();\n return {\n id,\n groupId,\n operator: \"and\",\n items: [createEmptyRule(id)],\n };\n}\n\nfunction findRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRuleGroup | undefined {\n if (path.length === 0) return rootGroup;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))\n return undefined;\n\n return findRuleGroup(currentItem, rest);\n}\n\nfunction findRule(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRule | undefined {\n if (path.length === 0) return undefined;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem) return undefined;\n\n if (isPropertyFilterBuilderRuleGroup(currentItem))\n return findRule(currentItem, rest);\n\n return currentItem;\n}\nfunction getRuleGroupItem(\n filter: PropertyFilter,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n const rangeRule = getRangeRuleItems(filter, parentId);\n\n return rangeRule\n ? rangeRule\n : {\n id,\n groupId: parentId,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n };\n }\n return getRuleItem(filter, id);\n}\n\nfunction getRuleItem(filter: PropertyFilterRule, parentId: string) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n property: filter.property,\n operator: filter.operator,\n value: filter.value,\n };\n}\n\nfunction getRangeRuleItems(\n group: PropertyFilterRuleGroup,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem | undefined {\n if (group.rules.length !== 2) {\n return undefined;\n }\n\n const [from, to] = group.rules;\n if (\n isPropertyFilterRuleGroup(from) ||\n !from.value ||\n from.value.valueFormat !== PropertyValueFormat.Primitive ||\n isPropertyFilterRuleGroup(to) ||\n !to.value ||\n to.value.valueFormat !== PropertyValueFormat.Primitive ||\n from.property.name !== to.property.name\n ) {\n return undefined;\n }\n\n if (\n from.operator === \"greater-or-equal\" &&\n to.operator === \"less-or-equal\" &&\n group.operator === \"and\"\n ) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n operator: \"between\",\n property: from.property,\n value: PropertyFilterBuilderRuleRangeValue.serialize({\n from: from.value,\n to: to.value,\n }),\n };\n }\n\n if (\n from.operator === \"less\" &&\n to.operator === \"greater\" &&\n group.operator === \"or\"\n ) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n operator: \"not-between\",\n property: from.property,\n value: PropertyFilterBuilderRuleRangeValue.serialize({\n from: from.value,\n to: to.value,\n }),\n };\n }\n\n return undefined;\n}\n\nfunction convertFilterToState(\n filter: PropertyFilter\n): PropertyFilterBuilderState {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n return {\n rootGroup: {\n id,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n },\n };\n }\n return {\n rootGroup: {\n id,\n operator: \"and\",\n items: [getRuleItem(filter, id)],\n },\n };\n}\n\nfunction isEmptyValue(value?: PropertyValue) {\n return (\n value?.valueFormat !== PropertyValueFormat.Primitive ||\n value.value === undefined ||\n value.value === \"\"\n );\n}\n\nfunction areOperatorsSimilar(\n firstOperator?: PropertyFilterBuilderRuleOperator,\n secondOperator?: PropertyFilterBuilderRuleOperator\n) {\n return (\n (isOperatorEqualOrIsNotEqual(firstOperator) &&\n isOperatorEqualOrIsNotEqual(secondOperator)) ||\n (isInequalityOperator(firstOperator) &&\n isInequalityOperator(secondOperator)) ||\n (isRangeOperator(firstOperator) && isRangeOperator(secondOperator))\n );\n}\n\nfunction isOperatorEqualOrIsNotEqual(\n operator?: PropertyFilterBuilderRuleOperator\n) {\n return operator === \"is-equal\" || operator === \"is-not-equal\";\n}\n\nfunction isInequalityOperator(operator?: PropertyFilterBuilderRuleOperator) {\n return (\n operator === \"less\" ||\n operator === \"less-or-equal\" ||\n operator === \"greater\" ||\n operator === \"greater-or-equal\"\n );\n}\n\nfunction isRangeOperator(operator?: PropertyFilterBuilderRuleOperator) {\n return operator === \"between\" || operator === \"not-between\";\n}\n"]}
@@ -7,6 +7,7 @@ import type { ParseResults } from "@itwin/appui-abstract";
7
7
  import "./ParsedInput.scss";
8
8
  /** Props for [[ParsedInput]] control
9
9
  * @public
10
+ * @deprecated in 4.17.0. Use `React.ComponentProps<typeof ParsedInput>`
10
11
  */
11
12
  export interface ParsedInputProps extends CommonProps {
12
13
  /** InitialValue which is used to restore input field if ESC is pressed */
@@ -1 +1 @@
1
- {"version":3,"file":"ParsedInput.d.ts","sourceRoot":"","sources":["../../../../src/components-react/inputs/ParsedInput.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,oBAAoB,CAAC;AAE5B;;GAEG;AAEH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,qDAAqD;IACrD,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,YAAY,CAAC;IACnD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACnC;AA0HD;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,KAAK,CAAC,SACtC,CAAC"}
1
+ {"version":3,"file":"ParsedInput.d.ts","sourceRoot":"","sources":["../../../../src/components-react/inputs/ParsedInput.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,oBAAoB,CAAC;AAE5B;;;GAGG;AAEH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,qDAAqD;IACrD,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,YAAY,CAAC;IACnD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACnC;AA2HD;;GAEG;AAEH,eAAO,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,KAAK,CAAC,SACtC,CAAC"}
@@ -107,5 +107,6 @@ const ForwardRefParsedInput = React.forwardRef(function ForwardRefParsedInput({
107
107
  /** Generic Input component that requires formatting and parsing functions to be passed in as props.
108
108
  * @public
109
109
  */
110
+ // eslint-disable-next-line deprecation/deprecation
110
111
  exports.ParsedInput = ForwardRefParsedInput;
111
112
  //# sourceMappingURL=ParsedInput.js.map