@finos/legend-query-builder 4.17.99 → 4.18.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 (268) hide show
  1. package/lib/components/QueryBuilder.d.ts.map +1 -1
  2. package/lib/components/QueryBuilder.js +2 -1
  3. package/lib/components/QueryBuilder.js.map +1 -1
  4. package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
  5. package/lib/components/QueryBuilderSideBar.js +9 -8
  6. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  7. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
  8. package/lib/components/explorer/QueryBuilderExplorerPanel.js +48 -5
  9. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  10. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts +24 -0
  11. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts.map +1 -0
  12. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js +202 -0
  13. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js.map +1 -0
  14. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  15. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  16. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +3 -3
  17. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  18. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  19. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +25 -6
  20. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  21. package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
  22. package/lib/components/result/QueryBuilderResultPanel.js +1 -1
  23. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  24. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts +42 -0
  25. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts.map +1 -0
  26. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js +212 -0
  27. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js.map +1 -0
  28. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts +66 -0
  29. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts.map +1 -0
  30. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js +265 -0
  31. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js.map +1 -0
  32. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts +28 -0
  33. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts.map +1 -0
  34. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js +148 -0
  35. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js.map +1 -0
  36. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts +19 -0
  37. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts.map +1 -0
  38. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js +196 -0
  39. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js.map +1 -0
  40. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts +5 -0
  41. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts.map +1 -1
  42. package/lib/components/result/tds/QueryBuilderTDSGridResult.js +64 -87
  43. package/lib/components/result/tds/QueryBuilderTDSGridResult.js.map +1 -1
  44. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts +26 -0
  45. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts.map +1 -0
  46. package/lib/components/result/tds/QueryBuilderTDSGridShared.js +51 -0
  47. package/lib/components/result/tds/QueryBuilderTDSGridShared.js.map +1 -0
  48. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts +5 -0
  49. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts.map +1 -1
  50. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js +169 -60
  51. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js.map +1 -1
  52. package/lib/components/workflows/AccessorQueryBuilder.d.ts +18 -0
  53. package/lib/components/workflows/AccessorQueryBuilder.d.ts.map +1 -0
  54. package/lib/components/workflows/AccessorQueryBuilder.js +87 -0
  55. package/lib/components/workflows/AccessorQueryBuilder.js.map +1 -0
  56. package/lib/components/workflows/ClassQueryBuilder.js +5 -5
  57. package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
  58. package/lib/data-access-overview.css +1 -1
  59. package/lib/graph/QueryBuilderMetaModelConst.d.ts +4 -0
  60. package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
  61. package/lib/graph/QueryBuilderMetaModelConst.js +4 -0
  62. package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
  63. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts.map +1 -1
  64. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js +7 -1
  65. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -1
  66. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts +2 -0
  67. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
  68. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +93 -3
  69. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
  70. package/lib/index.css +2 -2
  71. package/lib/index.css.map +1 -1
  72. package/lib/index.d.ts +2 -0
  73. package/lib/index.d.ts.map +1 -1
  74. package/lib/index.js +2 -0
  75. package/lib/index.js.map +1 -1
  76. package/lib/package.json +1 -1
  77. package/lib/stores/QueryBuilderConfig.d.ts +3 -0
  78. package/lib/stores/QueryBuilderConfig.d.ts.map +1 -1
  79. package/lib/stores/QueryBuilderConfig.js +3 -0
  80. package/lib/stores/QueryBuilderConfig.js.map +1 -1
  81. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  82. package/lib/stores/QueryBuilderResultState.js +13 -3
  83. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  84. package/lib/stores/QueryBuilderState.d.ts +14 -4
  85. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  86. package/lib/stores/QueryBuilderState.js +41 -13
  87. package/lib/stores/QueryBuilderState.js.map +1 -1
  88. package/lib/stores/QueryBuilderStateBuilder.d.ts +2 -1
  89. package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
  90. package/lib/stores/QueryBuilderStateBuilder.js +51 -20
  91. package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
  92. package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
  93. package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
  94. package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
  95. package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
  96. package/lib/stores/QueryBuilderTypeaheadHelper.js +2 -2
  97. package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -1
  98. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts +1 -1
  99. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
  100. package/lib/stores/QueryBuilderValueSpecificationBuilder.js +54 -45
  101. package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
  102. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js +1 -1
  103. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js.map +1 -1
  104. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +12 -2
  105. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  106. package/lib/stores/explorer/QueryBuilderExplorerState.js +12 -2
  107. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  108. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +2 -2
  109. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
  110. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
  111. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +2 -2
  112. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  113. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +4 -3
  114. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  115. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js +1 -1
  116. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js.map +1 -1
  117. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts +2 -0
  118. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts.map +1 -1
  119. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js +19 -0
  120. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js.map +1 -1
  121. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +7 -4
  122. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  123. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +59 -12
  124. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  125. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +16 -3
  126. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
  127. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +102 -24
  128. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  129. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts +2 -1
  130. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts.map +1 -1
  131. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js +16 -1
  132. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js.map +1 -1
  133. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +3 -3
  134. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
  135. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.d.ts.map +1 -1
  136. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js +11 -2
  137. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js.map +1 -1
  138. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.d.ts.map +1 -1
  139. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js +16 -12
  140. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js.map +1 -1
  141. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts +4 -3
  142. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts.map +1 -1
  143. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js +19 -9
  144. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js.map +1 -1
  145. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts +1 -0
  146. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts.map +1 -1
  147. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js +57 -5
  148. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js.map +1 -1
  149. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts +4 -3
  150. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts.map +1 -1
  151. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js +85 -6
  152. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js.map +1 -1
  153. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts +1 -0
  154. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts.map +1 -1
  155. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.js.map +1 -1
  156. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts +1 -0
  157. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts.map +1 -1
  158. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js +3 -0
  159. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js.map +1 -1
  160. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts +1 -0
  161. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts.map +1 -1
  162. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js +3 -0
  163. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js.map +1 -1
  164. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts +1 -0
  165. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts.map +1 -1
  166. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js +3 -0
  167. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js.map +1 -1
  168. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts +1 -0
  169. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts.map +1 -1
  170. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js +3 -0
  171. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js.map +1 -1
  172. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts +1 -0
  173. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts.map +1 -1
  174. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js +3 -0
  175. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js.map +1 -1
  176. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts +1 -0
  177. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts.map +1 -1
  178. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js +4 -0
  179. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js.map +1 -1
  180. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts +1 -0
  181. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts.map +1 -1
  182. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js +3 -0
  183. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js.map +1 -1
  184. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts +1 -0
  185. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts.map +1 -1
  186. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js +3 -0
  187. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js.map +1 -1
  188. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts +1 -0
  189. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts.map +1 -1
  190. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js +3 -0
  191. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js.map +1 -1
  192. package/lib/stores/milestoning/QueryBuilderMilestoningState.js +4 -4
  193. package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
  194. package/lib/stores/workflows/MappingQueryBuilderState.js +2 -2
  195. package/lib/stores/workflows/MappingQueryBuilderState.js.map +1 -1
  196. package/lib/stores/workflows/ServiceQueryBuilderState.js +2 -2
  197. package/lib/stores/workflows/ServiceQueryBuilderState.js.map +1 -1
  198. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts +18 -0
  199. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts.map +1 -0
  200. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js +32 -0
  201. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js.map +1 -0
  202. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +57 -0
  203. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -0
  204. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +125 -0
  205. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -0
  206. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +4 -4
  207. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
  208. package/package.json +7 -7
  209. package/src/components/QueryBuilder.tsx +2 -1
  210. package/src/components/QueryBuilderSideBar.tsx +12 -8
  211. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +77 -14
  212. package/src/components/explorer/QueryBuilderRelationExplorerPanel.tsx +536 -0
  213. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +1 -0
  214. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +3 -3
  215. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +62 -4
  216. package/src/components/result/QueryBuilderResultPanel.tsx +6 -2
  217. package/src/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.ts +254 -0
  218. package/src/components/result/tds/QueryBuilderTDSCellSelectionStats.ts +397 -0
  219. package/src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx +439 -0
  220. package/src/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.ts +270 -0
  221. package/src/components/result/tds/QueryBuilderTDSGridResult.tsx +107 -112
  222. package/src/components/result/tds/QueryBuilderTDSGridShared.ts +76 -0
  223. package/src/components/result/tds/QueryBuilderTDSSimpleGridResult.tsx +272 -99
  224. package/src/components/workflows/AccessorQueryBuilder.tsx +211 -0
  225. package/src/components/workflows/ClassQueryBuilder.tsx +5 -5
  226. package/src/graph/QueryBuilderMetaModelConst.ts +5 -0
  227. package/src/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +28 -0
  228. package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +223 -4
  229. package/src/index.ts +2 -0
  230. package/src/stores/QueryBuilderConfig.ts +3 -0
  231. package/src/stores/QueryBuilderResultState.ts +22 -9
  232. package/src/stores/QueryBuilderState.ts +47 -12
  233. package/src/stores/QueryBuilderStateBuilder.ts +107 -43
  234. package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
  235. package/src/stores/QueryBuilderTypeaheadHelper.ts +2 -2
  236. package/src/stores/QueryBuilderValueSpecificationBuilder.ts +72 -59
  237. package/src/stores/__test-utils__/QueryBuilderStateTestUtils.ts +1 -1
  238. package/src/stores/explorer/QueryBuilderExplorerState.ts +26 -2
  239. package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +1 -2
  240. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +4 -3
  241. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.ts +1 -1
  242. package/src/stores/fetch-structure/tds/QueryBuilderTDSHelper.ts +42 -0
  243. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +135 -19
  244. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +197 -38
  245. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.ts +30 -0
  246. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +3 -3
  247. package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts +21 -0
  248. package/src/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.ts +25 -16
  249. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowState.ts +23 -9
  250. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.ts +146 -4
  251. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts +145 -10
  252. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.ts +2 -0
  253. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.ts +4 -0
  254. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.ts +4 -0
  255. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.ts +4 -0
  256. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.ts +4 -0
  257. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.ts +4 -0
  258. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.ts +5 -0
  259. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.ts +4 -0
  260. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.ts +4 -0
  261. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.ts +4 -0
  262. package/src/stores/milestoning/QueryBuilderMilestoningState.ts +4 -4
  263. package/src/stores/workflows/MappingQueryBuilderState.ts +2 -2
  264. package/src/stores/workflows/ServiceQueryBuilderState.ts +2 -2
  265. package/src/stores/workflows/accessor/AccessorQueryBuilderHelper.ts +51 -0
  266. package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +195 -0
  267. package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +4 -4
  268. package/tsconfig.json +9 -0
@@ -16,36 +16,32 @@
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
18
  import type { QueryBuilderState } from '../../../stores/QueryBuilderState.js';
19
- import { useState, useCallback, useEffect } from 'react';
19
+ import { useState, useCallback, useEffect, useRef } from 'react';
20
20
  import {
21
21
  DataGrid,
22
- type DataGridCellSelectionChangedEvent,
23
22
  type DataGridApi,
24
- type DataGridCellRange,
23
+ type DataGridCellKeyDownEvent,
25
24
  type DataGridColumnDefinition,
26
25
  type DataGridGetContextMenuItemsParams,
27
- type DataGridIRowNode,
28
26
  type DataGridMenuItemDef,
29
27
  type DataGridIAggFuncParams,
30
28
  type DataGridDefaultMenuItem,
31
29
  } from '@finos/legend-lego/data-grid';
30
+ import { handleGridKeyboardShortcut } from './QueryBuilderTDSGridKeyboardShortcuts.js';
32
31
  import {
33
32
  getRowDataFromExecutionResult,
34
33
  type IQueryRendererParamsWithGridType,
35
- filterByOrOutValues,
36
34
  } from './QueryBuilderTDSResultShared.js';
37
35
  import {
38
36
  type QueryBuilderResultState,
39
37
  QueryBuilderResultWavgAggregationState,
40
38
  } from '../../../stores/QueryBuilderResultState.js';
41
39
  import {
42
- type TDSResultCellData,
43
40
  type TDSResultCellDataType,
44
41
  type TDSRowDataType,
45
42
  type TDSExecutionResult,
46
43
  PRIMITIVE_TYPE,
47
44
  } from '@finos/legend-graph';
48
- import { QueryBuilderTDSState } from '../../../stores/fetch-structure/tds/QueryBuilderTDSState.js';
49
45
  import { DEFAULT_LOCALE } from '../../../graph-manager/QueryBuilderConst.js';
50
46
  import {
51
47
  assertErrorThrown,
@@ -71,6 +67,9 @@ import {
71
67
  getTDSColumnCustomizations,
72
68
  MAXIMUM_FRACTION_DIGITS,
73
69
  } from './QueryBuilderTDSSimpleGridResult.js';
70
+ import { QueryBuilderTDSCellSelectionStatsBar } from './QueryBuilderTDSCellSelectionStatsBar.js';
71
+ import { useAsyncCellSelectionStats } from './QueryBuilderTDSAsyncCellSelectionStats.js';
72
+ import { buildTDSGridContextMenuItems } from './QueryBuilderTDSGridShared.js';
74
73
 
75
74
  export const enum QueryBuilderDataGridCustomAggregationFunction {
76
75
  wavg = 'wavg',
@@ -130,7 +129,8 @@ const QueryResultCellRenderer = observer(
130
129
  isString(cellValue) && isValidURL(cellValue) ? cellValue : undefined;
131
130
 
132
131
  const mouseDown: React.MouseEventHandler = (event) => {
133
- event.preventDefault();
132
+ // NOTE: do NOT call preventDefault() here — it would block the browser's
133
+ // native focus-on-click, preventing AG Grid from receiving keyboard events.
134
134
  if (event.button === 0 || event.button === 2) {
135
135
  resultState.setMouseOverCell(resultState.selectedCells[0] ?? null);
136
136
  }
@@ -254,8 +254,17 @@ export const QueryBuilderTDSGridResult = observer(
254
254
  (props: {
255
255
  executionResult: TDSExecutionResult;
256
256
  queryBuilderState: QueryBuilderState;
257
+ /**
258
+ * Whether to show the cell-selection summary statistics bar below the grid.
259
+ * Defaults to `true`.
260
+ */
261
+ showSummaryStats?: boolean;
257
262
  }) => {
258
- const { executionResult, queryBuilderState } = props;
263
+ const {
264
+ executionResult,
265
+ queryBuilderState,
266
+ showSummaryStats = true,
267
+ } = props;
259
268
  const applicationStore = useApplicationStore();
260
269
  const darkMode =
261
270
  !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
@@ -285,95 +294,19 @@ export const QueryBuilderTDSGridResult = observer(
285
294
  });
286
295
  };
287
296
 
288
- const getSelectedCells = (
289
- api: DataGridApi<TDSRowDataType>,
290
- ): TDSResultCellData[] => {
291
- const selectedRanges: DataGridCellRange[] | null = api.getCellRanges();
292
- const nodes = [] as DataGridIRowNode<TDSRowDataType>[];
293
- api.forEachNode((node) => nodes.push(node));
294
- const columns = api.getColumnDefs() as DataGridColumnDefinition[];
295
- const selectedCells = [];
296
- if (selectedRanges) {
297
- for (const selectedRange of selectedRanges) {
298
- const rangeStart: number = selectedRange.startRow?.rowIndex ?? 0;
299
- const rangeEnd: number = selectedRange.endRow?.rowIndex ?? 0;
300
- const startRow = rangeStart < rangeEnd ? rangeStart : rangeEnd;
301
- const endRow = rangeStart < rangeEnd ? rangeEnd : rangeStart;
302
- const selectedColumns: string[] = selectedRange.columns.map((col) =>
303
- col.getColId(),
304
- );
305
- for (let x: number = startRow; x <= endRow; x++) {
306
- const curRowData = nodes.find(
307
- (n) => (n as DataGridIRowNode).rowIndex === x,
308
- )?.data;
309
- if (curRowData) {
310
- for (const col of selectedColumns) {
311
- const valueAndColumnId = {
312
- value: Object.entries(curRowData)
313
- .find((rData) => rData[0] === col)
314
- ?.at(1),
315
- columnName: col,
316
- coordinates: {
317
- rowIndex: x,
318
- colIndex: columns.findIndex(
319
- (colDef) => colDef.colId === col,
320
- ),
321
- },
322
- } as TDSResultCellData;
323
- selectedCells.push(valueAndColumnId);
324
- }
325
- }
326
- }
327
- }
328
- }
329
- return selectedCells;
330
- };
331
-
332
297
  const getContextMenuItems = useCallback(
333
- (params: DataGridGetContextMenuItemsParams<TDSRowDataType>) => {
334
- let result: (DataGridDefaultMenuItem | DataGridMenuItemDef)[] = [];
335
- const fetchStructureImplementation =
336
- resultState.queryBuilderState.fetchStructureState.implementation;
337
- if (fetchStructureImplementation instanceof QueryBuilderTDSState) {
338
- result = [
339
- {
340
- name: 'Filter By',
341
- action: () => {
342
- filterByOrOutValues(
343
- applicationStore,
344
- resultState.mousedOverCell,
345
- true,
346
- fetchStructureImplementation,
347
- ).catch(queryBuilderState.applicationStore.alertUnhandledError);
348
- },
349
- },
350
- {
351
- name: 'Filter Out',
352
- action: () => {
353
- filterByOrOutValues(
354
- applicationStore,
355
- resultState.mousedOverCell,
356
- false,
357
- fetchStructureImplementation,
358
- ).catch(queryBuilderState.applicationStore.alertUnhandledError);
359
- },
360
- },
361
- 'copy',
362
- 'copyWithHeaders',
363
- {
364
- name: 'Copy Row Value',
365
- action: () => {
366
- params.api.copySelectedRowsToClipboard();
367
- },
368
- },
369
- ];
370
- }
371
- return result;
372
- },
298
+ (
299
+ params: DataGridGetContextMenuItemsParams<TDSRowDataType>,
300
+ ): (DataGridDefaultMenuItem | DataGridMenuItemDef)[] =>
301
+ buildTDSGridContextMenuItems(
302
+ params,
303
+ applicationStore,
304
+ resultState,
305
+ queryBuilderState.applicationStore.alertUnhandledError,
306
+ ),
373
307
  [
374
308
  applicationStore,
375
- resultState.mousedOverCell,
376
- resultState.queryBuilderState.fetchStructureState.implementation,
309
+ resultState,
377
310
  queryBuilderState.applicationStore.alertUnhandledError,
378
311
  ],
379
312
  );
@@ -479,6 +412,19 @@ export const QueryBuilderTDSGridResult = observer(
479
412
  }
480
413
  }, [resultState.wavgAggregationState, aggFuncParams]);
481
414
 
415
+ // Stats panel: use a lightweight version counter so onCellSelectionChanged
416
+ // only does O(1) work. The hook reads from gridApiRef lazily when debounces fire.
417
+ const [selectionVersion, setSelectionVersion] = useState(0);
418
+ const columnTypes = new Map<string, string | undefined>(
419
+ executionResult.builder.columns.map((c) => [c.name, c.type]),
420
+ );
421
+ const gridApiRef = useRef<DataGridApi<TDSRowDataType> | null>(null);
422
+ const cellSelectionStats = useAsyncCellSelectionStats(
423
+ selectionVersion,
424
+ columnTypes,
425
+ gridApiRef,
426
+ );
427
+
482
428
  return (
483
429
  <div
484
430
  data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER_RESULT_VALUES_TDS}
@@ -486,6 +432,7 @@ export const QueryBuilderTDSGridResult = observer(
486
432
  >
487
433
  <div
488
434
  className={clsx('query-builder__result__tds-grid', {
435
+ 'query-builder__result__tds-grid--with-stats-bar': showSummaryStats,
489
436
  'ag-theme-balham': !darkMode,
490
437
  'ag-theme-balham-dark': darkMode,
491
438
  })}
@@ -494,6 +441,7 @@ export const QueryBuilderTDSGridResult = observer(
494
441
  <DataGrid
495
442
  rowData={getRowDataFromExecutionResult(executionResult)}
496
443
  onGridReady={(params): void => {
444
+ gridApiRef.current = params.api;
497
445
  setGridApi(params.api);
498
446
  params.api.updateGridOptions({
499
447
  pivotMode: Boolean(
@@ -504,11 +452,6 @@ export const QueryBuilderTDSGridResult = observer(
504
452
  gridOptions={{
505
453
  suppressScrollOnNewData: true,
506
454
  getRowId: (data) => `${data.data.rowNumber}`,
507
- rowSelection: {
508
- mode: 'multiRow',
509
- checkboxes: false,
510
- headerCheckbox: false,
511
- },
512
455
  pivotPanelShow: 'always',
513
456
  rowGroupPanelShow: 'always',
514
457
  cellSelection: true,
@@ -533,18 +476,46 @@ export const QueryBuilderTDSGridResult = observer(
533
476
  onColumnValueChanged={onSaveGridColumnState}
534
477
  onColumnPivotChanged={onSaveGridColumnState}
535
478
  onColumnPivotModeChanged={onSaveGridColumnState}
479
+ onCellSelectionChanged={() => {
480
+ // O(1) — just increment the version counter.
481
+ // getSelectedCells() is deferred into the stats hook debounce.
482
+ // eslint-disable-next-line no-console
483
+ console.debug(`[TDS Grid (local)] onCellSelectionChanged`);
484
+ setSelectionVersion((v) => v + 1);
485
+ }}
486
+ onCellClicked={(event) => {
487
+ // Skip clicks that originated from a keyboard shortcut (Ctrl/Shift+Space
488
+ // fires a synthetic click that would reset the range selection we just set).
489
+ const e = event.event as MouseEvent | undefined;
490
+ if (e?.ctrlKey || e?.shiftKey) {
491
+ return;
492
+ }
493
+ // eslint-disable-next-line no-console
494
+ console.debug(
495
+ `[TDS Grid (local)] onCellClicked: col=${event.column.getColId()} row=${event.rowIndex}`,
496
+ );
497
+ if (event.rowIndex !== null) {
498
+ // Set AG Grid's internal keyboard focus to the clicked cell so
499
+ // subsequent keypresses act on this cell, not wherever AG Grid
500
+ // last had focus before the grid lost focus.
501
+ event.api.setFocusedCell(event.rowIndex, event.column);
502
+ }
503
+ }}
504
+ onCellKeyDown={(
505
+ event: DataGridCellKeyDownEvent<TDSRowDataType>,
506
+ ) => {
507
+ handleGridKeyboardShortcut(event);
508
+ }}
536
509
  />
537
510
  ) : (
538
511
  <DataGrid
539
512
  rowData={getRowDataFromExecutionResult(executionResult)}
513
+ onGridReady={(params): void => {
514
+ gridApiRef.current = params.api;
515
+ }}
540
516
  gridOptions={{
541
517
  suppressScrollOnNewData: true,
542
518
  getRowId: (data) => `${data.data.rowNumber}`,
543
- rowSelection: {
544
- mode: 'multiRow',
545
- checkboxes: false,
546
- headerCheckbox: false,
547
- },
548
519
  cellSelection: true,
549
520
  }}
550
521
  // NOTE: when column definition changed, we need to force refresh the cell to make sure the cell renderer is updated
@@ -552,20 +523,44 @@ export const QueryBuilderTDSGridResult = observer(
552
523
  onRowDataUpdated={(params) => {
553
524
  params.api.refreshCells({ force: true });
554
525
  }}
555
- onCellSelectionChanged={(
556
- event: DataGridCellSelectionChangedEvent<TDSRowDataType>,
557
- ) => {
558
- const selectedCells = getSelectedCells(event.api);
559
- resultState.setSelectedCells([]);
560
- selectedCells.forEach((cell) =>
561
- resultState.addSelectedCell(cell),
526
+ onCellSelectionChanged={() => {
527
+ // O(1) — just increment the version counter.
528
+ // getSelectedCells() is deferred into the stats hook debounce.
529
+ // eslint-disable-next-line no-console
530
+ console.debug(`[TDS Grid] onCellSelectionChanged`);
531
+ setSelectionVersion((v) => v + 1);
532
+ }}
533
+ onCellClicked={(event) => {
534
+ const e = event.event as MouseEvent | undefined;
535
+ if (e?.ctrlKey || e?.shiftKey) {
536
+ return;
537
+ }
538
+ // eslint-disable-next-line no-console
539
+ console.debug(
540
+ `[TDS Grid] onCellClicked: col=${event.column.getColId()} row=${event.rowIndex}`,
562
541
  );
542
+ if (event.rowIndex !== null) {
543
+ event.api.setFocusedCell(event.rowIndex, event.column);
544
+ }
563
545
  }}
564
546
  suppressFieldDotNotation={true}
565
547
  suppressClipboardPaste={false}
566
548
  suppressContextMenu={false}
567
549
  columnDefs={colDefs}
568
550
  getContextMenuItems={(params) => getContextMenuItems(params)}
551
+ onCellKeyDown={(
552
+ event: DataGridCellKeyDownEvent<TDSRowDataType>,
553
+ ) => {
554
+ handleGridKeyboardShortcut(event);
555
+ }}
556
+ />
557
+ )}
558
+ {showSummaryStats && cellSelectionStats !== undefined && (
559
+ <QueryBuilderTDSCellSelectionStatsBar
560
+ stats={cellSelectionStats.stats}
561
+ cellCount={cellSelectionStats.cellCount}
562
+ countReady={cellSelectionStats.countReady}
563
+ darkMode={darkMode}
569
564
  />
570
565
  )}
571
566
  {resultState.wavgAggregationState?.isApplyingWavg && (
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Copyright (c) 2026-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import type { GenericLegendApplicationStore } from '@finos/legend-application';
18
+ import type {
19
+ DataGridDefaultMenuItem,
20
+ DataGridGetContextMenuItemsParams,
21
+ DataGridMenuItemDef,
22
+ } from '@finos/legend-lego/data-grid';
23
+ import type { TDSRowDataType } from '@finos/legend-graph';
24
+ import { QueryBuilderTDSState } from '../../../stores/fetch-structure/tds/QueryBuilderTDSState.js';
25
+ import { filterByOrOutValues } from './QueryBuilderTDSResultShared.js';
26
+ import type { QueryBuilderResultState } from '../../../stores/QueryBuilderResultState.js';
27
+
28
+ /**
29
+ * Build the shared context-menu items used by both the enterprise and
30
+ * simple TDS grid components:
31
+ * Filter By | Filter Out | Copy | Copy with Headers | Copy Row Value
32
+ */
33
+ export const buildTDSGridContextMenuItems = (
34
+ params: DataGridGetContextMenuItemsParams<TDSRowDataType>,
35
+ applicationStore: GenericLegendApplicationStore,
36
+ resultState: QueryBuilderResultState,
37
+ onError: (error: Error) => void,
38
+ ): (DataGridDefaultMenuItem | DataGridMenuItemDef)[] => {
39
+ const fetchStructureImplementation =
40
+ resultState.queryBuilderState.fetchStructureState.implementation;
41
+ if (fetchStructureImplementation instanceof QueryBuilderTDSState) {
42
+ return [
43
+ {
44
+ name: 'Filter By',
45
+ action: () => {
46
+ filterByOrOutValues(
47
+ applicationStore,
48
+ resultState.mousedOverCell,
49
+ true,
50
+ fetchStructureImplementation,
51
+ ).catch(onError);
52
+ },
53
+ },
54
+ {
55
+ name: 'Filter Out',
56
+ action: () => {
57
+ filterByOrOutValues(
58
+ applicationStore,
59
+ resultState.mousedOverCell,
60
+ false,
61
+ fetchStructureImplementation,
62
+ ).catch(onError);
63
+ },
64
+ },
65
+ 'copy',
66
+ 'copyWithHeaders',
67
+ {
68
+ name: 'Copy Row Value',
69
+ action: () => {
70
+ params.api.copySelectedRowsToClipboard();
71
+ },
72
+ },
73
+ ];
74
+ }
75
+ return [];
76
+ };