@itwin/components-react 4.8.3 → 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 (353) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/lib/cjs/components-react/UiComponents.d.ts.map +1 -1
  3. package/lib/cjs/components-react/UiComponents.js +1 -0
  4. package/lib/cjs/components-react/UiComponents.js.map +1 -1
  5. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +2 -2
  6. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  7. package/lib/cjs/components-react/common/HighlightedText.d.ts +2 -2
  8. package/lib/cjs/components-react/common/HighlightedText.d.ts.map +1 -1
  9. package/lib/cjs/components-react/common/ImageRenderer.d.ts.map +1 -1
  10. package/lib/cjs/components-react/common/ImageRenderer.js +1 -0
  11. package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
  12. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  13. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  14. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  15. package/lib/cjs/components-react/datepicker/DateField.d.ts +2 -2
  16. package/lib/cjs/components-react/datepicker/DateField.d.ts.map +1 -1
  17. package/lib/cjs/components-react/datepicker/DatePicker.d.ts +2 -2
  18. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  19. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  20. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  21. package/lib/cjs/components-react/datepicker/TimeField.d.ts +2 -2
  22. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  23. package/lib/cjs/components-react/editors/BooleanEditor.d.ts +1 -1
  24. package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -1
  25. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  26. package/lib/cjs/components-react/editors/EnumEditor.d.ts +1 -1
  27. package/lib/cjs/components-react/editors/IconEditor.d.ts +1 -1
  28. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  29. package/lib/cjs/components-react/editors/PopupButton.d.ts +2 -2
  30. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  31. package/lib/cjs/components-react/editors/ToggleEditor.d.ts +1 -1
  32. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  33. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  34. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  35. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  36. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +3 -7
  37. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  38. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  39. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  40. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js +1 -73
  41. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  42. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  43. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  44. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js +30 -0
  45. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  46. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  47. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  48. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js +76 -0
  49. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  50. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  51. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  52. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +16 -12
  53. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  54. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +38 -29
  55. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  56. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  57. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +15 -40
  58. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  59. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  60. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  61. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  62. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +43 -6
  63. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  64. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  65. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  66. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  67. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  68. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  69. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  70. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +40 -2
  71. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  72. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  73. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  74. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +151 -44
  75. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  76. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  77. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  78. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +30 -0
  79. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  80. package/lib/cjs/components-react/filter-builder/Operators.d.ts +24 -19
  81. package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -1
  82. package/lib/cjs/components-react/filter-builder/Operators.js +40 -64
  83. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -1
  84. package/lib/cjs/components-react/filter-builder/Types.d.ts +2 -2
  85. package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -1
  86. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -1
  87. package/lib/cjs/components-react/filtering/FilteringInput.d.ts +1 -1
  88. package/lib/cjs/components-react/filtering/ResultSelector.d.ts +1 -1
  89. package/lib/cjs/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  90. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -1
  91. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  92. package/lib/cjs/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  93. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  94. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  95. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  96. package/lib/cjs/components-react/properties/renderers/PropertyView.d.ts +1 -1
  97. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  98. package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  99. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  100. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  101. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  102. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  103. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  104. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  105. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  106. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  107. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  108. package/lib/cjs/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  109. package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  110. package/lib/cjs/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  111. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  112. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  113. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  114. package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  115. package/lib/cjs/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  116. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  117. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  118. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  119. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +42 -10
  120. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  121. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  122. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  123. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js +22 -1
  124. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  125. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  126. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -2
  127. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  128. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  129. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  130. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts +1 -1
  131. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  132. package/lib/cjs/components-react/toolbar/Items.d.ts +1 -1
  133. package/lib/cjs/components-react/toolbar/Items.d.ts.map +1 -1
  134. package/lib/cjs/components-react/toolbar/Overflow.d.ts +1 -1
  135. package/lib/cjs/components-react/toolbar/Overflow.d.ts.map +1 -1
  136. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts +1 -1
  137. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  138. package/lib/cjs/components-react/toolbar/PopupItem.d.ts +2 -2
  139. package/lib/cjs/components-react/toolbar/PopupItem.d.ts.map +1 -1
  140. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  141. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  142. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  143. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  144. package/lib/cjs/components-react/toolbar/Toolbar.d.ts +1 -1
  145. package/lib/cjs/components-react/toolbar/Toolbar.d.ts.map +1 -1
  146. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  147. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  148. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  149. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  150. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  151. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  152. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  153. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  154. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  155. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  156. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  157. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  158. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  159. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  160. package/lib/cjs/components-react/tree/controlled/TreeHooks.js +22 -1
  161. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  162. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  163. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  164. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  165. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  166. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  167. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  168. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  169. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  170. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  171. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  172. package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  173. package/lib/cjs/components-react.d.ts +3 -0
  174. package/lib/cjs/components-react.d.ts.map +1 -1
  175. package/lib/cjs/components-react.js +3 -0
  176. package/lib/cjs/components-react.js.map +1 -1
  177. package/lib/esm/components-react/UiComponents.d.ts.map +1 -1
  178. package/lib/esm/components-react/UiComponents.js +1 -0
  179. package/lib/esm/components-react/UiComponents.js.map +1 -1
  180. package/lib/esm/components-react/common/DelayedSpinner.d.ts +2 -2
  181. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  182. package/lib/esm/components-react/common/HighlightedText.d.ts +2 -2
  183. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  184. package/lib/esm/components-react/common/ImageRenderer.d.ts.map +1 -1
  185. package/lib/esm/components-react/common/ImageRenderer.js +1 -0
  186. package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
  187. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  188. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  189. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  190. package/lib/esm/components-react/datepicker/DateField.d.ts +2 -2
  191. package/lib/esm/components-react/datepicker/DateField.d.ts.map +1 -1
  192. package/lib/esm/components-react/datepicker/DatePicker.d.ts +2 -2
  193. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  194. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  195. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  196. package/lib/esm/components-react/datepicker/TimeField.d.ts +2 -2
  197. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  198. package/lib/esm/components-react/editors/BooleanEditor.d.ts +1 -1
  199. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -1
  200. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  201. package/lib/esm/components-react/editors/EnumEditor.d.ts +1 -1
  202. package/lib/esm/components-react/editors/IconEditor.d.ts +1 -1
  203. package/lib/esm/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  204. package/lib/esm/components-react/editors/PopupButton.d.ts +2 -2
  205. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  206. package/lib/esm/components-react/editors/ToggleEditor.d.ts +1 -1
  207. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  208. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  209. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  210. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  211. package/lib/esm/components-react/filter-builder/FilterBuilder.js +4 -8
  212. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  213. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  214. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  215. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js +0 -71
  216. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  217. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  218. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  219. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js +23 -0
  220. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  221. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  222. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  223. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js +73 -0
  224. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  225. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  226. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  227. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +20 -16
  228. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  229. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +38 -29
  230. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  231. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  232. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +17 -42
  233. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  234. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  235. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  236. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  237. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +41 -5
  238. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  239. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  240. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  241. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  242. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  243. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  244. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  245. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +39 -1
  246. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  247. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  248. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  249. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +149 -42
  250. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  251. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  252. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  253. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +23 -0
  254. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  255. package/lib/esm/components-react/filter-builder/Operators.d.ts +24 -19
  256. package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -1
  257. package/lib/esm/components-react/filter-builder/Operators.js +37 -61
  258. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -1
  259. package/lib/esm/components-react/filter-builder/Types.d.ts +2 -2
  260. package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -1
  261. package/lib/esm/components-react/filter-builder/Types.js.map +1 -1
  262. package/lib/esm/components-react/filtering/FilteringInput.d.ts +1 -1
  263. package/lib/esm/components-react/filtering/ResultSelector.d.ts +1 -1
  264. package/lib/esm/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  265. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -1
  266. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  267. package/lib/esm/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  268. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  269. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  270. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  271. package/lib/esm/components-react/properties/renderers/PropertyView.d.ts +1 -1
  272. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  273. package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  274. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  275. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  276. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  277. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  278. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  279. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  280. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  281. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  282. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  283. package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  284. package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  285. package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  286. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  287. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  288. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  289. package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  290. package/lib/esm/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  291. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  292. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  293. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  294. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +21 -9
  295. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  296. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  297. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  298. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js +20 -0
  299. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  300. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  301. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -2
  302. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  303. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  304. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  305. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts +1 -1
  306. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  307. package/lib/esm/components-react/toolbar/Items.d.ts +1 -1
  308. package/lib/esm/components-react/toolbar/Items.d.ts.map +1 -1
  309. package/lib/esm/components-react/toolbar/Overflow.d.ts +1 -1
  310. package/lib/esm/components-react/toolbar/Overflow.d.ts.map +1 -1
  311. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts +1 -1
  312. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  313. package/lib/esm/components-react/toolbar/PopupItem.d.ts +2 -2
  314. package/lib/esm/components-react/toolbar/PopupItem.d.ts.map +1 -1
  315. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  316. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  317. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  318. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  319. package/lib/esm/components-react/toolbar/Toolbar.d.ts +1 -1
  320. package/lib/esm/components-react/toolbar/Toolbar.d.ts.map +1 -1
  321. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  322. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  323. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  324. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  325. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  326. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  327. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  328. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  329. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  330. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  331. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  332. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  333. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  334. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  335. package/lib/esm/components-react/tree/controlled/TreeHooks.js +21 -1
  336. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  337. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  338. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  339. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  340. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  341. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  342. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  343. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  344. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  345. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  346. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  347. package/lib/esm/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  348. package/lib/esm/components-react.d.ts +3 -0
  349. package/lib/esm/components-react.d.ts.map +1 -1
  350. package/lib/esm/components-react.js +3 -0
  351. package/lib/esm/components-react.js.map +1 -1
  352. package/lib/public/locales/en/UiComponents.json +12 -7
  353. package/package.json +8 -8
@@ -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 cx from "classnames";
10
+ import { Anchor } from "@itwin/itwinui-react";
11
+ import { UiComponents } from "../UiComponents";
12
+ /** Component to render the operator inside of the filter builder
13
+ * @beta
14
+ */
15
+ export const PropertyFilterBuilderLogicalOperator = (props) => {
16
+ const { isDisabled, operator, onOperatorChange, className } = props;
17
+ const toggle = () => (operator === "and" ? "or" : "and");
18
+ const operatorDisplayText = operator === "and"
19
+ ? UiComponents.translate("filterBuilder.operators.and")
20
+ : UiComponents.translate("filterBuilder.operators.or");
21
+ return (React.createElement("div", { className: cx("fb-logical-operator", className) }, isDisabled ? (React.createElement("span", null, operatorDisplayText)) : (React.createElement(Anchor, { className: "fb-logical-operator-toggle", onClick: () => onOperatorChange(toggle()) }, operatorDisplayText))));
22
+ };
23
+ //# sourceMappingURL=FilterBuilderLogicalOperator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderLogicalOperator.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderLogicalOperator.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkB/C;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,KAAgD,EAChD,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEpE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,mBAAmB,GACvB,QAAQ,KAAK,KAAK;QAChB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,6BAA6B,CAAC;QACvD,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAE3D,OAAO,CACL,6BAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,IACjD,UAAU,CAAC,CAAC,CAAC,CACZ,kCAAO,mBAAmB,CAAQ,CACnC,CAAC,CAAC,CAAC,CACF,oBAAC,MAAM,IACL,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,IAExC,mBAAmB,CACb,CACV,CACG,CACP,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 cx from \"classnames\";\nimport { Anchor } from \"@itwin/itwinui-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport type { PropertyFilterRuleGroupOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderLogicalOperator]] component.\n * @beta\n */\nexport interface PropertyFilterBuilderLogicalOperatorProps {\n /** Allows toggling of operator by clicking operator text. */\n isDisabled?: boolean;\n /** Operator to combine FilterBuilderRules. Must be either \"and\" or \"or\". */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Callback that is invoked when operator changes. */\n onOperatorChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;\n /** Classname to specify CSS styling */\n className?: string;\n}\n\n/** Component to render the operator inside of the filter builder\n * @beta\n */\nexport const PropertyFilterBuilderLogicalOperator = (\n props: PropertyFilterBuilderLogicalOperatorProps\n) => {\n const { isDisabled, operator, onOperatorChange, className } = props;\n\n const toggle = () => (operator === \"and\" ? \"or\" : \"and\");\n\n const operatorDisplayText =\n operator === \"and\"\n ? UiComponents.translate(\"filterBuilder.operators.and\")\n : UiComponents.translate(\"filterBuilder.operators.or\");\n\n return (\n <div className={cx(\"fb-logical-operator\", className)}>\n {isDisabled ? (\n <span>{operatorDisplayText}</span>\n ) : (\n <Anchor\n className=\"fb-logical-operator-toggle\"\n onClick={() => onOperatorChange(toggle())}\n >\n {operatorDisplayText}\n </Anchor>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,31 @@
1
+ /** @packageDocumentation
2
+ * @module PropertyFilterBuilder
3
+ */
4
+ import type { PrimitiveValue, PropertyValue } from "@itwin/appui-abstract";
5
+ /**
6
+ * Data structure that describes range value.
7
+ * @beta
8
+ */
9
+ export interface PropertyFilterBuilderRuleRangeValue {
10
+ from: PrimitiveValue;
11
+ to: PrimitiveValue;
12
+ }
13
+ /** @beta */
14
+ export declare namespace PropertyFilterBuilderRuleRangeValue {
15
+ /**
16
+ * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].
17
+ * @beta
18
+ */
19
+ function parse(val?: PropertyValue): PropertyFilterBuilderRuleRangeValue;
20
+ /**
21
+ * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].
22
+ * @beta
23
+ */
24
+ function serialize(val: PropertyFilterBuilderRuleRangeValue): PrimitiveValue;
25
+ /**
26
+ * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.
27
+ * @beta
28
+ */
29
+ function isRangeValid({ from, to, }: PropertyFilterBuilderRuleRangeValue): boolean;
30
+ }
31
+ //# sourceMappingURL=FilterBuilderRangeValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderRangeValue.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRangeValue.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E;;;GAGG;AACH,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,cAAc,CAAC;CACpB;AAED,YAAY;AACZ,yBAAiB,mCAAmC,CAAC;IACnD;;;OAGG;IACH,SAAgB,KAAK,CACnB,GAAG,CAAC,EAAE,aAAa,GAClB,mCAAmC,CAErC;IAED;;;OAGG;IACH,SAAgB,SAAS,CACvB,GAAG,EAAE,mCAAmC,GACvC,cAAc,CAKhB;IAED;;;OAGG;IACH,SAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,EAAE,GACH,EAAE,mCAAmC,WAUrC;CACF"}
@@ -0,0 +1,73 @@
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 { PropertyValueFormat } from "@itwin/appui-abstract";
9
+ /** @beta */
10
+ export var PropertyFilterBuilderRuleRangeValue;
11
+ (function (PropertyFilterBuilderRuleRangeValue) {
12
+ /**
13
+ * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].
14
+ * @beta
15
+ */
16
+ function parse(val) {
17
+ return parseRangeValue(val);
18
+ }
19
+ PropertyFilterBuilderRuleRangeValue.parse = parse;
20
+ /**
21
+ * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].
22
+ * @beta
23
+ */
24
+ function serialize(val) {
25
+ return {
26
+ valueFormat: PropertyValueFormat.Primitive,
27
+ value: JSON.stringify(val),
28
+ };
29
+ }
30
+ PropertyFilterBuilderRuleRangeValue.serialize = serialize;
31
+ /**
32
+ * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.
33
+ * @beta
34
+ */
35
+ function isRangeValid({ from, to, }) {
36
+ if (isNumericValue(from) && isNumericValue(to)) {
37
+ return from.value < to.value;
38
+ }
39
+ if (isDateValue(from) && isDateValue(to)) {
40
+ return new Date(from.value) < new Date(to.value);
41
+ }
42
+ return false;
43
+ }
44
+ PropertyFilterBuilderRuleRangeValue.isRangeValid = isRangeValid;
45
+ })(PropertyFilterBuilderRuleRangeValue || (PropertyFilterBuilderRuleRangeValue = {}));
46
+ function isNumericValue(value) {
47
+ return typeof value.value === "number";
48
+ }
49
+ function isDateValue(value) {
50
+ return typeof value.value === "string" || value.value instanceof Date;
51
+ }
52
+ function parseRangeValue(val) {
53
+ if (!val ||
54
+ val.valueFormat !== PropertyValueFormat.Primitive ||
55
+ typeof val.value !== "string") {
56
+ return {
57
+ from: { valueFormat: PropertyValueFormat.Primitive },
58
+ to: { valueFormat: PropertyValueFormat.Primitive },
59
+ };
60
+ }
61
+ try {
62
+ const value = JSON.parse(val.value);
63
+ if (value.from !== undefined && value.to !== undefined) {
64
+ return value;
65
+ }
66
+ }
67
+ catch { }
68
+ return {
69
+ from: { valueFormat: PropertyValueFormat.Primitive },
70
+ to: { valueFormat: PropertyValueFormat.Primitive },
71
+ };
72
+ }
73
+ //# sourceMappingURL=FilterBuilderRangeValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderRangeValue.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRangeValue.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAW5D,YAAY;AACZ,MAAM,KAAW,mCAAmC,CA0CnD;AA1CD,WAAiB,mCAAmC;IAClD;;;OAGG;IACH,SAAgB,KAAK,CACnB,GAAmB;QAEnB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAJe,yCAAK,QAIpB,CAAA;IAED;;;OAGG;IACH,SAAgB,SAAS,CACvB,GAAwC;QAExC,OAAO;YACL,WAAW,EAAE,mBAAmB,CAAC,SAAS;YAC1C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;IAPe,6CAAS,YAOxB,CAAA;IAED;;;OAGG;IACH,SAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,EAAE,GACkC;QACpC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;SAC9B;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;YACxC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;SAClD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAbe,gDAAY,eAa3B,CAAA;AACH,CAAC,EA1CgB,mCAAmC,KAAnC,mCAAmC,QA0CnD;AAED,SAAS,cAAc,CACrB,KAAqB;IAErB,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAClB,KAAqB;IAErB,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CACtB,GAAmB;IAEnB,IACE,CAAC,GAAG;QACJ,GAAG,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS;QACjD,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAC7B;QACA,OAAO;YACL,IAAI,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;YACpD,EAAE,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;SACnD,CAAC;KACH;IAED,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;YACtD,OAAO,KAA4C,CAAC;SACrD;KACF;IAAC,MAAM,GAAE;IAEV,OAAO;QACL,IAAI,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;QACpD,EAAE,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;KACnD,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport type { PrimitiveValue, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\n\n/**\n * Data structure that describes range value.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleRangeValue {\n from: PrimitiveValue;\n to: PrimitiveValue;\n}\n\n/** @beta */\nexport namespace PropertyFilterBuilderRuleRangeValue {\n /**\n * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].\n * @beta\n */\n export function parse(\n val?: PropertyValue\n ): PropertyFilterBuilderRuleRangeValue {\n return parseRangeValue(val);\n }\n\n /**\n * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].\n * @beta\n */\n export function serialize(\n val: PropertyFilterBuilderRuleRangeValue\n ): PrimitiveValue {\n return {\n valueFormat: PropertyValueFormat.Primitive,\n value: JSON.stringify(val),\n };\n }\n\n /**\n * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.\n * @beta\n */\n export function isRangeValid({\n from,\n to,\n }: PropertyFilterBuilderRuleRangeValue) {\n if (isNumericValue(from) && isNumericValue(to)) {\n return from.value < to.value;\n }\n\n if (isDateValue(from) && isDateValue(to)) {\n return new Date(from.value) < new Date(to.value);\n }\n\n return false;\n }\n}\n\nfunction isNumericValue(\n value: PrimitiveValue\n): value is PrimitiveValue & { value: number } {\n return typeof value.value === \"number\";\n}\n\nfunction isDateValue(\n value: PrimitiveValue\n): value is PrimitiveValue & { value: string | Date } {\n return typeof value.value === \"string\" || value.value instanceof Date;\n}\n\nfunction parseRangeValue(\n val?: PropertyValue\n): PropertyFilterBuilderRuleRangeValue {\n if (\n !val ||\n val.valueFormat !== PropertyValueFormat.Primitive ||\n typeof val.value !== \"string\"\n ) {\n return {\n from: { valueFormat: PropertyValueFormat.Primitive },\n to: { valueFormat: PropertyValueFormat.Primitive },\n };\n }\n\n try {\n const value = JSON.parse(val.value);\n if (value.from !== undefined && value.to !== undefined) {\n return value as PropertyFilterBuilderRuleRangeValue;\n }\n } catch {}\n\n return {\n from: { valueFormat: PropertyValueFormat.Primitive },\n to: { valueFormat: PropertyValueFormat.Primitive },\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  /** @packageDocumentation
2
2
  * @module PropertyFilterBuilder
3
3
  */
4
- /// <reference types="react" />
5
4
  import "./FilterBuilderRule.scss";
5
+ import * as React from "react";
6
6
  import type { PropertyFilterBuilderRule } from "./FilterBuilderState";
7
7
  /**
8
8
  * Props for [[PropertyFilterBuilderRuleRenderer]] component.
@@ -13,11 +13,12 @@ export interface PropertyFilterBuilderRuleRendererProps {
13
13
  path: string[];
14
14
  /** Rule to render. */
15
15
  rule: PropertyFilterBuilderRule;
16
- isRemovable?: boolean;
16
+ /** Function to add rule to group */
17
+ onRuleAdded: () => void;
17
18
  }
18
19
  /**
19
20
  * Component that renders single rule in [[PropertyFilterBuilder]] component.
20
21
  * @internal
21
22
  */
22
- export declare function PropertyFilterBuilderRuleRenderer(props: PropertyFilterBuilderRuleRendererProps): JSX.Element;
23
+ export declare function PropertyFilterBuilderRuleRenderer(props: PropertyFilterBuilderRuleRendererProps): React.JSX.Element;
23
24
  //# sourceMappingURL=FilterBuilderRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRule.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAEH,OAAO,0BAA0B,CAAC;AAYlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAItE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,eAwH9C"}
1
+ {"version":3,"file":"FilterBuilderRule.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAOtE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,yBAAyB,CAAC;IAChC,oCAAoC;IACpC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,qBAoH9C"}
@@ -7,19 +7,20 @@
7
7
  */
8
8
  import "./FilterBuilderRule.scss";
9
9
  import * as React from "react";
10
- import { SvgDelete, SvgStatusError } from "@itwin/itwinui-icons-react";
11
- import { IconButton } from "@itwin/itwinui-react";
10
+ import { SvgStatusError } from "@itwin/itwinui-icons-react";
11
+ import { Flex, Text } from "@itwin/itwinui-react";
12
12
  import { PropertyFilterBuilderContext, PropertyFilterBuilderRuleRenderingContext, } from "./FilterBuilderContext";
13
- import { PropertyFilterBuilderRuleOperator } from "./FilterBuilderRuleOperator";
13
+ import { PropertyFilterBuilderRuleOperatorRenderer } from "./FilterBuilderRuleOperator";
14
14
  import { PropertyFilterBuilderRuleProperty } from "./FilterBuilderRuleProperty";
15
15
  import { PropertyFilterBuilderRuleValue } from "./FilterBuilderRuleValue";
16
- import { isUnaryPropertyFilterOperator } from "./Operators";
16
+ import { isUnaryPropertyFilterBuilderOperator, } from "./Operators";
17
+ import { PropertyFilterBuilderToolbar } from "./FilterBuilderToolbar";
17
18
  /**
18
19
  * Component that renders single rule in [[PropertyFilterBuilder]] component.
19
20
  * @internal
20
21
  */
21
22
  export function PropertyFilterBuilderRuleRenderer(props) {
22
- const { path, rule, isRemovable } = props;
23
+ const { path, rule, onRuleAdded } = props;
23
24
  const { properties, actions, onRulePropertySelected } = React.useContext(PropertyFilterBuilderContext);
24
25
  const { ruleOperatorRenderer, ruleValueRenderer, propertyRenderer, isDisabled, } = React.useContext(PropertyFilterBuilderRuleRenderingContext);
25
26
  const { property, operator, value } = rule;
@@ -37,6 +38,10 @@ export function PropertyFilterBuilderRuleRenderer(props) {
37
38
  actions.setRuleValue(path, newValue);
38
39
  }, [path, actions]);
39
40
  const removeRule = () => actions.removeItem(path);
41
+ const handleRuleAdded = () => {
42
+ actions.addItem([], "RULE");
43
+ onRuleAdded();
44
+ };
40
45
  const operatorRenderer = React.useCallback((prop) => {
41
46
  if (ruleOperatorRenderer)
42
47
  return ruleOperatorRenderer({
@@ -44,7 +49,7 @@ export function PropertyFilterBuilderRuleRenderer(props) {
44
49
  operator,
45
50
  onChange: onRuleOperatorChange,
46
51
  });
47
- return (React.createElement(PropertyFilterBuilderRuleOperator, { property: prop, onChange: onRuleOperatorChange, operator: operator }));
52
+ return (React.createElement(PropertyFilterBuilderRuleOperatorRenderer, { property: prop, onChange: onRuleOperatorChange, operator: operator }));
48
53
  }, [operator, ruleOperatorRenderer, onRuleOperatorChange]);
49
54
  const valueRenderer = React.useCallback((prop, op) => {
50
55
  if (ruleValueRenderer)
@@ -54,20 +59,19 @@ export function PropertyFilterBuilderRuleRenderer(props) {
54
59
  onChange: onRuleValueChange,
55
60
  operator: op,
56
61
  });
57
- return (React.createElement(PropertyFilterBuilderRuleValue, { property: prop, onChange: onRuleValueChange, value: value }));
62
+ return (React.createElement(PropertyFilterBuilderRuleValue, { property: prop, onChange: onRuleValueChange, value: value, operator: op }));
58
63
  }, [value, ruleValueRenderer, onRuleValueChange]);
59
- return (React.createElement("div", { className: "rule" },
60
- React.createElement("div", { className: "rule-remove-action" }, property || isRemovable ? (React.createElement(IconButton, { onClick: removeRule, styleType: "borderless", size: "small" },
61
- React.createElement(SvgDelete, null))) : null),
62
- React.createElement("div", { className: "rule-condition" },
64
+ return (React.createElement("div", { className: "fb-component-row" },
65
+ React.createElement(Flex, { className: "fb-row-container", gap: "s", alignItems: "flex-start" },
63
66
  React.createElement(PropertyFilterBuilderRuleProperty, { properties: properties, selectedProperty: rule.property, onSelectedPropertyChanged: onSelectedPropertyChanged, propertyRenderer: propertyRenderer, isDisabled: isDisabled }),
64
67
  property !== undefined ? operatorRenderer(property) : null,
65
68
  property !== undefined &&
66
69
  operator !== undefined &&
67
- !isUnaryPropertyFilterOperator(operator) ? (React.createElement("div", { className: `iui-input-container iui-with-message ${rule.errorMessage ? "iui-negative" : null}` },
68
- React.createElement("div", { className: "rule-value" }, valueRenderer(property, operator)),
69
- rule.errorMessage ? (React.createElement(React.Fragment, null,
70
- React.createElement(SvgStatusError, { className: "iui-input-icon" }),
71
- React.createElement("div", { className: "iui-message" }, rule.errorMessage))) : null)) : null)));
70
+ !isUnaryPropertyFilterBuilderOperator(operator) ? (React.createElement("div", { className: "fb-property-value" },
71
+ valueRenderer(property, operator),
72
+ rule.errorMessage ? (React.createElement(Flex, null,
73
+ React.createElement(SvgStatusError, null),
74
+ React.createElement(Text, null, rule.errorMessage))) : null)) : null,
75
+ React.createElement(PropertyFilterBuilderToolbar, { onAddChild: handleRuleAdded, onDelete: removeRule }))));
72
76
  }
73
77
  //# sourceMappingURL=FilterBuilderRule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRule.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport \"./FilterBuilderRule.scss\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { SvgDelete, SvgStatusError } from \"@itwin/itwinui-icons-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport {\n PropertyFilterBuilderContext,\n PropertyFilterBuilderRuleRenderingContext,\n} from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleOperator } from \"./FilterBuilderRuleOperator\";\nimport { PropertyFilterBuilderRuleProperty } from \"./FilterBuilderRuleProperty\";\nimport { PropertyFilterBuilderRuleValue } from \"./FilterBuilderRuleValue\";\nimport type { PropertyFilterBuilderRule } from \"./FilterBuilderState\";\nimport type { PropertyFilterRuleOperator } from \"./Operators\";\nimport { isUnaryPropertyFilterOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule. */\n path: string[];\n /** Rule to render. */\n rule: PropertyFilterBuilderRule;\n isRemovable?: boolean;\n}\n\n/**\n * Component that renders single rule in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleRenderer(\n props: PropertyFilterBuilderRuleRendererProps\n) {\n const { path, rule, isRemovable } = props;\n const { properties, actions, onRulePropertySelected } = React.useContext(\n PropertyFilterBuilderContext\n );\n const {\n ruleOperatorRenderer,\n ruleValueRenderer,\n propertyRenderer,\n isDisabled,\n } = React.useContext(PropertyFilterBuilderRuleRenderingContext);\n const { property, operator, value } = rule;\n\n const onSelectedPropertyChanged = React.useCallback(\n (newProperty?: PropertyDescription) => {\n actions.setRuleProperty(path, newProperty);\n // invoke 'onRulePropertySelected' when new property is selected. There is no way to deselect property\n // so 'newProperty' will be 'undefined' only if selected property is no longer in 'properties' list.\n if (onRulePropertySelected && newProperty)\n onRulePropertySelected(newProperty);\n },\n [path, onRulePropertySelected, actions]\n );\n\n const onRuleOperatorChange = React.useCallback(\n (newOperator: PropertyFilterRuleOperator) => {\n actions.setRuleOperator(path, newOperator);\n },\n [path, actions]\n );\n\n const onRuleValueChange = React.useCallback(\n (newValue: PropertyValue) => {\n actions.setRuleValue(path, newValue);\n },\n [path, actions]\n );\n\n const removeRule = () => actions.removeItem(path);\n\n const operatorRenderer = React.useCallback(\n (prop: PropertyDescription) => {\n if (ruleOperatorRenderer)\n return ruleOperatorRenderer({\n property: prop,\n operator,\n onChange: onRuleOperatorChange,\n });\n return (\n <PropertyFilterBuilderRuleOperator\n property={prop}\n onChange={onRuleOperatorChange}\n operator={operator}\n />\n );\n },\n [operator, ruleOperatorRenderer, onRuleOperatorChange]\n );\n\n const valueRenderer = React.useCallback(\n (prop: PropertyDescription, op: PropertyFilterRuleOperator) => {\n if (ruleValueRenderer)\n return ruleValueRenderer({\n property: prop,\n value,\n onChange: onRuleValueChange,\n operator: op,\n });\n return (\n <PropertyFilterBuilderRuleValue\n property={prop}\n onChange={onRuleValueChange}\n value={value}\n />\n );\n },\n [value, ruleValueRenderer, onRuleValueChange]\n );\n\n return (\n <div className=\"rule\">\n <div className=\"rule-remove-action\">\n {property || isRemovable ? (\n <IconButton onClick={removeRule} styleType=\"borderless\" size=\"small\">\n <SvgDelete />\n </IconButton>\n ) : null}\n </div>\n <div className=\"rule-condition\">\n <PropertyFilterBuilderRuleProperty\n properties={properties}\n selectedProperty={rule.property}\n onSelectedPropertyChanged={onSelectedPropertyChanged}\n propertyRenderer={propertyRenderer}\n isDisabled={isDisabled}\n />\n {property !== undefined ? operatorRenderer(property) : null}\n {property !== undefined &&\n operator !== undefined &&\n !isUnaryPropertyFilterOperator(operator) ? (\n <div\n className={`iui-input-container iui-with-message ${\n rule.errorMessage ? \"iui-negative\" : null\n }`}\n >\n <div className=\"rule-value\">\n {valueRenderer(property, operator)}\n </div>\n {rule.errorMessage ? (\n <>\n <SvgStatusError className=\"iui-input-icon\" />\n <div className=\"iui-message\">{rule.errorMessage}</div>\n </>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderRule.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport \"./FilterBuilderRule.scss\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { SvgStatusError } from \"@itwin/itwinui-icons-react\";\nimport { Flex, Text } from \"@itwin/itwinui-react\";\nimport {\n PropertyFilterBuilderContext,\n PropertyFilterBuilderRuleRenderingContext,\n} from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleOperatorRenderer } from \"./FilterBuilderRuleOperator\";\nimport { PropertyFilterBuilderRuleProperty } from \"./FilterBuilderRuleProperty\";\nimport { PropertyFilterBuilderRuleValue } from \"./FilterBuilderRuleValue\";\nimport type { PropertyFilterBuilderRule } from \"./FilterBuilderState\";\nimport {\n isUnaryPropertyFilterBuilderOperator,\n type PropertyFilterBuilderRuleOperator,\n} from \"./Operators\";\nimport { PropertyFilterBuilderToolbar } from \"./FilterBuilderToolbar\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule. */\n path: string[];\n /** Rule to render. */\n rule: PropertyFilterBuilderRule;\n /** Function to add rule to group */\n onRuleAdded: () => void;\n}\n\n/**\n * Component that renders single rule in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleRenderer(\n props: PropertyFilterBuilderRuleRendererProps\n) {\n const { path, rule, onRuleAdded } = props;\n const { properties, actions, onRulePropertySelected } = React.useContext(\n PropertyFilterBuilderContext\n );\n const {\n ruleOperatorRenderer,\n ruleValueRenderer,\n propertyRenderer,\n isDisabled,\n } = React.useContext(PropertyFilterBuilderRuleRenderingContext);\n const { property, operator, value } = rule;\n\n const onSelectedPropertyChanged = React.useCallback(\n (newProperty?: PropertyDescription) => {\n actions.setRuleProperty(path, newProperty);\n // invoke 'onRulePropertySelected' when new property is selected. There is no way to deselect property\n // so 'newProperty' will be 'undefined' only if selected property is no longer in 'properties' list.\n if (onRulePropertySelected && newProperty)\n onRulePropertySelected(newProperty);\n },\n [path, onRulePropertySelected, actions]\n );\n\n const onRuleOperatorChange = React.useCallback(\n (newOperator: PropertyFilterBuilderRuleOperator) => {\n actions.setRuleOperator(path, newOperator);\n },\n [path, actions]\n );\n\n const onRuleValueChange = React.useCallback(\n (newValue: PropertyValue) => {\n actions.setRuleValue(path, newValue);\n },\n [path, actions]\n );\n\n const removeRule = () => actions.removeItem(path);\n const handleRuleAdded = () => {\n actions.addItem([], \"RULE\");\n onRuleAdded();\n };\n\n const operatorRenderer = React.useCallback(\n (prop: PropertyDescription) => {\n if (ruleOperatorRenderer)\n return ruleOperatorRenderer({\n property: prop,\n operator,\n onChange: onRuleOperatorChange,\n });\n return (\n <PropertyFilterBuilderRuleOperatorRenderer\n property={prop}\n onChange={onRuleOperatorChange}\n operator={operator}\n />\n );\n },\n [operator, ruleOperatorRenderer, onRuleOperatorChange]\n );\n\n const valueRenderer = React.useCallback(\n (prop: PropertyDescription, op: PropertyFilterBuilderRuleOperator) => {\n if (ruleValueRenderer)\n return ruleValueRenderer({\n property: prop,\n value,\n onChange: onRuleValueChange,\n operator: op,\n });\n return (\n <PropertyFilterBuilderRuleValue\n property={prop}\n onChange={onRuleValueChange}\n value={value}\n operator={op}\n />\n );\n },\n [value, ruleValueRenderer, onRuleValueChange]\n );\n\n return (\n <div className=\"fb-component-row\">\n <Flex className=\"fb-row-container\" gap=\"s\" alignItems=\"flex-start\">\n <PropertyFilterBuilderRuleProperty\n properties={properties}\n selectedProperty={rule.property}\n onSelectedPropertyChanged={onSelectedPropertyChanged}\n propertyRenderer={propertyRenderer}\n isDisabled={isDisabled}\n />\n {property !== undefined ? operatorRenderer(property) : null}\n {property !== undefined &&\n operator !== undefined &&\n !isUnaryPropertyFilterBuilderOperator(operator) ? (\n <div className=\"fb-property-value\">\n {valueRenderer(property, operator)}\n {rule.errorMessage ? (\n <Flex>\n <SvgStatusError />\n <Text>{rule.errorMessage}</Text>\n </Flex>\n ) : null}\n </div>\n ) : null}\n <PropertyFilterBuilderToolbar\n onAddChild={handleRuleAdded}\n onDelete={removeRule}\n />\n </Flex>\n </div>\n );\n}\n"]}
@@ -2,44 +2,53 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
-
6
- .rule {
7
- display: grid;
8
- grid-template-columns: min-content auto;
9
- padding: 3px 0;
10
-
11
- .rule-condition {
12
- display: grid;
13
- grid-template-columns: minmax(auto, 500px) 150px minmax(auto, 100%);
14
- grid-column-gap: var(--iui-size-m);
15
- width: calc(100% - var(--iui-size-s));
16
-
17
- .iui-input-container.iui-with-message {
18
- .rule-value {
19
- grid-area: inputs;
20
- }
5
+ .fb-row {
6
+ --background-color: var(--iui-color-background);
7
+ --border-color: var(--iui-color-border);
8
+ --operator-width: 5rem;
9
+ --property-name-width: 25%;
10
+ --condition-width: 10rem;
11
+ --toolbar-width: 6.25rem;
12
+ border: 1px solid var(--iui-color-border);
13
+ display: block;
14
+ position: relative;
15
+
16
+ &:not(:last-child) {
17
+ //only show buttons on last row to prevent visual clutter
18
+ .fb-add-rule-button:first-child {
19
+ visibility: hidden;
21
20
  }
22
21
  }
23
22
 
24
- .rule-remove-action {
25
- padding-right: var(--iui-size-s);
26
- visibility: hidden;
23
+ &:not(:first-child) {
24
+ border-top: none;
27
25
  }
28
26
 
29
- &:focus-within .rule-remove-action,
30
- &:hover .rule-remove-action {
31
- visibility: visible;
27
+ > div {
28
+ background: var(--background-color);
29
+ align-items: stretch;
30
+ overflow: hidden;
32
31
  }
33
- }
34
32
 
35
- .rule-group-items > .rule {
36
- padding-bottom: 14px;
33
+ .fb-row-container {
34
+ padding-block: var(--iui-size-s);
35
+ padding-inline: var(--iui-size-m);
36
+ flex: 1;
37
+ }
38
+
39
+ .fb-row-condition {
40
+ width: var(--condition-width);
41
+ }
37
42
 
38
- &:first-child {
39
- padding-top: 14px;
43
+ .fb-property-value {
44
+ flex: 1;
45
+ width: 15rem;
46
+ display: flex;
47
+ flex-direction: column;
40
48
  }
41
49
 
42
- &:only-child {
43
- padding-top: 3px;
50
+ .fb-row-toolbar {
51
+ width: var(--toolbar-width);
52
+ margin-left: auto;
44
53
  }
45
54
  }
@@ -1,10 +1,10 @@
1
1
  /** @packageDocumentation
2
2
  * @module PropertyFilterBuilder
3
3
  */
4
- /// <reference types="react" />
5
4
  import "./FilterBuilderRuleGroup.scss";
5
+ import * as React from "react";
6
6
  import type { PropertyFilterBuilderRuleGroup } from "./FilterBuilderState";
7
- import { PropertyFilterRuleGroupOperator } from "./Operators";
7
+ import type { PropertyFilterRuleGroupOperator } from "./Operators";
8
8
  /**
9
9
  * Props for [[PropertyFilterBuilderRuleGroupRenderer]] component.
10
10
  * @internal
@@ -14,25 +14,29 @@ export interface PropertyFilterBuilderRuleGroupRendererProps {
14
14
  path: string[];
15
15
  /** Rule group to render. */
16
16
  group: PropertyFilterBuilderRuleGroup;
17
+ /** Controls whether the group operator is toggle-able. */
18
+ isGroupOperatorDisabled?: boolean;
17
19
  }
18
20
  /**
19
21
  * Component that renders group of rules in [[PropertyFilterBuilder]] component.
20
22
  * @internal
21
23
  */
22
- export declare function PropertyFilterBuilderRuleGroupRenderer(props: PropertyFilterBuilderRuleGroupRendererProps): JSX.Element;
24
+ export declare function PropertyFilterBuilderRuleGroupRenderer(props: PropertyFilterBuilderRuleGroupRendererProps): React.JSX.Element;
23
25
  /**
24
26
  * Props for [[PropertyFilterBuilderRuleGroupOperator]] component.
25
27
  * @internal
26
28
  */
27
29
  export interface PropertyFilterBuilderRuleGroupOperatorProps {
28
30
  /** Currently selected operator. */
29
- operator: PropertyFilterRuleGroupOperator;
31
+ operator: `${PropertyFilterRuleGroupOperator}`;
30
32
  /** Callback that is invoked when selected operator changes. */
31
- onChange: (operator: PropertyFilterRuleGroupOperator) => void;
33
+ onChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;
34
+ /** Controls whether the group operator is toggle-able. */
35
+ isGroupOperatorDisabled?: boolean;
32
36
  }
33
37
  /**
34
38
  * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.
35
39
  * @internal
36
40
  */
37
- export declare function PropertyFilterBuilderRuleGroupOperator(props: PropertyFilterBuilderRuleGroupOperatorProps): JSX.Element;
41
+ export declare function PropertyFilterBuilderRuleGroupOperator(props: PropertyFilterBuilderRuleGroupOperatorProps): React.JSX.Element;
38
42
  //# sourceMappingURL=FilterBuilderRuleGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAEH,OAAO,+BAA+B,CAAC;AAWvC,OAAO,KAAK,EACV,8BAA8B,EAE/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mEAAmE;IACnE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,8BAA8B,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,eA+FnD;AAED;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,eA8BnD"}
1
+ {"version":3,"file":"FilterBuilderRuleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,8BAA8B,EAE/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAGnE;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mEAAmE;IACnE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,8BAA8B,CAAC;IACtC,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,qBA0CnD;AAED;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAC/C,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,+BAA+B,EAAE,KAAK,IAAI,CAAC;IACnE,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,qBAcnD"}
@@ -7,67 +7,42 @@
7
7
  */
8
8
  import "./FilterBuilderRuleGroup.scss";
9
9
  import * as React from "react";
10
- import { SvgAdd, SvgDelete } from "@itwin/itwinui-icons-react";
11
- import { Button, IconButton, Select } from "@itwin/itwinui-react";
12
- import { UiComponents } from "../UiComponents";
13
- import { ActiveRuleGroupContext, PropertyFilterBuilderContext, } from "./FilterBuilderContext";
10
+ import { Flex } from "@itwin/itwinui-react";
11
+ import { PropertyFilterBuilderContext } from "./FilterBuilderContext";
14
12
  import { PropertyFilterBuilderRuleRenderer } from "./FilterBuilderRule";
15
13
  import { isPropertyFilterBuilderRuleGroup } from "./FilterBuilderState";
16
- import { PropertyFilterRuleGroupOperator } from "./Operators";
14
+ import { PropertyFilterBuilderLogicalOperator } from "./FilterBuilderLogicalOperator";
17
15
  /**
18
16
  * Component that renders group of rules in [[PropertyFilterBuilder]] component.
19
17
  * @internal
20
18
  */
21
19
  export function PropertyFilterBuilderRuleGroupRenderer(props) {
22
- const { path, group } = props;
23
- const { actions, ruleGroupDepthLimit } = React.useContext(PropertyFilterBuilderContext);
24
- const { onNewRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);
25
- const handleAddRule = (ruleType) => {
26
- actions.addItem(path, ruleType);
27
- onNewRuleAdded();
28
- };
29
- const removeGroup = () => actions.removeItem(path);
20
+ const { path, group, isGroupOperatorDisabled } = props;
21
+ const { actions } = React.useContext(PropertyFilterBuilderContext);
22
+ const { onRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);
30
23
  const onOperatorChange = React.useCallback((operator) => {
31
24
  actions.setRuleGroupOperator(path, operator);
32
25
  }, [path, actions]);
33
- const allowToAddGroup = ruleGroupDepthLimit === undefined || path.length < ruleGroupDepthLimit;
34
- const { focusedElement, hoveredElement, ...eventHandlers } = React.useContext(ActiveRuleGroupContext);
35
26
  const showOperator = group.items.length > 1;
36
- return (React.createElement("div", { ref: groupRef, className: "rule-group", "data-isactive": groupRef.current === focusedElement ||
37
- groupRef.current === hoveredElement, ...eventHandlers },
38
- React.createElement("div", { className: "rule-group-remove-action" }, group.groupId !== undefined && (React.createElement(IconButton, { "data-testid": "rule-group-remove", onClick: removeGroup, styleType: "borderless", size: "small" },
39
- React.createElement(SvgDelete, null)))),
40
- React.createElement("div", { className: "rule-group-content" },
41
- showOperator ? (React.createElement(PropertyFilterBuilderRuleGroupOperator, { operator: group.operator, onChange: onOperatorChange })) : null,
42
- React.createElement("div", { className: "rule-group-items" }, group.items.map((item) => (React.createElement(PropertyFilterBuilderGroupOrRule, { key: item.id, path: path, item: item, isRemovable: group.items.length > 1 })))),
43
- React.createElement("div", { className: "rule-group-actions" },
44
- React.createElement(Button, { key: "add-rule-button", "data-testid": "rule-group-add-rule", onClick: () => handleAddRule("RULE"), styleType: "borderless", size: "small", startIcon: React.createElement(SvgAdd, null) }, UiComponents.translate("filterBuilder.rule")),
45
- allowToAddGroup && (React.createElement(Button, { key: "add-rule-group-button", "data-testid": "rule-group-add-rule-group", onClick: () => handleAddRule("RULE_GROUP"), styleType: "borderless", size: "small", startIcon: React.createElement(SvgAdd, null) }, UiComponents.translate("filterBuilder.ruleGroup")))))));
27
+ return (React.createElement(Flex, { ref: groupRef, style: { alignSelf: "flex-start" }, className: "fb-group", gap: "0px" },
28
+ showOperator ? (React.createElement(PropertyFilterBuilderRuleGroupOperator, { operator: group.operator, onChange: onOperatorChange, isGroupOperatorDisabled: isGroupOperatorDisabled })) : null,
29
+ React.createElement("div", { className: "fb-wrapper" }, group.items.map((item) => (React.createElement("div", { className: "fb-row", key: item.id },
30
+ React.createElement(PropertyFilterBuilderGroupOrRule, { path: path, item: item, onRuleAdded: onRuleAdded })))))));
46
31
  }
47
32
  /**
48
33
  * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.
49
34
  * @internal
50
35
  */
51
36
  export function PropertyFilterBuilderRuleGroupOperator(props) {
52
- const { operator, onChange } = props;
53
- const options = React.useMemo(() => [
54
- {
55
- value: PropertyFilterRuleGroupOperator.And,
56
- label: UiComponents.translate("filterBuilder.operators.and"),
57
- },
58
- {
59
- value: PropertyFilterRuleGroupOperator.Or,
60
- label: UiComponents.translate("filterBuilder.operators.or"),
61
- },
62
- ], []);
63
- return (React.createElement("div", { className: "rule-group-operator" },
64
- React.createElement(Select, { options: options, value: operator, onChange: onChange, size: "small" })));
37
+ const { operator, isGroupOperatorDisabled, onChange } = props;
38
+ return (React.createElement(Flex.Item, { alignSelf: "stretch" },
39
+ React.createElement(PropertyFilterBuilderLogicalOperator, { className: "fb-group-operator", operator: operator, onOperatorChange: onChange, isDisabled: isGroupOperatorDisabled })));
65
40
  }
66
- const PropertyFilterBuilderGroupOrRule = React.memo(function PropertyFilterBuilderGroupOrRule({ path, item, isRemovable, }) {
41
+ const PropertyFilterBuilderGroupOrRule = React.memo(function PropertyFilterBuilderGroupOrRule({ path, item, onRuleAdded, }) {
67
42
  const itemPath = [...path, item.id];
68
43
  if (isPropertyFilterBuilderRuleGroup(item))
69
44
  return (React.createElement(PropertyFilterBuilderRuleGroupRenderer, { path: itemPath, group: item }));
70
- return (React.createElement(PropertyFilterBuilderRuleRenderer, { path: itemPath, rule: item, isRemovable: isRemovable }));
45
+ return (React.createElement(PropertyFilterBuilderRuleRenderer, { path: itemPath, rule: item, onRuleAdded: onRuleAdded }));
71
46
  });
72
47
  const useRulePropertyFocus = (currentGroupItemsLength) => {
73
48
  const previousGroupItemsLength = React.useRef(0);
@@ -77,12 +52,12 @@ const useRulePropertyFocus = (currentGroupItemsLength) => {
77
52
  if (isNewRuleAdded.current &&
78
53
  previousGroupItemsLength.current < currentGroupItemsLength &&
79
54
  groupRef.current) {
80
- const ruleProperties = groupRef.current.querySelectorAll(".rule-property input");
55
+ const ruleProperties = groupRef.current.querySelectorAll(".fb-property-name input");
81
56
  ruleProperties[ruleProperties.length - 1].focus();
82
57
  isNewRuleAdded.current = false;
83
58
  }
84
59
  previousGroupItemsLength.current = currentGroupItemsLength;
85
60
  }, [currentGroupItemsLength]);
86
- return { onNewRuleAdded: () => (isNewRuleAdded.current = true), groupRef };
61
+ return { onRuleAdded: () => (isNewRuleAdded.current = true), groupRef };
87
62
  };
88
63
  //# sourceMappingURL=FilterBuilderRuleGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleGroup.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport \"./FilterBuilderRuleGroup.scss\";\nimport * as React from \"react\";\nimport { SvgAdd, SvgDelete } from \"@itwin/itwinui-icons-react\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Button, IconButton, Select } from \"@itwin/itwinui-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport {\n ActiveRuleGroupContext,\n PropertyFilterBuilderContext,\n} from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleRenderer } from \"./FilterBuilderRule\";\nimport type {\n PropertyFilterBuilderRuleGroup,\n PropertyFilterBuilderRuleGroupItem,\n} from \"./FilterBuilderState\";\nimport { isPropertyFilterBuilderRuleGroup } from \"./FilterBuilderState\";\nimport { PropertyFilterRuleGroupOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule group. */\n path: string[];\n /** Rule group to render. */\n group: PropertyFilterBuilderRuleGroup;\n}\n\n/**\n * Component that renders group of rules in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupRenderer(\n props: PropertyFilterBuilderRuleGroupRendererProps\n) {\n const { path, group } = props;\n const { actions, ruleGroupDepthLimit } = React.useContext(\n PropertyFilterBuilderContext\n );\n const { onNewRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);\n\n const handleAddRule = (ruleType: \"RULE\" | \"RULE_GROUP\") => {\n actions.addItem(path, ruleType);\n onNewRuleAdded();\n };\n const removeGroup = () => actions.removeItem(path);\n\n const onOperatorChange = React.useCallback(\n (operator: PropertyFilterRuleGroupOperator) => {\n actions.setRuleGroupOperator(path, operator);\n },\n [path, actions]\n );\n\n const allowToAddGroup =\n ruleGroupDepthLimit === undefined || path.length < ruleGroupDepthLimit;\n const { focusedElement, hoveredElement, ...eventHandlers } = React.useContext(\n ActiveRuleGroupContext\n );\n\n const showOperator = group.items.length > 1;\n\n return (\n <div\n ref={groupRef}\n className=\"rule-group\"\n data-isactive={\n groupRef.current === focusedElement ||\n groupRef.current === hoveredElement\n }\n {...eventHandlers}\n >\n <div className=\"rule-group-remove-action\">\n {group.groupId !== undefined && (\n <IconButton\n data-testid=\"rule-group-remove\"\n onClick={removeGroup}\n styleType=\"borderless\"\n size=\"small\"\n >\n <SvgDelete />\n </IconButton>\n )}\n </div>\n <div className=\"rule-group-content\">\n {showOperator ? (\n <PropertyFilterBuilderRuleGroupOperator\n operator={group.operator}\n onChange={onOperatorChange}\n />\n ) : null}\n <div className=\"rule-group-items\">\n {group.items.map((item) => (\n <PropertyFilterBuilderGroupOrRule\n key={item.id}\n path={path}\n item={item}\n isRemovable={group.items.length > 1}\n />\n ))}\n </div>\n <div className=\"rule-group-actions\">\n <Button\n key=\"add-rule-button\"\n data-testid=\"rule-group-add-rule\"\n onClick={() => handleAddRule(\"RULE\")}\n styleType=\"borderless\"\n size=\"small\"\n startIcon={<SvgAdd />}\n >\n {UiComponents.translate(\"filterBuilder.rule\")}\n </Button>\n {allowToAddGroup && (\n <Button\n key=\"add-rule-group-button\"\n data-testid=\"rule-group-add-rule-group\"\n onClick={() => handleAddRule(\"RULE_GROUP\")}\n styleType=\"borderless\"\n size=\"small\"\n startIcon={<SvgAdd />}\n >\n {UiComponents.translate(\"filterBuilder.ruleGroup\")}\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupOperator]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupOperatorProps {\n /** Currently selected operator. */\n operator: PropertyFilterRuleGroupOperator;\n /** Callback that is invoked when selected operator changes. */\n onChange: (operator: PropertyFilterRuleGroupOperator) => void;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupOperator(\n props: PropertyFilterBuilderRuleGroupOperatorProps\n) {\n const { operator, onChange } = props;\n\n const options = React.useMemo<\n Array<SelectOption<PropertyFilterRuleGroupOperator>>\n >(\n () => [\n {\n value: PropertyFilterRuleGroupOperator.And,\n label: UiComponents.translate(\"filterBuilder.operators.and\"),\n },\n {\n value: PropertyFilterRuleGroupOperator.Or,\n label: UiComponents.translate(\"filterBuilder.operators.or\"),\n },\n ],\n []\n );\n\n return (\n <div className=\"rule-group-operator\">\n <Select\n options={options}\n value={operator}\n onChange={onChange}\n size=\"small\"\n />\n </div>\n );\n}\ninterface PropertyFilterBuilderGroupOrRuleProps {\n path: string[];\n item: PropertyFilterBuilderRuleGroupItem;\n isRemovable?: boolean;\n}\n\nconst PropertyFilterBuilderGroupOrRule = React.memo(\n function PropertyFilterBuilderGroupOrRule({\n path,\n item,\n isRemovable,\n }: PropertyFilterBuilderGroupOrRuleProps) {\n const itemPath = [...path, item.id];\n\n if (isPropertyFilterBuilderRuleGroup(item))\n return (\n <PropertyFilterBuilderRuleGroupRenderer path={itemPath} group={item} />\n );\n return (\n <PropertyFilterBuilderRuleRenderer\n path={itemPath}\n rule={item}\n isRemovable={isRemovable}\n />\n );\n }\n);\n\nconst useRulePropertyFocus = (currentGroupItemsLength: number) => {\n const previousGroupItemsLength = React.useRef<number>(0);\n const isNewRuleAdded = React.useRef<boolean>(false);\n const groupRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n if (\n isNewRuleAdded.current &&\n previousGroupItemsLength.current < currentGroupItemsLength &&\n groupRef.current\n ) {\n const ruleProperties =\n groupRef.current.querySelectorAll<HTMLInputElement>(\n \".rule-property input\"\n );\n ruleProperties[ruleProperties.length - 1].focus();\n isNewRuleAdded.current = false;\n }\n previousGroupItemsLength.current = currentGroupItemsLength;\n }, [currentGroupItemsLength]);\n\n return { onNewRuleAdded: () => (isNewRuleAdded.current = true), groupRef };\n};\n"]}
1
+ {"version":3,"file":"FilterBuilderRuleGroup.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport \"./FilterBuilderRuleGroup.scss\";\nimport * as React from \"react\";\nimport { Flex } from \"@itwin/itwinui-react\";\nimport { PropertyFilterBuilderContext } from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleRenderer } from \"./FilterBuilderRule\";\nimport type {\n PropertyFilterBuilderRuleGroup,\n PropertyFilterBuilderRuleGroupItem,\n} from \"./FilterBuilderState\";\nimport { isPropertyFilterBuilderRuleGroup } from \"./FilterBuilderState\";\nimport type { PropertyFilterRuleGroupOperator } from \"./Operators\";\nimport { PropertyFilterBuilderLogicalOperator } from \"./FilterBuilderLogicalOperator\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule group. */\n path: string[];\n /** Rule group to render. */\n group: PropertyFilterBuilderRuleGroup;\n /** Controls whether the group operator is toggle-able. */\n isGroupOperatorDisabled?: boolean;\n}\n\n/**\n * Component that renders group of rules in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupRenderer(\n props: PropertyFilterBuilderRuleGroupRendererProps\n) {\n const { path, group, isGroupOperatorDisabled } = props;\n const { actions } = React.useContext(PropertyFilterBuilderContext);\n const { onRuleAdded, groupRef } = useRulePropertyFocus(group.items.length);\n\n const onOperatorChange = React.useCallback(\n (operator: `${PropertyFilterRuleGroupOperator}`) => {\n actions.setRuleGroupOperator(path, operator);\n },\n [path, actions]\n );\n\n const showOperator = group.items.length > 1;\n\n return (\n <Flex\n ref={groupRef}\n style={{ alignSelf: \"flex-start\" }}\n className=\"fb-group\"\n gap=\"0px\"\n >\n {showOperator ? (\n <PropertyFilterBuilderRuleGroupOperator\n operator={group.operator}\n onChange={onOperatorChange}\n isGroupOperatorDisabled={isGroupOperatorDisabled}\n />\n ) : null}\n <div className=\"fb-wrapper\">\n {group.items.map((item) => (\n <div className=\"fb-row\" key={item.id}>\n <PropertyFilterBuilderGroupOrRule\n path={path}\n item={item}\n onRuleAdded={onRuleAdded}\n />\n </div>\n ))}\n </div>\n </Flex>\n );\n}\n\n/**\n * Props for [[PropertyFilterBuilderRuleGroupOperator]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroupOperatorProps {\n /** Currently selected operator. */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Callback that is invoked when selected operator changes. */\n onChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;\n /** Controls whether the group operator is toggle-able. */\n isGroupOperatorDisabled?: boolean;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleGroupOperator(\n props: PropertyFilterBuilderRuleGroupOperatorProps\n) {\n const { operator, isGroupOperatorDisabled, onChange } = props;\n\n return (\n <Flex.Item alignSelf=\"stretch\">\n <PropertyFilterBuilderLogicalOperator\n className=\"fb-group-operator\"\n operator={operator}\n onOperatorChange={onChange}\n isDisabled={isGroupOperatorDisabled}\n />\n </Flex.Item>\n );\n}\ninterface PropertyFilterBuilderGroupOrRuleProps {\n path: string[];\n item: PropertyFilterBuilderRuleGroupItem;\n onRuleAdded: () => void;\n}\n\nconst PropertyFilterBuilderGroupOrRule = React.memo(\n function PropertyFilterBuilderGroupOrRule({\n path,\n item,\n onRuleAdded,\n }: PropertyFilterBuilderGroupOrRuleProps) {\n const itemPath = [...path, item.id];\n\n if (isPropertyFilterBuilderRuleGroup(item))\n return (\n <PropertyFilterBuilderRuleGroupRenderer path={itemPath} group={item} />\n );\n return (\n <PropertyFilterBuilderRuleRenderer\n path={itemPath}\n rule={item}\n onRuleAdded={onRuleAdded}\n />\n );\n }\n);\n\nconst useRulePropertyFocus = (currentGroupItemsLength: number) => {\n const previousGroupItemsLength = React.useRef<number>(0);\n const isNewRuleAdded = React.useRef<boolean>(false);\n const groupRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n if (\n isNewRuleAdded.current &&\n previousGroupItemsLength.current < currentGroupItemsLength &&\n groupRef.current\n ) {\n const ruleProperties =\n groupRef.current.querySelectorAll<HTMLInputElement>(\n \".fb-property-name input\"\n );\n ruleProperties[ruleProperties.length - 1].focus();\n isNewRuleAdded.current = false;\n }\n previousGroupItemsLength.current = currentGroupItemsLength;\n }, [currentGroupItemsLength]);\n\n return { onRuleAdded: () => (isNewRuleAdded.current = true), groupRef };\n};\n"]}