@finos/legend-query-builder 4.15.28 → 4.15.30

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 (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),