@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
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}