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