@itwin/components-react 4.9.0-dev.1 → 4.10.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +1 -1
  3. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  4. package/lib/cjs/components-react/common/DelayedSpinner.js +2 -3
  5. package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
  6. package/lib/cjs/components-react/common/HighlightedText.d.ts +2 -2
  7. package/lib/cjs/components-react/common/HighlightedText.d.ts.map +1 -1
  8. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js +1 -2
  9. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  10. package/lib/cjs/components-react/converters/NumericTypeConverter.js +2 -4
  11. package/lib/cjs/components-react/converters/NumericTypeConverter.js.map +1 -1
  12. package/lib/cjs/components-react/converters/TypeConverter.js +1 -2
  13. package/lib/cjs/components-react/converters/TypeConverter.js.map +1 -1
  14. package/lib/cjs/components-react/datepicker/DateField.d.ts +2 -2
  15. package/lib/cjs/components-react/datepicker/DateField.d.ts.map +1 -1
  16. package/lib/cjs/components-react/datepicker/DatePicker.d.ts +2 -2
  17. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  18. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  19. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  20. package/lib/cjs/components-react/datepicker/TimeField.d.ts +2 -2
  21. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  22. package/lib/cjs/components-react/datepicker/TimeField.scss +1 -1
  23. package/lib/cjs/components-react/editors/BooleanEditor.d.ts +1 -1
  24. package/lib/cjs/components-react/editors/CustomNumberEditor.js +6 -8
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  26. package/lib/cjs/components-react/editors/DateTimeEditor.js +2 -3
  27. package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
  28. package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -1
  29. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  30. package/lib/cjs/components-react/editors/EnumEditor.d.ts +1 -1
  31. package/lib/cjs/components-react/editors/EnumEditor.js +1 -1
  32. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  33. package/lib/cjs/components-react/editors/IconEditor.d.ts +1 -1
  34. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  35. package/lib/cjs/components-react/editors/PopupButton.d.ts +2 -2
  36. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  37. package/lib/cjs/components-react/editors/PopupButton.js +3 -4
  38. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  39. package/lib/cjs/components-react/editors/TextEditor.js +2 -4
  40. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  41. package/lib/cjs/components-react/editors/ToggleEditor.d.ts +1 -1
  42. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  43. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  44. package/lib/cjs/components-react/favorite/FavoritePropertyList.js +3 -3
  45. package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
  46. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  47. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  48. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +3 -7
  49. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  50. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  51. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  52. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js +1 -73
  53. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  54. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  55. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  56. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js +30 -0
  57. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  58. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  59. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  60. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js +76 -0
  61. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  62. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  63. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  64. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +15 -9
  65. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  66. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  67. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  68. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  69. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +15 -40
  70. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  71. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  72. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  73. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  74. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +44 -8
  75. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  76. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  77. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  78. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +4 -4
  79. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  80. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  81. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  82. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +41 -3
  83. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  84. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  85. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  86. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +153 -46
  87. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  88. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  89. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  90. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +30 -0
  91. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  92. package/lib/cjs/components-react/filter-builder/Operators.d.ts +24 -19
  93. package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -1
  94. package/lib/cjs/components-react/filter-builder/Operators.js +40 -64
  95. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -1
  96. package/lib/cjs/components-react/filter-builder/Types.d.ts +2 -2
  97. package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -1
  98. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -1
  99. package/lib/cjs/components-react/filtering/FilteringInput.d.ts +1 -1
  100. package/lib/cjs/components-react/filtering/ResultSelector.d.ts +1 -1
  101. package/lib/cjs/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  102. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -1
  103. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  104. package/lib/cjs/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  105. package/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer.js +3 -4
  106. package/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
  107. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  108. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.js +1 -1
  109. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
  110. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  111. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.js +2 -3
  112. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
  113. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  114. package/lib/cjs/components-react/properties/renderers/PropertyView.d.ts +1 -1
  115. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  116. package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  117. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  118. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.js +4 -4
  119. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
  120. package/lib/cjs/components-react/properties/renderers/value/Common.js +1 -2
  121. package/lib/cjs/components-react/properties/renderers/value/Common.js.map +1 -1
  122. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  123. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  124. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js +3 -6
  125. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  126. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  127. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  128. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  129. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  130. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js +3 -6
  131. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
  132. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  133. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  134. package/lib/cjs/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  135. package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  136. package/lib/cjs/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  137. package/lib/cjs/components-react/propertygrid/PropertyCategoryRendererManager.js +1 -2
  138. package/lib/cjs/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
  139. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js +1 -2
  140. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  141. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  142. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  143. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  144. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js +1 -2
  145. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  146. package/lib/cjs/components-react/propertygrid/component/PropertyGridCommons.js +2 -2
  147. package/lib/cjs/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
  148. package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  149. package/lib/cjs/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  150. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  151. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js +49 -54
  152. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  153. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  154. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  155. package/lib/cjs/components-react/propertygrid/dataproviders/FilteringDataProvider.js +11 -13
  156. package/lib/cjs/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
  157. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js +2 -2
  158. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
  159. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js +1 -2
  160. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  161. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js +1 -2
  162. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
  163. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js +2 -2
  164. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
  165. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridCategory.js +2 -3
  166. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
  167. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js +1 -1
  168. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
  169. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  170. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js +1 -1
  171. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  172. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js +5 -7
  173. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
  174. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -2
  175. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  176. package/lib/cjs/components-react/selectable-content/SelectableContent.js +2 -3
  177. package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
  178. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  179. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  180. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.js +4 -6
  181. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.js.map +1 -1
  182. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts +1 -1
  183. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  184. package/lib/cjs/components-react/toolbar/Items.d.ts +1 -1
  185. package/lib/cjs/components-react/toolbar/Items.d.ts.map +1 -1
  186. package/lib/cjs/components-react/toolbar/Overflow.d.ts +1 -1
  187. package/lib/cjs/components-react/toolbar/Overflow.d.ts.map +1 -1
  188. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts +1 -1
  189. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  190. package/lib/cjs/components-react/toolbar/PopupItem.d.ts +2 -2
  191. package/lib/cjs/components-react/toolbar/PopupItem.d.ts.map +1 -1
  192. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  193. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  194. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  195. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  196. package/lib/cjs/components-react/toolbar/Toolbar.d.ts +1 -1
  197. package/lib/cjs/components-react/toolbar/Toolbar.d.ts.map +1 -1
  198. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  199. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  200. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  201. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  202. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  203. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  204. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  205. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  206. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  207. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  208. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  209. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  210. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.js +5 -6
  211. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.js.map +1 -1
  212. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  213. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  214. package/lib/cjs/components-react/tree/controlled/TreeHooks.js +22 -1
  215. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  216. package/lib/cjs/components-react/tree/controlled/TreeModel.js +7 -8
  217. package/lib/cjs/components-react/tree/controlled/TreeModel.js.map +1 -1
  218. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +6 -8
  219. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  220. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  221. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  222. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  223. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  224. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  225. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  226. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  227. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  228. package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  229. package/lib/cjs/components-react/tree/controlled/internal/SparseTree.js +1 -2
  230. package/lib/cjs/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
  231. package/lib/cjs/components-react/tree/controlled/internal/TreeSelectionManager.js +2 -4
  232. package/lib/cjs/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
  233. package/lib/cjs/components-react.d.ts +3 -0
  234. package/lib/cjs/components-react.d.ts.map +1 -1
  235. package/lib/cjs/components-react.js +3 -0
  236. package/lib/cjs/components-react.js.map +1 -1
  237. package/lib/esm/components-react/common/DelayedSpinner.d.ts +1 -1
  238. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  239. package/lib/esm/components-react/common/DelayedSpinner.js +2 -3
  240. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  241. package/lib/esm/components-react/common/HighlightedText.d.ts +2 -2
  242. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  243. package/lib/esm/components-react/common/UseDebouncedAsyncValue.js +1 -2
  244. package/lib/esm/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  245. package/lib/esm/components-react/converters/NumericTypeConverter.js +2 -4
  246. package/lib/esm/components-react/converters/NumericTypeConverter.js.map +1 -1
  247. package/lib/esm/components-react/converters/TypeConverter.js +1 -2
  248. package/lib/esm/components-react/converters/TypeConverter.js.map +1 -1
  249. package/lib/esm/components-react/datepicker/DateField.d.ts +2 -2
  250. package/lib/esm/components-react/datepicker/DateField.d.ts.map +1 -1
  251. package/lib/esm/components-react/datepicker/DatePicker.d.ts +2 -2
  252. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  253. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  254. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  255. package/lib/esm/components-react/datepicker/TimeField.d.ts +2 -2
  256. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  257. package/lib/esm/components-react/datepicker/TimeField.scss +1 -1
  258. package/lib/esm/components-react/editors/BooleanEditor.d.ts +1 -1
  259. package/lib/esm/components-react/editors/CustomNumberEditor.js +6 -8
  260. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  261. package/lib/esm/components-react/editors/DateTimeEditor.js +2 -3
  262. package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
  263. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -1
  264. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  265. package/lib/esm/components-react/editors/EnumEditor.d.ts +1 -1
  266. package/lib/esm/components-react/editors/EnumEditor.js +1 -1
  267. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  268. package/lib/esm/components-react/editors/IconEditor.d.ts +1 -1
  269. package/lib/esm/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  270. package/lib/esm/components-react/editors/PopupButton.d.ts +2 -2
  271. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  272. package/lib/esm/components-react/editors/PopupButton.js +3 -4
  273. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  274. package/lib/esm/components-react/editors/TextEditor.js +2 -4
  275. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  276. package/lib/esm/components-react/editors/ToggleEditor.d.ts +1 -1
  277. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  278. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  279. package/lib/esm/components-react/favorite/FavoritePropertyList.js +3 -3
  280. package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
  281. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  282. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  283. package/lib/esm/components-react/filter-builder/FilterBuilder.js +4 -8
  284. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  285. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  286. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  287. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js +0 -71
  288. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  289. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  290. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  291. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js +23 -0
  292. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  293. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  294. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  295. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js +73 -0
  296. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  297. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  298. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  299. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +19 -13
  300. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  301. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  302. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  303. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  304. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +17 -42
  305. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  306. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  307. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  308. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  309. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +42 -7
  310. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  311. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  312. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  313. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +4 -4
  314. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  315. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  316. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  317. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +40 -2
  318. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  319. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  320. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  321. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +151 -44
  322. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  323. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  324. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  325. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +23 -0
  326. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  327. package/lib/esm/components-react/filter-builder/Operators.d.ts +24 -19
  328. package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -1
  329. package/lib/esm/components-react/filter-builder/Operators.js +37 -61
  330. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -1
  331. package/lib/esm/components-react/filter-builder/Types.d.ts +2 -2
  332. package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -1
  333. package/lib/esm/components-react/filter-builder/Types.js.map +1 -1
  334. package/lib/esm/components-react/filtering/FilteringInput.d.ts +1 -1
  335. package/lib/esm/components-react/filtering/ResultSelector.d.ts +1 -1
  336. package/lib/esm/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  337. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -1
  338. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  339. package/lib/esm/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  340. package/lib/esm/components-react/properties/renderers/CommonPropertyRenderer.js +3 -4
  341. package/lib/esm/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
  342. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  343. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.js +1 -1
  344. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
  345. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  346. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.js +2 -3
  347. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
  348. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  349. package/lib/esm/components-react/properties/renderers/PropertyView.d.ts +1 -1
  350. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  351. package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  352. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  353. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.js +4 -4
  354. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
  355. package/lib/esm/components-react/properties/renderers/value/Common.js +1 -2
  356. package/lib/esm/components-react/properties/renderers/value/Common.js.map +1 -1
  357. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  358. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  359. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js +3 -6
  360. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  361. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  362. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  363. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  364. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  365. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js +3 -6
  366. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
  367. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  368. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  369. package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  370. package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  371. package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  372. package/lib/esm/components-react/propertygrid/PropertyCategoryRendererManager.js +1 -2
  373. package/lib/esm/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
  374. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js +1 -2
  375. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  376. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  377. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  378. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  379. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js +1 -2
  380. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  381. package/lib/esm/components-react/propertygrid/component/PropertyGridCommons.js +2 -2
  382. package/lib/esm/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
  383. package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  384. package/lib/esm/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  385. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  386. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js +49 -54
  387. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  388. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  389. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  390. package/lib/esm/components-react/propertygrid/dataproviders/FilteringDataProvider.js +11 -13
  391. package/lib/esm/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
  392. package/lib/esm/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js +2 -2
  393. package/lib/esm/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
  394. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js +1 -2
  395. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  396. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js +1 -2
  397. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
  398. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js +2 -2
  399. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
  400. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridCategory.js +2 -3
  401. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
  402. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js +1 -1
  403. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
  404. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  405. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js +1 -1
  406. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  407. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js +5 -7
  408. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
  409. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -2
  410. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  411. package/lib/esm/components-react/selectable-content/SelectableContent.js +2 -3
  412. package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
  413. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  414. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  415. package/lib/esm/components-react/toolbar/InternalToolbarComponent.js +4 -6
  416. package/lib/esm/components-react/toolbar/InternalToolbarComponent.js.map +1 -1
  417. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts +1 -1
  418. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  419. package/lib/esm/components-react/toolbar/Items.d.ts +1 -1
  420. package/lib/esm/components-react/toolbar/Items.d.ts.map +1 -1
  421. package/lib/esm/components-react/toolbar/Overflow.d.ts +1 -1
  422. package/lib/esm/components-react/toolbar/Overflow.d.ts.map +1 -1
  423. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts +1 -1
  424. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  425. package/lib/esm/components-react/toolbar/PopupItem.d.ts +2 -2
  426. package/lib/esm/components-react/toolbar/PopupItem.d.ts.map +1 -1
  427. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  428. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  429. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  430. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  431. package/lib/esm/components-react/toolbar/Toolbar.d.ts +1 -1
  432. package/lib/esm/components-react/toolbar/Toolbar.d.ts.map +1 -1
  433. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  434. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  435. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  436. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  437. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  438. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  439. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  440. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  441. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  442. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  443. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  444. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  445. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.js +5 -6
  446. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.js.map +1 -1
  447. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  448. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  449. package/lib/esm/components-react/tree/controlled/TreeHooks.js +21 -1
  450. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  451. package/lib/esm/components-react/tree/controlled/TreeModel.js +7 -8
  452. package/lib/esm/components-react/tree/controlled/TreeModel.js.map +1 -1
  453. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +6 -8
  454. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  455. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  456. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  457. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  458. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  459. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  460. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  461. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  462. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  463. package/lib/esm/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  464. package/lib/esm/components-react/tree/controlled/internal/SparseTree.js +1 -2
  465. package/lib/esm/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
  466. package/lib/esm/components-react/tree/controlled/internal/TreeSelectionManager.js +2 -4
  467. package/lib/esm/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
  468. package/lib/esm/components-react.d.ts +3 -0
  469. package/lib/esm/components-react.d.ts.map +1 -1
  470. package/lib/esm/components-react.js +3 -0
  471. package/lib/esm/components-react.js.map +1 -1
  472. package/lib/public/locales/en/UiComponents.json +12 -7
  473. package/package.json +7 -8
@@ -9,10 +9,17 @@ import { produce } from "immer";
9
9
  import * as React from "react";
10
10
  import { PropertyValueFormat } from "@itwin/appui-abstract";
11
11
  import { Guid } from "@itwin/core-bentley";
12
- import { PropertyFilterRuleOperator } from "./Operators";
13
- import { isUnaryPropertyFilterOperator, PropertyFilterRuleGroupOperator, } from "./Operators";
12
+ import { isUnaryPropertyFilterBuilderOperator, isUnaryPropertyFilterOperator, } from "./Operators";
14
13
  import { isPropertyFilterRuleGroup } from "./Types";
15
14
  import { UiComponents } from "../UiComponents";
15
+ import { PropertyFilterBuilderRuleRangeValue } from "./FilterBuilderRangeValue";
16
+ /**
17
+ * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
18
+ * @beta
19
+ */
20
+ export function isPropertyFilterBuilderRuleGroup(item) {
21
+ return item.items !== undefined;
22
+ }
16
23
  /**
17
24
  * Actions for controlling [[PropertyFilterBuilder]] component state.
18
25
  * @beta
@@ -41,12 +48,14 @@ export class PropertyFilterBuilderActions {
41
48
  function removeItemFromGroup(state, pathToItem) {
42
49
  const pathToParent = pathToItem.slice(0, -1);
43
50
  const parentGroup = findRuleGroup(state.rootGroup, pathToParent);
44
- if (!parentGroup)
51
+ if (!parentGroup) {
45
52
  return;
53
+ }
46
54
  const itemId = pathToItem[pathToItem.length - 1];
47
55
  const itemIndex = parentGroup.items.findIndex((item) => item.id === itemId);
48
- if (itemIndex === -1)
56
+ if (itemIndex === -1) {
49
57
  return;
58
+ }
50
59
  if (parentGroup.items.length === 1) {
51
60
  parentGroup.items[0] = createEmptyRule(parentGroup.id);
52
61
  return;
@@ -67,8 +76,9 @@ export class PropertyFilterBuilderActions {
67
76
  setRuleGroupOperator(path, operator) {
68
77
  this.updateState((state) => {
69
78
  const group = findRuleGroup(state.rootGroup, path);
70
- if (!group)
79
+ if (!group) {
71
80
  return;
81
+ }
72
82
  group.operator = operator;
73
83
  });
74
84
  }
@@ -76,8 +86,9 @@ export class PropertyFilterBuilderActions {
76
86
  setRuleProperty(path, property) {
77
87
  this.updateState((state) => {
78
88
  const rule = findRule(state.rootGroup, path);
79
- if (!rule)
89
+ if (!rule) {
80
90
  return;
91
+ }
81
92
  rule.property = property;
82
93
  rule.operator = undefined;
83
94
  rule.value = undefined;
@@ -88,10 +99,12 @@ export class PropertyFilterBuilderActions {
88
99
  setRuleOperator(path, operator) {
89
100
  this.updateState((state) => {
90
101
  const rule = findRule(state.rootGroup, path);
91
- if (!rule)
102
+ if (!rule) {
92
103
  return;
93
- if (isUnaryPropertyFilterOperator(operator))
104
+ }
105
+ if (isUnaryPropertyFilterBuilderOperator(operator)) {
94
106
  rule.value = undefined;
107
+ }
95
108
  if (operator !== rule.operator &&
96
109
  !areOperatorsSimilar(operator, rule.operator)) {
97
110
  rule.value = undefined;
@@ -103,8 +116,9 @@ export class PropertyFilterBuilderActions {
103
116
  setRuleValue(path, value) {
104
117
  this.updateState((state) => {
105
118
  const rule = findRule(state.rootGroup, path);
106
- if (!rule)
119
+ if (!rule) {
107
120
  return;
121
+ }
108
122
  rule.value = value;
109
123
  });
110
124
  }
@@ -128,20 +142,13 @@ export class PropertyFilterBuilderActions {
128
142
  });
129
143
  }
130
144
  }
131
- /**
132
- * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
133
- * @beta
134
- */
135
- export function isPropertyFilterBuilderRuleGroup(item) {
136
- return item.items !== undefined;
137
- }
138
145
  /**
139
146
  * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes
140
147
  * state from supplied initial filter.
141
148
  * @beta
142
149
  */
143
150
  export function usePropertyFilterBuilder(props) {
144
- const { initialFilter, ruleValidator } = props !== null && props !== void 0 ? props : {
151
+ const { initialFilter, ruleValidator } = props ?? {
145
152
  initialFilter: undefined,
146
153
  ruleValidator: undefined,
147
154
  };
@@ -151,7 +158,7 @@ export function usePropertyFilterBuilder(props) {
151
158
  const [actions] = React.useState(() => new PropertyFilterBuilderActions(setState));
152
159
  const buildFilter = React.useCallback((options) => {
153
160
  const ruleErrors = validateRules(state.rootGroup, ruleValidator);
154
- if (!(options === null || options === void 0 ? void 0 : options.ignoreErrors)) {
161
+ if (!options?.ignoreErrors) {
155
162
  actions.setRuleErrorMessages(ruleErrors);
156
163
  }
157
164
  return ruleErrors.size === 0
@@ -186,16 +193,25 @@ function validateRules(rule, ruleValidator) {
186
193
  export function defaultPropertyFilterBuilderRuleValidator(item) {
187
194
  if (item.property === undefined ||
188
195
  item.operator === undefined ||
189
- isUnaryPropertyFilterOperator(item.operator)) {
196
+ isUnaryPropertyFilterBuilderOperator(item.operator)) {
190
197
  return undefined;
191
198
  }
192
- if (item.value === undefined) {
199
+ if (item.operator === "between" || item.operator === "not-between") {
200
+ return rangeRuleValidator(item.value);
201
+ }
202
+ if (isEmptyValue(item.value)) {
193
203
  return UiComponents.translate("filterBuilder.errorMessages.emptyValue");
194
204
  }
195
- if (item.value.valueFormat === PropertyValueFormat.Primitive &&
196
- (item.value.value === undefined || item.value.value === "")) {
205
+ return undefined;
206
+ }
207
+ function rangeRuleValidator(value) {
208
+ const range = PropertyFilterBuilderRuleRangeValue.parse(value);
209
+ if (isEmptyValue(range.from) || isEmptyValue(range.to)) {
197
210
  return UiComponents.translate("filterBuilder.errorMessages.emptyValue");
198
211
  }
212
+ if (!PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {
213
+ return UiComponents.translate("filterBuilder.errorMessages.invalidRange");
214
+ }
199
215
  return undefined;
200
216
  }
201
217
  /** @internal */
@@ -213,8 +229,9 @@ function buildPropertyFilterFromRuleGroup(rootGroup) {
213
229
  }
214
230
  if (rules.length === 0)
215
231
  return undefined;
216
- if (rules.length === 1)
232
+ if (rules.length === 1 && !isPropertyFilterRuleGroup(rules[0])) {
217
233
  return rules[0];
234
+ }
218
235
  return {
219
236
  operator: rootGroup.operator,
220
237
  rules,
@@ -222,15 +239,49 @@ function buildPropertyFilterFromRuleGroup(rootGroup) {
222
239
  }
223
240
  function buildPropertyFilterFromRule(rule) {
224
241
  const { property, operator, value } = rule;
225
- if (!property || operator === undefined)
242
+ if (!property || operator === undefined) {
226
243
  return undefined;
227
- if (!isUnaryPropertyFilterOperator(operator) &&
228
- (!value ||
229
- value.valueFormat !== PropertyValueFormat.Primitive ||
230
- value.value === undefined))
244
+ }
245
+ if (operator === "between" || operator === "not-between") {
246
+ return buildPropertyFilterFromRangeRule({
247
+ ...rule,
248
+ property,
249
+ operator,
250
+ value,
251
+ });
252
+ }
253
+ if (!isUnaryPropertyFilterOperator(operator) && isEmptyValue(value)) {
231
254
  return undefined;
255
+ }
232
256
  return { property, operator, value };
233
257
  }
258
+ function buildPropertyFilterFromRangeRule(rule) {
259
+ const { property, operator, value } = rule;
260
+ if (!value ||
261
+ value.valueFormat !== PropertyValueFormat.Primitive ||
262
+ typeof value.value !== "string") {
263
+ return undefined;
264
+ }
265
+ const { to, from } = PropertyFilterBuilderRuleRangeValue.parse(value);
266
+ if (isEmptyValue(to) || isEmptyValue(from)) {
267
+ return undefined;
268
+ }
269
+ return {
270
+ operator: operator === "between" ? "and" : "or",
271
+ rules: [
272
+ {
273
+ property,
274
+ operator: operator === "between" ? "greater-or-equal" : "less",
275
+ value: from,
276
+ },
277
+ {
278
+ property,
279
+ operator: operator === "between" ? "less-or-equal" : "greater",
280
+ value: to,
281
+ },
282
+ ],
283
+ };
284
+ }
234
285
  function createEmptyRule(groupId) {
235
286
  return {
236
287
  id: Guid.createValue(),
@@ -242,7 +293,7 @@ function createEmptyRuleGroup(groupId) {
242
293
  return {
243
294
  id,
244
295
  groupId,
245
- operator: PropertyFilterRuleGroupOperator.And,
296
+ operator: "and",
246
297
  items: [createEmptyRule(id)],
247
298
  };
248
299
  }
@@ -268,13 +319,17 @@ function findRule(rootGroup, path) {
268
319
  }
269
320
  function getRuleGroupItem(filter, parentId) {
270
321
  const id = Guid.createValue();
271
- if (isPropertyFilterRuleGroup(filter))
272
- return {
273
- id,
274
- groupId: parentId,
275
- operator: filter.operator,
276
- items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),
277
- };
322
+ if (isPropertyFilterRuleGroup(filter)) {
323
+ const rangeRule = getRangeRuleItems(filter, parentId);
324
+ return rangeRule
325
+ ? rangeRule
326
+ : {
327
+ id,
328
+ groupId: parentId,
329
+ operator: filter.operator,
330
+ items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),
331
+ };
332
+ }
278
333
  return getRuleItem(filter, id);
279
334
  }
280
335
  function getRuleItem(filter, parentId) {
@@ -286,6 +341,50 @@ function getRuleItem(filter, parentId) {
286
341
  value: filter.value,
287
342
  };
288
343
  }
344
+ function getRangeRuleItems(group, parentId) {
345
+ if (group.rules.length !== 2) {
346
+ return undefined;
347
+ }
348
+ const [from, to] = group.rules;
349
+ if (isPropertyFilterRuleGroup(from) ||
350
+ !from.value ||
351
+ from.value.valueFormat !== PropertyValueFormat.Primitive ||
352
+ isPropertyFilterRuleGroup(to) ||
353
+ !to.value ||
354
+ to.value.valueFormat !== PropertyValueFormat.Primitive ||
355
+ from.property.name !== to.property.name) {
356
+ return undefined;
357
+ }
358
+ if (from.operator === "greater-or-equal" &&
359
+ to.operator === "less-or-equal" &&
360
+ group.operator === "and") {
361
+ return {
362
+ id: Guid.createValue(),
363
+ groupId: parentId,
364
+ operator: "between",
365
+ property: from.property,
366
+ value: PropertyFilterBuilderRuleRangeValue.serialize({
367
+ from: from.value,
368
+ to: to.value,
369
+ }),
370
+ };
371
+ }
372
+ if (from.operator === "less" &&
373
+ to.operator === "greater" &&
374
+ group.operator === "or") {
375
+ return {
376
+ id: Guid.createValue(),
377
+ groupId: parentId,
378
+ operator: "not-between",
379
+ property: from.property,
380
+ value: PropertyFilterBuilderRuleRangeValue.serialize({
381
+ from: from.value,
382
+ to: to.value,
383
+ }),
384
+ };
385
+ }
386
+ return undefined;
387
+ }
289
388
  function convertFilterToState(filter) {
290
389
  const id = Guid.createValue();
291
390
  if (isPropertyFilterRuleGroup(filter)) {
@@ -300,25 +399,33 @@ function convertFilterToState(filter) {
300
399
  return {
301
400
  rootGroup: {
302
401
  id,
303
- operator: PropertyFilterRuleGroupOperator.And,
402
+ operator: "and",
304
403
  items: [getRuleItem(filter, id)],
305
404
  },
306
405
  };
307
406
  }
407
+ function isEmptyValue(value) {
408
+ return (value?.valueFormat !== PropertyValueFormat.Primitive ||
409
+ value.value === undefined ||
410
+ value.value === "");
411
+ }
308
412
  function areOperatorsSimilar(firstOperator, secondOperator) {
309
413
  return ((isOperatorEqualOrIsNotEqual(firstOperator) &&
310
414
  isOperatorEqualOrIsNotEqual(secondOperator)) ||
311
415
  (isInequalityOperator(firstOperator) &&
312
- isInequalityOperator(secondOperator)));
416
+ isInequalityOperator(secondOperator)) ||
417
+ (isRangeOperator(firstOperator) && isRangeOperator(secondOperator)));
313
418
  }
314
419
  function isOperatorEqualOrIsNotEqual(operator) {
315
- return (operator === PropertyFilterRuleOperator.IsEqual ||
316
- operator === PropertyFilterRuleOperator.IsNotEqual);
420
+ return operator === "is-equal" || operator === "is-not-equal";
317
421
  }
318
422
  function isInequalityOperator(operator) {
319
- return (operator === PropertyFilterRuleOperator.Less ||
320
- operator === PropertyFilterRuleOperator.LessOrEqual ||
321
- operator === PropertyFilterRuleOperator.Greater ||
322
- operator === PropertyFilterRuleOperator.GreaterOrEqual);
423
+ return (operator === "less" ||
424
+ operator === "less-or-equal" ||
425
+ operator === "greater" ||
426
+ operator === "greater-or-equal");
427
+ }
428
+ function isRangeOperator(operator) {
429
+ return operator === "between" || operator === "not-between";
323
430
  }
324
431
  //# sourceMappingURL=FilterBuilderState.js.map
@@ -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 { PropertyFilterRuleOperator } from \"./Operators\";\nimport {\n isUnaryPropertyFilterOperator,\n PropertyFilterRuleGroupOperator,\n} from \"./Operators\";\nimport type { PropertyFilter, PropertyFilterRule } from \"./Types\";\nimport { isPropertyFilterRuleGroup } from \"./Types\";\nimport { UiComponents } from \"../UiComponents\";\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?: PropertyFilterRuleOperator;\n /** Value that property should be compared to. */\n value?: PropertyValue;\n /** Error message of this rule. */\n errorMessage?: string;\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(path: string[], itemType: \"RULE_GROUP\" | \"RULE\") {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n const item =\n itemType === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(item);\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) return;\n const itemId = pathToItem[pathToItem.length - 1];\n const itemIndex = parentGroup.items.findIndex(\n (item) => item.id === itemId\n );\n if (itemIndex === -1) return;\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) return;\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) return;\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(path: string[], operator: PropertyFilterRuleOperator) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n if (isUnaryPropertyFilterOperator(operator)) rule.value = undefined;\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) return;\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 * 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 * 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 isUnaryPropertyFilterOperator(item.operator)\n ) {\n return undefined;\n }\n if (item.value === undefined) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\n }\n if (\n item.value.valueFormat === PropertyValueFormat.Primitive &&\n (item.value.value === undefined || item.value.value === \"\")\n ) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\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) return rules[0];\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) return undefined;\n\n if (\n !isUnaryPropertyFilterOperator(operator) &&\n (!value ||\n value.valueFormat !== PropertyValueFormat.Primitive ||\n value.value === undefined)\n )\n return undefined;\n\n return { property, operator, value };\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: PropertyFilterRuleGroupOperator.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}\n\nfunction getRuleGroupItem(\n filter: PropertyFilter,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter))\n return {\n id,\n groupId: parentId,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\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 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: PropertyFilterRuleGroupOperator.And,\n items: [getRuleItem(filter, id)],\n },\n };\n}\n\nfunction areOperatorsSimilar(\n firstOperator?: PropertyFilterRuleOperator,\n secondOperator?: PropertyFilterRuleOperator\n) {\n return (\n (isOperatorEqualOrIsNotEqual(firstOperator) &&\n isOperatorEqualOrIsNotEqual(secondOperator)) ||\n (isInequalityOperator(firstOperator) &&\n isInequalityOperator(secondOperator))\n );\n}\n\nfunction isOperatorEqualOrIsNotEqual(operator?: PropertyFilterRuleOperator) {\n return (\n operator === PropertyFilterRuleOperator.IsEqual ||\n operator === PropertyFilterRuleOperator.IsNotEqual\n );\n}\n\nfunction isInequalityOperator(operator?: PropertyFilterRuleOperator) {\n return (\n operator === PropertyFilterRuleOperator.Less ||\n operator === PropertyFilterRuleOperator.LessOrEqual ||\n operator === PropertyFilterRuleOperator.Greater ||\n operator === PropertyFilterRuleOperator.GreaterOrEqual\n );\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 { 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(path: string[], itemType: \"RULE_GROUP\" | \"RULE\") {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n const item =\n itemType === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(item);\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"]}
@@ -0,0 +1,20 @@
1
+ /** @packageDocumentation
2
+ * @module PropertyFilterBuilder
3
+ */
4
+ import React from "react";
5
+ /**
6
+ * Props for [[PropertyFilterBuilderToolbar]] component.
7
+ * @internal
8
+ */
9
+ interface PropertyFilterBuilderToolbarProps {
10
+ /** Function to add child of current group. */
11
+ onAddChild: () => void;
12
+ /** Function to remove child from current group. */
13
+ onDelete: () => void;
14
+ }
15
+ /** Toolbar displaying the "add" and "delete" row buttons in the filter builder
16
+ * @beta
17
+ */
18
+ export declare const PropertyFilterBuilderToolbar: (props: PropertyFilterBuilderToolbarProps) => React.JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=FilterBuilderToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderToolbar.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;;GAGG;AACH,UAAU,iCAAiC;IACzC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,UAChC,iCAAiC,sBA8BzC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module PropertyFilterBuilder
7
+ */
8
+ import React from "react";
9
+ import { Flex, IconButton } from "@itwin/itwinui-react";
10
+ import { SvgAdd, SvgDelete } from "@itwin/itwinui-icons-react";
11
+ import { UiComponents } from "../UiComponents";
12
+ /** Toolbar displaying the "add" and "delete" row buttons in the filter builder
13
+ * @beta
14
+ */
15
+ export const PropertyFilterBuilderToolbar = (props) => {
16
+ const { onAddChild, onDelete } = props;
17
+ return (React.createElement(Flex, { className: "fb-toolbar fb-row-toolbar", gap: "0", justifyContent: "flex-end" },
18
+ React.createElement(IconButton, { size: "small", className: "fb-add-rule-button", label: UiComponents.translate("filterBuilder.add"), styleType: "borderless", onClick: onAddChild },
19
+ React.createElement(SvgAdd, null)),
20
+ React.createElement(IconButton, { size: "small", className: "fb-remove-rule-button", label: UiComponents.translate("filterBuilder.delete"), styleType: "borderless", onClick: onDelete },
21
+ React.createElement(SvgDelete, null))));
22
+ };
23
+ //# sourceMappingURL=FilterBuilderToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderToolbar.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderToolbar.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAY/C;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,KAAwC,EACxC,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEvC,OAAO,CACL,oBAAC,IAAI,IACH,SAAS,EAAE,2BAA2B,EACtC,GAAG,EAAC,GAAG,EACP,cAAc,EAAC,UAAU;QAEzB,oBAAC,UAAU,IACT,IAAI,EAAE,OAAO,EACb,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAClD,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,UAAU;YAEnB,oBAAC,MAAM,OAAG,CACC;QACb,oBAAC,UAAU,IACT,IAAI,EAAE,OAAO,EACb,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,sBAAsB,CAAC,EACrD,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,QAAQ;YAEjB,oBAAC,SAAS,OAAG,CACF,CACR,CACR,CAAC;AACJ,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 */\nimport React from \"react\";\nimport { Flex, IconButton } from \"@itwin/itwinui-react\";\nimport { SvgAdd, SvgDelete } from \"@itwin/itwinui-icons-react\";\nimport { UiComponents } from \"../UiComponents\";\n/**\n * Props for [[PropertyFilterBuilderToolbar]] component.\n * @internal\n */\ninterface PropertyFilterBuilderToolbarProps {\n /** Function to add child of current group. */\n onAddChild: () => void;\n /** Function to remove child from current group. */\n onDelete: () => void;\n}\n\n/** Toolbar displaying the \"add\" and \"delete\" row buttons in the filter builder\n * @beta\n */\nexport const PropertyFilterBuilderToolbar = (\n props: PropertyFilterBuilderToolbarProps\n) => {\n const { onAddChild, onDelete } = props;\n\n return (\n <Flex\n className={\"fb-toolbar fb-row-toolbar\"}\n gap=\"0\"\n justifyContent=\"flex-end\"\n >\n <IconButton\n size={\"small\"}\n className=\"fb-add-rule-button\"\n label={UiComponents.translate(\"filterBuilder.add\")}\n styleType=\"borderless\"\n onClick={onAddChild}\n >\n <SvgAdd />\n </IconButton>\n <IconButton\n size={\"small\"}\n className=\"fb-remove-rule-button\"\n label={UiComponents.translate(\"filterBuilder.delete\")}\n styleType=\"borderless\"\n onClick={onDelete}\n >\n <SvgDelete />\n </IconButton>\n </Flex>\n );\n};\n"]}
@@ -7,39 +7,44 @@ import type { PropertyDescription } from "@itwin/appui-abstract";
7
7
  * @beta
8
8
  */
9
9
  export declare enum PropertyFilterRuleGroupOperator {
10
- And = 0,
11
- Or = 1
10
+ And = "and",
11
+ Or = "or"
12
12
  }
13
13
  /**
14
- * Operators for comparing property value in rule.
14
+ * Operators for comparing property value in [[PropertyFilterRule]].
15
15
  * @beta
16
16
  */
17
17
  export declare enum PropertyFilterRuleOperator {
18
- IsTrue = 0,
19
- IsFalse = 1,
20
- IsEqual = 2,
21
- IsNotEqual = 3,
22
- Greater = 4,
23
- GreaterOrEqual = 5,
24
- Less = 6,
25
- LessOrEqual = 7,
26
- Like = 8,
27
- IsNull = 9,
28
- IsNotNull = 10
18
+ IsTrue = "is-true",
19
+ IsFalse = "is-false",
20
+ IsEqual = "is-equal",
21
+ IsNotEqual = "is-not-equal",
22
+ Greater = "greater",
23
+ GreaterOrEqual = "greater-or-equal",
24
+ Less = "less",
25
+ LessOrEqual = "less-or-equal",
26
+ Like = "like",
27
+ IsNull = "is-null",
28
+ IsNotNull = "is-not-null"
29
29
  }
30
+ /**
31
+ * Operators supported by [[usePropertyFilterBuilder]] when building filter rules.
32
+ * @beta
33
+ */
34
+ export type PropertyFilterBuilderRuleOperator = `${PropertyFilterRuleOperator}` | "between" | "not-between";
30
35
  /**
31
36
  * Function that returns set of available operator based on property type.
32
37
  * @beta
33
38
  */
34
- export declare function getPropertyFilterOperators(property: PropertyDescription): PropertyFilterRuleOperator[];
39
+ export declare function getPropertyFilterBuilderOperators(property: PropertyDescription): PropertyFilterBuilderRuleOperator[];
35
40
  /**
36
- * Function that returns display label for rule operator.
41
+ * Function that checks if supplied [[PropertyFilterBuilderRuleOperator]] operator is unary.
37
42
  * @beta
38
43
  */
39
- export declare function getPropertyFilterOperatorLabel(operator: PropertyFilterRuleOperator): string;
44
+ export declare function isUnaryPropertyFilterBuilderOperator(operator: PropertyFilterBuilderRuleOperator): boolean;
40
45
  /**
41
- * Function that checks if supplied operator is unary.
46
+ * Function that checks if supplied [[PropertyFilterRuleOperator]] operator is unary.
42
47
  * @beta
43
48
  */
44
- export declare function isUnaryPropertyFilterOperator(operator: PropertyFilterRuleOperator): boolean;
49
+ export declare function isUnaryPropertyFilterOperator(operator: `${PropertyFilterRuleOperator}`): boolean;
45
50
  //# sourceMappingURL=Operators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Operators.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Operators.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE;;;GAGG;AACH,oBAAY,+BAA+B;IACzC,GAAG,IAAA;IACH,EAAE,IAAA;CACH;AAED;;;GAGG;AACH,oBAAY,0BAA0B;IACpC,MAAM,IAAA;IACN,OAAO,IAAA;IAEP,OAAO,IAAA;IACP,UAAU,IAAA;IAEV,OAAO,IAAA;IACP,cAAc,IAAA;IACd,IAAI,IAAA;IACJ,WAAW,IAAA;IAEX,IAAI,IAAA;IAEJ,MAAM,IAAA;IACN,SAAS,KAAA;CACV;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,gCAgDvE;AAGD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,0BAA0B,UA0BrC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,WAUrC"}
1
+ {"version":3,"file":"Operators.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Operators.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE;;;GAGG;AACH,oBAAY,+BAA+B;IACzC,GAAG,QAAQ;IACX,EAAE,OAAO;CACV;AAED;;;GAGG;AACH,oBAAY,0BAA0B;IACpC,MAAM,YAAY;IAClB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,UAAU,iBAAiB;IAC3B,OAAO,YAAY;IACnB,cAAc,qBAAqB;IACnC,IAAI,SAAS;IACb,WAAW,kBAAkB;IAC7B,IAAI,SAAS;IACb,MAAM,YAAY;IAClB,SAAS,gBAAgB;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,iCAAiC,GACzC,GAAG,0BAA0B,EAAE,GAC/B,SAAS,GACT,aAAa,CAAC;AAElB;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,mBAAmB,GAC5B,iCAAiC,EAAE,CA+CrC;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,iCAAiC,WAO5C;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,GAAG,0BAA0B,EAAE,WAU1C"}