@finos/legend-query-builder 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }