@finos/legend-query-builder 4.15.28 → 4.15.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. package/lib/components/QueryBuilder.js +4 -4
  2. package/lib/components/QueryBuilder.js.map +1 -1
  3. package/lib/components/QueryBuilderPropertyExpressionEditor.js +2 -2
  4. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
  5. package/lib/components/QueryBuilderSideBar.js +1 -1
  6. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  7. package/lib/components/QueryBuilder_LegendApplicationPlugin.d.ts.map +1 -1
  8. package/lib/components/QueryBuilder_LegendApplicationPlugin.js +0 -2
  9. package/lib/components/QueryBuilder_LegendApplicationPlugin.js.map +1 -1
  10. package/lib/components/QueryLoader.js +1 -1
  11. package/lib/components/QueryLoader.js.map +1 -1
  12. package/lib/components/data-access/DataAccessOverview.d.ts.map +1 -1
  13. package/lib/components/data-access/DataAccessOverview.js +56 -30
  14. package/lib/components/data-access/DataAccessOverview.js.map +1 -1
  15. package/lib/components/execution-plan/ExecutionPlanViewer.js +1 -1
  16. package/lib/components/execution-plan/ExecutionPlanViewer.js.map +1 -1
  17. package/lib/components/explorer/QueryBuilderExplorerPanel.js +3 -1
  18. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  19. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
  20. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.js +7 -3
  21. package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
  22. package/lib/components/explorer/QueryBuilderMilestoningParameterEditor.d.ts.map +1 -1
  23. package/lib/components/explorer/QueryBuilderMilestoningParameterEditor.js +4 -2
  24. package/lib/components/explorer/QueryBuilderMilestoningParameterEditor.js.map +1 -1
  25. package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
  26. package/lib/components/explorer/QueryBuilderPropertySearchPanel.js +4 -2
  27. package/lib/components/explorer/QueryBuilderPropertySearchPanel.js.map +1 -1
  28. package/lib/components/fetch-structure/QueryBuilderAggParam.d.ts.map +1 -1
  29. package/lib/components/fetch-structure/QueryBuilderAggParam.js +5 -2
  30. package/lib/components/fetch-structure/QueryBuilderAggParam.js.map +1 -1
  31. package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js +2 -2
  32. package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js.map +1 -1
  33. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  34. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +11 -9
  35. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  36. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +2 -2
  37. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  38. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  39. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +16 -10
  40. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  41. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
  42. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +13 -9
  43. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
  44. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  45. package/lib/components/filter/QueryBuilderFilterPanel.js +14 -16
  46. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  47. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts.map +1 -1
  48. package/lib/components/result/tds/QueryBuilderTDSGridResult.js.map +1 -1
  49. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts +2 -1
  50. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts.map +1 -1
  51. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js +7 -62
  52. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js.map +1 -1
  53. package/lib/components/shared/BasicValueSpecificationEditor.d.ts +1 -1
  54. package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
  55. package/lib/components/shared/BasicValueSpecificationEditor.js +1 -1
  56. package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
  57. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.d.ts +1 -1
  58. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.d.ts.map +1 -1
  59. package/lib/components/shared/QueryBuilderVariableSelector.d.ts.map +1 -1
  60. package/lib/components/shared/QueryBuilderVariableSelector.js +4 -2
  61. package/lib/components/shared/QueryBuilderVariableSelector.js.map +1 -1
  62. package/lib/index.css +1 -1
  63. package/lib/package.json +12 -13
  64. package/lib/stores/QueryBuilderState.d.ts +2 -1
  65. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  66. package/lib/stores/QueryBuilderState.js +4 -1
  67. package/lib/stores/QueryBuilderState.js.map +1 -1
  68. package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
  69. package/lib/stores/QueryBuilderStateBuilder.js +0 -1
  70. package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
  71. package/lib/stores/QueryLoaderState.js +1 -1
  72. package/lib/stores/QueryLoaderState.js.map +1 -1
  73. package/lib/stores/entitlements/QueryBuilderCheckEntitlementsState.d.ts.map +1 -1
  74. package/lib/stores/entitlements/QueryBuilderCheckEntitlementsState.js +2 -2
  75. package/lib/stores/entitlements/QueryBuilderCheckEntitlementsState.js.map +1 -1
  76. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +1 -1
  77. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  78. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  79. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -1
  80. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
  81. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  82. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +1 -3
  83. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  84. package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.d.ts.map +1 -1
  85. package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js +0 -1
  86. package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js.map +1 -1
  87. package/package.json +22 -23
  88. package/src/components/QueryBuilder.tsx +4 -4
  89. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +2 -2
  90. package/src/components/QueryBuilderSideBar.tsx +1 -1
  91. package/src/components/QueryBuilder_LegendApplicationPlugin.ts +0 -3
  92. package/src/components/QueryLoader.tsx +1 -1
  93. package/src/components/data-access/DataAccessOverview.tsx +62 -36
  94. package/src/components/execution-plan/ExecutionPlanViewer.tsx +1 -1
  95. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +3 -3
  96. package/src/components/explorer/QueryBuilderFunctionsExplorerPanel.tsx +7 -6
  97. package/src/components/explorer/QueryBuilderMilestoningParameterEditor.tsx +5 -2
  98. package/src/components/explorer/QueryBuilderPropertySearchPanel.tsx +4 -3
  99. package/src/components/fetch-structure/QueryBuilderAggParam.tsx +5 -4
  100. package/src/components/fetch-structure/QueryBuilderGraphFetchTreePanel.tsx +2 -2
  101. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +13 -10
  102. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +2 -2
  103. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +18 -13
  104. package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +13 -12
  105. package/src/components/filter/QueryBuilderFilterPanel.tsx +15 -23
  106. package/src/components/result/tds/QueryBuilderTDSGridResult.tsx +4 -5
  107. package/src/components/result/tds/QueryBuilderTDSSimpleGridResult.tsx +19 -57
  108. package/src/components/shared/BasicValueSpecificationEditor.tsx +2 -2
  109. package/src/components/shared/QueryBuilderPropertyInfoTooltip.tsx +1 -1
  110. package/src/components/shared/QueryBuilderVariableSelector.tsx +4 -2
  111. package/src/stores/QueryBuilderState.ts +6 -0
  112. package/src/stores/QueryBuilderStateBuilder.ts +0 -1
  113. package/src/stores/QueryLoaderState.ts +1 -1
  114. package/src/stores/entitlements/QueryBuilderCheckEntitlementsState.ts +1 -4
  115. package/src/stores/explorer/QueryBuilderExplorerState.ts +1 -1
  116. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +1 -1
  117. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +13 -15
  118. package/src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.ts +0 -1
@@ -275,10 +275,12 @@ const QueryBuilderDerivationProjectionColumnEditor = observer(
275
275
  }),
276
276
  [handleDrop],
277
277
  );
278
+ const ref = useRef<HTMLDivElement>(null);
279
+ dropConnector(ref);
278
280
 
279
281
  return (
280
282
  <div
281
- ref={dropConnector}
283
+ ref={ref}
282
284
  className={clsx(
283
285
  'query-builder__lambda-editor__container query-builder__projection__column__derivation',
284
286
  { backdrop__element: hasParserError },
@@ -391,9 +393,9 @@ const QueryBuilderProjectionColumnEditor = observer(
391
393
  currentRearrangeDropGapIndex,
392
394
  setCurrentRearrangeDropGapIndex,
393
395
  } = props;
394
- const dragHandleRef = useRef<HTMLDivElement>(null);
395
396
  const applicationStore = useApplicationStore();
396
397
  const ref = useRef<HTMLDivElement>(null);
398
+ const dragHandleRef = useRef<HTMLDivElement>(null);
397
399
  const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] =
398
400
  useState(false);
399
401
  const onContextMenuOpen = (): void => setIsSelectedFromContextMenu(true);
@@ -661,7 +663,6 @@ const QueryBuilderProjectionColumnEditor = observer(
661
663
  }),
662
664
  [projectionColumnState],
663
665
  );
664
-
665
666
  dragConnector(dragHandleRef);
666
667
  dropConnector(ref);
667
668
 
@@ -703,7 +704,7 @@ const QueryBuilderProjectionColumnEditor = observer(
703
704
  tdsState.queryBuilderState.explorerState,
704
705
  ],
705
706
  );
706
- const [{ isDragOver }, dropTargetConnector] = useDrop<
707
+ const [{ isDragOver }, panelDropConnector] = useDrop<
707
708
  QueryBuilderExplorerTreeDragSource,
708
709
  void,
709
710
  { isDragOver: boolean }
@@ -721,6 +722,9 @@ const QueryBuilderProjectionColumnEditor = observer(
721
722
  }),
722
723
  [handleDrop],
723
724
  );
725
+ const panelRef = useRef<HTMLDivElement>(null);
726
+ panelDropConnector(panelRef);
727
+
724
728
  const percentileButtonRef = useRef<HTMLButtonElement>(null);
725
729
  const percentileInputRef = useRef<HTMLInputElement>(null);
726
730
  const [isPercentileOpen, setIsPercentileOpen] = useState(false);
@@ -1192,7 +1196,7 @@ const QueryBuilderProjectionColumnEditor = observer(
1192
1196
  </div>
1193
1197
  <div
1194
1198
  className="query-builder__projection__calendar__date__column"
1195
- ref={dropTargetConnector}
1199
+ ref={panelRef}
1196
1200
  >
1197
1201
  <PanelEntryDropZonePlaceholder
1198
1202
  isDragOver={isDragOver}
@@ -1335,7 +1339,7 @@ export const QueryBuilderTDSPanel = observer(
1335
1339
  [tdsState],
1336
1340
  );
1337
1341
 
1338
- const [{ isDragOver }, dropTargetConnector] = useDrop<
1342
+ const [{ isDragOver }, panelDropConnector] = useDrop<
1339
1343
  QueryBuilderTDSPanelDropTarget,
1340
1344
  void,
1341
1345
  { isDragOver: boolean }
@@ -1353,8 +1357,10 @@ export const QueryBuilderTDSPanel = observer(
1353
1357
  }),
1354
1358
  [handleDrop],
1355
1359
  );
1360
+ const panelRef = useRef<HTMLInputElement>(null);
1361
+ panelDropConnector(panelRef);
1356
1362
 
1357
- const [{ isRearrangeActive }, rearrangeColumnDropConnector] = useDrop<
1363
+ const [{ isRearrangeActive }, dropConnector] = useDrop<
1358
1364
  QueryBuilderProjectionColumnDragSource,
1359
1365
  void,
1360
1366
  { isRearrangeActive: boolean }
@@ -1367,6 +1373,8 @@ export const QueryBuilderTDSPanel = observer(
1367
1373
  }),
1368
1374
  [],
1369
1375
  );
1376
+ const ref = useRef<HTMLDivElement>(null);
1377
+ dropConnector(ref);
1370
1378
 
1371
1379
  const { isDroppable } = useDragLayer((monitor) => ({
1372
1380
  isDroppable:
@@ -1382,9 +1390,6 @@ export const QueryBuilderTDSPanel = observer(
1382
1390
  );
1383
1391
  }, [applicationStore, tdsState]);
1384
1392
 
1385
- const addProjectionRef = useRef<HTMLInputElement>(null);
1386
- dropTargetConnector(addProjectionRef);
1387
-
1388
1393
  return (
1389
1394
  <PanelContent>
1390
1395
  <div className="query-builder__projection__toolbar">
@@ -1634,7 +1639,7 @@ export const QueryBuilderTDSPanel = observer(
1634
1639
  <PanelDropZone
1635
1640
  isDragOver={isDragOver && isEmpty}
1636
1641
  isDroppable={isDroppable && isEmpty}
1637
- dropTargetConnector={dropTargetConnector}
1642
+ dropTargetConnector={panelDropConnector}
1638
1643
  >
1639
1644
  {!projectionColumns.length && (
1640
1645
  <BlankPanelPlaceholder
@@ -1647,7 +1652,7 @@ export const QueryBuilderTDSPanel = observer(
1647
1652
  data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER_TDS}
1648
1653
  className="query-builder__projection__columns"
1649
1654
  >
1650
- <div ref={rearrangeColumnDropConnector}>
1655
+ <div ref={ref}>
1651
1656
  <DragPreviewLayer
1652
1657
  labelGetter={(
1653
1658
  item: QueryBuilderProjectionColumnDragSource,
@@ -1683,7 +1688,7 @@ export const QueryBuilderTDSPanel = observer(
1683
1688
  )}
1684
1689
  {isDroppable && !isEmpty && (
1685
1690
  <div
1686
- ref={addProjectionRef}
1691
+ ref={panelRef}
1687
1692
  className="query-builder__projection__free-drop-zone__container"
1688
1693
  >
1689
1694
  <PanelEntryDropZonePlaceholder
@@ -691,7 +691,7 @@ const TDSColumnReferenceEditor = observer(
691
691
  },
692
692
  [handleChange],
693
693
  );
694
- const [{ isDragOver }, dropOpConnector] = useDrop<
694
+ const [{ isDragOver }, dropConnector] = useDrop<
695
695
  QueryBuilderWindowColumnDragSource,
696
696
  void,
697
697
  { isDragOver: boolean }
@@ -712,6 +712,8 @@ const TDSColumnReferenceEditor = observer(
712
712
  }),
713
713
  [handleDrop],
714
714
  );
715
+ const ref = useRef<HTMLDivElement>(null);
716
+ dropConnector(ref);
715
717
 
716
718
  return (
717
719
  <>
@@ -719,10 +721,7 @@ const TDSColumnReferenceEditor = observer(
719
721
  onClick={openOpAnchor}
720
722
  className="query-builder__olap__tds__column"
721
723
  >
722
- <div
723
- ref={dropOpConnector}
724
- className="query-builder__olap__tds__column-badge"
725
- >
724
+ <div ref={ref} className="query-builder__olap__tds__column-badge">
726
725
  <PanelEntryDropZonePlaceholder
727
726
  isDragOver={isDragOver}
728
727
  label="Change Column"
@@ -945,7 +944,7 @@ const QueryBuilderWindowColumnEditor = observer(
945
944
  },
946
945
  [windowColumnState],
947
946
  );
948
- const [{ isDragOver }, dropOpConnector] = useDrop<
947
+ const [{ isDragOver }, operationDropConnector] = useDrop<
949
948
  QueryBuilderWindowColumnDragSource,
950
949
  void,
951
950
  { isDragOver: boolean }
@@ -966,6 +965,8 @@ const QueryBuilderWindowColumnEditor = observer(
966
965
  }),
967
966
  [handleWindowDrop],
968
967
  );
968
+ const opRef = useRef<HTMLButtonElement>(null);
969
+ operationDropConnector(opRef);
969
970
 
970
971
  return (
971
972
  <PanelDnDEntry
@@ -1052,7 +1053,7 @@ const QueryBuilderWindowColumnEditor = observer(
1052
1053
  </div>
1053
1054
  <div className="query-builder__olap__column__window">
1054
1055
  <button
1055
- ref={dropOpConnector}
1056
+ ref={opRef}
1056
1057
  title="Click to edit or drag and drop columns"
1057
1058
  onClick={openWindowPopover}
1058
1059
  className="query-builder__olap__column__window__content"
@@ -1266,7 +1267,7 @@ export const QueryBuilderTDSWindowPanel = observer(
1266
1267
  [applicationStore, tdsWindowState],
1267
1268
  );
1268
1269
 
1269
- const [{ isDragOver }, dropTargetConnector] = useDrop<
1270
+ const [{ isDragOver }, dropConnector] = useDrop<
1270
1271
  QueryBuilderWindowDropTarget,
1271
1272
  void,
1272
1273
  { isDragOver: boolean }
@@ -1296,8 +1297,8 @@ export const QueryBuilderTDSWindowPanel = observer(
1296
1297
  ),
1297
1298
  }));
1298
1299
 
1299
- const addWindowColumnRef = useRef<HTMLDivElement>(null);
1300
- dropTargetConnector(addWindowColumnRef);
1300
+ const ref = useRef<HTMLDivElement>(null);
1301
+ dropConnector(ref);
1301
1302
 
1302
1303
  return (
1303
1304
  <Panel>
@@ -1328,7 +1329,7 @@ export const QueryBuilderTDSWindowPanel = observer(
1328
1329
  <PanelDropZone
1329
1330
  isDragOver={isDragOver && tdsWindowState.isEmpty}
1330
1331
  isDroppable={isDroppable && tdsWindowState.isEmpty}
1331
- dropTargetConnector={dropTargetConnector}
1332
+ dropTargetConnector={dropConnector}
1332
1333
  >
1333
1334
  {tdsWindowState.isEmpty && (
1334
1335
  <BlankPanelPlaceholder
@@ -1363,7 +1364,7 @@ export const QueryBuilderTDSWindowPanel = observer(
1363
1364
  )}
1364
1365
  {isDroppable && !tdsWindowState.isEmpty && (
1365
1366
  <div
1366
- ref={addWindowColumnRef}
1367
+ ref={ref}
1367
1368
  className="query-builder__olap__free-drop-zone__container"
1368
1369
  >
1369
1370
  <PanelEntryDropZonePlaceholder
@@ -962,6 +962,8 @@ const QueryBuilderFilterConditionEditor = observer(
962
962
  }),
963
963
  [handleDrop],
964
964
  );
965
+ const ref = useRef<HTMLDivElement>(null);
966
+ dropConnector(ref);
965
967
 
966
968
  const { isFilterValueDroppable } = useDragLayer((monitor) => ({
967
969
  isFilterValueDroppable:
@@ -1022,7 +1024,7 @@ const QueryBuilderFilterConditionEditor = observer(
1022
1024
  ) {
1023
1025
  return (
1024
1026
  <div
1025
- ref={dropConnector}
1027
+ ref={ref}
1026
1028
  data-testid={
1027
1029
  QUERY_BUILDER_TEST_ID.QUERY_BUILDER_FILTER_TREE_CONDITION_NODE_VALUE
1028
1030
  }
@@ -1059,7 +1061,7 @@ const QueryBuilderFilterConditionEditor = observer(
1059
1061
  ) {
1060
1062
  return (
1061
1063
  <div
1062
- ref={dropConnector}
1064
+ ref={ref}
1063
1065
  className="query-builder-filter-tree__condition-node__value"
1064
1066
  >
1065
1067
  <PanelEntryDropZonePlaceholder
@@ -1219,7 +1221,7 @@ const QueryBuilderFilterTreeNodeContainer = observer(
1219
1221
  ) => {
1220
1222
  const { node, onNodeSelect, innerProps } = props;
1221
1223
  const { queryBuilderState } = innerProps;
1222
- const dragRef = useRef<HTMLDivElement>(null);
1224
+ const ref = useRef<HTMLDivElement>(null);
1223
1225
  const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] =
1224
1226
  useState(false);
1225
1227
  const applicationStore = useApplicationStore();
@@ -1293,19 +1295,9 @@ const QueryBuilderFilterTreeNodeContainer = observer(
1293
1295
  applicationStore.notificationService.notifyWarning(error.message);
1294
1296
  return;
1295
1297
  }
1296
- if (node instanceof QueryBuilderFilterTreeOperationNodeData) {
1297
- buildFilterTree(
1298
- filterConditionState.propertyExpressionState.propertyExpression,
1299
- filterState,
1300
- node,
1301
- );
1302
- } else if (node instanceof QueryBuilderFilterTreeConditionNodeData) {
1303
- buildFilterTree(
1304
- filterConditionState.propertyExpressionState.propertyExpression,
1305
- filterState,
1306
- node,
1307
- );
1308
- } else if (
1298
+ if (
1299
+ node instanceof QueryBuilderFilterTreeOperationNodeData ||
1300
+ node instanceof QueryBuilderFilterTreeConditionNodeData ||
1309
1301
  node instanceof QueryBuilderFilterTreeBlankConditionNodeData
1310
1302
  ) {
1311
1303
  buildFilterTree(
@@ -1357,7 +1349,7 @@ const QueryBuilderFilterTreeNodeContainer = observer(
1357
1349
  }),
1358
1350
  [node, filterState],
1359
1351
  );
1360
- dragConnector(dropConnector(dragRef));
1352
+ dragConnector(dropConnector(ref));
1361
1353
  useDragPreviewLayer(dragPreviewConnector);
1362
1354
 
1363
1355
  const { isDroppable } = useDragLayer((monitor) => ({
@@ -1421,7 +1413,7 @@ const QueryBuilderFilterTreeNodeContainer = observer(
1421
1413
  QUERY_BUILDER_TEST_ID.QUERY_BUILDER_FILTER_TREE_NODE_CONTENT
1422
1414
  }
1423
1415
  className="query-builder-filter-tree__node__content"
1424
- ref={dragRef}
1416
+ ref={ref}
1425
1417
  onClick={
1426
1418
  node instanceof QueryBuilderFilterTreeConditionNodeData ||
1427
1419
  node instanceof QueryBuilderFilterTreeBlankConditionNodeData
@@ -1697,7 +1689,7 @@ export const QueryBuilderFilterPanel = observer(
1697
1689
  [applicationStore, filterState, queryBuilderState.observerContext],
1698
1690
  );
1699
1691
 
1700
- const [{ isDragOver }, dropTargetConnector] = useDrop<
1692
+ const [{ isDragOver }, dropConnector] = useDrop<
1701
1693
  QueryBuilderExplorerTreeDragSource,
1702
1694
  void,
1703
1695
  { isDragOver: boolean }
@@ -1719,8 +1711,8 @@ export const QueryBuilderFilterPanel = observer(
1719
1711
  [handleDrop],
1720
1712
  );
1721
1713
 
1722
- const addFilterRef = useRef<HTMLInputElement>(null);
1723
- dropTargetConnector(addFilterRef);
1714
+ const ref = useRef<HTMLInputElement>(null);
1715
+ dropConnector(ref);
1724
1716
 
1725
1717
  return (
1726
1718
  <div
@@ -1818,7 +1810,7 @@ export const QueryBuilderFilterPanel = observer(
1818
1810
  <PanelDropZone
1819
1811
  isDragOver={isDragOver && filterState.isEmpty}
1820
1812
  isDroppable={isDroppable && filterState.isEmpty}
1821
- dropTargetConnector={dropTargetConnector}
1813
+ dropTargetConnector={dropConnector}
1822
1814
  >
1823
1815
  {filterState.isEmpty && (
1824
1816
  <BlankPanelPlaceholder
@@ -1839,7 +1831,7 @@ export const QueryBuilderFilterPanel = observer(
1839
1831
  )}
1840
1832
  {isDroppable && !filterState.isEmpty && (
1841
1833
  <div
1842
- ref={addFilterRef}
1834
+ ref={ref}
1843
1835
  className="query-builder-filter-tree__free-drop-zone__container"
1844
1836
  >
1845
1837
  <PanelEntryDropZonePlaceholder
@@ -28,6 +28,7 @@ import {
28
28
  type DataGridIRowNode,
29
29
  type DataGridMenuItemDef,
30
30
  type DataGridIAggFuncParams,
31
+ type DataGridDefaultMenuItem,
31
32
  } from '@finos/legend-lego/data-grid';
32
33
  import {
33
34
  getRowDataFromExecutionResult,
@@ -334,8 +335,8 @@ export const QueryBuilderTDSGridResult = observer(
334
335
  const getContextMenuItems = useCallback(
335
336
  (
336
337
  params: DataGridGetContextMenuItemsParams<QueryBuilderTDSRowDataType>,
337
- ): (string | DataGridMenuItemDef)[] => {
338
- let result: (string | DataGridMenuItemDef)[] = [];
338
+ ) => {
339
+ let result: (DataGridDefaultMenuItem | DataGridMenuItemDef)[] = [];
339
340
  const fetchStructureImplementation =
340
341
  resultState.queryBuilderState.fetchStructureState.implementation;
341
342
  if (fetchStructureImplementation instanceof QueryBuilderTDSState) {
@@ -569,9 +570,7 @@ export const QueryBuilderTDSGridResult = observer(
569
570
  suppressClipboardPaste={false}
570
571
  suppressContextMenu={false}
571
572
  columnDefs={colDefs}
572
- getContextMenuItems={(params): (string | DataGridMenuItemDef)[] =>
573
- getContextMenuItems(params)
574
- }
573
+ getContextMenuItems={(params) => getContextMenuItems(params)}
575
574
  />
576
575
  )}
577
576
  {resultState.wavgAggregationState?.isApplyingWavg && (
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { ContextMenu, clsx } from '@finos/legend-art';
17
+ import { ContextMenu, WarningIcon, clsx } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import type { QueryBuilderState } from '../../../stores/QueryBuilderState.js';
20
20
  import {
@@ -25,6 +25,7 @@ import {
25
25
  import {
26
26
  DataGrid,
27
27
  type DataGridColumnDefinition,
28
+ type DataGridCustomHeaderProps,
28
29
  } from '@finos/legend-lego/data-grid';
29
30
  import {
30
31
  getRowDataFromExecutionResult,
@@ -50,66 +51,26 @@ import { QUERY_BUILDER_TEST_ID } from '../../../__lib__/QueryBuilderTesting.js';
50
51
 
51
52
  export const MAXIMUM_FRACTION_DIGITS = 4;
52
53
 
53
- export const getFloatGridColumnCustomHeader = (): string =>
54
- `<div class="ag-cell-label-container" role="presentation">
55
- <span
56
- data-ref="eMenu"
57
- class="ag-header-icon ag-header-cell-menu-button"
58
- ></span>
59
- <span
60
- data-ref="eFilterButton"
61
- class="ag-header-icon ag-header-cell-filter-button"
62
- ></span>
63
- <div data-ref="eLabel" class="ag-header-cell-label" role="presentation">
64
- <span
65
- data-ref="eSortOrder"
66
- class="ag-header-icon ag-sort-order ag-hidden"
67
- ></span>
68
- <span
69
- data-ref="eSortAsc"
70
- class="ag-header-icon ag-sort-ascending-icon ag-hidden"
71
- ></span>
72
- <span
73
- data-ref="eSortDesc"
74
- class="ag-header-icon ag-sort-descending-icon ag-hidden"
75
- ></span>
76
- <span
77
- data-ref="eSortMixed"
78
- class="ag-header-icon ag-sort-mixed-icon ag-hidden"
79
- ></span>
80
- <span
81
- data-ref="eSortNone"
82
- class="ag-header-icon ag-sort-none-icon ag-hidden"
83
- ></span>
84
- <span
85
- data-ref="eText"
86
- class="ag-header-cell-text"
87
- role="columnheader"
88
- ></span>
89
- <span data-ref="eFilter" class="ag-header-icon ag-filter-icon"></span>
90
- </div>
54
+ export const FloatGridColumnCustomHeader = (
55
+ props: DataGridCustomHeaderProps,
56
+ ) => {
57
+ return (
91
58
  <div
92
- data-testid="query__builder__result__grid__custom-header"
93
- class="query-builder__result__values__table__custom-header"
59
+ data-testid={
60
+ QUERY_BUILDER_TEST_ID.QUERY_BUILDER_RESULT_GRID_CUSTOM_HEADER
61
+ }
62
+ className="query-builder__result__values__table__custom-header"
94
63
  >
95
64
  <div
96
- class="query-builder__result__values__table__custom-header__icon"
65
+ className="query-builder__result__values__table__custom-header__icon"
97
66
  title="some values have been rounded using en-us format in this preview grid (defaults to max 4 decimal places)"
98
67
  >
99
- <svg
100
- stroke="currentColor"
101
- fill="currentColor"
102
- stroke-width="0"
103
- viewBox="0 0 576 512"
104
- height="1em"
105
- width="1em"
106
- xmlns="http://www.w3.org/2000/svg"
107
- >
108
- <path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path>
109
- </svg>
68
+ <WarningIcon />
110
69
  </div>
70
+ <div>{props.displayName}</div>
111
71
  </div>
112
- </div>`;
72
+ );
73
+ };
113
74
 
114
75
  export const getTDSColumnCustomizations = (
115
76
  result: TDSExecutionResult,
@@ -138,11 +99,11 @@ export const getTDSColumnCustomizations = (
138
99
  case PRIMITIVE_TYPE.DECIMAL:
139
100
  case PRIMITIVE_TYPE.FLOAT:
140
101
  return isTruncated(colValues)
141
- ? {
102
+ ? ({
142
103
  headerComponentParams: {
143
- template: getFloatGridColumnCustomHeader(),
104
+ innerHeaderComponent: FloatGridColumnCustomHeader,
144
105
  },
145
- }
106
+ } satisfies DataGridColumnDefinition)
146
107
  : {};
147
108
  default:
148
109
  return {};
@@ -472,6 +433,7 @@ export const QueryBuilderTDSSimpleGridResult = observer(
472
433
  resizable: true,
473
434
  field: colName,
474
435
  flex: 1,
436
+ headerName: colName,
475
437
  ...getTDSColumnCustomizations(executionResult, colName),
476
438
  cellRenderer: QueryResultCellRenderer,
477
439
  cellRendererParams: {
@@ -1385,7 +1385,7 @@ const DateInstanceValueEditor = observer(
1385
1385
  * See https://github.com/finos/legend-studio/pull/1021
1386
1386
  */
1387
1387
  export const BasicValueSpecificationEditor = forwardRef<
1388
- HTMLInputElement,
1388
+ HTMLInputElement | null,
1389
1389
  {
1390
1390
  valueSpecification: ValueSpecification;
1391
1391
  graph: PureModel;
@@ -1402,7 +1402,7 @@ export const BasicValueSpecificationEditor = forwardRef<
1402
1402
  | undefined;
1403
1403
  displayDateEditorAsEditableValue?: boolean | undefined;
1404
1404
  }
1405
- >(function BasicValueSpecificationEditor(props, ref) {
1405
+ >(function _BasicValueSpecificationEditor(props, ref) {
1406
1406
  const {
1407
1407
  className,
1408
1408
  valueSpecification,
@@ -122,7 +122,7 @@ export const QueryBuilderBaseInfoTooltip: React.FC<{
122
122
  data: {
123
123
  label: string;
124
124
  value: string;
125
- actionButton?: JSX.Element | undefined;
125
+ actionButton?: React.ReactNode | undefined;
126
126
  }[];
127
127
  placement?: TooltipPlacement | undefined;
128
128
  children: React.ReactElement;
@@ -44,7 +44,7 @@ import {
44
44
  } from './BasicValueSpecificationEditor.js';
45
45
  import { buildDatePickerOption } from './CustomDatePicker.js';
46
46
  import { QueryBuilderSimpleConstantExpressionState } from '../../stores/QueryBuilderConstantsState.js';
47
- import { forwardRef, useState } from 'react';
47
+ import { forwardRef, useRef, useState } from 'react';
48
48
 
49
49
  const CALCULATED = '(calculated)';
50
50
 
@@ -184,10 +184,12 @@ export const VariableViewer = observer(
184
184
  }),
185
185
  [variable],
186
186
  );
187
+ const ref = useRef<HTMLDivElement>(null);
188
+ dragConnector(ref);
187
189
  useDragPreviewLayer(dragPreviewConnector);
188
190
 
189
191
  return (
190
- <div className="query-builder__variables__variable" ref={dragConnector}>
192
+ <div className="query-builder__variables__variable" ref={ref}>
191
193
  <ContextMenu
192
194
  content={
193
195
  <QueryBuilderVariableContextMenu
@@ -57,6 +57,7 @@ import {
57
57
  type QueryGridConfig,
58
58
  type QueryExecutionContext,
59
59
  type FunctionAnalysisInfo,
60
+ type GraphData,
60
61
  GRAPH_MANAGER_EVENT,
61
62
  CompilationError,
62
63
  extractSourceInformationCoordinates,
@@ -73,6 +74,7 @@ import {
73
74
  QueryExplicitExecutionContext,
74
75
  attachFromQuery,
75
76
  PackageableElementExplicitReference,
77
+ InMemoryGraphData,
76
78
  } from '@finos/legend-graph';
77
79
  import { buildLambdaFunction } from './QueryBuilderValueSpecificationBuilder.js';
78
80
  import type {
@@ -886,6 +888,10 @@ export abstract class QueryBuilderState implements CommandRegistrar {
886
888
  return undefined;
887
889
  }
888
890
 
891
+ getGraphData(): GraphData {
892
+ return new InMemoryGraphData(this.graphManagerState.graph);
893
+ }
894
+
889
895
  /**
890
896
  * This method can be used to simplify the current query builder state
891
897
  * to a basic one that can be used for testing or some special operations,
@@ -340,7 +340,6 @@ const processFromFunction = (
340
340
  new RuntimePointer(PackageableElementExplicitReference.create(runtimeVal)),
341
341
  );
342
342
  queryBuilderState.setExecutionContextState(fromContext);
343
- return;
344
343
  };
345
344
 
346
345
  /**
@@ -315,7 +315,7 @@ export class QueryLoaderState {
315
315
  searchSpecification,
316
316
  )) as LightQuery[];
317
317
  if (!querySearchSortBy) {
318
- this.queries = this.queries.sort((a, b) =>
318
+ this.queries = this.queries.toSorted((a, b) =>
319
319
  a.name.localeCompare(b.name),
320
320
  );
321
321
  }
@@ -23,7 +23,6 @@ import {
23
23
  type GraphManagerState,
24
24
  type RawLambda,
25
25
  RuntimePointer,
26
- InMemoryGraphData,
27
26
  buildRawLambdaFromLambdaFunction,
28
27
  } from '@finos/legend-graph';
29
28
  import {
@@ -71,9 +70,7 @@ export class QueryBuilderCheckEntitlementsState implements Hashable {
71
70
  this.queryBuilderState.parametersState.parameterStates,
72
71
  this.queryBuilderState.graphManagerState,
73
72
  ),
74
- graphData: new InMemoryGraphData(
75
- this.queryBuilderState.graphManagerState.graph,
76
- ),
73
+ graphData: this.queryBuilderState.getGraphData(),
77
74
  },
78
75
  );
79
76
  }
@@ -106,7 +106,7 @@ export abstract class QueryBuilderExplorerTreeNodeData implements TreeNodeData {
106
106
  isPartOfDerivedPropertyBranch: boolean;
107
107
  type: Type;
108
108
  mappingData: QueryBuilderExplorerTreeNodeMappingData;
109
- elementRef: React.RefObject<HTMLDivElement>;
109
+ elementRef: React.RefObject<HTMLDivElement | null>;
110
110
 
111
111
  constructor(
112
112
  id: string,
@@ -178,7 +178,7 @@ const buildRootGraphFetchSubTree = (
178
178
  */
179
179
  export const buildGraphFetchTreeData = (
180
180
  tree: RootGraphFetchTree,
181
- displayRoot: boolean = false,
181
+ displayRoot = false,
182
182
  ): QueryBuilderGraphFetchTreeData => {
183
183
  const rootIds: string[] = [];
184
184
  const nodes = new Map<string, QueryBuilderGraphFetchTreeNodeData>();
@@ -611,21 +611,19 @@ export class QueryBuilderTDSState
611
611
 
612
612
  if (!options?.skipSorting) {
613
613
  // sort columns: aggregate columns go last
614
- this.projectionColumns = this.projectionColumns
615
- .slice()
616
- .sort(
617
- (colA, colB) =>
618
- (this.aggregationState.columns.find(
619
- (column) => column.projectionColumnState === colA,
620
- )
621
- ? 1
622
- : 0) -
623
- (this.aggregationState.columns.find(
624
- (column) => column.projectionColumnState === colB,
625
- )
626
- ? 1
627
- : 0),
628
- );
614
+ this.projectionColumns = this.projectionColumns.toSorted(
615
+ (colA, colB) =>
616
+ (this.aggregationState.columns.find(
617
+ (column) => column.projectionColumnState === colA,
618
+ )
619
+ ? 1
620
+ : 0) -
621
+ (this.aggregationState.columns.find(
622
+ (column) => column.projectionColumnState === colB,
623
+ )
624
+ ? 1
625
+ : 0),
626
+ );
629
627
  }
630
628
  }
631
629
 
@@ -474,7 +474,6 @@ export class PostFilterConditionState implements Hashable {
474
474
  this.rightConditionValue instanceof PostFilterValueSpecConditionValueState
475
475
  ) {
476
476
  this.rightConditionValue.setValue(val);
477
- return;
478
477
  } else {
479
478
  this.setRightConditionVal(
480
479
  new PostFilterValueSpecConditionValueState(this, val),