@finos/legend-query-builder 0.0.2 → 0.1.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 (348) hide show
  1. package/lib/components/QueryBuilder.d.ts.map +1 -1
  2. package/lib/components/QueryBuilder.js +14 -4
  3. package/lib/components/QueryBuilder.js.map +1 -1
  4. package/lib/components/QueryBuilderDiffPanel.d.ts +22 -0
  5. package/lib/components/QueryBuilderDiffPanel.d.ts.map +1 -0
  6. package/lib/components/QueryBuilderDiffPanel.js +103 -0
  7. package/lib/components/QueryBuilderDiffPanel.js.map +1 -0
  8. package/lib/components/QueryBuilderParametersPanel.js +2 -2
  9. package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
  10. package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
  11. package/lib/components/QueryBuilderResultPanel.js +8 -9
  12. package/lib/components/QueryBuilderResultPanel.js.map +1 -1
  13. package/lib/components/QueryBuilderSideBar.js +1 -1
  14. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  15. package/lib/components/ServiceQuerySetupUtils.d.ts +23 -0
  16. package/lib/components/ServiceQuerySetupUtils.d.ts.map +1 -0
  17. package/lib/components/ServiceQuerySetupUtils.js +25 -0
  18. package/lib/components/ServiceQuerySetupUtils.js.map +1 -0
  19. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
  20. package/lib/components/explorer/QueryBuilderExplorerPanel.js +4 -10
  21. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  22. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
  23. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.js +8 -6
  24. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
  25. package/lib/components/explorer/{QueryBuilderMilestoneEditor.d.ts → QueryBuilderMilestoningEditor.d.ts} +1 -1
  26. package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -0
  27. package/lib/components/explorer/{QueryBuilderMilestoneEditor.js → QueryBuilderMilestoningEditor.js} +9 -9
  28. package/lib/components/explorer/QueryBuilderMilestoningEditor.js.map +1 -0
  29. package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
  30. package/lib/components/explorer/QueryBuilderPropertySearchPanel.js +69 -61
  31. package/lib/components/explorer/QueryBuilderPropertySearchPanel.js.map +1 -1
  32. package/lib/components/fetch-structure/QueryBuilderProjectionPanel.d.ts.map +1 -1
  33. package/lib/components/fetch-structure/QueryBuilderProjectionPanel.js +1 -3
  34. package/lib/components/fetch-structure/QueryBuilderProjectionPanel.js.map +1 -1
  35. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  36. package/lib/components/filter/QueryBuilderFilterPanel.js +3 -7
  37. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  38. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.d.ts.map +1 -1
  39. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.js +7 -2
  40. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.js.map +1 -1
  41. package/lib/graphManager/QueryBuilderHashUtils.d.ts +84 -0
  42. package/lib/graphManager/QueryBuilderHashUtils.d.ts.map +1 -0
  43. package/lib/graphManager/QueryBuilderHashUtils.js +91 -0
  44. package/lib/graphManager/QueryBuilderHashUtils.js.map +1 -0
  45. package/lib/index.css +17 -1
  46. package/lib/index.css.map +1 -1
  47. package/lib/index.d.ts +3 -0
  48. package/lib/index.d.ts.map +1 -1
  49. package/lib/index.js +3 -0
  50. package/lib/index.js.map +1 -1
  51. package/lib/package.json +6 -4
  52. package/lib/stores/QueryBuilderChangeDetectionState.d.ts +26 -5
  53. package/lib/stores/QueryBuilderChangeDetectionState.d.ts.map +1 -1
  54. package/lib/stores/QueryBuilderChangeDetectionState.js +82 -10
  55. package/lib/stores/QueryBuilderChangeDetectionState.js.map +1 -1
  56. package/lib/stores/QueryBuilderConfig.d.ts +1 -0
  57. package/lib/stores/QueryBuilderConfig.d.ts.map +1 -1
  58. package/lib/stores/QueryBuilderConfig.js +1 -0
  59. package/lib/stores/QueryBuilderConfig.js.map +1 -1
  60. package/lib/stores/QueryBuilderMilestoningState.d.ts +3 -1
  61. package/lib/stores/QueryBuilderMilestoningState.d.ts.map +1 -1
  62. package/lib/stores/QueryBuilderMilestoningState.js +10 -0
  63. package/lib/stores/QueryBuilderMilestoningState.js.map +1 -1
  64. package/lib/stores/QueryBuilderParametersState.d.ts +3 -1
  65. package/lib/stores/QueryBuilderParametersState.d.ts.map +1 -1
  66. package/lib/stores/QueryBuilderParametersState.js +10 -1
  67. package/lib/stores/QueryBuilderParametersState.js.map +1 -1
  68. package/lib/stores/QueryBuilderPropertyEditorState.d.ts +5 -3
  69. package/lib/stores/QueryBuilderPropertyEditorState.d.ts.map +1 -1
  70. package/lib/stores/QueryBuilderPropertyEditorState.js +15 -5
  71. package/lib/stores/QueryBuilderPropertyEditorState.js.map +1 -1
  72. package/lib/stores/QueryBuilderResultState.d.ts +5 -3
  73. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  74. package/lib/stores/QueryBuilderResultState.js +26 -6
  75. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  76. package/lib/stores/QueryBuilderState.d.ts +3 -5
  77. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  78. package/lib/stores/QueryBuilderState.js +32 -22
  79. package/lib/stores/QueryBuilderState.js.map +1 -1
  80. package/lib/stores/QueryBuilderStateTestUtils.js +1 -1
  81. package/lib/stores/QueryBuilderStateTestUtils.js.map +1 -1
  82. package/lib/stores/QueryBuilderTextEditorState.js +1 -1
  83. package/lib/stores/QueryBuilderTextEditorState.js.map +1 -1
  84. package/lib/stores/QueryBuilderUnsupportedQueryState.d.ts +4 -2
  85. package/lib/stores/QueryBuilderUnsupportedQueryState.d.ts.map +1 -1
  86. package/lib/stores/QueryBuilderUnsupportedQueryState.js +10 -1
  87. package/lib/stores/QueryBuilderUnsupportedQueryState.js.map +1 -1
  88. package/lib/stores/ServiceInfo.d.ts +28 -0
  89. package/lib/stores/ServiceInfo.d.ts.map +1 -0
  90. package/lib/stores/ServiceInfo.js +34 -0
  91. package/lib/stores/ServiceInfo.js.map +1 -0
  92. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +6 -6
  93. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  94. package/lib/stores/explorer/QueryBuilderExplorerState.js +19 -14
  95. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  96. package/lib/stores/explorer/QueryBuilderPropertySearchState.d.ts +36 -17
  97. package/lib/stores/explorer/QueryBuilderPropertySearchState.d.ts.map +1 -1
  98. package/lib/stores/explorer/QueryBuilderPropertySearchState.js +203 -161
  99. package/lib/stores/explorer/QueryBuilderPropertySearchState.js.map +1 -1
  100. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +5 -3
  101. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
  102. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js +1 -0
  103. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
  104. package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.d.ts +1 -1
  105. package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.d.ts.map +1 -1
  106. package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.js +3 -3
  107. package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.js.map +1 -1
  108. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +3 -1
  109. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  110. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +9 -1
  111. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  112. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts +7 -5
  113. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -1
  114. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js +20 -5
  115. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
  116. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionColumnState.d.ts +7 -4
  117. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
  118. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionColumnState.js +20 -5
  119. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  120. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts +6 -5
  121. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts.map +1 -1
  122. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js +14 -9
  123. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js.map +1 -1
  124. package/lib/stores/fetch-structure/projection/QueryResultSetModifierState.d.ts +6 -3
  125. package/lib/stores/fetch-structure/projection/QueryResultSetModifierState.d.ts.map +1 -1
  126. package/lib/stores/fetch-structure/projection/QueryResultSetModifierState.js +28 -5
  127. package/lib/stores/fetch-structure/projection/QueryResultSetModifierState.js.map +1 -1
  128. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregateOperator.d.ts +4 -1
  129. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregateOperator.d.ts.map +1 -1
  130. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregateOperator.js +7 -1
  131. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregateOperator.js.map +1 -1
  132. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregationState.d.ts +8 -5
  133. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregationState.d.ts.map +1 -1
  134. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregationState.js +24 -7
  135. package/lib/stores/fetch-structure/projection/aggregation/QueryBuilderAggregationState.js.map +1 -1
  136. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Average.d.ts +3 -1
  137. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Average.d.ts.map +1 -1
  138. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Average.js +5 -0
  139. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Average.js.map +1 -1
  140. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Count.d.ts +3 -1
  141. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Count.d.ts.map +1 -1
  142. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Count.js +5 -0
  143. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Count.js.map +1 -1
  144. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Distinct.d.ts +3 -1
  145. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Distinct.d.ts.map +1 -1
  146. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Distinct.js +7 -0
  147. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Distinct.js.map +1 -1
  148. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_DistinctCount.d.ts +3 -1
  149. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_DistinctCount.d.ts.map +1 -1
  150. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_DistinctCount.js +7 -1
  151. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_DistinctCount.js.map +1 -1
  152. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_JoinString.d.ts +3 -1
  153. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_JoinString.d.ts.map +1 -1
  154. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_JoinString.js +7 -1
  155. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_JoinString.js.map +1 -1
  156. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Max.d.ts +3 -1
  157. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Max.d.ts.map +1 -1
  158. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Max.js +5 -0
  159. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Max.js.map +1 -1
  160. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Min.d.ts +3 -1
  161. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Min.d.ts.map +1 -1
  162. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Min.js +5 -0
  163. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Min.js.map +1 -1
  164. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.d.ts +3 -1
  165. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.d.ts.map +1 -1
  166. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.js +7 -0
  167. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.js.map +1 -1
  168. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.d.ts +3 -1
  169. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.d.ts.map +1 -1
  170. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.js +7 -0
  171. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.js.map +1 -1
  172. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Sum.d.ts +3 -1
  173. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Sum.d.ts.map +1 -1
  174. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Sum.js +5 -0
  175. package/lib/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Sum.js.map +1 -1
  176. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterOperator.d.ts +3 -1
  177. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterOperator.d.ts.map +1 -1
  178. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterOperator.js.map +1 -1
  179. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterState.d.ts +14 -8
  180. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterState.d.ts.map +1 -1
  181. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterState.js +54 -4
  182. package/lib/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterState.js.map +1 -1
  183. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Contain.d.ts +4 -1
  184. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Contain.d.ts.map +1 -1
  185. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js +12 -1
  186. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js.map +1 -1
  187. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.d.ts +4 -1
  188. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.d.ts.map +1 -1
  189. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js +12 -1
  190. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js.map +1 -1
  191. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Equal.d.ts +4 -1
  192. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
  193. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js +10 -1
  194. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
  195. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.d.ts +3 -1
  196. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
  197. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js +7 -1
  198. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
  199. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.d.ts +1 -0
  200. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.d.ts.map +1 -1
  201. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.js +7 -0
  202. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.js.map +1 -1
  203. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_In.d.ts +4 -1
  204. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_In.d.ts.map +1 -1
  205. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_In.js +10 -1
  206. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_In.js.map +1 -1
  207. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.d.ts +4 -1
  208. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.d.ts.map +1 -1
  209. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.js +12 -0
  210. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.js.map +1 -1
  211. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.d.ts +3 -1
  212. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
  213. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js +7 -1
  214. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
  215. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThanEqual.d.ts +3 -1
  216. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThanEqual.d.ts.map +1 -1
  217. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThanEqual.js +7 -0
  218. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThanEqual.js.map +1 -1
  219. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.d.ts +5 -2
  220. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.d.ts.map +1 -1
  221. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js +12 -1
  222. package/lib/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js.map +1 -1
  223. package/lib/stores/filter/QueryBuilderFilterOperator.d.ts +3 -1
  224. package/lib/stores/filter/QueryBuilderFilterOperator.d.ts.map +1 -1
  225. package/lib/stores/filter/QueryBuilderFilterOperator.js.map +1 -1
  226. package/lib/stores/filter/QueryBuilderFilterState.d.ts +14 -8
  227. package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
  228. package/lib/stores/filter/QueryBuilderFilterState.js +54 -9
  229. package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
  230. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts +4 -1
  231. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
  232. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +10 -1
  233. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
  234. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts +4 -1
  235. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
  236. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +10 -1
  237. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
  238. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts +4 -1
  239. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
  240. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +8 -1
  241. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
  242. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts +3 -1
  243. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
  244. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +7 -1
  245. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
  246. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts +3 -1
  247. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
  248. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +7 -1
  249. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
  250. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts +4 -1
  251. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts.map +1 -1
  252. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +8 -0
  253. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
  254. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts +4 -1
  255. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts.map +1 -1
  256. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js +10 -0
  257. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -1
  258. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts +3 -1
  259. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
  260. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +5 -1
  261. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
  262. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts +3 -1
  263. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
  264. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +7 -1
  265. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
  266. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts +4 -1
  267. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
  268. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +10 -1
  269. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
  270. package/lib/stores/workflows/ServiceQueryBuilderState.d.ts.map +1 -1
  271. package/lib/stores/workflows/ServiceQueryBuilderState.js +15 -7
  272. package/lib/stores/workflows/ServiceQueryBuilderState.js.map +1 -1
  273. package/package.json +12 -10
  274. package/src/components/QueryBuilder.tsx +41 -1
  275. package/src/components/QueryBuilderDiffPanel.tsx +222 -0
  276. package/src/components/QueryBuilderParametersPanel.tsx +2 -2
  277. package/src/components/QueryBuilderResultPanel.tsx +31 -18
  278. package/src/components/QueryBuilderSideBar.tsx +1 -1
  279. package/src/components/ServiceQuerySetupUtils.tsx +54 -0
  280. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +5 -12
  281. package/src/components/explorer/QueryBuilderFunctionsExplorerPanel.tsx +24 -14
  282. package/src/components/explorer/{QueryBuilderMilestoneEditor.tsx → QueryBuilderMilestoningEditor.tsx} +12 -8
  283. package/src/components/explorer/QueryBuilderPropertySearchPanel.tsx +156 -145
  284. package/src/components/fetch-structure/QueryBuilderProjectionPanel.tsx +1 -5
  285. package/src/components/filter/QueryBuilderFilterPanel.tsx +3 -13
  286. package/src/components/shared/QueryBuilderPropertyInfoTooltip.tsx +22 -0
  287. package/src/graphManager/QueryBuilderHashUtils.ts +95 -0
  288. package/src/index.ts +3 -0
  289. package/src/stores/QueryBuilderChangeDetectionState.ts +112 -10
  290. package/src/stores/QueryBuilderConfig.ts +2 -0
  291. package/src/stores/QueryBuilderMilestoningState.ts +12 -1
  292. package/src/stores/QueryBuilderParametersState.ts +15 -2
  293. package/src/stores/QueryBuilderPropertyEditorState.ts +19 -7
  294. package/src/stores/QueryBuilderResultState.ts +30 -8
  295. package/src/stores/QueryBuilderState.ts +50 -37
  296. package/src/stores/QueryBuilderStateTestUtils.ts +1 -1
  297. package/src/stores/QueryBuilderTextEditorState.ts +1 -1
  298. package/src/stores/QueryBuilderUnsupportedQueryState.ts +13 -3
  299. package/src/stores/ServiceInfo.ts +52 -0
  300. package/src/stores/explorer/QueryBuilderExplorerState.ts +26 -30
  301. package/src/stores/explorer/QueryBuilderPropertySearchState.ts +259 -193
  302. package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +8 -3
  303. package/src/stores/fetch-structure/QueryBuilderFetchStructureState.ts +4 -4
  304. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +18 -2
  305. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +31 -6
  306. package/src/stores/fetch-structure/projection/QueryBuilderProjectionColumnState.ts +34 -9
  307. package/src/stores/fetch-structure/projection/QueryBuilderProjectionState.ts +23 -16
  308. package/src/stores/fetch-structure/projection/QueryResultSetModifierState.ts +38 -8
  309. package/src/stores/fetch-structure/projection/aggregation/QueryBuilderAggregateOperator.ts +15 -2
  310. package/src/stores/fetch-structure/projection/aggregation/QueryBuilderAggregationState.ts +37 -12
  311. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Average.ts +10 -1
  312. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Count.ts +10 -1
  313. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Distinct.ts +12 -1
  314. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_DistinctCount.ts +17 -2
  315. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_JoinString.ts +17 -2
  316. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Max.ts +10 -1
  317. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Min.ts +10 -1
  318. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.ts +12 -1
  319. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.ts +12 -1
  320. package/src/stores/fetch-structure/projection/aggregation/operators/QueryBuilderAggregateOperator_Sum.ts +10 -1
  321. package/src/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterOperator.ts +4 -2
  322. package/src/stores/fetch-structure/projection/post-filter/QueryBuilderPostFilterState.ts +78 -10
  323. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Contain.ts +19 -1
  324. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.ts +22 -2
  325. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_Equal.ts +17 -1
  326. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.ts +13 -1
  327. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThanEqual.ts +8 -0
  328. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_In.ts +20 -2
  329. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_IsEmpty.ts +18 -1
  330. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.ts +13 -1
  331. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_LessThanEqual.ts +12 -1
  332. package/src/stores/fetch-structure/projection/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.ts +26 -3
  333. package/src/stores/filter/QueryBuilderFilterOperator.ts +4 -2
  334. package/src/stores/filter/QueryBuilderFilterState.ts +80 -22
  335. package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +20 -2
  336. package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +20 -2
  337. package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +18 -2
  338. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +16 -2
  339. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +16 -2
  340. package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +14 -1
  341. package/src/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.ts +16 -1
  342. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +14 -2
  343. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +16 -2
  344. package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +20 -2
  345. package/src/stores/workflows/ServiceQueryBuilderState.ts +24 -9
  346. package/tsconfig.json +7 -2
  347. package/lib/components/explorer/QueryBuilderMilestoneEditor.d.ts.map +0 -1
  348. package/lib/components/explorer/QueryBuilderMilestoneEditor.js.map +0 -1
@@ -21,17 +21,27 @@ import {
21
21
  getAllClassDerivedProperties,
22
22
  PrimitiveType,
23
23
  PRIMITIVE_TYPE,
24
+ CORE_PURE_PATH,
25
+ PURE_DOC_TAG,
24
26
  } from '@finos/legend-graph';
25
27
  import {
28
+ ActionState,
26
29
  addUniqueEntry,
27
30
  deleteEntry,
28
31
  guaranteeNonNullable,
29
32
  } from '@finos/legend-shared';
30
- import { makeAutoObservable, observable, computed, action } from 'mobx';
33
+ import {
34
+ observable,
35
+ computed,
36
+ action,
37
+ makeObservable,
38
+ runInAction,
39
+ } from 'mobx';
31
40
  import {
32
41
  QUERY_BUILDER_PROPERTY_SEARCH_MAX_DEPTH,
33
42
  QUERY_BUILDER_PROPERTY_SEARCH_RESULTS_LIMIT,
34
43
  QUERY_BUILDER_PROPERTY_SEARCH_TYPE,
44
+ QUERY_BUILDER_PROPERTY_SEARCH_MAX_NODES,
35
45
  } from '../QueryBuilderConfig.js';
36
46
  import {
37
47
  getQueryBuilderPropertyNodeData,
@@ -41,206 +51,190 @@ import {
41
51
  QueryBuilderExplorerTreeSubTypeNodeData,
42
52
  } from './QueryBuilderExplorerState.js';
43
53
  import type { QueryBuilderState } from '../QueryBuilderState.js';
54
+ import { Fuse } from '@finos/legend-art';
55
+ import { TextSearchAdvancedConfigState } from '@finos/legend-application';
44
56
 
45
57
  export class QueryBuilderPropertySearchState {
46
58
  queryBuilderState: QueryBuilderState;
47
- // TODO: Check if we could clean this up as this seems quite complicated and its purpose is not clear to me
48
- // See https://github.com/finos/legend-studio/pull/1212
49
- allMappedPropertyNodes: QueryBuilderExplorerTreeNodeData[] = [];
50
- searchedMappedPropertyNodes: QueryBuilderExplorerTreeNodeData[] = [];
59
+
60
+ /**
61
+ * When we initialize property search engine, we practically extend
62
+ * the existing explorer by a few depth. As such, we create new explorer
63
+ * nodes which are not part of the main explorer tree. Together with the
64
+ * nodes already explored in the tree, these nodes are stored here to help
65
+ * searching. Think of this as the knowledge base of property search
66
+ *
67
+ * NOTE: a big reason why we want to store these as explorer tree nodes
68
+ * is that we could interact with the searched nodes, i.e. drag them to
69
+ * various panels to create filter, fetch-structure, etc.
70
+ */
71
+ indexedExplorerTreeNodes: QueryBuilderExplorerTreeNodeData[] = [];
72
+
73
+ // search
74
+ searchEngine: Fuse<QueryBuilderExplorerTreeNodeData>;
75
+ searchConfigurationState: TextSearchAdvancedConfigState;
76
+ searchState = ActionState.create();
77
+ searchText = '';
78
+ searchResults: QueryBuilderExplorerTreeNodeData[] = [];
79
+ isOverSearchLimit = false;
51
80
  isSearchPanelOpen = false;
52
81
  isSearchPanelHidden = false;
53
- searchText = '';
54
- filterByMultiple: boolean;
55
- typeFilters: QUERY_BUILDER_PROPERTY_SEARCH_TYPE[];
82
+ showSearchConfigurationMenu = false;
83
+
84
+ // filter
85
+ typeFilters = [
86
+ QUERY_BUILDER_PROPERTY_SEARCH_TYPE.CLASS,
87
+ QUERY_BUILDER_PROPERTY_SEARCH_TYPE.STRING,
88
+ QUERY_BUILDER_PROPERTY_SEARCH_TYPE.BOOLEAN,
89
+ QUERY_BUILDER_PROPERTY_SEARCH_TYPE.NUMBER,
90
+ QUERY_BUILDER_PROPERTY_SEARCH_TYPE.DATE,
91
+ ];
56
92
 
57
93
  constructor(queryBuilderState: QueryBuilderState) {
58
- makeAutoObservable(this, {
59
- queryBuilderState: false,
60
- searchedMappedPropertyNodes: observable,
94
+ makeObservable(this, {
95
+ indexedExplorerTreeNodes: observable,
96
+ searchText: observable,
97
+ searchResults: observable,
98
+ isOverSearchLimit: observable,
61
99
  isSearchPanelOpen: observable,
62
100
  isSearchPanelHidden: observable,
63
- searchText: observable,
64
- filteredPropertyNodes: computed,
101
+ showSearchConfigurationMenu: observable,
102
+ typeFilters: observable,
103
+ filteredSearchResults: computed,
104
+ search: action,
105
+ resetSearch: action,
65
106
  setSearchText: action,
66
- setSearchedMappedPropertyNodes: action,
107
+ setShowSearchConfigurationMenu: action,
67
108
  setIsSearchPanelOpen: action,
68
109
  setIsSearchPanelHidden: action,
69
- refreshPropertyState: action,
70
- setFilterByMultiple: action,
71
- toggleTypeFilter: action,
110
+ toggleFilterForType: action,
111
+ initialize: action,
72
112
  });
73
113
 
74
114
  this.queryBuilderState = queryBuilderState;
75
- this.filterByMultiple = true;
76
- this.typeFilters = [
77
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.CLASS,
78
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.STRING,
79
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.BOOLEAN,
80
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.NUMBER,
81
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.DATE,
82
- ];
115
+ this.searchConfigurationState = new TextSearchAdvancedConfigState(
116
+ (): void => this.search(),
117
+ );
118
+ this.searchEngine = new Fuse(this.indexedExplorerTreeNodes);
83
119
  }
84
120
 
85
- toggleTypeFilter(val: QUERY_BUILDER_PROPERTY_SEARCH_TYPE): void {
86
- if (this.typeFilters.includes(val)) {
87
- deleteEntry(this.typeFilters, val);
88
- } else {
89
- addUniqueEntry(this.typeFilters, val);
90
- }
121
+ setIsSearchPanelOpen(val: boolean): void {
122
+ this.isSearchPanelOpen = val;
91
123
  }
92
124
 
93
- setFilterByMultiple(val: boolean): void {
94
- this.filterByMultiple = val;
125
+ setIsSearchPanelHidden(val: boolean): void {
126
+ this.isSearchPanelHidden = val;
95
127
  }
96
128
 
97
- getMultiplePropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
98
- return this.searchedMappedPropertyNodes.filter((node) => {
99
- if (node instanceof QueryBuilderExplorerTreePropertyNodeData) {
100
- if (
101
- node.property.multiplicity.upperBound === undefined ||
102
- node.property.multiplicity.upperBound > 1
103
- ) {
104
- return true;
105
- }
106
- const parentNode = this.allMappedPropertyNodes.find(
107
- (pn) => pn.id === node.parentId,
108
- );
109
- if (
110
- parentNode instanceof QueryBuilderExplorerTreePropertyNodeData &&
111
- (parentNode.property.multiplicity.upperBound === undefined ||
112
- parentNode.property.multiplicity.upperBound > 1)
113
- ) {
114
- return true;
115
- }
116
- }
117
- return false;
118
- });
129
+ setShowSearchConfigurationMenu(val: boolean): void {
130
+ this.showSearchConfigurationMenu = val;
119
131
  }
120
132
 
121
- classPropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
122
- return this.searchedMappedPropertyNodes.filter((node) => {
123
- if (node.type instanceof Class) {
124
- return true;
125
- }
126
- return false;
127
- });
133
+ setSearchText(val: string): void {
134
+ this.searchText = val;
128
135
  }
129
136
 
130
- stringPropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
131
- return this.searchedMappedPropertyNodes.filter((node) => {
132
- if (
133
- node.type instanceof PrimitiveType &&
134
- node.type.name === PRIMITIVE_TYPE.STRING
135
- ) {
136
- return true;
137
- }
138
- return false;
139
- });
137
+ resetSearch(): void {
138
+ this.searchText = '';
139
+ this.searchResults = [];
140
+ this.searchState.complete();
140
141
  }
141
142
 
142
- numberPropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
143
- return this.searchedMappedPropertyNodes.filter((node) => {
144
- if (
145
- node.type instanceof PrimitiveType &&
146
- (node.type.name === PRIMITIVE_TYPE.DECIMAL ||
147
- node.type.name === PRIMITIVE_TYPE.NUMBER ||
148
- node.type.name === PRIMITIVE_TYPE.INTEGER ||
149
- node.type.name === PRIMITIVE_TYPE.FLOAT)
150
- ) {
151
- return true;
152
- }
153
- return false;
154
- });
143
+ toggleFilterForType(val: QUERY_BUILDER_PROPERTY_SEARCH_TYPE): void {
144
+ if (this.typeFilters.includes(val)) {
145
+ deleteEntry(this.typeFilters, val);
146
+ } else {
147
+ addUniqueEntry(this.typeFilters, val);
148
+ }
155
149
  }
156
150
 
157
- datePropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
158
- return this.searchedMappedPropertyNodes.filter((node) => {
159
- if (
160
- node.type instanceof PrimitiveType &&
161
- (node.type.name === PRIMITIVE_TYPE.DATE ||
162
- node.type.name === PRIMITIVE_TYPE.DATETIME ||
163
- node.type.name === PRIMITIVE_TYPE.STRICTDATE ||
164
- node.type.name === PRIMITIVE_TYPE.STRICTTIME ||
165
- node.type.name === PRIMITIVE_TYPE.LATESTDATE)
166
- ) {
167
- return true;
168
- }
169
- return false;
170
- });
171
- }
151
+ search(): void {
152
+ if (!this.searchText) {
153
+ this.searchResults = [];
154
+ return;
155
+ }
156
+ this.searchState.inProgress();
172
157
 
173
- booleanPropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
174
- return this.searchedMappedPropertyNodes.filter((node) => {
175
- if (
176
- node.type instanceof PrimitiveType &&
177
- node.type.name === PRIMITIVE_TYPE.BOOLEAN
178
- ) {
179
- return true;
180
- }
181
- return false;
182
- });
183
- }
158
+ // NOTE: performanced of fuzzy search is impacted by the number of indexed entries and the length
159
+ // of the search pattern, so to a certain extent this could become laggy. If this becomes too inconvenient
160
+ // for the users, we might need to use another fuzzy-search implementation, or have appropriate search
161
+ // policy, e.g. limit length of search text, etc.
162
+ //
163
+ // See https://github.com/farzher/fuzzysort
164
+ const searchResults = Array.from(
165
+ this.searchEngine
166
+ .search(
167
+ this.searchConfigurationState.generateSearchText(
168
+ this.searchText.toLowerCase(),
169
+ ),
170
+ {
171
+ // NOTE: search for limit + 1 item so we can know if there are more search results
172
+ limit: QUERY_BUILDER_PROPERTY_SEARCH_RESULTS_LIMIT + 1,
173
+ },
174
+ )
175
+ .values(),
176
+ ).map((result) => result.item);
184
177
 
185
- get filteredPropertyNodes(): QueryBuilderExplorerTreeNodeData[] {
186
- return this.searchedMappedPropertyNodes.filter((p) => {
187
- if (
188
- !this.filterByMultiple &&
189
- this.getMultiplePropertyNodes().includes(p)
190
- ) {
191
- return false;
192
- }
193
- if (
194
- !this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.CLASS) &&
195
- this.classPropertyNodes().includes(p)
196
- ) {
197
- return false;
198
- }
199
- if (
200
- !this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.STRING) &&
201
- this.stringPropertyNodes().includes(p)
202
- ) {
203
- return false;
204
- }
205
- if (
206
- !this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.NUMBER) &&
207
- this.numberPropertyNodes().includes(p)
208
- ) {
209
- return false;
210
- }
211
- if (
212
- !this.typeFilters.includes(
213
- QUERY_BUILDER_PROPERTY_SEARCH_TYPE.BOOLEAN,
214
- ) &&
215
- this.booleanPropertyNodes().includes(p)
216
- ) {
217
- return false;
218
- }
219
- if (
220
- !this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.DATE) &&
221
- this.datePropertyNodes().includes(p)
222
- ) {
223
- return false;
224
- }
225
- return true;
226
- });
178
+ // check if the search results exceed the limit
179
+ if (searchResults.length > QUERY_BUILDER_PROPERTY_SEARCH_RESULTS_LIMIT) {
180
+ this.isOverSearchLimit = true;
181
+ this.searchResults = searchResults.slice(
182
+ 0,
183
+ QUERY_BUILDER_PROPERTY_SEARCH_RESULTS_LIMIT,
184
+ );
185
+ } else {
186
+ this.isOverSearchLimit = false;
187
+ this.searchResults = searchResults;
188
+ }
189
+
190
+ this.searchState.complete();
227
191
  }
228
192
 
229
- fetchAllPropertyNodes(): void {
230
- const treeData = this.queryBuilderState.explorerState.nonNullableTreeData;
193
+ /**
194
+ * From the current explorer tree, navigate breadth-first to find more mapped
195
+ * property nodes, then index these property nodes for searching.
196
+ *
197
+ * NOTE: fortunately, since we restrict the depth and number of nodes in this navigation
198
+ * this process is often not the performance bottleneck, else, we would need to make this
199
+ * asynchronous and block the UI while waiting.
200
+ */
201
+ initialize(): void {
202
+ this.indexedExplorerTreeNodes = [];
203
+
231
204
  let currentLevelPropertyNodes: QueryBuilderExplorerTreeNodeData[] = [];
232
205
  let nextLevelPropertyNodes: QueryBuilderExplorerTreeNodeData[] = [];
233
- Array.from(treeData.nodes.values())
206
+
207
+ Array.from(
208
+ this.queryBuilderState.explorerState.nonNullableTreeData.nodes.values(),
209
+ )
234
210
  .slice(1)
235
211
  .forEach((node) => {
236
212
  if (node.mappingData.mapped && !node.isPartOfDerivedPropertyBranch) {
237
213
  currentLevelPropertyNodes.push(node);
238
- this.allMappedPropertyNodes.push(node);
214
+ this.indexedExplorerTreeNodes.push(node);
239
215
  }
240
216
  });
217
+
218
+ // ensure we don't navigate more nodes than the limit so we could
219
+ // keep the initialization/indexing time within acceptable range
220
+ const NODE_LIMIT =
221
+ this.indexedExplorerTreeNodes.length +
222
+ QUERY_BUILDER_PROPERTY_SEARCH_MAX_NODES;
223
+ const addNode = (node: QueryBuilderExplorerTreeNodeData): void =>
224
+ runInAction(() => {
225
+ if (this.indexedExplorerTreeNodes.length > NODE_LIMIT) {
226
+ return;
227
+ }
228
+ this.indexedExplorerTreeNodes.push(node);
229
+ });
230
+
231
+ // limit the depth of navigation to keep the initialization/indexing
232
+ // time within acceptable range
241
233
  let currentDepth = 1;
242
- const maxDepth = QUERY_BUILDER_PROPERTY_SEARCH_MAX_DEPTH;
243
- while (currentLevelPropertyNodes.length && currentDepth <= maxDepth) {
234
+ while (
235
+ currentLevelPropertyNodes.length &&
236
+ currentDepth <= QUERY_BUILDER_PROPERTY_SEARCH_MAX_DEPTH
237
+ ) {
244
238
  const node = currentLevelPropertyNodes.shift();
245
239
  if (node) {
246
240
  if (node.childrenIds.length) {
@@ -268,7 +262,7 @@ export class QueryBuilderPropertySearchState {
268
262
  !propertyTreeNodeData.isPartOfDerivedPropertyBranch
269
263
  ) {
270
264
  nextLevelPropertyNodes.push(propertyTreeNodeData);
271
- this.allMappedPropertyNodes.push(propertyTreeNodeData);
265
+ addNode(propertyTreeNodeData);
272
266
  }
273
267
  });
274
268
  node.type._subclasses.forEach((subclass) => {
@@ -281,53 +275,125 @@ export class QueryBuilderPropertySearchState {
281
275
  ),
282
276
  );
283
277
  nextLevelPropertyNodes.push(subTypeTreeNodeData);
284
- this.allMappedPropertyNodes.push(subTypeTreeNodeData);
278
+ addNode(subTypeTreeNodeData);
285
279
  });
286
280
  }
287
281
  }
288
282
  }
289
- if (!currentLevelPropertyNodes.length) {
283
+
284
+ // when we done processing one depth, we will do check on the depth and the total
285
+ // number of indexed nodes to figureo ut if we should proceed further
286
+ if (
287
+ !currentLevelPropertyNodes.length &&
288
+ this.indexedExplorerTreeNodes.length < NODE_LIMIT
289
+ ) {
290
290
  currentLevelPropertyNodes = nextLevelPropertyNodes;
291
291
  nextLevelPropertyNodes = [];
292
292
  currentDepth++;
293
293
  }
294
294
  }
295
+
296
+ // indexing
297
+ this.searchEngine = new Fuse(this.indexedExplorerTreeNodes, {
298
+ includeScore: true,
299
+ shouldSort: true,
300
+ // Ignore location when computing the search score
301
+ // See https://fusejs.io/concepts/scoring-theory.html
302
+ ignoreLocation: true,
303
+ // This specifies the point the search gives up
304
+ // `0.0` means exact match where `1.0` would match anything
305
+ // We set a relatively low threshold to filter out irrelevant results
306
+ threshold: 0.2,
307
+ keys: [
308
+ {
309
+ name: 'label',
310
+ weight: 4,
311
+ },
312
+ {
313
+ name: 'taggedValues',
314
+ weight: 2,
315
+ // aggregate the property documentation, do not account for class documentation
316
+ getFn: (node: QueryBuilderExplorerTreeNodeData) =>
317
+ node instanceof QueryBuilderExplorerTreePropertyNodeData
318
+ ? node.property.taggedValues
319
+ .filter(
320
+ (taggedValue) =>
321
+ taggedValue.tag.ownerReference.value.path ===
322
+ CORE_PURE_PATH.PROFILE_DOC &&
323
+ taggedValue.tag.value.value === PURE_DOC_TAG,
324
+ )
325
+ .map((taggedValue) => taggedValue.value)
326
+ .join('\n')
327
+ : '',
328
+ },
329
+ ],
330
+ // extended search allows for exact word match through single quote
331
+ // See https://fusejs.io/examples.html#extended-search
332
+ useExtendedSearch: true,
333
+ });
295
334
  }
296
335
 
297
- fetchMappedPropertyNodes(propName: string): void {
298
- const propertyName = propName.toLowerCase();
299
- for (const node of this.allMappedPropertyNodes) {
300
- if (node.label.toLowerCase().includes(propertyName)) {
301
- this.searchedMappedPropertyNodes.push(node);
336
+ get filteredSearchResults(): QueryBuilderExplorerTreeNodeData[] {
337
+ return this.searchResults.filter((node) => {
338
+ if (this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.CLASS)) {
339
+ if (node.type instanceof Class) {
340
+ return true;
341
+ }
342
+ }
343
+ if (
344
+ this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.STRING)
345
+ ) {
302
346
  if (
303
- this.searchedMappedPropertyNodes.length >
304
- QUERY_BUILDER_PROPERTY_SEARCH_RESULTS_LIMIT
347
+ node.type instanceof PrimitiveType &&
348
+ node.type.name === PRIMITIVE_TYPE.STRING
305
349
  ) {
306
- break;
350
+ return true;
307
351
  }
308
352
  }
309
- }
310
- }
311
-
312
- setIsSearchPanelOpen(val: boolean): void {
313
- this.isSearchPanelOpen = val;
314
- }
315
-
316
- setIsSearchPanelHidden(val: boolean): void {
317
- this.isSearchPanelHidden = val;
318
- }
319
-
320
- setSearchText(val: string): void {
321
- this.searchText = val;
322
- }
323
-
324
- setSearchedMappedPropertyNodes(
325
- val: QueryBuilderExplorerTreeNodeData[],
326
- ): void {
327
- this.searchedMappedPropertyNodes = val;
328
- }
329
-
330
- refreshPropertyState(): void {
331
- this.setSearchedMappedPropertyNodes([]);
353
+ if (
354
+ this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.NUMBER)
355
+ ) {
356
+ if (
357
+ node.type instanceof PrimitiveType &&
358
+ (
359
+ [
360
+ PRIMITIVE_TYPE.NUMBER,
361
+ PRIMITIVE_TYPE.DECIMAL,
362
+ PRIMITIVE_TYPE.INTEGER,
363
+ PRIMITIVE_TYPE.FLOAT,
364
+ ] as string[]
365
+ ).includes(node.type.name)
366
+ ) {
367
+ return true;
368
+ }
369
+ }
370
+ if (
371
+ this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.BOOLEAN)
372
+ ) {
373
+ if (
374
+ node.type instanceof PrimitiveType &&
375
+ node.type.name === PRIMITIVE_TYPE.BOOLEAN
376
+ ) {
377
+ return true;
378
+ }
379
+ }
380
+ if (this.typeFilters.includes(QUERY_BUILDER_PROPERTY_SEARCH_TYPE.DATE)) {
381
+ if (
382
+ node.type instanceof PrimitiveType &&
383
+ (
384
+ [
385
+ PRIMITIVE_TYPE.DATE,
386
+ PRIMITIVE_TYPE.DATETIME,
387
+ PRIMITIVE_TYPE.STRICTDATE,
388
+ PRIMITIVE_TYPE.STRICTTIME,
389
+ PRIMITIVE_TYPE.LATESTDATE,
390
+ ] as string[]
391
+ ).includes(node.type.name)
392
+ ) {
393
+ return true;
394
+ }
395
+ }
396
+ return false;
397
+ });
332
398
  }
333
399
  }
@@ -19,6 +19,7 @@ import type {
19
19
  CompilationError,
20
20
  LambdaFunction,
21
21
  } from '@finos/legend-graph';
22
+ import type { Hashable } from '@finos/legend-shared';
22
23
  import { computed, makeObservable } from 'mobx';
23
24
  import type { QueryBuilderExplorerTreePropertyNodeData } from '../explorer/QueryBuilderExplorerState.js';
24
25
  import type { QueryBuilderState } from '../QueryBuilderState.js';
@@ -30,9 +31,11 @@ export enum FETCH_STRUCTURE_IMPLEMENTATION {
30
31
  GRAPH_FETCH = 'GRAPH_FETCH',
31
32
  }
32
33
 
33
- export abstract class QueryBuilderFetchStructureImplementationState {
34
- queryBuilderState: QueryBuilderState;
35
- fetchStructureState: QueryBuilderFetchStructureState;
34
+ export abstract class QueryBuilderFetchStructureImplementationState
35
+ implements Hashable
36
+ {
37
+ readonly queryBuilderState: QueryBuilderState;
38
+ readonly fetchStructureState: QueryBuilderFetchStructureState;
36
39
 
37
40
  constructor(
38
41
  queryBuilderState: QueryBuilderState,
@@ -41,6 +44,7 @@ export abstract class QueryBuilderFetchStructureImplementationState {
41
44
  makeObservable(this, {
42
45
  usedExplorerTreePropertyNodeIDs: computed,
43
46
  validationIssues: computed,
47
+ hashCode: computed,
44
48
  });
45
49
 
46
50
  this.queryBuilderState = queryBuilderState;
@@ -62,4 +66,5 @@ export abstract class QueryBuilderFetchStructureImplementationState {
62
66
  lambdaFunction: LambdaFunction,
63
67
  options?: LambdaFunctionBuilderOption,
64
68
  ): void;
69
+ abstract get hashCode(): string;
65
70
  }
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { action, makeAutoObservable } from 'mobx';
17
+ import { action, makeObservable, observable } from 'mobx';
18
18
  import type { QueryBuilderState } from '../QueryBuilderState.js';
19
19
  import { QueryBuilderGraphFetchTreeState } from './graph-fetch/QueryBuilderGraphFetchTreeState.js';
20
20
  import { QueryBuilderProjectionState } from './projection/QueryBuilderProjectionState.js';
@@ -30,12 +30,12 @@ import {
30
30
  } from './QueryBuilderFetchStructureImplementationState.js';
31
31
 
32
32
  export class QueryBuilderFetchStructureState {
33
- queryBuilderState: QueryBuilderState;
33
+ readonly queryBuilderState: QueryBuilderState;
34
34
  implementation: QueryBuilderFetchStructureImplementationState;
35
35
 
36
36
  constructor(queryBuilderState: QueryBuilderState) {
37
- makeAutoObservable(this, {
38
- queryBuilderState: false,
37
+ makeObservable(this, {
38
+ implementation: observable,
39
39
  changeImplementation: action,
40
40
  });
41
41
 
@@ -45,9 +45,17 @@ import {
45
45
  } from '@finos/legend-application';
46
46
  import type { LambdaFunctionBuilderOption } from '../../QueryBuilderValueSpecificationBuilderHelper.js';
47
47
  import { appendGraphFetch } from './QueryBuilderGraphFetchValueSpecificationBuilder.js';
48
- import { guaranteeNonNullable } from '@finos/legend-shared';
48
+ import {
49
+ guaranteeNonNullable,
50
+ hashArray,
51
+ type Hashable,
52
+ } from '@finos/legend-shared';
53
+ import { QUERY_BUILDER_HASH_STRUCTURE } from '../../../graphManager/QueryBuilderHashUtils.js';
49
54
 
50
- export class QueryBuilderGraphFetchTreeState extends QueryBuilderFetchStructureImplementationState {
55
+ export class QueryBuilderGraphFetchTreeState
56
+ extends QueryBuilderFetchStructureImplementationState
57
+ implements Hashable
58
+ {
51
59
  treeData?: QueryBuilderGraphFetchTreeData | undefined;
52
60
  /**
53
61
  * If set to `true` we will use `graphFetchChecked` function instead of `graphFetch`.
@@ -237,4 +245,12 @@ export class QueryBuilderGraphFetchTreeState extends QueryBuilderFetchStructureI
237
245
  onChange();
238
246
  }
239
247
  }
248
+
249
+ get hashCode(): string {
250
+ return hashArray([
251
+ QUERY_BUILDER_HASH_STRUCTURE.GRAPH_FETCH_STATE,
252
+ this.isChecked.toString(),
253
+ this.treeData?.tree ?? '',
254
+ ]);
255
+ }
240
256
  }