@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-query-builder",
3
- "version": "4.15.28",
3
+ "version": "4.15.30",
4
4
  "description": "Legend query builder core",
5
5
  "keywords": [
6
6
  "legend",
@@ -42,44 +42,43 @@
42
42
  "test:watch": "jest --watch"
43
43
  },
44
44
  "dependencies": {
45
- "@finos/legend-application": "16.0.12",
46
- "@finos/legend-art": "7.1.69",
47
- "@finos/legend-code-editor": "2.0.25",
48
- "@finos/legend-data-cube": "0.0.30",
49
- "@finos/legend-graph": "31.10.59",
50
- "@finos/legend-lego": "2.0.27",
51
- "@finos/legend-server-depot": "6.0.71",
52
- "@finos/legend-shared": "10.0.62",
53
- "@finos/legend-storage": "3.0.113",
45
+ "@finos/legend-application": "16.0.13",
46
+ "@finos/legend-art": "7.1.70",
47
+ "@finos/legend-code-editor": "2.0.27",
48
+ "@finos/legend-data-cube": "0.0.32",
49
+ "@finos/legend-graph": "31.10.61",
50
+ "@finos/legend-lego": "2.0.29",
51
+ "@finos/legend-server-depot": "6.0.72",
52
+ "@finos/legend-shared": "10.0.63",
53
+ "@finos/legend-storage": "3.0.114",
54
54
  "@testing-library/dom": "10.4.0",
55
- "@testing-library/react": "16.0.1",
56
- "@types/react": "18.3.12",
57
- "@types/react-dom": "18.3.1",
55
+ "@testing-library/react": "16.1.0",
56
+ "@types/react": "19.0.2",
57
+ "@types/react-dom": "19.0.2",
58
58
  "chart.js": "4.4.7",
59
- "mathjs": "14.0.0",
59
+ "mathjs": "14.0.1",
60
60
  "mobx": "6.13.5",
61
- "mobx-react-lite": "4.0.7",
62
- "monaco-editor": "0.52.0",
63
- "react": "18.3.1",
64
- "react-chartjs-2": "5.2.0",
61
+ "mobx-react-lite": "4.1.0",
62
+ "monaco-editor": "0.52.2",
63
+ "react": "19.0.0",
65
64
  "react-dnd": "16.0.1",
66
- "react-dom": "18.3.1",
65
+ "react-dom": "19.0.0",
67
66
  "serializr": "3.0.3",
68
67
  "sql-formatter": "15.4.6"
69
68
  },
70
69
  "devDependencies": {
71
- "@finos/legend-dev-utils": "2.1.31",
70
+ "@finos/legend-dev-utils": "2.1.32",
72
71
  "@jest/globals": "29.7.0",
73
72
  "cross-env": "7.0.3",
74
- "eslint": "9.16.0",
73
+ "eslint": "9.17.0",
75
74
  "jest": "29.7.0",
76
75
  "npm-run-all": "4.1.5",
77
76
  "rimraf": "6.0.1",
78
- "sass": "1.81.0",
77
+ "sass": "1.83.0",
79
78
  "typescript": "5.7.2"
80
79
  },
81
80
  "peerDependencies": {
82
- "react": "^18.0.0"
81
+ "react": "^19.0.0"
83
82
  },
84
83
  "publishConfig": {
85
84
  "directory": "build/publishContent"
@@ -263,7 +263,7 @@ export const QueryBuilder = observer(
263
263
  (props: { queryBuilderState: QueryBuilderState }) => {
264
264
  const { queryBuilderState } = props;
265
265
  const applicationStore = queryBuilderState.applicationStore;
266
- const queryBuilderRef = useRef<HTMLDivElement>(null);
266
+ const ref = useRef<HTMLDivElement>(null);
267
267
  const isQuerySupported = queryBuilderState.isQuerySupported;
268
268
  const fetchStructureState = queryBuilderState.fetchStructureState;
269
269
  const isTDSState =
@@ -536,7 +536,7 @@ export const QueryBuilder = observer(
536
536
  <div
537
537
  data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER}
538
538
  className="query-builder"
539
- ref={queryBuilderRef}
539
+ ref={ref}
540
540
  >
541
541
  <BackdropContainer
542
542
  elementId={QUERY_BUILDER_COMPONENT_ELEMENT_ID.BACKDROP_CONTAINER}
@@ -581,7 +581,7 @@ export const QueryBuilder = observer(
581
581
  <div className="query-builder__header__actions">
582
582
  <div className="query-builder__header__actions__undo-redo">
583
583
  <UndoButton
584
- parent={queryBuilderRef}
584
+ parent={ref}
585
585
  canUndo={
586
586
  queryBuilderState.changeHistoryState.canUndo &&
587
587
  queryBuilderState.isQuerySupported
@@ -589,7 +589,7 @@ export const QueryBuilder = observer(
589
589
  undo={undo}
590
590
  />
591
591
  <RedoButton
592
- parent={queryBuilderRef}
592
+ parent={ref}
593
593
  canRedo={
594
594
  queryBuilderState.changeHistoryState.canRedo &&
595
595
  queryBuilderState.isQuerySupported
@@ -93,7 +93,7 @@ const DerivedPropertyParameterValueEditor = observer(
93
93
  },
94
94
  [derivedPropertyExpressionState, idx],
95
95
  );
96
- const [{ isParameterValueDragOver }, dropTargetConnector] = useDrop<
96
+ const [{ isParameterValueDragOver }, dropConnector] = useDrop<
97
97
  QueryBuilderVariableDragSource,
98
98
  void,
99
99
  { isParameterValueDragOver: boolean }
@@ -237,7 +237,7 @@ const DerivedPropertyParameterValueEditor = observer(
237
237
  <div className="query-builder__variable-editor">
238
238
  <PanelDropZone
239
239
  isDragOver={isParameterValueDragOver}
240
- dropTargetConnector={dropTargetConnector}
240
+ dropTargetConnector={dropConnector}
241
241
  >
242
242
  <BasicValueSpecificationEditor
243
243
  valueSpecification={valueSpec}
@@ -110,7 +110,7 @@ export const QueryBuilderClassSelector = observer(
110
110
  });
111
111
 
112
112
  const classOptions = classes
113
- .sort((a, b) => a.name.localeCompare(b.name))
113
+ .toSorted((a, b) => a.name.localeCompare(b.name))
114
114
  .map((_class) => ({
115
115
  value: _class,
116
116
  label: generateClassLabel(_class, queryBuilderState),
@@ -27,7 +27,6 @@ import packageJson from '../../package.json' with { type: 'json' };
27
27
  import { QUERY_BUILDER_SETTING_CONFIG } from '../__lib__/QueryBuilderSetting.js';
28
28
  import { QUERY_BUILDER_COMMAND_CONFIG } from '../stores/QueryBuilderCommand.js';
29
29
  import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
30
- import { configureDataGridComponent } from '@finos/legend-lego/data-grid';
31
30
  import { Chart as ChartJS, ArcElement, Tooltip, LinearScale } from 'chart.js';
32
31
 
33
32
  export type CheckEntitlementEditorRender = (
@@ -50,8 +49,6 @@ export class QueryBuilder_LegendApplicationPlugin extends LegendApplicationPlugi
50
49
  override getExtraApplicationSetups(): LegendApplicationSetup[] {
51
50
  return [
52
51
  async (applicationStore) => {
53
- configureDataGridComponent();
54
-
55
52
  // configure chart component
56
53
  ChartJS.register(
57
54
  ArcElement,
@@ -203,7 +203,7 @@ export const QueryLoader = observer(
203
203
  debouncedLoadQueries(queryLoaderState.searchText);
204
204
  };
205
205
  const toggleCuratedTemplate = (): void => {
206
- Array.from(queryLoaderState.extraFilters).map(([key, value]) =>
206
+ Array.from(queryLoaderState.extraFilters).forEach(([key, value]) =>
207
207
  queryLoaderState.extraFilters.set(key, false),
208
208
  );
209
209
  queryLoaderState.setShowCurrentUserQueriesOnly(false);
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useEffect } from 'react';
17
+ import { useEffect, useRef } from 'react';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { useApplicationStore } from '@finos/legend-application';
20
20
  import type {
@@ -42,7 +42,6 @@ import {
42
42
  DatasetEntitlementUnsupportedReport,
43
43
  } from '@finos/legend-graph';
44
44
  import { Chart as ChartJS, DoughnutController, ArcElement } from 'chart.js';
45
- import { Doughnut } from 'react-chartjs-2';
46
45
  import { getNullableFirstEntry } from '@finos/legend-shared';
47
46
  import type { QueryBuilder_LegendApplicationPlugin_Extension } from '../../stores/QueryBuilder_LegendApplicationPlugin_Extension.js';
48
47
 
@@ -51,6 +50,8 @@ ChartJS.register(DoughnutController, ArcElement);
51
50
  const DataAccessOverviewChart = observer(
52
51
  (props: { dataAccessState: DataAccessState }) => {
53
52
  const { dataAccessState } = props;
53
+ const canvasRef = useRef<HTMLCanvasElement>(null);
54
+ const chartRef = useRef<ChartJS>(null);
54
55
  const entitlementCheckInfo = dataAccessState.entitlementCheckInfo;
55
56
  const total = entitlementCheckInfo.total;
56
57
  const accessGrantedCount =
@@ -58,43 +59,68 @@ const DataAccessOverviewChart = observer(
58
59
  const accessGrantedPercentage =
59
60
  getNullableFirstEntry(entitlementCheckInfo.data)?.percentage ?? 0;
60
61
 
62
+ useEffect(() => {
63
+ if (canvasRef.current && !chartRef.current) {
64
+ chartRef.current = new ChartJS(canvasRef.current, {
65
+ type: 'doughnut',
66
+ data: {
67
+ labels: [],
68
+ datasets: [],
69
+ },
70
+ options: {
71
+ responsive: true,
72
+ resizeDelay: 0,
73
+ maintainAspectRatio: false,
74
+ cutout: '75%',
75
+ },
76
+ });
77
+ }
78
+
79
+ return () => {
80
+ chartRef.current?.destroy();
81
+ chartRef.current = null;
82
+ };
83
+ }, []);
84
+
85
+ useEffect(() => {
86
+ if (chartRef.current) {
87
+ chartRef.current.data = {
88
+ labels: entitlementCheckInfo.data.map((item) => item.label),
89
+ datasets: [
90
+ {
91
+ data: entitlementCheckInfo.data.map((item) => item.count),
92
+ backgroundColor: entitlementCheckInfo.data.map(
93
+ (item) => item.color,
94
+ ),
95
+ hoverBorderWidth: 0,
96
+ borderWidth: 0,
97
+ },
98
+ ],
99
+ };
100
+ chartRef.current.options = {
101
+ ...chartRef.current.options,
102
+ plugins: {
103
+ tooltip: {
104
+ enabled: entitlementCheckInfo.total !== 0,
105
+ usePointStyle: false,
106
+ boxPadding: 5,
107
+ callbacks: {
108
+ labelPointStyle: () => ({
109
+ pointStyle: 'rectRounded',
110
+ rotation: 0,
111
+ }),
112
+ },
113
+ },
114
+ },
115
+ };
116
+ chartRef.current.update('resize');
117
+ }
118
+ }, [entitlementCheckInfo]);
119
+
61
120
  return (
62
121
  <div className="data-access-overview__chart">
63
122
  <div className="data-access-overview__chart__container">
64
- <Doughnut
65
- data={{
66
- labels: entitlementCheckInfo.data.map((item) => item.label),
67
- datasets: [
68
- {
69
- data: entitlementCheckInfo.data.map((item) => item.count),
70
- backgroundColor: entitlementCheckInfo.data.map(
71
- (item) => item.color,
72
- ),
73
- hoverBorderWidth: 0,
74
- borderWidth: 0,
75
- },
76
- ],
77
- }}
78
- options={{
79
- responsive: true,
80
- resizeDelay: 0,
81
- maintainAspectRatio: false,
82
- cutout: '75%',
83
- plugins: {
84
- tooltip: {
85
- enabled: total !== 0,
86
- usePointStyle: false,
87
- boxPadding: 5,
88
- callbacks: {
89
- labelPointStyle: () => ({
90
- pointStyle: 'rectRounded',
91
- rotation: 0,
92
- }),
93
- },
94
- },
95
- },
96
- }}
97
- />
123
+ <canvas ref={canvasRef} />
98
124
  <div className="data-access-overview__chart__stats">
99
125
  <div className="data-access-overview__chart__stats__percentage">
100
126
  {total === 0 ? 0 : accessGrantedPercentage}%
@@ -288,7 +288,7 @@ export const ExecutionPlanViewerPanelContent: React.FC<{
288
288
  <div className="query-builder__template--function--editor__code">
289
289
  <CodeEditor
290
290
  inputValue={templateFunctions.reduce(
291
- (total, func) => (total += `${func}\n`),
291
+ (total, func) => `${total}${func}\n`,
292
292
  '',
293
293
  )}
294
294
  isReadOnly={true}
@@ -482,6 +482,8 @@ const QueryBuilderExplorerTreeNodeContainer = observer(
482
482
  }),
483
483
  [node],
484
484
  );
485
+ const ref = useRef<HTMLDivElement>(null);
486
+ dragConnector(ref);
485
487
  useDragPreviewLayer(dragPreviewConnector);
486
488
 
487
489
  const isExpandable = Boolean(node.childrenIds.length);
@@ -584,9 +586,7 @@ const QueryBuilderExplorerTreeNodeContainer = observer(
584
586
  : undefined
585
587
  }
586
588
  onClick={selectNode}
587
- ref={
588
- node.mappingData.mapped && !isExpandable ? dragConnector : undefined
589
- }
589
+ ref={node.mappingData.mapped && !isExpandable ? ref : undefined}
590
590
  style={{
591
591
  paddingLeft: `${(level - 1) * (stepPaddingInRem ?? 1) + 0.5}rem`,
592
592
  display: 'flex',
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useEffect, useState } from 'react';
17
+ import { useEffect, useRef, useState } from 'react';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import {
20
20
  type TooltipPlacement,
@@ -168,13 +168,12 @@ const QueryBuilderFunctionsExplorerListEntry = observer(
168
168
  }),
169
169
  [node],
170
170
  );
171
+ const ref = useRef<HTMLDivElement>(null);
172
+ dragConnector(ref);
171
173
  useDragPreviewLayer(dragPreviewConnector);
172
174
 
173
175
  return (
174
- <div
175
- className="query-builder__functions-explorer__function"
176
- ref={dragConnector}
177
- >
176
+ <div className="query-builder__functions-explorer__function" ref={ref}>
178
177
  <div className="query-builder__functions-explorer__function__content">
179
178
  <div className="query-builder__functions-explorer__function__icon">
180
179
  <div className="query-builder__functions-explorer__function-icon">
@@ -250,6 +249,8 @@ const QueryBuilderFunctionsExplorerTreeNodeContainer = observer(
250
249
  }),
251
250
  [node],
252
251
  );
252
+ const ref = useRef<HTMLDivElement>(null);
253
+ dragConnector(ref);
253
254
  useDragPreviewLayer(dragPreviewConnector);
254
255
 
255
256
  return (
@@ -257,7 +258,7 @@ const QueryBuilderFunctionsExplorerTreeNodeContainer = observer(
257
258
  <div
258
259
  className="tree-view__node__container query-builder__functions-explorer__tree__node__container"
259
260
  onClick={selectNode}
260
- ref={!isExpandable ? dragConnector : undefined}
261
+ ref={!isExpandable ? ref : undefined}
261
262
  style={{
262
263
  paddingLeft: `${(level - 1) * (stepPaddingInRem ?? 1) + 0.5}rem`,
263
264
  display: 'flex',
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
18
  import type { QueryBuilderState } from '../../stores/QueryBuilderState.js';
19
- import { useCallback } from 'react';
19
+ import { useCallback, useRef } from 'react';
20
20
  import {
21
21
  type ValueSpecification,
22
22
  GenericType,
@@ -81,6 +81,9 @@ export const MilestoningParameterEditor = observer(
81
81
  }),
82
82
  [handleDrop],
83
83
  );
84
+ const ref = useRef<HTMLDivElement>(null);
85
+ dropConnector(ref);
86
+
84
87
  const resetMilestoningParameter = (): void => {
85
88
  const param = observe_PrimitiveInstanceValue(
86
89
  new PrimitiveInstanceValue(
@@ -100,7 +103,7 @@ export const MilestoningParameterEditor = observer(
100
103
 
101
104
  return (
102
105
  <div
103
- ref={dropConnector}
106
+ ref={ref}
104
107
  className="query-builder__milestoning-panel__variable-editor"
105
108
  >
106
109
  <div className="query-builder__milestoning-panel__variable-editor__variable">
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useState } from 'react';
17
+ import { useRef, useState } from 'react';
18
18
  import {
19
19
  clsx,
20
20
  CheckSquareIcon,
@@ -265,7 +265,8 @@ const QueryBuilderTreeNodeViewer = observer(
265
265
  }),
266
266
  [node],
267
267
  );
268
-
268
+ const ref = useRef<HTMLDivElement>(null);
269
+ dragConnector(ref);
269
270
  useDragPreviewLayer(dragPreviewConnector);
270
271
 
271
272
  const getChildrenNodes = (): QueryBuilderExplorerTreeNodeData[] => {
@@ -355,7 +356,7 @@ const QueryBuilderTreeNodeViewer = observer(
355
356
  <>
356
357
  <div
357
358
  className="tree-view__node__container query-builder-property-search-panel__node__container"
358
- ref={dragConnector}
359
+ ref={ref}
359
360
  style={{
360
361
  paddingLeft: `${(level - 1) * stepPaddingInRem + 0.5}rem`,
361
362
  display: 'flex',
@@ -29,6 +29,7 @@ import { type QueryBuilderTDSPanelDropTarget } from './QueryBuilderTDSPanel.js';
29
29
  import { QueryBuilderAggregateOperator_Wavg } from '../../stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.js';
30
30
  import type { QueryBuilderTDSState } from '../../stores/fetch-structure/tds/QueryBuilderTDSState.js';
31
31
  import { QUERY_BUILDER_TEST_ID } from '../../__lib__/QueryBuilderTesting.js';
32
+ import { useRef } from 'react';
32
33
 
33
34
  export const WavgParamDNDZone = (props: {
34
35
  column: QueryBuilderAggregateOperator_Wavg;
@@ -55,7 +56,7 @@ export const WavgParamDNDZone = (props: {
55
56
  }
56
57
  };
57
58
 
58
- const [{ isDragOver }, dropWavgParam] = useDrop<
59
+ const [{ isDragOver }, dropConnector] = useDrop<
59
60
  QueryBuilderTDSPanelDropTarget,
60
61
  void,
61
62
  { isDragOver: boolean }
@@ -71,7 +72,8 @@ export const WavgParamDNDZone = (props: {
71
72
  }),
72
73
  [handleDrop],
73
74
  );
74
-
75
+ const ref = useRef<HTMLDivElement>(null);
76
+ dropConnector(ref);
75
77
  const { isDroppable } = useDragLayer((monitor) => ({
76
78
  isDroppable:
77
79
  monitor.isDragging() &&
@@ -81,7 +83,6 @@ export const WavgParamDNDZone = (props: {
81
83
  }));
82
84
 
83
85
  const weightIsSet = () => column.weight !== undefined;
84
-
85
86
  const getWeightName = (): string => {
86
87
  if (column instanceof QueryBuilderAggregateOperator_Wavg) {
87
88
  return column.weight?.func.value.name ?? '';
@@ -92,8 +93,8 @@ export const WavgParamDNDZone = (props: {
92
93
 
93
94
  return (
94
95
  <div
96
+ ref={ref}
95
97
  data-testid={QUERY_BUILDER_TEST_ID.QUERY_BUILDER_WAVG_DROPZONE}
96
- ref={dropWavgParam}
97
98
  >
98
99
  <div>
99
100
  <PanelEntryDropZonePlaceholder
@@ -772,7 +772,7 @@ const QueryBuilderGraphFetchTreePanel = observer(
772
772
  },
773
773
  [graphFetchTreeState, serializationState],
774
774
  );
775
- const [{ isDragOver }, dropTargetConnector] = useDrop<
775
+ const [{ isDragOver }, dropConnector] = useDrop<
776
776
  QueryBuilderExplorerTreeDragSource,
777
777
  void,
778
778
  { isDragOver: boolean }
@@ -813,7 +813,7 @@ const QueryBuilderGraphFetchTreePanel = observer(
813
813
  >
814
814
  <PanelDropZone
815
815
  isDragOver={isDragOver}
816
- dropTargetConnector={dropTargetConnector}
816
+ dropTargetConnector={dropConnector}
817
817
  contentClassName="query-builder-graph-fetch-panel"
818
818
  >
819
819
  {(!treeData || isGraphFetchTreeDataEmpty(treeData)) && (
@@ -369,6 +369,9 @@ const QueryBuilderPostFilterConditionEditor = observer(
369
369
  }),
370
370
  [handleDrop],
371
371
  );
372
+ const ref = useRef<HTMLDivElement>(null);
373
+ dropConnector(ref);
374
+
372
375
  const { isFilterValueDroppable } = useDragLayer((monitor) => ({
373
376
  isFilterValueDroppable:
374
377
  monitor.isDragging() &&
@@ -424,7 +427,7 @@ const QueryBuilderPostFilterConditionEditor = observer(
424
427
  ) {
425
428
  return (
426
429
  <div
427
- ref={dropConnector}
430
+ ref={ref}
428
431
  className="query-builder-post-filter-tree__condition-node__value"
429
432
  >
430
433
  <PanelEntryDropZonePlaceholder
@@ -458,7 +461,7 @@ const QueryBuilderPostFilterConditionEditor = observer(
458
461
  ) {
459
462
  return (
460
463
  <div
461
- ref={dropConnector}
464
+ ref={ref}
462
465
  className="query-builder-post-filter-tree__condition-node__value"
463
466
  >
464
467
  <PanelEntryDropZonePlaceholder
@@ -565,7 +568,7 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
565
568
  ) => {
566
569
  const { node, onNodeSelect, innerProps } = props;
567
570
  const { tdsState } = innerProps;
568
- const dragRef = useRef<HTMLDivElement>(null);
571
+ const ref = useRef<HTMLDivElement>(null);
569
572
  const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] =
570
573
  useState(false);
571
574
  const applicationStore = useApplicationStore();
@@ -702,7 +705,7 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
702
705
  }),
703
706
  [node, postFilterState],
704
707
  );
705
- dragConnector(dropConnector(dragRef));
708
+ dragConnector(dropConnector(ref));
706
709
  useDragPreviewLayer(dragPreviewConnector);
707
710
 
708
711
  const { isDroppable } = useDragLayer((monitor) => ({
@@ -757,7 +760,7 @@ const QueryBuilderPostFilterTreeNodeContainer = observer(
757
760
  QUERY_BUILDER_TEST_ID.QUERY_BUILDER_POST_FILTER_TREE_NODE_CONTENT
758
761
  }
759
762
  className="query-builder-post-filter-tree__node__content"
760
- ref={dragRef}
763
+ ref={ref}
761
764
  onClick={
762
765
  node instanceof QueryBuilderPostFilterTreeConditionNodeData ||
763
766
  node instanceof QueryBuilderPostFilterTreeBlankConditionNodeData
@@ -1031,7 +1034,7 @@ const QueryBuilderPostFilterPanelContent = observer(
1031
1034
  },
1032
1035
  [applicationStore, postFilterState, tdsState.aggregationState.columns],
1033
1036
  );
1034
- const [{ isDragOver }, dropTargetConnector] = useDrop<
1037
+ const [{ isDragOver }, dropConnector] = useDrop<
1035
1038
  QueryBuilderProjectionColumnDragSource,
1036
1039
  void,
1037
1040
  { isDragOver: boolean }
@@ -1050,8 +1053,8 @@ const QueryBuilderPostFilterPanelContent = observer(
1050
1053
  [applicationStore, handleDrop],
1051
1054
  );
1052
1055
 
1053
- const addPostFilterRef = useRef<HTMLDivElement>(null);
1054
- dropTargetConnector(addPostFilterRef);
1056
+ const ref = useRef<HTMLDivElement>(null);
1057
+ dropConnector(ref);
1055
1058
 
1056
1059
  return (
1057
1060
  <>
@@ -1145,7 +1148,7 @@ const QueryBuilderPostFilterPanelContent = observer(
1145
1148
  <PanelDropZone
1146
1149
  isDragOver={isDragOver && postFilterState.isEmpty}
1147
1150
  isDroppable={isDroppable && postFilterState.isEmpty}
1148
- dropTargetConnector={dropTargetConnector}
1151
+ dropTargetConnector={dropConnector}
1149
1152
  >
1150
1153
  {
1151
1154
  <PanelLoadingIndicator
@@ -1171,7 +1174,7 @@ const QueryBuilderPostFilterPanelContent = observer(
1171
1174
  )}
1172
1175
  {isDroppable && !postFilterState.isEmpty && (
1173
1176
  <div
1174
- ref={addPostFilterRef}
1177
+ ref={ref}
1175
1178
  className="query-builder-post-filter-tree__free-drop-zone__container"
1176
1179
  >
1177
1180
  <PanelEntryDropZonePlaceholder
@@ -360,7 +360,7 @@ export const QueryResultModifierModal = observer(
360
360
  setWatermarkValue(watermarkState.getDefaultValue());
361
361
  }
362
362
  };
363
- const [{ isParameterValueDragOver }, dropTargetConnector] = useDrop<
363
+ const [{ isParameterValueDragOver }, dropConnector] = useDrop<
364
364
  QueryBuilderVariableDragSource,
365
365
  void,
366
366
  { isParameterValueDragOver: boolean }
@@ -1047,7 +1047,7 @@ export const QueryResultModifierModal = observer(
1047
1047
  >
1048
1048
  <PanelDropZone
1049
1049
  isDragOver={isParameterValueDragOver}
1050
- dropTargetConnector={dropTargetConnector}
1050
+ dropTargetConnector={dropConnector}
1051
1051
  >
1052
1052
  <BasicValueSpecificationEditor
1053
1053
  valueSpecification={watermarkValue}