@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.
- package/lib/__lib__/QueryBuilderTesting.d.ts +2 -1
- package/lib/__lib__/QueryBuilderTesting.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderTesting.js +1 -0
- package/lib/__lib__/QueryBuilderTesting.js.map +1 -1
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +10 -9
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.js +2 -2
- package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +0 -2
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js +10 -26
- package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
- package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.js +3 -3
- package/lib/components/QueryBuilderSideBar.js.map +1 -1
- package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderTextEditor.js +17 -3
- package/lib/components/QueryBuilderTextEditor.js.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts +5 -0
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js +10 -5
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +45 -12
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +13 -5
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +1 -2
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/result/QueryBuilderResultPanel.js +6 -5
- package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.js +49 -8
- package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
- package/lib/components/workflows/ClassQueryBuilder.d.ts.map +1 -1
- package/lib/components/workflows/ClassQueryBuilder.js +3 -3
- package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
- package/lib/components/workflows/MappingQueryBuilder.d.ts.map +1 -1
- package/lib/components/workflows/MappingQueryBuilder.js +3 -3
- package/lib/components/workflows/MappingQueryBuilder.js.map +1 -1
- package/lib/components/workflows/ServiceQueryBuilder.d.ts.map +1 -1
- package/lib/components/workflows/ServiceQueryBuilder.js +3 -3
- package/lib/components/workflows/ServiceQueryBuilder.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderTextEditorState.d.ts +4 -1
- package/lib/stores/QueryBuilderTextEditorState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderTextEditorState.js +19 -2
- package/lib/stores/QueryBuilderTextEditorState.js.map +1 -1
- package/lib/stores/QueryLoaderState.d.ts +2 -2
- package/lib/stores/QueryLoaderState.d.ts.map +1 -1
- package/lib/stores/QueryLoaderState.js +3 -3
- package/lib/stores/QueryLoaderState.js.map +1 -1
- package/lib/stores/explorer/QueryFunctionsExplorerState.d.ts +1 -1
- package/lib/stores/explorer/QueryFunctionsExplorerState.d.ts.map +1 -1
- package/lib/stores/explorer/QueryFunctionsExplorerState.js +2 -1
- package/lib/stores/explorer/QueryFunctionsExplorerState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +8 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js +9 -3
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.d.ts.map +1 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.js +0 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.js.map +1 -1
- package/package.json +8 -8
- package/src/__lib__/QueryBuilderTesting.ts +1 -0
- package/src/components/QueryBuilder.tsx +16 -15
- package/src/components/QueryBuilderParametersPanel.tsx +2 -2
- package/src/components/QueryBuilderPropertyExpressionEditor.tsx +40 -92
- package/src/components/QueryBuilderSideBar.tsx +3 -2
- package/src/components/QueryBuilderTextEditor.tsx +46 -11
- package/src/components/explorer/QueryBuilderMilestoningEditor.tsx +60 -46
- package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +78 -34
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +121 -34
- package/src/components/filter/QueryBuilderFilterPanel.tsx +0 -11
- package/src/components/result/QueryBuilderResultPanel.tsx +21 -23
- package/src/components/shared/BasicValueSpecificationEditor.tsx +141 -34
- package/src/components/workflows/ClassQueryBuilder.tsx +3 -2
- package/src/components/workflows/MappingQueryBuilder.tsx +3 -2
- package/src/components/workflows/ServiceQueryBuilder.tsx +7 -3
- package/src/stores/QueryBuilderTextEditorState.ts +20 -2
- package/src/stores/QueryLoaderState.ts +5 -7
- package/src/stores/explorer/QueryFunctionsExplorerState.ts +6 -2
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +11 -0
- package/src/stores/milestoning/QueryBuilderMilestoningState.ts +11 -7
- package/src/stores/watermark/QueryBuilderWatermarkState.ts +0 -1
@@ -278,12 +278,10 @@ const AllVersionsInRangelMilestoningParametersEditor = observer(
|
|
278
278
|
},
|
279
279
|
);
|
280
280
|
|
281
|
-
export const
|
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
|
-
|
314
|
-
|
315
|
-
|
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 = (
|
109
|
-
sortState.
|
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
|
-
<
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
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
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
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 =>
|
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="
|
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
|
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
|
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
|
-
|
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
|
-
<
|
1167
|
-
className="query-builder__projection__result-modifier-
|
1245
|
+
<button
|
1246
|
+
className="query-builder__projection__result-modifier-prompt__header__label editable-value"
|
1168
1247
|
onClick={openResultSetModifierEditor}
|
1169
1248
|
>
|
1170
|
-
|
1171
|
-
|
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
|
-
<
|
1180
|
-
className="query-builder__projection__result-modifier-
|
1260
|
+
<button
|
1261
|
+
className="query-builder__projection__result-modifier-prompt__header__label editable-value"
|
1181
1262
|
onClick={openResultSetModifierEditor}
|
1182
1263
|
>
|
1183
|
-
|
1184
|
-
|
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
|
-
<
|
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
|
-
|
1200
|
-
|
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
|
-
<
|
1211
|
-
className="query-builder__projection__result-modifier-
|
1295
|
+
<button
|
1296
|
+
className="query-builder__projection__result-modifier-prompt__header__label editable-value"
|
1212
1297
|
onClick={openResultSetModifierEditor}
|
1213
1298
|
>
|
1214
|
-
|
1215
|
-
|
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
|
-
<
|
1224
|
-
className="query-builder__projection__result-modifier-
|
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
|
-
</
|
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-
|
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-
|
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
|