@finos/legend-query-builder 4.14.37 → 4.14.39

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 (94) hide show
  1. package/lib/__lib__/QueryBuilderTesting.d.ts +2 -1
  2. package/lib/__lib__/QueryBuilderTesting.d.ts.map +1 -1
  3. package/lib/__lib__/QueryBuilderTesting.js +1 -0
  4. package/lib/__lib__/QueryBuilderTesting.js.map +1 -1
  5. package/lib/components/QueryBuilder.d.ts.map +1 -1
  6. package/lib/components/QueryBuilder.js +10 -9
  7. package/lib/components/QueryBuilder.js.map +1 -1
  8. package/lib/components/QueryBuilderParametersPanel.js +2 -2
  9. package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
  10. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +0 -2
  11. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
  12. package/lib/components/QueryBuilderPropertyExpressionEditor.js +10 -26
  13. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
  14. package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
  15. package/lib/components/QueryBuilderSideBar.js +3 -3
  16. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  17. package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -1
  18. package/lib/components/QueryBuilderTextEditor.js +17 -3
  19. package/lib/components/QueryBuilderTextEditor.js.map +1 -1
  20. package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts +5 -0
  21. package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
  22. package/lib/components/explorer/QueryBuilderMilestoningEditor.js +10 -5
  23. package/lib/components/explorer/QueryBuilderMilestoningEditor.js.map +1 -1
  24. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
  25. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +45 -12
  26. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  27. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  28. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +13 -5
  29. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  30. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  31. package/lib/components/filter/QueryBuilderFilterPanel.js +1 -2
  32. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  33. package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
  34. package/lib/components/result/QueryBuilderResultPanel.js +6 -5
  35. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  36. package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
  37. package/lib/components/shared/BasicValueSpecificationEditor.js +49 -8
  38. package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
  39. package/lib/components/workflows/ClassQueryBuilder.d.ts.map +1 -1
  40. package/lib/components/workflows/ClassQueryBuilder.js +3 -3
  41. package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
  42. package/lib/components/workflows/MappingQueryBuilder.d.ts.map +1 -1
  43. package/lib/components/workflows/MappingQueryBuilder.js +3 -3
  44. package/lib/components/workflows/MappingQueryBuilder.js.map +1 -1
  45. package/lib/components/workflows/ServiceQueryBuilder.d.ts.map +1 -1
  46. package/lib/components/workflows/ServiceQueryBuilder.js +3 -3
  47. package/lib/components/workflows/ServiceQueryBuilder.js.map +1 -1
  48. package/lib/index.css +2 -2
  49. package/lib/index.css.map +1 -1
  50. package/lib/package.json +1 -1
  51. package/lib/stores/QueryBuilderTextEditorState.d.ts +4 -1
  52. package/lib/stores/QueryBuilderTextEditorState.d.ts.map +1 -1
  53. package/lib/stores/QueryBuilderTextEditorState.js +19 -2
  54. package/lib/stores/QueryBuilderTextEditorState.js.map +1 -1
  55. package/lib/stores/QueryLoaderState.d.ts +2 -2
  56. package/lib/stores/QueryLoaderState.d.ts.map +1 -1
  57. package/lib/stores/QueryLoaderState.js +3 -3
  58. package/lib/stores/QueryLoaderState.js.map +1 -1
  59. package/lib/stores/explorer/QueryFunctionsExplorerState.d.ts +1 -1
  60. package/lib/stores/explorer/QueryFunctionsExplorerState.d.ts.map +1 -1
  61. package/lib/stores/explorer/QueryFunctionsExplorerState.js +2 -1
  62. package/lib/stores/explorer/QueryFunctionsExplorerState.js.map +1 -1
  63. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +1 -0
  64. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  65. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +8 -0
  66. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  67. package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
  68. package/lib/stores/milestoning/QueryBuilderMilestoningState.js +9 -3
  69. package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
  70. package/lib/stores/watermark/QueryBuilderWatermarkState.d.ts.map +1 -1
  71. package/lib/stores/watermark/QueryBuilderWatermarkState.js +0 -1
  72. package/lib/stores/watermark/QueryBuilderWatermarkState.js.map +1 -1
  73. package/package.json +8 -8
  74. package/src/__lib__/QueryBuilderTesting.ts +1 -0
  75. package/src/components/QueryBuilder.tsx +16 -15
  76. package/src/components/QueryBuilderParametersPanel.tsx +2 -2
  77. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +40 -92
  78. package/src/components/QueryBuilderSideBar.tsx +3 -2
  79. package/src/components/QueryBuilderTextEditor.tsx +46 -11
  80. package/src/components/explorer/QueryBuilderMilestoningEditor.tsx +60 -46
  81. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +78 -34
  82. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +121 -34
  83. package/src/components/filter/QueryBuilderFilterPanel.tsx +0 -11
  84. package/src/components/result/QueryBuilderResultPanel.tsx +21 -23
  85. package/src/components/shared/BasicValueSpecificationEditor.tsx +141 -34
  86. package/src/components/workflows/ClassQueryBuilder.tsx +3 -2
  87. package/src/components/workflows/MappingQueryBuilder.tsx +3 -2
  88. package/src/components/workflows/ServiceQueryBuilder.tsx +7 -3
  89. package/src/stores/QueryBuilderTextEditorState.ts +20 -2
  90. package/src/stores/QueryLoaderState.ts +5 -7
  91. package/src/stores/explorer/QueryFunctionsExplorerState.ts +6 -2
  92. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +11 -0
  93. package/src/stores/milestoning/QueryBuilderMilestoningState.ts +11 -7
  94. package/src/stores/watermark/QueryBuilderWatermarkState.ts +0 -1
@@ -278,12 +278,10 @@ const AllVersionsInRangelMilestoningParametersEditor = observer(
278
278
  },
279
279
  );
280
280
 
281
- export const MilestoningParametersEditor = observer(
281
+ export const MilestoningParametersEditorContent = observer(
282
282
  (props: { queryBuilderState: QueryBuilderState }) => {
283
283
  const { queryBuilderState } = props;
284
- const applicationStore = queryBuilderState.applicationStore;
285
284
  const milestoningState = queryBuilderState.milestoningState;
286
- const close = (): void => milestoningState.setShowMilestoningEditor(false);
287
285
  const isCompatibleMilestoningParameter = (
288
286
  variable: VariableExpression,
289
287
  ): boolean =>
@@ -292,6 +290,62 @@ export const MilestoningParametersEditor = observer(
292
290
  variable.genericType?.value.rawType.name === PRIMITIVE_TYPE.DATE ||
293
291
  variable.genericType?.value.rawType.name === PRIMITIVE_TYPE.DATETIME;
294
292
 
293
+ return (
294
+ <>
295
+ {milestoningState.isCurrentClassMilestoned && (
296
+ <PanelFormBooleanField
297
+ isReadOnly={false}
298
+ value={milestoningState.isAllVersionsEnabled}
299
+ name="all Versions"
300
+ prompt="Query All Milestoned Versions of the Root Class"
301
+ update={(value: boolean | undefined): void =>
302
+ milestoningState.setAllVersions(value)
303
+ }
304
+ />
305
+ )}
306
+ {milestoningState.isAllVersionsEnabled &&
307
+ milestoningState.isCurrentClassSupportsVersionsInRange && (
308
+ <>
309
+ <PanelFormBooleanField
310
+ isReadOnly={false}
311
+ value={milestoningState.isAllVersionsInRangeEnabled}
312
+ name=" All Versions In Range"
313
+ prompt="Optionally apply a date range to get All Versions for"
314
+ update={(value: boolean | undefined): void =>
315
+ milestoningState.setAllVersionsInRange(value)
316
+ }
317
+ />
318
+
319
+ {milestoningState.isAllVersionsInRangeEnabled && (
320
+ <AllVersionsInRangelMilestoningParametersEditor
321
+ queryBuilderState={queryBuilderState}
322
+ />
323
+ )}
324
+ </>
325
+ )}
326
+ <TemporalMilestoningEditor queryBuilderState={queryBuilderState} />
327
+ <PanelFormSection>
328
+ <div className="panel__content__form__section__header__label">
329
+ List of compatible milestoning parameters
330
+ </div>
331
+ </PanelFormSection>
332
+ <div className="panel__content__form__section__list__items">
333
+ <VariableSelector
334
+ queryBuilderState={queryBuilderState}
335
+ filterBy={isCompatibleMilestoningParameter}
336
+ />
337
+ </div>
338
+ </>
339
+ );
340
+ },
341
+ );
342
+
343
+ export const MilestoningParametersEditor = observer(
344
+ (props: { queryBuilderState: QueryBuilderState }) => {
345
+ const { queryBuilderState } = props;
346
+ const applicationStore = queryBuilderState.applicationStore;
347
+ const milestoningState = queryBuilderState.milestoningState;
348
+ const close = (): void => milestoningState.setShowMilestoningEditor(false);
295
349
  return (
296
350
  <Dialog
297
351
  open={milestoningState.showMilestoningEditor}
@@ -310,49 +364,9 @@ export const MilestoningParametersEditor = observer(
310
364
  >
311
365
  <ModalHeader title="Milestoning Parameters" />
312
366
  <ModalBody className="query-builder__variables__modal__body">
313
- {milestoningState.isCurrentClassMilestoned && (
314
- <PanelFormBooleanField
315
- isReadOnly={false}
316
- value={milestoningState.isAllVersionsEnabled}
317
- name="all Versions"
318
- prompt="Query All Milestoned Versions of the Root Class"
319
- update={(value: boolean | undefined): void =>
320
- milestoningState.setAllVersions(value)
321
- }
322
- />
323
- )}
324
- {milestoningState.isAllVersionsEnabled &&
325
- milestoningState.isCurrentClassSupportsVersionsInRange && (
326
- <>
327
- <PanelFormBooleanField
328
- isReadOnly={false}
329
- value={milestoningState.isAllVersionsInRangeEnabled}
330
- name=" All Versions In Range"
331
- prompt="Optionally apply a date range to get All Versions for"
332
- update={(value: boolean | undefined): void =>
333
- milestoningState.setAllVersionsInRange(value)
334
- }
335
- />
336
-
337
- {milestoningState.isAllVersionsInRangeEnabled && (
338
- <AllVersionsInRangelMilestoningParametersEditor
339
- queryBuilderState={queryBuilderState}
340
- />
341
- )}
342
- </>
343
- )}
344
- <TemporalMilestoningEditor queryBuilderState={queryBuilderState} />
345
- <PanelFormSection>
346
- <div className="panel__content__form__section__header__label">
347
- List of compatible milestoning parameters
348
- </div>
349
- </PanelFormSection>
350
- <div className="panel__content__form__section__list__items">
351
- <VariableSelector
352
- queryBuilderState={queryBuilderState}
353
- filterBy={isCompatibleMilestoningParameter}
354
- />
355
- </div>
367
+ <MilestoningParametersEditorContent
368
+ queryBuilderState={queryBuilderState}
369
+ />
356
370
  </ModalBody>
357
371
  <ModalFooter>
358
372
  <ModalFooterButton text="Close" onClick={close} type="secondary" />
@@ -26,15 +26,13 @@ import {
26
26
  ModalBody,
27
27
  ModalFooter,
28
28
  ModalHeader,
29
- SortIcon,
30
- DropdownMenu,
31
- MenuContent,
32
- MenuContentItem,
33
29
  ModalFooterButton,
34
30
  InputWithInlineValidation,
35
31
  PanelDivider,
36
32
  PanelDropZone,
37
33
  PanelFormSection,
34
+ ArrowUpIcon,
35
+ ArrowDownIcon,
38
36
  } from '@finos/legend-art';
39
37
  import { SortColumnState } from '../../stores/fetch-structure/tds/QueryResultSetModifierState.js';
40
38
  import {
@@ -48,7 +46,7 @@ import { useApplicationStore } from '@finos/legend-application';
48
46
  import type { QueryBuilderTDSState } from '../../stores/fetch-structure/tds/QueryBuilderTDSState.js';
49
47
  import type { QueryBuilderTDSColumnState } from '../../stores/fetch-structure/tds/QueryBuilderTDSColumnState.js';
50
48
  import { COLUMN_SORT_TYPE } from '../../graph/QueryBuilderMetaModelConst.js';
51
- import { useCallback, useEffect, useState } from 'react';
49
+ import { useCallback, useEffect, useRef, useState } from 'react';
52
50
  import type { QueryBuilderProjectionColumnState } from '../../stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js';
53
51
  import { QUERY_BUILDER_TEST_ID } from '../../__lib__/QueryBuilderTesting.js';
54
52
  import { VariableSelector } from '../shared/QueryBuilderVariableSelector.js';
@@ -65,6 +63,7 @@ import {
65
63
  type QueryBuilderVariableDragSource,
66
64
  } from '../shared/BasicValueSpecificationEditor.js';
67
65
  import { useDrop } from 'react-dnd';
66
+ import { MilestoningParametersEditorContent } from '../explorer/QueryBuilderMilestoningEditor.js';
68
67
 
69
68
  const ColumnSortEditor = observer(
70
69
  (props: {
@@ -105,8 +104,12 @@ const ColumnSortEditor = observer(
105
104
  setSortColumns(newSortColumns);
106
105
  };
107
106
 
108
- const changeSortBy = (sortOp: COLUMN_SORT_TYPE) => (): void => {
109
- sortState.setSortType(sortOp);
107
+ const changeSortBy = (): void => {
108
+ if (sortState.sortType === COLUMN_SORT_TYPE.ASC) {
109
+ sortState.setSortType(COLUMN_SORT_TYPE.DESC);
110
+ } else {
111
+ sortState.setSortType(COLUMN_SORT_TYPE.ASC);
112
+ }
110
113
  };
111
114
 
112
115
  return (
@@ -127,31 +130,18 @@ const ColumnSortEditor = observer(
127
130
  <div className="query-builder__projection__options__sort__sortby">
128
131
  {sortType.toLowerCase()}
129
132
  </div>
130
- <DropdownMenu
131
- content={
132
- <MenuContent>
133
- {Object.values(COLUMN_SORT_TYPE).map((op) => (
134
- <MenuContentItem key={op} onClick={changeSortBy(op)}>
135
- {op.toLowerCase()}
136
- </MenuContentItem>
137
- ))}
138
- </MenuContent>
139
- }
140
- menuProps={{
141
- anchorOrigin: { vertical: 'bottom', horizontal: 'left' },
142
- transformOrigin: { vertical: 'top', horizontal: 'left' },
143
- elevation: 7,
144
- }}
133
+ <button
134
+ className="query-builder__projection__options__sort__sortby--btn btn--dark"
135
+ tabIndex={-1}
136
+ onClick={changeSortBy}
137
+ title="Choose SortBy Operator..."
145
138
  >
146
- <div
147
- className="query-builder__projection__options__sort__sortby--btn"
148
- tabIndex={-1}
149
- title="Choose SortBy Operator..."
150
- >
151
- <SortIcon />
152
- </div>
153
- </DropdownMenu>
154
-
139
+ {sortState.sortType === COLUMN_SORT_TYPE.ASC ? (
140
+ <ArrowUpIcon />
141
+ ) : (
142
+ <ArrowDownIcon />
143
+ )}
144
+ </button>
155
145
  <button
156
146
  className="query-builder__projection__options__sort__remove-btn btn--dark btn--caution"
157
147
  onClick={deleteColumnSort}
@@ -270,6 +260,31 @@ export const QueryResultModifierModal = observer(
270
260
  deepClone(watermarkState.value),
271
261
  );
272
262
 
263
+ //milestoning config
264
+ const milestoningState = tdsState.queryBuilderState.milestoningState;
265
+ const businessDate = useRef(milestoningState.businessDate);
266
+ const processingDate = useRef(milestoningState.processingDate);
267
+ const isAllVersionsEnabled = useRef(milestoningState.isAllVersionsEnabled);
268
+ const isAllVersionsInRangeEnabled = useRef(
269
+ milestoningState.isAllVersionsInRangeEnabled,
270
+ );
271
+ const startDate = useRef(milestoningState.startDate);
272
+ const endDate = useRef(milestoningState.endDate);
273
+
274
+ const resetMilestoningToInitial = (): void => {
275
+ if (isAllVersionsInRangeEnabled.current) {
276
+ milestoningState.setAllVersionsInRange(
277
+ isAllVersionsInRangeEnabled.current,
278
+ );
279
+ milestoningState.setStartDate(startDate.current);
280
+ milestoningState.setEndDate(endDate.current);
281
+ } else {
282
+ milestoningState.setAllVersions(isAllVersionsEnabled.current);
283
+ }
284
+ milestoningState.setBusinessDate(businessDate.current);
285
+ milestoningState.setProcessingDate(processingDate.current);
286
+ };
287
+
273
288
  // Sync temp state with tdsState when modal is opened/closed
274
289
  useEffect(() => {
275
290
  setSortColumns(cloneSortColumnStateArray(stateSortColumns));
@@ -287,7 +302,10 @@ export const QueryResultModifierModal = observer(
287
302
  ]);
288
303
 
289
304
  // Handle user actions
290
- const closeModal = (): void => resultSetModifierState.setShowModal(false);
305
+ const closeModal = (): void => {
306
+ resetMilestoningToInitial();
307
+ resultSetModifierState.setShowModal(false);
308
+ };
291
309
  const applyChanges = (): void => {
292
310
  resultSetModifierState.setSortColumns(sortColumns);
293
311
  resultSetModifierState.setDistinct(distinct);
@@ -299,6 +317,13 @@ export const QueryResultModifierModal = observer(
299
317
  }
300
318
  resultSetModifierState.setShowModal(false);
301
319
  watermarkState.setValue(watermarkValue);
320
+ businessDate.current = milestoningState.businessDate;
321
+ processingDate.current = milestoningState.processingDate;
322
+ isAllVersionsEnabled.current = milestoningState.isAllVersionsEnabled;
323
+ isAllVersionsInRangeEnabled.current =
324
+ milestoningState.isAllVersionsInRangeEnabled;
325
+ startDate.current = milestoningState.startDate;
326
+ endDate.current = milestoningState.endDate;
302
327
  };
303
328
 
304
329
  const handleLimitResultsChange: React.ChangeEventHandler<
@@ -408,9 +433,23 @@ export const QueryResultModifierModal = observer(
408
433
  }
409
434
  className="editor-modal query-builder__projection__modal"
410
435
  >
411
- <ModalHeader title="Result Set Modifier" />
436
+ <ModalHeader title="Query Options" />
412
437
  <ModalBody className="query-builder__projection__modal__body">
413
438
  <div className="query-builder__projection__options">
439
+ {tdsState.queryBuilderState.milestoningState
440
+ .isMilestonedQuery && (
441
+ <>
442
+ <div className="query-builder__projection__options__section-name">
443
+ Milestoning
444
+ </div>
445
+ <MilestoningParametersEditorContent
446
+ queryBuilderState={tdsState.queryBuilderState}
447
+ />
448
+ <div className="query-builder__projection__options__section-name">
449
+ Other
450
+ </div>
451
+ </>
452
+ )}
414
453
  <ColumnsSortEditor
415
454
  projectionColumns={tdsState.projectionColumns}
416
455
  sortColumns={sortColumns}
@@ -524,7 +563,12 @@ export const QueryResultModifierModal = observer(
524
563
  {watermarkValue && (
525
564
  <>
526
565
  <PanelFormSection>
527
- <div className="query-builder__variable-editor">
566
+ <div
567
+ className="query-builder__variable-editor"
568
+ data-testid={
569
+ QUERY_BUILDER_TEST_ID.QUERY_BUILDER_RESULT_MODIFIER_PANEL__WATERMAKR
570
+ }
571
+ >
528
572
  <PanelDropZone
529
573
  isDragOver={isParameterValueDragOver}
530
574
  dropTargetConnector={dropTargetConnector}
@@ -44,7 +44,6 @@ import {
44
44
  } from '@finos/legend-art';
45
45
  import {
46
46
  type QueryBuilderExplorerTreeDragSource,
47
- type QueryBuilderExplorerTreePropertyNodeData,
48
47
  buildPropertyExpressionFromExplorerTreeNodeData,
49
48
  QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
50
49
  } from '../../stores/explorer/QueryBuilderExplorerState.js';
@@ -159,20 +158,11 @@ const QueryBuilderSimpleProjectionColumnEditor = observer(
159
158
  error?: string | undefined;
160
159
  }) => {
161
160
  const { projectionColumnState, setColumnName, error } = props;
162
- const onPropertyExpressionChange = (
163
- node: QueryBuilderExplorerTreePropertyNodeData,
164
- ): void =>
165
- projectionColumnState.changeProperty(
166
- node,
167
- projectionColumnState.tdsState.queryBuilderState.explorerState
168
- .humanizePropertyName,
169
- );
170
161
 
171
162
  return (
172
163
  <QueryBuilderPropertyExpressionBadge
173
164
  columnName={projectionColumnState.columnName}
174
165
  propertyExpressionState={projectionColumnState.propertyExpressionState}
175
- onPropertyExpressionChange={onPropertyExpressionChange}
176
166
  setColumnName={setColumnName}
177
167
  error={error}
178
168
  />
@@ -1148,27 +1138,118 @@ export const QueryBuilderTDSPanel = observer(
1148
1138
  >
1149
1139
  <div className="query-builder__projection__result-modifier-prompt__header">
1150
1140
  <button
1151
- className="query-builder__projection__result-modifier-prompt__header__label"
1141
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1152
1142
  onClick={openResultSetModifierEditor}
1153
- title="Configure result set modifiers..."
1143
+ title="Configure Query Options..."
1154
1144
  >
1155
1145
  <CogIcon className="query-builder__projection__result-modifier-prompt__header__label__icon" />
1156
1146
  <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1157
- Query Options
1147
+ {tdsState.isQueryOptionsSet
1148
+ ? 'Query Options'
1149
+ : 'Set Query Options'}
1158
1150
  </div>
1159
1151
  </button>
1152
+ <div className="query-builder__projection__result-modifier-prompt__divider">
1153
+ {tdsState.isQueryOptionsSet && ' - '}
1154
+ </div>
1155
+ {tdsState.queryBuilderState.milestoningState.businessDate && (
1156
+ <div className="query-builder__projection__result-modifier-prompt__group">
1157
+ <div className="query-builder__projection__result-modifier-prompt__group__label">
1158
+ Business Date
1159
+ </div>
1160
+ <button
1161
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1162
+ onClick={openResultSetModifierEditor}
1163
+ >
1164
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1165
+ {getNameOfValueSpecification(
1166
+ tdsState.queryBuilderState.milestoningState
1167
+ .businessDate,
1168
+ tdsState.queryBuilderState,
1169
+ )}
1170
+ </div>
1171
+ </button>
1172
+ </div>
1173
+ )}
1174
+ {tdsState.queryBuilderState.milestoningState.processingDate && (
1175
+ <div className="query-builder__projection__result-modifier-prompt__group">
1176
+ <div className="query-builder__projection__result-modifier-prompt__group__label">
1177
+ Processing Date
1178
+ </div>
1179
+ <button
1180
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1181
+ onClick={openResultSetModifierEditor}
1182
+ >
1183
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1184
+ {getNameOfValueSpecification(
1185
+ tdsState.queryBuilderState.milestoningState
1186
+ .processingDate,
1187
+ tdsState.queryBuilderState,
1188
+ )}
1189
+ </div>
1190
+ </button>
1191
+ </div>
1192
+ )}
1193
+ {tdsState.queryBuilderState.milestoningState
1194
+ .isAllVersionsEnabled &&
1195
+ !tdsState.queryBuilderState.milestoningState
1196
+ .isAllVersionsInRangeEnabled && (
1197
+ <div className="query-builder__projection__result-modifier-prompt__group">
1198
+ <div className="query-builder__projection__result-modifier-prompt__group__label">
1199
+ All Versions
1200
+ </div>
1201
+ <button
1202
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1203
+ onClick={openResultSetModifierEditor}
1204
+ >
1205
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1206
+ Yes
1207
+ </div>
1208
+ </button>
1209
+ </div>
1210
+ )}
1211
+ {tdsState.queryBuilderState.milestoningState
1212
+ .isAllVersionsInRangeEnabled &&
1213
+ tdsState.queryBuilderState.milestoningState.startDate &&
1214
+ tdsState.queryBuilderState.milestoningState.endDate && (
1215
+ <div className="query-builder__projection__result-modifier-prompt__group">
1216
+ <div className="query-builder__projection__result-modifier-prompt__group__label">
1217
+ All Versions
1218
+ </div>
1219
+ <button
1220
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1221
+ onClick={openResultSetModifierEditor}
1222
+ >
1223
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1224
+ (
1225
+ {getNameOfValueSpecification(
1226
+ tdsState.queryBuilderState.milestoningState.startDate,
1227
+ tdsState.queryBuilderState,
1228
+ )}{' '}
1229
+ -{' '}
1230
+ {getNameOfValueSpecification(
1231
+ tdsState.queryBuilderState.milestoningState.endDate,
1232
+ tdsState.queryBuilderState,
1233
+ )}
1234
+ )
1235
+ </div>
1236
+ </button>
1237
+ </div>
1238
+ )}
1160
1239
  </div>
1161
1240
  {tdsState.resultSetModifierState.limit && (
1162
1241
  <div className="query-builder__projection__result-modifier-prompt__group">
1163
1242
  <div className="query-builder__projection__result-modifier-prompt__group__label">
1164
1243
  Max Rows
1165
1244
  </div>
1166
- <div
1167
- className="query-builder__projection__result-modifier-prompt__group__content"
1245
+ <button
1246
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1168
1247
  onClick={openResultSetModifierEditor}
1169
1248
  >
1170
- {tdsState.resultSetModifierState.limit}
1171
- </div>
1249
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1250
+ {tdsState.resultSetModifierState.limit}
1251
+ </div>
1252
+ </button>
1172
1253
  </div>
1173
1254
  )}
1174
1255
  {tdsState.resultSetModifierState.distinct && (
@@ -1176,12 +1257,14 @@ export const QueryBuilderTDSPanel = observer(
1176
1257
  <div className="query-builder__projection__result-modifier-prompt__group__label">
1177
1258
  Eliminate Duplicate Rows
1178
1259
  </div>
1179
- <div
1180
- className="query-builder__projection__result-modifier-prompt__group__content"
1260
+ <button
1261
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1181
1262
  onClick={openResultSetModifierEditor}
1182
1263
  >
1183
- Yes
1184
- </div>
1264
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1265
+ Yes
1266
+ </div>
1267
+ </button>
1185
1268
  </div>
1186
1269
  )}
1187
1270
  {tdsState.resultSetModifierState.sortColumns.length > 0 && (
@@ -1191,13 +1274,15 @@ export const QueryBuilderTDSPanel = observer(
1191
1274
  </div>
1192
1275
  {tdsState.resultSetModifierState.sortColumns.map(
1193
1276
  (columnState) => (
1194
- <div
1195
- className="query-builder__projection__result-modifier-prompt__group__content"
1277
+ <button
1196
1278
  key={columnState.columnState.uuid}
1279
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1197
1280
  onClick={openResultSetModifierEditor}
1198
1281
  >
1199
- {`${columnState.columnState.columnName} ${columnState.sortType}`}
1200
- </div>
1282
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1283
+ {`${columnState.columnState.columnName} ${columnState.sortType}`}
1284
+ </div>
1285
+ </button>
1201
1286
  ),
1202
1287
  )}
1203
1288
  </div>
@@ -1207,12 +1292,14 @@ export const QueryBuilderTDSPanel = observer(
1207
1292
  <div className="query-builder__projection__result-modifier-prompt__group__label">
1208
1293
  Slice
1209
1294
  </div>
1210
- <div
1211
- className="query-builder__projection__result-modifier-prompt__group__content"
1295
+ <button
1296
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1212
1297
  onClick={openResultSetModifierEditor}
1213
1298
  >
1214
- {`${tdsState.resultSetModifierState.slice[0]},${tdsState.resultSetModifierState.slice[1]}`}
1215
- </div>
1299
+ <div className="query-builder__projection__result-modifier-prompt__header__label__title">
1300
+ {`${tdsState.resultSetModifierState.slice[0]},${tdsState.resultSetModifierState.slice[1]}`}
1301
+ </div>
1302
+ </button>
1216
1303
  </div>
1217
1304
  )}
1218
1305
  {tdsState.queryBuilderState.watermarkState.value && (
@@ -1220,15 +1307,15 @@ export const QueryBuilderTDSPanel = observer(
1220
1307
  <div className="query-builder__projection__result-modifier-prompt__group__label">
1221
1308
  Watermark
1222
1309
  </div>
1223
- <div
1224
- className="query-builder__projection__result-modifier-prompt__group__content"
1310
+ <button
1311
+ className="query-builder__projection__result-modifier-prompt__header__label editable-value"
1225
1312
  onClick={openResultSetModifierEditor}
1226
1313
  >
1227
1314
  {getNameOfValueSpecification(
1228
1315
  tdsState.queryBuilderState.watermarkState.value,
1229
1316
  tdsState.queryBuilderState,
1230
1317
  )}
1231
- </div>
1318
+ </button>
1232
1319
  </div>
1233
1320
  )}
1234
1321
  </div>
@@ -1313,12 +1400,12 @@ export const QueryBuilderTDSPanel = observer(
1313
1400
  {isDroppable && !isEmpty && (
1314
1401
  <div
1315
1402
  ref={addProjectionRef}
1316
- className="query-builder-filter-tree__free-drop-zone__container"
1403
+ className="query-builder__projection__free-drop-zone__container"
1317
1404
  >
1318
1405
  <PanelEntryDropZonePlaceholder
1319
1406
  isDragOver={isDragOver}
1320
1407
  isDroppable={isDroppable}
1321
- className="query-builder-filter-tree__free-drop-zone"
1408
+ className="query-builder__projection__free-drop-zone"
1322
1409
  label="Add a projection column"
1323
1410
  >
1324
1411
  <></>
@@ -60,7 +60,6 @@ import {
60
60
  import { useDrag, useDragLayer, useDrop } from 'react-dnd';
61
61
  import {
62
62
  type QueryBuilderExplorerTreeDragSource,
63
- type QueryBuilderExplorerTreePropertyNodeData,
64
63
  buildPropertyExpressionFromExplorerTreeNodeData,
65
64
  QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
66
65
  } from '../../stores/explorer/QueryBuilderExplorerState.js';
@@ -729,15 +728,6 @@ const QueryBuilderFilterConditionEditor = observer(
729
728
  const applicationStore = useApplicationStore();
730
729
  const changeOperator = (val: QueryBuilderFilterOperator) => (): void =>
731
730
  node.condition.changeOperator(val);
732
- const changeProperty = (
733
- propertyNode: QueryBuilderExplorerTreePropertyNodeData,
734
- ): void =>
735
- node.condition.changeProperty(
736
- buildPropertyExpressionFromExplorerTreeNodeData(
737
- propertyNode,
738
- queryBuilderState.explorerState,
739
- ),
740
- );
741
731
  // Drag and Drop on filter condition value
742
732
  const handleDrop = useCallback(
743
733
  (item: QueryBuilderVariableDragSource): void => {
@@ -815,7 +805,6 @@ const QueryBuilderFilterConditionEditor = observer(
815
805
  <div className="query-builder-filter-tree__condition-node__property">
816
806
  <QueryBuilderPropertyExpressionBadge
817
807
  propertyExpressionState={node.condition.propertyExpressionState}
818
- onPropertyExpressionChange={changeProperty}
819
808
  />
820
809
  </div>
821
810
  <DropdownMenu