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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +2 -3
  3. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  4. package/lib/cjs/components-react/common/DelayedSpinner.js +1 -1
  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/datepicker/DateField.d.ts +2 -2
  9. package/lib/cjs/components-react/datepicker/DateField.d.ts.map +1 -1
  10. package/lib/cjs/components-react/datepicker/DateField.scss +5 -2
  11. package/lib/cjs/components-react/datepicker/DatePicker.d.ts +2 -2
  12. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  13. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  14. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  15. package/lib/cjs/components-react/datepicker/TimeField.d.ts +2 -2
  16. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  17. package/lib/cjs/components-react/datepicker/TimeField.js +4 -8
  18. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  19. package/lib/cjs/components-react/datepicker/TimeField.scss +6 -3
  20. package/lib/cjs/components-react/editors/BooleanEditor.d.ts +1 -1
  21. package/lib/cjs/components-react/editors/BooleanEditor.js +1 -1
  22. package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
  23. package/lib/cjs/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  24. package/lib/cjs/components-react/editors/CustomNumberEditor.js +1 -1
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  26. package/lib/cjs/components-react/editors/CustomNumberEditor.scss +5 -3
  27. package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -1
  28. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  29. package/lib/cjs/components-react/editors/EnumEditor.d.ts +1 -1
  30. package/lib/cjs/components-react/editors/EnumEditor.d.ts.map +1 -1
  31. package/lib/cjs/components-react/editors/EnumEditor.js +1 -8
  32. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  33. package/lib/cjs/components-react/editors/EnumEditor.scss +6 -4
  34. package/lib/cjs/components-react/editors/IconEditor.d.ts +1 -1
  35. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  36. package/lib/cjs/components-react/editors/NumericInputEditor.js +1 -1
  37. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  38. package/lib/cjs/components-react/editors/NumericInputEditor.scss +5 -3
  39. package/lib/cjs/components-react/editors/PopupButton.d.ts +2 -2
  40. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  41. package/lib/cjs/components-react/editors/SliderEditor.d.ts.map +1 -1
  42. package/lib/cjs/components-react/editors/SliderEditor.js +2 -5
  43. package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
  44. package/lib/cjs/components-react/editors/TextEditor.d.ts.map +1 -1
  45. package/lib/cjs/components-react/editors/TextEditor.js +1 -1
  46. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  47. package/lib/cjs/components-react/editors/TextEditor.scss +5 -3
  48. package/lib/cjs/components-react/editors/TextareaEditor.d.ts +0 -1
  49. package/lib/cjs/components-react/editors/TextareaEditor.d.ts.map +1 -1
  50. package/lib/cjs/components-react/editors/TextareaEditor.js +3 -4
  51. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  52. package/lib/cjs/components-react/editors/ToggleEditor.d.ts +1 -1
  53. package/lib/cjs/components-react/editors/ToggleEditor.js +1 -1
  54. package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
  55. package/lib/cjs/components-react/editors/ToggleEditor.scss +8 -2
  56. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  57. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  58. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  59. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  60. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +3 -7
  61. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  62. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  63. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  64. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js +1 -73
  65. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  66. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  67. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  68. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js +30 -0
  69. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  70. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  71. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  72. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js +76 -0
  73. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  74. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  75. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  76. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +15 -9
  77. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  78. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  79. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  80. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  81. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +15 -40
  82. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  83. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  84. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  85. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  86. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +43 -6
  87. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  88. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  89. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  90. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  91. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  92. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  93. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  94. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +40 -2
  95. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  96. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  97. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  98. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +151 -44
  99. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  100. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  101. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  102. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +30 -0
  103. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  104. package/lib/cjs/components-react/filter-builder/Operators.d.ts +24 -19
  105. package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -1
  106. package/lib/cjs/components-react/filter-builder/Operators.js +40 -64
  107. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -1
  108. package/lib/cjs/components-react/filter-builder/Types.d.ts +2 -2
  109. package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -1
  110. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -1
  111. package/lib/cjs/components-react/filtering/FilteringInput.d.ts +1 -1
  112. package/lib/cjs/components-react/filtering/ResultSelector.d.ts +1 -1
  113. package/lib/cjs/components-react/filtering/ResultSelector.scss +1 -1
  114. package/lib/cjs/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  115. package/lib/cjs/components-react/inputs/ParsedInput.scss +4 -1
  116. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -1
  117. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  118. package/lib/cjs/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  119. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  120. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  121. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  122. package/lib/cjs/components-react/properties/renderers/PropertyView.d.ts +1 -1
  123. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  124. package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  125. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  126. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  127. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  128. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  129. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  130. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  131. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.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/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  138. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  139. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  140. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  141. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js +2 -4
  142. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  143. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +17 -0
  144. package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  145. package/lib/cjs/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  146. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  147. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +3 -2
  148. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  149. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  150. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  151. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -2
  152. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  153. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  154. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  155. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts +1 -1
  156. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  157. package/lib/cjs/components-react/toolbar/Items.d.ts +1 -1
  158. package/lib/cjs/components-react/toolbar/Items.d.ts.map +1 -1
  159. package/lib/cjs/components-react/toolbar/Overflow.d.ts +1 -1
  160. package/lib/cjs/components-react/toolbar/Overflow.d.ts.map +1 -1
  161. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts +1 -1
  162. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  163. package/lib/cjs/components-react/toolbar/PopupItem.d.ts +2 -2
  164. package/lib/cjs/components-react/toolbar/PopupItem.d.ts.map +1 -1
  165. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  166. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  167. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  168. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  169. package/lib/cjs/components-react/toolbar/Toolbar.d.ts +1 -1
  170. package/lib/cjs/components-react/toolbar/Toolbar.d.ts.map +1 -1
  171. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  172. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  173. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  174. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  175. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  176. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  177. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  178. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  179. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  180. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  181. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  182. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  183. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  184. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  185. package/lib/cjs/components-react/tree/controlled/TreeHooks.js +22 -1
  186. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  187. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  188. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  189. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  190. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  191. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  192. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  193. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  194. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  195. package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  196. package/lib/cjs/components-react.d.ts +3 -0
  197. package/lib/cjs/components-react.d.ts.map +1 -1
  198. package/lib/cjs/components-react.js +3 -0
  199. package/lib/cjs/components-react.js.map +1 -1
  200. package/lib/esm/components-react/common/DelayedSpinner.d.ts +2 -3
  201. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  202. package/lib/esm/components-react/common/DelayedSpinner.js +1 -1
  203. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  204. package/lib/esm/components-react/common/HighlightedText.d.ts +2 -2
  205. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  206. package/lib/esm/components-react/datepicker/DateField.d.ts +2 -2
  207. package/lib/esm/components-react/datepicker/DateField.d.ts.map +1 -1
  208. package/lib/esm/components-react/datepicker/DateField.scss +5 -2
  209. package/lib/esm/components-react/datepicker/DatePicker.d.ts +2 -2
  210. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  211. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  212. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  213. package/lib/esm/components-react/datepicker/TimeField.d.ts +2 -2
  214. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  215. package/lib/esm/components-react/datepicker/TimeField.js +4 -5
  216. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  217. package/lib/esm/components-react/datepicker/TimeField.scss +6 -3
  218. package/lib/esm/components-react/editors/BooleanEditor.d.ts +1 -1
  219. package/lib/esm/components-react/editors/BooleanEditor.js +1 -1
  220. package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
  221. package/lib/esm/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  222. package/lib/esm/components-react/editors/CustomNumberEditor.js +1 -1
  223. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  224. package/lib/esm/components-react/editors/CustomNumberEditor.scss +5 -3
  225. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -1
  226. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  227. package/lib/esm/components-react/editors/EnumEditor.d.ts +1 -1
  228. package/lib/esm/components-react/editors/EnumEditor.d.ts.map +1 -1
  229. package/lib/esm/components-react/editors/EnumEditor.js +1 -8
  230. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  231. package/lib/esm/components-react/editors/EnumEditor.scss +6 -4
  232. package/lib/esm/components-react/editors/IconEditor.d.ts +1 -1
  233. package/lib/esm/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  234. package/lib/esm/components-react/editors/NumericInputEditor.js +1 -1
  235. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  236. package/lib/esm/components-react/editors/NumericInputEditor.scss +5 -3
  237. package/lib/esm/components-react/editors/PopupButton.d.ts +2 -2
  238. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  239. package/lib/esm/components-react/editors/SliderEditor.d.ts.map +1 -1
  240. package/lib/esm/components-react/editors/SliderEditor.js +2 -5
  241. package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
  242. package/lib/esm/components-react/editors/TextEditor.d.ts.map +1 -1
  243. package/lib/esm/components-react/editors/TextEditor.js +1 -1
  244. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  245. package/lib/esm/components-react/editors/TextEditor.scss +5 -3
  246. package/lib/esm/components-react/editors/TextareaEditor.d.ts +0 -1
  247. package/lib/esm/components-react/editors/TextareaEditor.d.ts.map +1 -1
  248. package/lib/esm/components-react/editors/TextareaEditor.js +3 -4
  249. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  250. package/lib/esm/components-react/editors/ToggleEditor.d.ts +1 -1
  251. package/lib/esm/components-react/editors/ToggleEditor.js +1 -1
  252. package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
  253. package/lib/esm/components-react/editors/ToggleEditor.scss +8 -2
  254. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  255. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  256. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  257. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  258. package/lib/esm/components-react/filter-builder/FilterBuilder.js +4 -8
  259. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  260. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  261. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  262. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js +0 -71
  263. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  264. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  265. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  266. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js +23 -0
  267. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  268. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  269. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  270. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js +73 -0
  271. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  272. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  273. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  274. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +19 -13
  275. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  276. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  277. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  278. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  279. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +17 -42
  280. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  281. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  282. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  283. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  284. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +41 -5
  285. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  286. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  287. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  288. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  289. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  290. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  291. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  292. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +39 -1
  293. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  294. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  295. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  296. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +149 -42
  297. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  298. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  299. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  300. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +23 -0
  301. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  302. package/lib/esm/components-react/filter-builder/Operators.d.ts +24 -19
  303. package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -1
  304. package/lib/esm/components-react/filter-builder/Operators.js +37 -61
  305. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -1
  306. package/lib/esm/components-react/filter-builder/Types.d.ts +2 -2
  307. package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -1
  308. package/lib/esm/components-react/filter-builder/Types.js.map +1 -1
  309. package/lib/esm/components-react/filtering/FilteringInput.d.ts +1 -1
  310. package/lib/esm/components-react/filtering/ResultSelector.d.ts +1 -1
  311. package/lib/esm/components-react/filtering/ResultSelector.scss +1 -1
  312. package/lib/esm/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  313. package/lib/esm/components-react/inputs/ParsedInput.scss +4 -1
  314. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -1
  315. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  316. package/lib/esm/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  317. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  318. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  319. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  320. package/lib/esm/components-react/properties/renderers/PropertyView.d.ts +1 -1
  321. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  322. package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  323. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  324. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  325. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  326. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  327. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  328. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  329. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  330. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  331. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  332. package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  333. package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  334. package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  335. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  336. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  337. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  338. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  339. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js +2 -4
  340. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  341. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +17 -0
  342. package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  343. package/lib/esm/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  344. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  345. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +3 -2
  346. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  347. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  348. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  349. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -2
  350. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  351. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  352. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  353. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts +1 -1
  354. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  355. package/lib/esm/components-react/toolbar/Items.d.ts +1 -1
  356. package/lib/esm/components-react/toolbar/Items.d.ts.map +1 -1
  357. package/lib/esm/components-react/toolbar/Overflow.d.ts +1 -1
  358. package/lib/esm/components-react/toolbar/Overflow.d.ts.map +1 -1
  359. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts +1 -1
  360. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  361. package/lib/esm/components-react/toolbar/PopupItem.d.ts +2 -2
  362. package/lib/esm/components-react/toolbar/PopupItem.d.ts.map +1 -1
  363. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  364. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  365. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  366. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  367. package/lib/esm/components-react/toolbar/Toolbar.d.ts +1 -1
  368. package/lib/esm/components-react/toolbar/Toolbar.d.ts.map +1 -1
  369. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  370. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  371. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  372. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  373. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  374. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  375. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  376. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  377. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  378. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  379. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  380. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  381. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  382. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  383. package/lib/esm/components-react/tree/controlled/TreeHooks.js +21 -1
  384. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  385. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  386. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  387. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  388. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  389. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  390. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  391. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  392. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  393. package/lib/esm/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  394. package/lib/esm/components-react.d.ts +3 -0
  395. package/lib/esm/components-react.d.ts.map +1 -1
  396. package/lib/esm/components-react.js +3 -0
  397. package/lib/esm/components-react.js.map +1 -1
  398. package/lib/public/locales/en/UiComponents.json +12 -7
  399. package/package.json +10 -11
@@ -30,15 +30,23 @@ var __importStar = (this && this.__importStar) || function (mod) {
30
30
  return result;
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.buildPropertyFilter = exports.defaultPropertyFilterBuilderRuleValidator = exports.usePropertyFilterBuilder = exports.isPropertyFilterBuilderRuleGroup = exports.PropertyFilterBuilderActions = void 0;
33
+ exports.buildPropertyFilter = exports.defaultPropertyFilterBuilderRuleValidator = exports.usePropertyFilterBuilder = exports.PropertyFilterBuilderActions = exports.isPropertyFilterBuilderRuleGroup = void 0;
34
34
  const immer_1 = require("immer");
35
35
  const React = __importStar(require("react"));
36
36
  const appui_abstract_1 = require("@itwin/appui-abstract");
37
37
  const core_bentley_1 = require("@itwin/core-bentley");
38
38
  const Operators_1 = require("./Operators");
39
- const Operators_2 = require("./Operators");
40
39
  const Types_1 = require("./Types");
41
40
  const UiComponents_1 = require("../UiComponents");
41
+ const FilterBuilderRangeValue_1 = require("./FilterBuilderRangeValue");
42
+ /**
43
+ * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
44
+ * @beta
45
+ */
46
+ function isPropertyFilterBuilderRuleGroup(item) {
47
+ return item.items !== undefined;
48
+ }
49
+ exports.isPropertyFilterBuilderRuleGroup = isPropertyFilterBuilderRuleGroup;
42
50
  /**
43
51
  * Actions for controlling [[PropertyFilterBuilder]] component state.
44
52
  * @beta
@@ -67,12 +75,14 @@ class PropertyFilterBuilderActions {
67
75
  function removeItemFromGroup(state, pathToItem) {
68
76
  const pathToParent = pathToItem.slice(0, -1);
69
77
  const parentGroup = findRuleGroup(state.rootGroup, pathToParent);
70
- if (!parentGroup)
78
+ if (!parentGroup) {
71
79
  return;
80
+ }
72
81
  const itemId = pathToItem[pathToItem.length - 1];
73
82
  const itemIndex = parentGroup.items.findIndex((item) => item.id === itemId);
74
- if (itemIndex === -1)
83
+ if (itemIndex === -1) {
75
84
  return;
85
+ }
76
86
  if (parentGroup.items.length === 1) {
77
87
  parentGroup.items[0] = createEmptyRule(parentGroup.id);
78
88
  return;
@@ -93,8 +103,9 @@ class PropertyFilterBuilderActions {
93
103
  setRuleGroupOperator(path, operator) {
94
104
  this.updateState((state) => {
95
105
  const group = findRuleGroup(state.rootGroup, path);
96
- if (!group)
106
+ if (!group) {
97
107
  return;
108
+ }
98
109
  group.operator = operator;
99
110
  });
100
111
  }
@@ -102,8 +113,9 @@ class PropertyFilterBuilderActions {
102
113
  setRuleProperty(path, property) {
103
114
  this.updateState((state) => {
104
115
  const rule = findRule(state.rootGroup, path);
105
- if (!rule)
116
+ if (!rule) {
106
117
  return;
118
+ }
107
119
  rule.property = property;
108
120
  rule.operator = undefined;
109
121
  rule.value = undefined;
@@ -114,10 +126,12 @@ class PropertyFilterBuilderActions {
114
126
  setRuleOperator(path, operator) {
115
127
  this.updateState((state) => {
116
128
  const rule = findRule(state.rootGroup, path);
117
- if (!rule)
129
+ if (!rule) {
118
130
  return;
119
- if ((0, Operators_2.isUnaryPropertyFilterOperator)(operator))
131
+ }
132
+ if ((0, Operators_1.isUnaryPropertyFilterBuilderOperator)(operator)) {
120
133
  rule.value = undefined;
134
+ }
121
135
  if (operator !== rule.operator &&
122
136
  !areOperatorsSimilar(operator, rule.operator)) {
123
137
  rule.value = undefined;
@@ -129,8 +143,9 @@ class PropertyFilterBuilderActions {
129
143
  setRuleValue(path, value) {
130
144
  this.updateState((state) => {
131
145
  const rule = findRule(state.rootGroup, path);
132
- if (!rule)
146
+ if (!rule) {
133
147
  return;
148
+ }
134
149
  rule.value = value;
135
150
  });
136
151
  }
@@ -155,14 +170,6 @@ class PropertyFilterBuilderActions {
155
170
  }
156
171
  }
157
172
  exports.PropertyFilterBuilderActions = PropertyFilterBuilderActions;
158
- /**
159
- * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
160
- * @beta
161
- */
162
- function isPropertyFilterBuilderRuleGroup(item) {
163
- return item.items !== undefined;
164
- }
165
- exports.isPropertyFilterBuilderRuleGroup = isPropertyFilterBuilderRuleGroup;
166
173
  /**
167
174
  * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes
168
175
  * state from supplied initial filter.
@@ -215,19 +222,28 @@ function validateRules(rule, ruleValidator) {
215
222
  function defaultPropertyFilterBuilderRuleValidator(item) {
216
223
  if (item.property === undefined ||
217
224
  item.operator === undefined ||
218
- (0, Operators_2.isUnaryPropertyFilterOperator)(item.operator)) {
225
+ (0, Operators_1.isUnaryPropertyFilterBuilderOperator)(item.operator)) {
219
226
  return undefined;
220
227
  }
221
- if (item.value === undefined) {
222
- return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
228
+ if (item.operator === "between" || item.operator === "not-between") {
229
+ return rangeRuleValidator(item.value);
223
230
  }
224
- if (item.value.valueFormat === appui_abstract_1.PropertyValueFormat.Primitive &&
225
- (item.value.value === undefined || item.value.value === "")) {
231
+ if (isEmptyValue(item.value)) {
226
232
  return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
227
233
  }
228
234
  return undefined;
229
235
  }
230
236
  exports.defaultPropertyFilterBuilderRuleValidator = defaultPropertyFilterBuilderRuleValidator;
237
+ function rangeRuleValidator(value) {
238
+ const range = FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.parse(value);
239
+ if (isEmptyValue(range.from) || isEmptyValue(range.to)) {
240
+ return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
241
+ }
242
+ if (!FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.isRangeValid(range)) {
243
+ return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.invalidRange");
244
+ }
245
+ return undefined;
246
+ }
231
247
  /** @internal */
232
248
  function buildPropertyFilter(groupItem) {
233
249
  if (isPropertyFilterBuilderRuleGroup(groupItem))
@@ -244,8 +260,9 @@ function buildPropertyFilterFromRuleGroup(rootGroup) {
244
260
  }
245
261
  if (rules.length === 0)
246
262
  return undefined;
247
- if (rules.length === 1)
263
+ if (rules.length === 1 && !(0, Types_1.isPropertyFilterRuleGroup)(rules[0])) {
248
264
  return rules[0];
265
+ }
249
266
  return {
250
267
  operator: rootGroup.operator,
251
268
  rules,
@@ -253,15 +270,49 @@ function buildPropertyFilterFromRuleGroup(rootGroup) {
253
270
  }
254
271
  function buildPropertyFilterFromRule(rule) {
255
272
  const { property, operator, value } = rule;
256
- if (!property || operator === undefined)
273
+ if (!property || operator === undefined) {
257
274
  return undefined;
258
- if (!(0, Operators_2.isUnaryPropertyFilterOperator)(operator) &&
259
- (!value ||
260
- value.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive ||
261
- value.value === undefined))
275
+ }
276
+ if (operator === "between" || operator === "not-between") {
277
+ return buildPropertyFilterFromRangeRule({
278
+ ...rule,
279
+ property,
280
+ operator,
281
+ value,
282
+ });
283
+ }
284
+ if (!(0, Operators_1.isUnaryPropertyFilterOperator)(operator) && isEmptyValue(value)) {
262
285
  return undefined;
286
+ }
263
287
  return { property, operator, value };
264
288
  }
289
+ function buildPropertyFilterFromRangeRule(rule) {
290
+ const { property, operator, value } = rule;
291
+ if (!value ||
292
+ value.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive ||
293
+ typeof value.value !== "string") {
294
+ return undefined;
295
+ }
296
+ const { to, from } = FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.parse(value);
297
+ if (isEmptyValue(to) || isEmptyValue(from)) {
298
+ return undefined;
299
+ }
300
+ return {
301
+ operator: operator === "between" ? "and" : "or",
302
+ rules: [
303
+ {
304
+ property,
305
+ operator: operator === "between" ? "greater-or-equal" : "less",
306
+ value: from,
307
+ },
308
+ {
309
+ property,
310
+ operator: operator === "between" ? "less-or-equal" : "greater",
311
+ value: to,
312
+ },
313
+ ],
314
+ };
315
+ }
265
316
  function createEmptyRule(groupId) {
266
317
  return {
267
318
  id: core_bentley_1.Guid.createValue(),
@@ -273,7 +324,7 @@ function createEmptyRuleGroup(groupId) {
273
324
  return {
274
325
  id,
275
326
  groupId,
276
- operator: Operators_2.PropertyFilterRuleGroupOperator.And,
327
+ operator: "and",
277
328
  items: [createEmptyRule(id)],
278
329
  };
279
330
  }
@@ -299,13 +350,17 @@ function findRule(rootGroup, path) {
299
350
  }
300
351
  function getRuleGroupItem(filter, parentId) {
301
352
  const id = core_bentley_1.Guid.createValue();
302
- if ((0, Types_1.isPropertyFilterRuleGroup)(filter))
303
- return {
304
- id,
305
- groupId: parentId,
306
- operator: filter.operator,
307
- items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),
308
- };
353
+ if ((0, Types_1.isPropertyFilterRuleGroup)(filter)) {
354
+ const rangeRule = getRangeRuleItems(filter, parentId);
355
+ return rangeRule
356
+ ? rangeRule
357
+ : {
358
+ id,
359
+ groupId: parentId,
360
+ operator: filter.operator,
361
+ items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),
362
+ };
363
+ }
309
364
  return getRuleItem(filter, id);
310
365
  }
311
366
  function getRuleItem(filter, parentId) {
@@ -317,6 +372,50 @@ function getRuleItem(filter, parentId) {
317
372
  value: filter.value,
318
373
  };
319
374
  }
375
+ function getRangeRuleItems(group, parentId) {
376
+ if (group.rules.length !== 2) {
377
+ return undefined;
378
+ }
379
+ const [from, to] = group.rules;
380
+ if ((0, Types_1.isPropertyFilterRuleGroup)(from) ||
381
+ !from.value ||
382
+ from.value.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive ||
383
+ (0, Types_1.isPropertyFilterRuleGroup)(to) ||
384
+ !to.value ||
385
+ to.value.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive ||
386
+ from.property.name !== to.property.name) {
387
+ return undefined;
388
+ }
389
+ if (from.operator === "greater-or-equal" &&
390
+ to.operator === "less-or-equal" &&
391
+ group.operator === "and") {
392
+ return {
393
+ id: core_bentley_1.Guid.createValue(),
394
+ groupId: parentId,
395
+ operator: "between",
396
+ property: from.property,
397
+ value: FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.serialize({
398
+ from: from.value,
399
+ to: to.value,
400
+ }),
401
+ };
402
+ }
403
+ if (from.operator === "less" &&
404
+ to.operator === "greater" &&
405
+ group.operator === "or") {
406
+ return {
407
+ id: core_bentley_1.Guid.createValue(),
408
+ groupId: parentId,
409
+ operator: "not-between",
410
+ property: from.property,
411
+ value: FilterBuilderRangeValue_1.PropertyFilterBuilderRuleRangeValue.serialize({
412
+ from: from.value,
413
+ to: to.value,
414
+ }),
415
+ };
416
+ }
417
+ return undefined;
418
+ }
320
419
  function convertFilterToState(filter) {
321
420
  const id = core_bentley_1.Guid.createValue();
322
421
  if ((0, Types_1.isPropertyFilterRuleGroup)(filter)) {
@@ -331,25 +430,33 @@ function convertFilterToState(filter) {
331
430
  return {
332
431
  rootGroup: {
333
432
  id,
334
- operator: Operators_2.PropertyFilterRuleGroupOperator.And,
433
+ operator: "and",
335
434
  items: [getRuleItem(filter, id)],
336
435
  },
337
436
  };
338
437
  }
438
+ function isEmptyValue(value) {
439
+ return ((value === null || value === void 0 ? void 0 : value.valueFormat) !== appui_abstract_1.PropertyValueFormat.Primitive ||
440
+ value.value === undefined ||
441
+ value.value === "");
442
+ }
339
443
  function areOperatorsSimilar(firstOperator, secondOperator) {
340
444
  return ((isOperatorEqualOrIsNotEqual(firstOperator) &&
341
445
  isOperatorEqualOrIsNotEqual(secondOperator)) ||
342
446
  (isInequalityOperator(firstOperator) &&
343
- isInequalityOperator(secondOperator)));
447
+ isInequalityOperator(secondOperator)) ||
448
+ (isRangeOperator(firstOperator) && isRangeOperator(secondOperator)));
344
449
  }
345
450
  function isOperatorEqualOrIsNotEqual(operator) {
346
- return (operator === Operators_1.PropertyFilterRuleOperator.IsEqual ||
347
- operator === Operators_1.PropertyFilterRuleOperator.IsNotEqual);
451
+ return operator === "is-equal" || operator === "is-not-equal";
348
452
  }
349
453
  function isInequalityOperator(operator) {
350
- return (operator === Operators_1.PropertyFilterRuleOperator.Less ||
351
- operator === Operators_1.PropertyFilterRuleOperator.LessOrEqual ||
352
- operator === Operators_1.PropertyFilterRuleOperator.Greater ||
353
- operator === Operators_1.PropertyFilterRuleOperator.GreaterOrEqual);
454
+ return (operator === "less" ||
455
+ operator === "less-or-equal" ||
456
+ operator === "greater" ||
457
+ operator === "greater-or-equal");
458
+ }
459
+ function isRangeOperator(operator) {
460
+ return operator === "between" || operator === "not-between";
354
461
  }
355
462
  //# 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,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PropertyFilterBuilderToolbar = void 0;
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
+ * See LICENSE.md in the project root for license terms and full copyright notice.
10
+ *--------------------------------------------------------------------------------------------*/
11
+ /** @packageDocumentation
12
+ * @module PropertyFilterBuilder
13
+ */
14
+ const react_1 = __importDefault(require("react"));
15
+ const itwinui_react_1 = require("@itwin/itwinui-react");
16
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
17
+ const UiComponents_1 = require("../UiComponents");
18
+ /** Toolbar displaying the "add" and "delete" row buttons in the filter builder
19
+ * @beta
20
+ */
21
+ const PropertyFilterBuilderToolbar = (props) => {
22
+ const { onAddChild, onDelete } = props;
23
+ return (react_1.default.createElement(itwinui_react_1.Flex, { className: "fb-toolbar fb-row-toolbar", gap: "0", justifyContent: "flex-end" },
24
+ react_1.default.createElement(itwinui_react_1.IconButton, { size: "small", className: "fb-add-rule-button", label: UiComponents_1.UiComponents.translate("filterBuilder.add"), styleType: "borderless", onClick: onAddChild },
25
+ react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null)),
26
+ react_1.default.createElement(itwinui_react_1.IconButton, { size: "small", className: "fb-remove-rule-button", label: UiComponents_1.UiComponents.translate("filterBuilder.delete"), styleType: "borderless", onClick: onDelete },
27
+ react_1.default.createElement(itwinui_icons_react_1.SvgDelete, null))));
28
+ };
29
+ exports.PropertyFilterBuilderToolbar = PropertyFilterBuilderToolbar;
30
+ //# 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,kDAA0B;AAC1B,wDAAwD;AACxD,oEAA+D;AAC/D,kDAA+C;AAY/C;;GAEG;AACI,MAAM,4BAA4B,GAAG,CAC1C,KAAwC,EACxC,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEvC,OAAO,CACL,8BAAC,oBAAI,IACH,SAAS,EAAE,2BAA2B,EACtC,GAAG,EAAC,GAAG,EACP,cAAc,EAAC,UAAU;QAEzB,8BAAC,0BAAU,IACT,IAAI,EAAE,OAAO,EACb,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,2BAAY,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAClD,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,UAAU;YAEnB,8BAAC,4BAAM,OAAG,CACC;QACb,8BAAC,0BAAU,IACT,IAAI,EAAE,OAAO,EACb,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,2BAAY,CAAC,SAAS,CAAC,sBAAsB,CAAC,EACrD,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,QAAQ;YAEjB,8BAAC,+BAAS,OAAG,CACF,CACR,CACR,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,4BAA4B,gCA+BvC","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"}