@finos/legend-query-builder 4.19.12 → 4.19.14

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/__lib__/QueryBuilderDocumentation.d.ts +2 -1
  2. package/lib/__lib__/QueryBuilderDocumentation.d.ts.map +1 -1
  3. package/lib/__lib__/QueryBuilderDocumentation.js +1 -0
  4. package/lib/__lib__/QueryBuilderDocumentation.js.map +1 -1
  5. package/lib/__lib__/QueryBuilderEvent.d.ts +63 -2
  6. package/lib/__lib__/QueryBuilderEvent.d.ts.map +1 -1
  7. package/lib/__lib__/QueryBuilderEvent.js +74 -1
  8. package/lib/__lib__/QueryBuilderEvent.js.map +1 -1
  9. package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts +204 -8
  10. package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts.map +1 -1
  11. package/lib/__lib__/QueryBuilderTelemetryHelper.js +104 -0
  12. package/lib/__lib__/QueryBuilderTelemetryHelper.js.map +1 -1
  13. package/lib/components/QueryBuilder.d.ts.map +1 -1
  14. package/lib/components/QueryBuilder.js +83 -14
  15. package/lib/components/QueryBuilder.js.map +1 -1
  16. package/lib/components/QueryBuilderConstantExpressionPanel.d.ts.map +1 -1
  17. package/lib/components/QueryBuilderConstantExpressionPanel.js +18 -1
  18. package/lib/components/QueryBuilderConstantExpressionPanel.js.map +1 -1
  19. package/lib/components/QueryBuilderParametersPanel.d.ts.map +1 -1
  20. package/lib/components/QueryBuilderParametersPanel.js +18 -1
  21. package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
  22. package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
  23. package/lib/components/QueryBuilderSideBar.js +19 -0
  24. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  25. package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
  26. package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js +42 -1
  27. package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js.map +1 -1
  28. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  29. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +25 -5
  30. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  31. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
  32. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +55 -0
  33. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  34. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  35. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +95 -8
  36. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  37. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
  38. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +37 -4
  39. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
  40. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  41. package/lib/components/filter/QueryBuilderFilterPanel.js +24 -5
  42. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  43. package/lib/components/result/QueryBuilderDataProductErrorPanel.d.ts +61 -0
  44. package/lib/components/result/QueryBuilderDataProductErrorPanel.d.ts.map +1 -0
  45. package/lib/components/result/QueryBuilderDataProductErrorPanel.js +176 -0
  46. package/lib/components/result/QueryBuilderDataProductErrorPanel.js.map +1 -0
  47. package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
  48. package/lib/components/result/QueryBuilderResultPanel.js +24 -18
  49. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  50. package/lib/data-access-overview.css +1 -1
  51. package/lib/index.css +2 -2
  52. package/lib/index.css.map +1 -1
  53. package/lib/index.d.ts +2 -1
  54. package/lib/index.d.ts.map +1 -1
  55. package/lib/index.js +1 -0
  56. package/lib/index.js.map +1 -1
  57. package/lib/package.json +1 -1
  58. package/lib/stores/QueryBuilderResultState.d.ts +11 -1
  59. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  60. package/lib/stores/QueryBuilderResultState.js +79 -15
  61. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  62. package/lib/stores/QueryBuilderState.d.ts +139 -9
  63. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  64. package/lib/stores/QueryBuilderState.js +134 -22
  65. package/lib/stores/QueryBuilderState.js.map +1 -1
  66. package/lib/stores/QueryBuilder_LegendApplicationPlugin_Extension.d.ts +13 -0
  67. package/lib/stores/QueryBuilder_LegendApplicationPlugin_Extension.d.ts.map +1 -1
  68. package/lib/stores/QueryLoaderState.d.ts +33 -5
  69. package/lib/stores/QueryLoaderState.d.ts.map +1 -1
  70. package/lib/stores/QueryLoaderState.js +10 -1
  71. package/lib/stores/QueryLoaderState.js.map +1 -1
  72. package/lib/stores/data-access/DataProductAccessInfo.d.ts +37 -0
  73. package/lib/stores/data-access/DataProductAccessInfo.d.ts.map +1 -0
  74. package/lib/stores/data-access/DataProductAccessInfo.js +17 -0
  75. package/lib/stores/data-access/DataProductAccessInfo.js.map +1 -0
  76. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js +1 -1
  77. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js.map +1 -1
  78. package/lib/stores/explorer/QueryBuilderExplorerState.js +1 -1
  79. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  80. package/lib/stores/milestoning/QueryBuilderMilestoningHelper.d.ts.map +1 -1
  81. package/lib/stores/milestoning/QueryBuilderMilestoningHelper.js +34 -9
  82. package/lib/stores/milestoning/QueryBuilderMilestoningHelper.js.map +1 -1
  83. package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts +5 -0
  84. package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
  85. package/lib/stores/milestoning/QueryBuilderMilestoningState.js +13 -0
  86. package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
  87. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts +2 -0
  88. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts.map +1 -1
  89. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +50 -1
  90. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
  91. package/package.json +10 -10
  92. package/src/__lib__/QueryBuilderDocumentation.ts +1 -0
  93. package/src/__lib__/QueryBuilderEvent.ts +80 -1
  94. package/src/__lib__/QueryBuilderTelemetryHelper.ts +450 -8
  95. package/src/components/QueryBuilder.tsx +157 -38
  96. package/src/components/QueryBuilderConstantExpressionPanel.tsx +24 -2
  97. package/src/components/QueryBuilderParametersPanel.tsx +25 -2
  98. package/src/components/QueryBuilderSideBar.tsx +28 -0
  99. package/src/components/fetch-structure/QueryBuilderGraphFetchTreePanel.tsx +56 -1
  100. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +31 -4
  101. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +74 -0
  102. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +123 -8
  103. package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +49 -4
  104. package/src/components/filter/QueryBuilderFilterPanel.tsx +31 -4
  105. package/src/components/result/QueryBuilderDataProductErrorPanel.tsx +441 -0
  106. package/src/components/result/QueryBuilderResultPanel.tsx +49 -32
  107. package/src/index.ts +2 -0
  108. package/src/stores/QueryBuilderResultState.ts +107 -19
  109. package/src/stores/QueryBuilderState.ts +260 -29
  110. package/src/stores/QueryBuilder_LegendApplicationPlugin_Extension.ts +20 -0
  111. package/src/stores/QueryLoaderState.ts +47 -6
  112. package/src/stores/data-access/DataProductAccessInfo.ts +37 -0
  113. package/src/stores/data-cube/QueryBuilderDataCubeEngine.ts +1 -1
  114. package/src/stores/explorer/QueryBuilderExplorerState.ts +1 -1
  115. package/src/stores/milestoning/QueryBuilderMilestoningHelper.ts +63 -8
  116. package/src/stores/milestoning/QueryBuilderMilestoningState.ts +20 -0
  117. package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +68 -0
  118. package/tsconfig.json +2 -0
@@ -15,29 +15,240 @@
15
15
  */
16
16
 
17
17
  import type { GraphManagerOperationReport } from '@finos/legend-graph';
18
+ import type { TelemetryErrorFields, TimingsRecord } from '@finos/legend-shared';
18
19
  import type { TelemetryService } from '@finos/legend-application';
19
20
  import {
20
21
  QUERY_BUILDER_EVENT,
21
22
  QUERY_BUILDER_FILTER_EVENT,
22
23
  QUERY_BUILDER_POST_FILTER_EVENT,
24
+ type QUERY_BUILDER_OPENED_FROM,
23
25
  } from './QueryBuilderEvent.js';
24
- import type { QueryableClassMappingRuntimeInfo } from '../stores/QueryBuilderState.js';
26
+ import type {
27
+ QueryBuilderQueryInfo,
28
+ QueryBuilderTelemetryContext,
29
+ } from '../stores/QueryBuilderState.js';
25
30
 
26
- type QueryExecution_TelemetryData = GraphManagerOperationReport & {
27
- dependenciesCount: number;
28
- state?: QueryableClassMappingRuntimeInfo | undefined;
29
- };
30
- type QueryMappingModelCoverageAnalysis_TelemetryData =
31
+ /**
32
+ * Every payload below extends {@link QueryBuilderTelemetryContext}, which
33
+ * carries two deliberately separate halves:
34
+ *
35
+ * - the entry point the query builder was *opened with* (`sourceInfo` — the
36
+ * route: GAV, data space, data product, service, …), spread FLAT at the top
37
+ * level;
38
+ * - the execution context it *resolved to* (class / mapping / runtime), nested
39
+ * under `state`.
40
+ *
41
+ * Keeping them apart is what lets a dashboard distinguish "arrived on mapping
42
+ * X" from "currently querying mapping X" — for a mapping-sourced query both are
43
+ * populated and a divergence means the user switched, while for a data space or
44
+ * data product query only `state` carries a mapping, because the entry point
45
+ * resolves to one.
46
+ */
47
+ type QueryExecution_TelemetryData = QueryBuilderTelemetryContext &
31
48
  GraphManagerOperationReport & {
32
49
  dependenciesCount: number;
33
- state?: QueryableClassMappingRuntimeInfo | undefined;
50
+ queryInfo?: QueryBuilderQueryInfo | undefined;
51
+ executionDurationMs?: number | undefined;
34
52
  };
35
53
 
54
+ /**
55
+ * Payload for query execution / plan / export failure events. Mirrors the shape
56
+ * of `LegendQueryTelemetryHelper` creator-failure payloads (`errorName`,
57
+ * `errorMessage`, `httpStatus`) so success/failure pairs can be joined on the
58
+ * same set of dimensions.
59
+ */
60
+ export type QueryExecutionFailure_TelemetryData = QueryBuilderTelemetryContext &
61
+ TelemetryErrorFields & {
62
+ /**
63
+ * Backend trace ID for the failed execution, when the error carries one.
64
+ */
65
+ executionTraceId?: string | undefined;
66
+ /**
67
+ * Phase timings collected up to the point of failure. Which laps are
68
+ * *missing* is the useful signal: no
69
+ * `graph-manager.v1.engine-operation.server-call.success` means the query
70
+ * never reached the engine, so the failure is pre-flight rather than
71
+ * in-flight.
72
+ */
73
+ timings?: TimingsRecord | undefined;
74
+ queryInfo?: QueryBuilderQueryInfo | undefined;
75
+ executionDurationMs?: number | undefined;
76
+ } & Record<string, unknown>;
77
+
78
+ /**
79
+ * Payload for {@link QUERY_BUILDER_EVENT.OPENED}.
80
+ *
81
+ * `openedFrom` is carried here and nowhere else. Which application emitted an
82
+ * event is already stamped on every payload by `TelemetryServicePlugin.setup()`
83
+ * (`appName`), and `appSessionId` is the join key back to this event — so
84
+ * repeating the surface on high-frequency events like `run-query.*` would
85
+ * duplicate data that is already reachable.
86
+ */
87
+ export type QueryBuilderOpened_TelemetryData = QueryBuilderTelemetryContext & {
88
+ openedFrom: QUERY_BUILDER_OPENED_FROM;
89
+ } & Record<string, unknown>;
90
+
91
+ /**
92
+ * Payload for {@link QUERY_BUILDER_EVENT.UNSUPPORTED_QUERY_LAUNCH}, fired when
93
+ * the query lambda could not be built into the form-mode builder and the user
94
+ * fell through to the raw-lambda / unsupported-query editor. Carries the
95
+ * shared envelope + capped error dimensions so unsupported-lambda fallback is
96
+ * countable per entry point / GAV. The untruncated stack still goes to
97
+ * `logService.error` alongside, so the full error remains debuggable.
98
+ */
99
+ export type UnsupportedQueryLaunched_TelemetryData =
100
+ QueryBuilderTelemetryContext & TelemetryErrorFields;
101
+
102
+ type QueryMappingModelCoverageAnalysis_TelemetryData =
103
+ QueryBuilderTelemetryContext &
104
+ GraphManagerOperationReport & {
105
+ dependenciesCount: number;
106
+ };
107
+
36
108
  type GraphFetchPanel_TelemtryData = {
37
109
  serializationType: string | undefined;
38
110
  };
39
111
 
112
+ /**
113
+ * Payloads for the authoring-side `*.change` events.
114
+ *
115
+ * Each nests what the user actually did under a `change` key, leaving the top
116
+ * level to the shared {@link QueryBuilderTelemetryContext} envelope. Beyond
117
+ * consistency this avoids a real collision: `change.sourceType` on a projection
118
+ * event ("explorer-property") means something entirely different from the
119
+ * top-level `sourceType` carried by `sourceInfo` ("data-product").
120
+ */
121
+ type ExecutionContextChange_TelemetryData = QueryBuilderTelemetryContext & {
122
+ change: {
123
+ subtype: 'class' | 'mapping' | 'runtime';
124
+ };
125
+ };
126
+
127
+ type ProjectionChange_TelemetryData = QueryBuilderTelemetryContext & {
128
+ change: {
129
+ action: 'add' | 'remove' | 'move' | 'clear' | 'add-derivation';
130
+ sourceType?:
131
+ | 'explorer-property'
132
+ | 'explorer-relation'
133
+ | 'function'
134
+ | 'filter-condition'
135
+ | 'derivation';
136
+ /**
137
+ * The resulting column count — except for `clear`, where it is the number
138
+ * of columns that were removed.
139
+ */
140
+ columnCount: number;
141
+ };
142
+ };
143
+
144
+ type ResultModifierChange_TelemetryData = QueryBuilderTelemetryContext & {
145
+ change: {
146
+ limitSet: boolean;
147
+ distinctOn: boolean;
148
+ sortColumnCount: number;
149
+ sliceSet: boolean;
150
+ };
151
+ };
152
+
153
+ type AggregationChange_TelemetryData = QueryBuilderTelemetryContext & {
154
+ change: {
155
+ action: 'operator-change';
156
+ operatorName?: string | undefined;
157
+ };
158
+ };
159
+
160
+ type WindowChange_TelemetryData = QueryBuilderTelemetryContext & {
161
+ /**
162
+ * DnD reordering of window columns is intentionally not reported — it would
163
+ * emit on every hover-driven reorder, so there is no `move` action here.
164
+ */
165
+ change: {
166
+ action: 'add' | 'edit' | 'remove';
167
+ columnCount: number;
168
+ };
169
+ };
170
+
171
+ type GraphFetchChange_TelemetryData = QueryBuilderTelemetryContext & {
172
+ change: {
173
+ action: 'add' | 'remove' | 'check-toggle' | 'serialization-change';
174
+ nodeCount: number;
175
+ serializationType?: string | undefined;
176
+ };
177
+ };
178
+
179
+ type ParameterChange_TelemetryData = QueryBuilderTelemetryContext & {
180
+ change: {
181
+ action: 'add' | 'edit' | 'remove';
182
+ parameterCount: number;
183
+ };
184
+ };
185
+
186
+ type ConstantChange_TelemetryData = QueryBuilderTelemetryContext & {
187
+ change: {
188
+ action: 'add' | 'edit' | 'remove';
189
+ constantCount: number;
190
+ };
191
+ };
192
+
193
+ type WatermarkChange_TelemetryData = QueryBuilderTelemetryContext & {
194
+ change: {
195
+ enabled: boolean;
196
+ };
197
+ };
198
+
199
+ type MilestoningChange_TelemetryData = QueryBuilderTelemetryContext & {
200
+ change: {
201
+ subtype:
202
+ | 'business-date'
203
+ | 'processing-date'
204
+ | 'all-versions'
205
+ | 'all-versions-in-range';
206
+ };
207
+ };
208
+
209
+ /**
210
+ * Shared by the filter and post-filter trees. DnD reparenting/reordering of
211
+ * condition nodes is intentionally not reported, so there is no `move` action.
212
+ */
213
+ type FilterChange_TelemetryData = QueryBuilderTelemetryContext & {
214
+ change: {
215
+ action: 'remove' | 'group-operation-change';
216
+ groupOperation?: 'and' | 'or' | undefined;
217
+ };
218
+ };
219
+
220
+ /**
221
+ * Payload for Advanced/Help menu `*.launch` actions — a menu item the user
222
+ * clicked, carrying just the shared telemetry envelope (source info + `state`)
223
+ * with no `change` block, because these are one-shot invocations rather than
224
+ * authoring events.
225
+ */
226
+ type MenuAction_TelemetryData = QueryBuilderTelemetryContext;
227
+
228
+ /**
229
+ * Payload for Advanced/Help menu `*.toggle` actions. `enabled` reports the
230
+ * post-toggle state so a single event stream covers both opens and closes;
231
+ * split `WHERE enabled = true` for opens.
232
+ */
233
+ type MenuToggle_TelemetryData = QueryBuilderTelemetryContext & {
234
+ enabled: boolean;
235
+ };
236
+
40
237
  export class QueryBuilderTelemetryHelper {
238
+ static logEvent_QueryBuilderOpened(
239
+ service: TelemetryService,
240
+ data: QueryBuilderOpened_TelemetryData,
241
+ ): void {
242
+ service.logEvent(QUERY_BUILDER_EVENT.OPENED, data);
243
+ }
244
+
245
+ static logEvent_UnsupportedQueryLaunched(
246
+ service: TelemetryService,
247
+ data: UnsupportedQueryLaunched_TelemetryData,
248
+ ): void {
249
+ service.logEvent(QUERY_BUILDER_EVENT.UNSUPPORTED_QUERY_LAUNCH, data);
250
+ }
251
+
41
252
  static logEvent_QueryRunLaunched(
42
253
  service: TelemetryService,
43
254
  data?: Record<string, unknown> | undefined,
@@ -72,7 +283,7 @@ export class QueryBuilderTelemetryHelper {
72
283
 
73
284
  static logEvent_QueryRunFailed(
74
285
  service: TelemetryService,
75
- data: { errorMessage: string } & Record<string, unknown>,
286
+ data: QueryExecutionFailure_TelemetryData,
76
287
  ): void {
77
288
  service.logEvent(QUERY_BUILDER_EVENT.RUN_QUERY__FAILURE, data);
78
289
  }
@@ -91,6 +302,13 @@ export class QueryBuilderTelemetryHelper {
91
302
  service.logEvent(QUERY_BUILDER_EVENT.EXPORT_QUERY_DATA__SUCCESS, data);
92
303
  }
93
304
 
305
+ static logEvent_ExportQueryDataFailed(
306
+ service: TelemetryService,
307
+ data: QueryExecutionFailure_TelemetryData,
308
+ ): void {
309
+ service.logEvent(QUERY_BUILDER_EVENT.EXPORT_QUERY_DATA__FAILURE, data);
310
+ }
311
+
94
312
  static logEvent_ExecutionPlanGenerationSucceeded(
95
313
  service: TelemetryService,
96
314
  data: QueryExecution_TelemetryData,
@@ -101,6 +319,16 @@ export class QueryBuilderTelemetryHelper {
101
319
  );
102
320
  }
103
321
 
322
+ static logEvent_ExecutionPlanGenerationFailed(
323
+ service: TelemetryService,
324
+ data: QueryExecutionFailure_TelemetryData,
325
+ ): void {
326
+ service.logEvent(
327
+ QUERY_BUILDER_EVENT.GENERATE_EXECUTION_PLAN__FAILURE,
328
+ data,
329
+ );
330
+ }
331
+
104
332
  static logEvent_ExecutionPlanDebugSucceeded(
105
333
  service: TelemetryService,
106
334
  data: QueryExecution_TelemetryData,
@@ -108,6 +336,13 @@ export class QueryBuilderTelemetryHelper {
108
336
  service.logEvent(QUERY_BUILDER_EVENT.DEBUG_EXECUTION_PLAN__SUCCESS, data);
109
337
  }
110
338
 
339
+ static logEvent_ExecutionPlanDebugFailed(
340
+ service: TelemetryService,
341
+ data: QueryExecutionFailure_TelemetryData,
342
+ ): void {
343
+ service.logEvent(QUERY_BUILDER_EVENT.DEBUG_EXECUTION_PLAN__FAILURE, data);
344
+ }
345
+
111
346
  static logEvent_EmbeddedDataCubeQueryRunSucceeded(
112
347
  service: TelemetryService,
113
348
  data: QueryExecution_TelemetryData,
@@ -289,4 +524,211 @@ export class QueryBuilderTelemetryHelper {
289
524
  ): void {
290
525
  service.logEvent(QUERY_BUILDER_EVENT.PANEL_GRAPH_FETCH_RENDER, data);
291
526
  }
527
+
528
+ static logEvent_ExecutionContextChanged(
529
+ service: TelemetryService,
530
+ data: ExecutionContextChange_TelemetryData,
531
+ ): void {
532
+ service.logEvent(QUERY_BUILDER_EVENT.EXECUTION_CONTEXT__CHANGE, data);
533
+ }
534
+
535
+ static logEvent_ProjectionChanged(
536
+ service: TelemetryService,
537
+ data: ProjectionChange_TelemetryData,
538
+ ): void {
539
+ service.logEvent(QUERY_BUILDER_EVENT.PROJECTION__CHANGE, data);
540
+ }
541
+
542
+ static logEvent_ResultModifierChanged(
543
+ service: TelemetryService,
544
+ data: ResultModifierChange_TelemetryData,
545
+ ): void {
546
+ service.logEvent(QUERY_BUILDER_EVENT.RESULT_MODIFIER__CHANGE, data);
547
+ }
548
+
549
+ static logEvent_AggregationChanged(
550
+ service: TelemetryService,
551
+ data: AggregationChange_TelemetryData,
552
+ ): void {
553
+ service.logEvent(QUERY_BUILDER_EVENT.AGGREGATION__CHANGE, data);
554
+ }
555
+
556
+ static logEvent_WindowChanged(
557
+ service: TelemetryService,
558
+ data: WindowChange_TelemetryData,
559
+ ): void {
560
+ service.logEvent(QUERY_BUILDER_EVENT.WINDOW__CHANGE, data);
561
+ }
562
+
563
+ static logEvent_GraphFetchChanged(
564
+ service: TelemetryService,
565
+ data: GraphFetchChange_TelemetryData,
566
+ ): void {
567
+ service.logEvent(QUERY_BUILDER_EVENT.GRAPH_FETCH__CHANGE, data);
568
+ }
569
+
570
+ static logEvent_ParameterChanged(
571
+ service: TelemetryService,
572
+ data: ParameterChange_TelemetryData,
573
+ ): void {
574
+ service.logEvent(QUERY_BUILDER_EVENT.PARAMETER__CHANGE, data);
575
+ }
576
+
577
+ static logEvent_ConstantChanged(
578
+ service: TelemetryService,
579
+ data: ConstantChange_TelemetryData,
580
+ ): void {
581
+ service.logEvent(QUERY_BUILDER_EVENT.CONSTANT__CHANGE, data);
582
+ }
583
+
584
+ static logEvent_WatermarkChanged(
585
+ service: TelemetryService,
586
+ data: WatermarkChange_TelemetryData,
587
+ ): void {
588
+ service.logEvent(QUERY_BUILDER_EVENT.WATERMARK__CHANGE, data);
589
+ }
590
+
591
+ static logEvent_MilestoningChanged(
592
+ service: TelemetryService,
593
+ data: MilestoningChange_TelemetryData,
594
+ ): void {
595
+ service.logEvent(QUERY_BUILDER_EVENT.MILESTONING__CHANGE, data);
596
+ }
597
+
598
+ static logEvent_FilterChanged(
599
+ service: TelemetryService,
600
+ data: FilterChange_TelemetryData,
601
+ ): void {
602
+ service.logEvent(QUERY_BUILDER_EVENT.FILTER__CHANGE, data);
603
+ }
604
+
605
+ static logEvent_PostFilterChanged(
606
+ service: TelemetryService,
607
+ data: FilterChange_TelemetryData,
608
+ ): void {
609
+ service.logEvent(QUERY_BUILDER_EVENT.POST_FILTER__CHANGE, data);
610
+ }
611
+
612
+ // ── Advanced menu ────────────────────────────────────────────────────────
613
+
614
+ static logEvent_TogglePanelParameter(
615
+ service: TelemetryService,
616
+ data: MenuToggle_TelemetryData,
617
+ ): void {
618
+ service.logEvent(QUERY_BUILDER_EVENT.PANEL_PARAMETER__TOGGLE, data);
619
+ }
620
+
621
+ static logEvent_TogglePanelConstant(
622
+ service: TelemetryService,
623
+ data: MenuToggle_TelemetryData,
624
+ ): void {
625
+ service.logEvent(QUERY_BUILDER_EVENT.PANEL_CONSTANT__TOGGLE, data);
626
+ }
627
+
628
+ static logEvent_TogglePanelFilter(
629
+ service: TelemetryService,
630
+ data: MenuToggle_TelemetryData,
631
+ ): void {
632
+ service.logEvent(QUERY_BUILDER_EVENT.PANEL_FILTER__TOGGLE, data);
633
+ }
634
+
635
+ static logEvent_TogglePanelWindow(
636
+ service: TelemetryService,
637
+ data: MenuToggle_TelemetryData,
638
+ ): void {
639
+ service.logEvent(QUERY_BUILDER_EVENT.PANEL_WINDOW__TOGGLE, data);
640
+ }
641
+
642
+ static logEvent_TogglePanelPostFilter(
643
+ service: TelemetryService,
644
+ data: MenuToggle_TelemetryData,
645
+ ): void {
646
+ service.logEvent(QUERY_BUILDER_EVENT.PANEL_POST_FILTER__TOGGLE, data);
647
+ }
648
+
649
+ static logEvent_ToggleCalendar(
650
+ service: TelemetryService,
651
+ data: MenuToggle_TelemetryData,
652
+ ): void {
653
+ service.logEvent(QUERY_BUILDER_EVENT.CALENDAR__TOGGLE, data);
654
+ }
655
+
656
+ static logEvent_ToggleTypedTDS(
657
+ service: TelemetryService,
658
+ data: MenuToggle_TelemetryData,
659
+ ): void {
660
+ service.logEvent(QUERY_BUILDER_EVENT.TYPED_TDS__TOGGLE, data);
661
+ }
662
+
663
+ static logEvent_CheckEntitlementsLaunched(
664
+ service: TelemetryService,
665
+ data: MenuAction_TelemetryData,
666
+ ): void {
667
+ service.logEvent(QUERY_BUILDER_EVENT.CHECK_ENTITLEMENTS__LAUNCH, data);
668
+ }
669
+
670
+ static logEvent_EditPureLaunched(
671
+ service: TelemetryService,
672
+ data: MenuAction_TelemetryData,
673
+ ): void {
674
+ service.logEvent(QUERY_BUILDER_EVENT.EDIT_PURE__LAUNCH, data);
675
+ }
676
+
677
+ static logEvent_ShowPureLaunched(
678
+ service: TelemetryService,
679
+ data: MenuAction_TelemetryData,
680
+ ): void {
681
+ service.logEvent(QUERY_BUILDER_EVENT.SHOW_PURE__LAUNCH, data);
682
+ }
683
+
684
+ static logEvent_ShowProtocolLaunched(
685
+ service: TelemetryService,
686
+ data: MenuAction_TelemetryData,
687
+ ): void {
688
+ service.logEvent(QUERY_BUILDER_EVENT.SHOW_PROTOCOL__LAUNCH, data);
689
+ }
690
+
691
+ static logEvent_CompileQueryLaunched(
692
+ service: TelemetryService,
693
+ data: MenuAction_TelemetryData,
694
+ ): void {
695
+ service.logEvent(QUERY_BUILDER_EVENT.COMPILE_QUERY__LAUNCH, data);
696
+ }
697
+
698
+ static logEvent_ShowQueryDiffLaunched(
699
+ service: TelemetryService,
700
+ data: MenuAction_TelemetryData,
701
+ ): void {
702
+ service.logEvent(QUERY_BUILDER_EVENT.SHOW_QUERY_DIFF__LAUNCH, data);
703
+ }
704
+
705
+ // ── Help menu (core items) ───────────────────────────────────────────────
706
+
707
+ static logEvent_OpenDocumentationLaunched(
708
+ service: TelemetryService,
709
+ data: MenuAction_TelemetryData,
710
+ ): void {
711
+ service.logEvent(QUERY_BUILDER_EVENT.OPEN_DOCUMENTATION__LAUNCH, data);
712
+ }
713
+
714
+ static logEvent_OpenFAQLaunched(
715
+ service: TelemetryService,
716
+ data: MenuAction_TelemetryData,
717
+ ): void {
718
+ service.logEvent(QUERY_BUILDER_EVENT.OPEN_FAQ__LAUNCH, data);
719
+ }
720
+
721
+ static logEvent_OpenSupportTicketsLaunched(
722
+ service: TelemetryService,
723
+ data: MenuAction_TelemetryData,
724
+ ): void {
725
+ service.logEvent(QUERY_BUILDER_EVENT.OPEN_SUPPORT_TICKETS__LAUNCH, data);
726
+ }
727
+
728
+ static logEvent_ToggleVirtualAssistant(
729
+ service: TelemetryService,
730
+ data: MenuToggle_TelemetryData,
731
+ ): void {
732
+ service.logEvent(QUERY_BUILDER_EVENT.VIRTUAL_ASSISTANT__TOGGLE, data);
733
+ }
292
734
  }