@finos/legend-query-builder 4.14.37 → 4.14.39

Sign up to get free protection for your applications and to get access to all the features.
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