@finos/legend-query-builder 3.0.6 → 3.0.8
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__/QueryBuilderDocumentation.d.ts +0 -1
- package/lib/__lib__/QueryBuilderDocumentation.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderDocumentation.js +0 -1
- package/lib/__lib__/QueryBuilderDocumentation.js.map +1 -1
- package/lib/__lib__/QueryBuilderEvent.d.ts +18 -0
- package/lib/__lib__/QueryBuilderEvent.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderEvent.js +20 -0
- package/lib/__lib__/QueryBuilderEvent.js.map +1 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts +14 -0
- package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.js +43 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.js.map +1 -1
- package/lib/components/QueryBuilder.d.ts +0 -1
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +25 -34
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderConstantExpressionPanel.d.ts +0 -1
- package/lib/components/QueryBuilderConstantExpressionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderConstantExpressionPanel.js +11 -15
- package/lib/components/QueryBuilderConstantExpressionPanel.js.map +1 -1
- package/lib/components/QueryBuilderDiffPanel.d.ts +0 -1
- package/lib/components/QueryBuilderDiffPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.d.ts +0 -1
- package/lib/components/QueryBuilderParametersPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.js +16 -20
- package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +0 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts +0 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.d.ts +0 -1
- package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderTextEditor.d.ts +0 -1
- package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts +0 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +13 -3
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostTDSPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderPostTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +2 -2
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts +0 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +14 -3
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/shared/LambdaEditor.d.ts +0 -1
- package/lib/components/shared/LambdaEditor.d.ts.map +1 -1
- package/lib/components/shared/LambdaParameterValuesEditor.d.ts +0 -1
- package/lib/components/shared/LambdaParameterValuesEditor.d.ts.map +1 -1
- package/lib/components/shared/LambdaParameterValuesEditor.js +2 -1
- package/lib/components/shared/LambdaParameterValuesEditor.js.map +1 -1
- package/lib/components/shared/QueryBuilderVariableSelector.d.ts +0 -1
- package/lib/components/shared/QueryBuilderVariableSelector.d.ts.map +1 -1
- package/lib/components/watermark/QueryBuilderWatermark.d.ts +0 -1
- package/lib/components/watermark/QueryBuilderWatermark.d.ts.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +5 -5
- package/lib/stores/QueryBuilderState.d.ts +1 -2
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +7 -8
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts +2 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.d.ts +2 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.js +18 -15
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.js.map +1 -1
- package/package.json +13 -13
- package/src/__lib__/QueryBuilderDocumentation.ts +0 -2
- package/src/__lib__/QueryBuilderEvent.ts +20 -0
- package/src/__lib__/QueryBuilderTelemetryHelper.ts +131 -1
- package/src/components/QueryBuilder.tsx +147 -188
- package/src/components/QueryBuilderConstantExpressionPanel.tsx +7 -12
- package/src/components/QueryBuilderParametersPanel.tsx +6 -10
- package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +96 -60
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +1 -3
- package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +2 -4
- package/src/components/filter/QueryBuilderFilterPanel.tsx +102 -60
- package/src/components/shared/LambdaParameterValuesEditor.tsx +6 -5
- package/src/index.ts +2 -0
- package/src/stores/QueryBuilderState.ts +6 -11
- package/src/stores/QueryBuilderValueSpecificationBuilder.ts +1 -1
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.ts +43 -25
|
@@ -44,6 +44,9 @@ import {
|
|
|
44
44
|
useDragPreviewLayer,
|
|
45
45
|
BlankPanelContent,
|
|
46
46
|
PanelContent,
|
|
47
|
+
MoreVerticalIcon,
|
|
48
|
+
MenuContentItemIcon,
|
|
49
|
+
MenuContentItemLabel,
|
|
47
50
|
} from '@finos/legend-art';
|
|
48
51
|
import {
|
|
49
52
|
type ValueSpecification,
|
|
@@ -97,6 +100,7 @@ import {
|
|
|
97
100
|
QUERY_BUILDER_WINDOW_COLUMN_DND_TYPE,
|
|
98
101
|
} from '../../stores/fetch-structure/tds/window/QueryBuilderWindowState.js';
|
|
99
102
|
import type { QueryBuilderTDSColumnState } from '../../stores/fetch-structure/tds/QueryBuilderTDSColumnState.js';
|
|
103
|
+
import { QueryBuilderTelemetryHelper } from '../../__lib__/QueryBuilderTelemetryHelper.js';
|
|
100
104
|
|
|
101
105
|
const QueryBuilderPostFilterConditionContextMenu = observer(
|
|
102
106
|
forwardRef<
|
|
@@ -765,22 +769,37 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
765
769
|
const rootNode = postFilterState.getRootNode();
|
|
766
770
|
// actions
|
|
767
771
|
const collapseTree = (): void => {
|
|
772
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterCollapseTreeLaunched(
|
|
773
|
+
applicationStore.telemetryService,
|
|
774
|
+
);
|
|
768
775
|
postFilterState.setSelectedNode(undefined);
|
|
769
776
|
postFilterState.collapseTree();
|
|
770
777
|
};
|
|
771
778
|
const expandTree = (): void => {
|
|
779
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterExpandTreeLaunched(
|
|
780
|
+
applicationStore.telemetryService,
|
|
781
|
+
);
|
|
772
782
|
postFilterState.setSelectedNode(undefined);
|
|
773
783
|
postFilterState.expandTree();
|
|
774
784
|
};
|
|
775
785
|
const pruneTree = (): void => {
|
|
786
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterCleanupTreeLaunched(
|
|
787
|
+
applicationStore.telemetryService,
|
|
788
|
+
);
|
|
776
789
|
postFilterState.suppressClickawayEventListener();
|
|
777
790
|
postFilterState.pruneTree();
|
|
778
791
|
};
|
|
779
792
|
const simplifyTree = (): void => {
|
|
793
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterSimplifyTreeLaunched(
|
|
794
|
+
applicationStore.telemetryService,
|
|
795
|
+
);
|
|
780
796
|
postFilterState.suppressClickawayEventListener();
|
|
781
797
|
postFilterState.simplifyTree();
|
|
782
798
|
};
|
|
783
799
|
const createCondition = (): void => {
|
|
800
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterCreateConditionLaunched(
|
|
801
|
+
applicationStore.telemetryService,
|
|
802
|
+
);
|
|
784
803
|
postFilterState.suppressClickawayEventListener();
|
|
785
804
|
postFilterState.addNodeFromNode(
|
|
786
805
|
new QueryBuilderPostFilterTreeBlankConditionNodeData(undefined),
|
|
@@ -794,6 +813,9 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
794
813
|
rootNode instanceof QueryBuilderPostFilterTreeGroupNodeData)); // or if it is the root note, it has to be a group node
|
|
795
814
|
|
|
796
815
|
const createGroupCondition = (): void => {
|
|
816
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterCreateLogicalGroupLaunched(
|
|
817
|
+
applicationStore.telemetryService,
|
|
818
|
+
);
|
|
797
819
|
postFilterState.suppressClickawayEventListener();
|
|
798
820
|
if (allowGroupCreation) {
|
|
799
821
|
postFilterState.addGroupConditionNodeFromNode(
|
|
@@ -802,6 +824,9 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
802
824
|
}
|
|
803
825
|
};
|
|
804
826
|
const newGroupWithCondition = (): void => {
|
|
827
|
+
QueryBuilderTelemetryHelper.logEvent_PostFilterCreateGroupFromConditionLaunched(
|
|
828
|
+
applicationStore.telemetryService,
|
|
829
|
+
);
|
|
805
830
|
postFilterState.suppressClickawayEventListener();
|
|
806
831
|
if (
|
|
807
832
|
postFilterState.selectedNode instanceof
|
|
@@ -889,69 +914,80 @@ const QueryBuilderPostFilterPanelContent = observer(
|
|
|
889
914
|
<div className="panel__header__title__label">post-filter</div>
|
|
890
915
|
</div>
|
|
891
916
|
<div className="panel__header__actions">
|
|
892
|
-
<
|
|
893
|
-
className="panel__header__action"
|
|
894
|
-
onClick={createCondition}
|
|
895
|
-
tabIndex={-1}
|
|
896
|
-
title="Create Condition"
|
|
897
|
-
>
|
|
898
|
-
<PlusIcon />
|
|
899
|
-
</button>
|
|
900
|
-
<button
|
|
917
|
+
<DropdownMenu
|
|
901
918
|
className="panel__header__action"
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
919
|
+
title="Show Filter Options Menu..."
|
|
920
|
+
content={
|
|
921
|
+
<MenuContent>
|
|
922
|
+
<MenuContentItem onClick={createCondition}>
|
|
923
|
+
<MenuContentItemIcon>
|
|
924
|
+
<PlusIcon />
|
|
925
|
+
</MenuContentItemIcon>
|
|
926
|
+
<MenuContentItemLabel>
|
|
927
|
+
Create Condition
|
|
928
|
+
</MenuContentItemLabel>
|
|
929
|
+
</MenuContentItem>
|
|
930
|
+
<MenuContentItem
|
|
931
|
+
disabled={
|
|
932
|
+
!(
|
|
933
|
+
postFilterState.selectedNode instanceof
|
|
934
|
+
QueryBuilderPostFilterTreeConditionNodeData
|
|
935
|
+
)
|
|
936
|
+
}
|
|
937
|
+
onClick={newGroupWithCondition}
|
|
938
|
+
>
|
|
939
|
+
<MenuContentItemIcon>
|
|
940
|
+
<PlusCircleIcon />
|
|
941
|
+
</MenuContentItemIcon>
|
|
942
|
+
<MenuContentItemLabel>
|
|
943
|
+
Create Group From Condition
|
|
944
|
+
</MenuContentItemLabel>
|
|
945
|
+
</MenuContentItem>
|
|
946
|
+
<MenuContentItem
|
|
947
|
+
disabled={!allowGroupCreation}
|
|
948
|
+
title={
|
|
949
|
+
!allowGroupCreation
|
|
950
|
+
? 'Please select a filter node first to create logical group'
|
|
951
|
+
: ''
|
|
952
|
+
}
|
|
953
|
+
onClick={createGroupCondition}
|
|
954
|
+
>
|
|
955
|
+
<MenuContentItemIcon>
|
|
956
|
+
<NewFolderIcon />
|
|
957
|
+
</MenuContentItemIcon>
|
|
958
|
+
<MenuContentItemLabel>
|
|
959
|
+
Create Logical Group
|
|
960
|
+
</MenuContentItemLabel>
|
|
961
|
+
</MenuContentItem>
|
|
962
|
+
<MenuContentItem onClick={pruneTree}>
|
|
963
|
+
<MenuContentItemIcon>
|
|
964
|
+
<TrashIcon />
|
|
965
|
+
</MenuContentItemIcon>
|
|
966
|
+
<MenuContentItemLabel>Cleanup Tree</MenuContentItemLabel>
|
|
967
|
+
</MenuContentItem>
|
|
968
|
+
<MenuContentItem onClick={simplifyTree}>
|
|
969
|
+
<MenuContentItemIcon>
|
|
970
|
+
<CircleIcon />
|
|
971
|
+
</MenuContentItemIcon>
|
|
972
|
+
<MenuContentItemLabel>Simplify Tree</MenuContentItemLabel>
|
|
973
|
+
</MenuContentItem>
|
|
974
|
+
<MenuContentItem onClick={collapseTree}>
|
|
975
|
+
<MenuContentItemIcon>
|
|
976
|
+
<CompressIcon />
|
|
977
|
+
</MenuContentItemIcon>
|
|
978
|
+
<MenuContentItemLabel>Collapse Tree</MenuContentItemLabel>
|
|
979
|
+
</MenuContentItem>
|
|
980
|
+
<MenuContentItem onClick={expandTree}>
|
|
981
|
+
<MenuContentItemIcon>
|
|
982
|
+
<ExpandIcon />
|
|
983
|
+
</MenuContentItemIcon>
|
|
984
|
+
<MenuContentItemLabel>Expand Tree</MenuContentItemLabel>
|
|
985
|
+
</MenuContentItem>
|
|
986
|
+
</MenuContent>
|
|
907
987
|
}
|
|
908
|
-
onClick={newGroupWithCondition}
|
|
909
|
-
tabIndex={-1}
|
|
910
|
-
title="Create Group From Condition"
|
|
911
|
-
>
|
|
912
|
-
<PlusCircleIcon />
|
|
913
|
-
</button>
|
|
914
|
-
<button
|
|
915
|
-
className="panel__header__action"
|
|
916
|
-
disabled={!allowGroupCreation}
|
|
917
|
-
onClick={createGroupCondition}
|
|
918
|
-
tabIndex={-1}
|
|
919
|
-
title="Create Logical Group"
|
|
920
988
|
>
|
|
921
|
-
<
|
|
922
|
-
</
|
|
923
|
-
<button
|
|
924
|
-
className="panel__header__action"
|
|
925
|
-
onClick={pruneTree}
|
|
926
|
-
tabIndex={-1}
|
|
927
|
-
title="Cleanup Tree"
|
|
928
|
-
>
|
|
929
|
-
<TrashIcon />
|
|
930
|
-
</button>
|
|
931
|
-
<button
|
|
932
|
-
className="panel__header__action"
|
|
933
|
-
onClick={simplifyTree}
|
|
934
|
-
tabIndex={-1}
|
|
935
|
-
title="Simplify Tree"
|
|
936
|
-
>
|
|
937
|
-
<CircleIcon />
|
|
938
|
-
</button>
|
|
939
|
-
<button
|
|
940
|
-
className="panel__header__action"
|
|
941
|
-
onClick={collapseTree}
|
|
942
|
-
tabIndex={-1}
|
|
943
|
-
title="Collapse Tree"
|
|
944
|
-
>
|
|
945
|
-
<CompressIcon />
|
|
946
|
-
</button>
|
|
947
|
-
<button
|
|
948
|
-
className="panel__header__action"
|
|
949
|
-
onClick={expandTree}
|
|
950
|
-
tabIndex={-1}
|
|
951
|
-
title="Expand Tree"
|
|
952
|
-
>
|
|
953
|
-
<ExpandIcon />
|
|
954
|
-
</button>
|
|
989
|
+
<MoreVerticalIcon className="query-builder__icon__more-options" />
|
|
990
|
+
</DropdownMenu>
|
|
955
991
|
</div>
|
|
956
992
|
</div>
|
|
957
993
|
<PanelContent>
|
|
@@ -372,9 +372,7 @@ const QueryBuilderProjectionColumnEditor = observer(
|
|
|
372
372
|
spellCheck={false}
|
|
373
373
|
value={projectionColumnState.columnName}
|
|
374
374
|
onChange={changeColumnName}
|
|
375
|
-
|
|
376
|
-
isDuplicatedColumnName ? 'Duplicated column' : undefined
|
|
377
|
-
}
|
|
375
|
+
error={isDuplicatedColumnName ? 'Duplicated column' : undefined}
|
|
378
376
|
/>
|
|
379
377
|
</div>
|
|
380
378
|
<div className="query-builder__projection__column__value">
|
|
@@ -513,9 +513,7 @@ const QueryBuilderWindowColumnModalEditor = observer(
|
|
|
513
513
|
spellCheck={false}
|
|
514
514
|
value={windowColumnState.columnName}
|
|
515
515
|
onChange={changeColumnName}
|
|
516
|
-
|
|
517
|
-
isDuplicatedColumnName ? 'Duplicated column' : undefined
|
|
518
|
-
}
|
|
516
|
+
error={isDuplicatedColumnName ? 'Duplicated column' : undefined}
|
|
519
517
|
/>
|
|
520
518
|
</PanelFormSection>
|
|
521
519
|
</div>
|
|
@@ -1087,7 +1085,7 @@ const QueryBuilderWindowColumnEditor = observer(
|
|
|
1087
1085
|
spellCheck={false}
|
|
1088
1086
|
value={windowColumnState.columnName}
|
|
1089
1087
|
onChange={changeColumnName}
|
|
1090
|
-
|
|
1088
|
+
error={
|
|
1091
1089
|
isDuplicatedColumnName
|
|
1092
1090
|
? 'Duplicated column'
|
|
1093
1091
|
: isInvalidColumnName
|
|
@@ -43,6 +43,9 @@ import {
|
|
|
43
43
|
PanelEntryDropZonePlaceholder,
|
|
44
44
|
useDragPreviewLayer,
|
|
45
45
|
PanelContent,
|
|
46
|
+
MoreVerticalIcon,
|
|
47
|
+
MenuContentItemIcon,
|
|
48
|
+
MenuContentItemLabel,
|
|
46
49
|
} from '@finos/legend-art';
|
|
47
50
|
import {
|
|
48
51
|
type QueryBuilderFilterConditionDragSource,
|
|
@@ -84,6 +87,7 @@ import {
|
|
|
84
87
|
type QueryBuilderVariableDragSource,
|
|
85
88
|
QUERY_BUILDER_VARIABLE_DND_TYPE,
|
|
86
89
|
} from '../shared/BasicValueSpecificationEditor.js';
|
|
90
|
+
import { QueryBuilderTelemetryHelper } from '../../__lib__/QueryBuilderTelemetryHelper.js';
|
|
87
91
|
|
|
88
92
|
const QueryBuilderFilterGroupConditionEditor = observer(
|
|
89
93
|
(props: {
|
|
@@ -335,6 +339,10 @@ const QueryBuilderFilterConditionContextMenu = observer(
|
|
|
335
339
|
filterState.addGroupConditionNodeFromNode(node);
|
|
336
340
|
};
|
|
337
341
|
const newGroupWithCondition = (): void => {
|
|
342
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCreateGroupFromConditionLaunched(
|
|
343
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
344
|
+
);
|
|
345
|
+
|
|
338
346
|
filterState.suppressClickawayEventListener();
|
|
339
347
|
filterState.newGroupWithConditionFromNode(undefined, node);
|
|
340
348
|
};
|
|
@@ -677,26 +685,42 @@ const QueryBuilderFilterTree = observer(
|
|
|
677
685
|
export const QueryBuilderFilterPanel = observer(
|
|
678
686
|
(props: { queryBuilderState: QueryBuilderState }) => {
|
|
679
687
|
const { queryBuilderState } = props;
|
|
688
|
+
|
|
680
689
|
const applicationStore = useApplicationStore();
|
|
681
690
|
const filterState = queryBuilderState.filterState;
|
|
682
691
|
const rootNode = filterState.getRootNode();
|
|
683
692
|
const collapseTree = (): void => {
|
|
693
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCollapseTreeLaunched(
|
|
694
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
695
|
+
);
|
|
684
696
|
filterState.setSelectedNode(undefined);
|
|
685
697
|
filterState.collapseTree();
|
|
686
698
|
};
|
|
687
699
|
const expandTree = (): void => {
|
|
700
|
+
QueryBuilderTelemetryHelper.logEvent_FilterExpandTreeLaunched(
|
|
701
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
702
|
+
);
|
|
688
703
|
filterState.setSelectedNode(undefined);
|
|
689
704
|
filterState.expandTree();
|
|
690
705
|
};
|
|
691
706
|
const pruneTree = (): void => {
|
|
707
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCleanupTreeLaunched(
|
|
708
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
709
|
+
);
|
|
692
710
|
filterState.suppressClickawayEventListener();
|
|
693
711
|
filterState.pruneTree();
|
|
694
712
|
};
|
|
695
713
|
const simplifyTree = (): void => {
|
|
714
|
+
QueryBuilderTelemetryHelper.logEvent_FilterSimplifyTreeLaunched(
|
|
715
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
716
|
+
);
|
|
696
717
|
filterState.suppressClickawayEventListener();
|
|
697
718
|
filterState.simplifyTree();
|
|
698
719
|
};
|
|
699
720
|
const createCondition = (): void => {
|
|
721
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCreateConditionLaunched(
|
|
722
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
723
|
+
);
|
|
700
724
|
filterState.suppressClickawayEventListener();
|
|
701
725
|
filterState.addNodeFromNode(
|
|
702
726
|
new QueryBuilderFilterTreeBlankConditionNodeData(undefined),
|
|
@@ -709,12 +733,18 @@ export const QueryBuilderFilterPanel = observer(
|
|
|
709
733
|
(filterState.selectedNode !== rootNode || // either not a root node
|
|
710
734
|
rootNode instanceof QueryBuilderFilterTreeGroupNodeData)); // or if it is the root note, it has to be a group node
|
|
711
735
|
const createGroupCondition = (): void => {
|
|
736
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCreateLogicalGroupLaunched(
|
|
737
|
+
queryBuilderState.applicationStore.telemetryService,
|
|
738
|
+
);
|
|
712
739
|
filterState.suppressClickawayEventListener();
|
|
713
740
|
if (allowGroupCreation) {
|
|
714
741
|
filterState.addGroupConditionNodeFromNode(filterState.selectedNode);
|
|
715
742
|
}
|
|
716
743
|
};
|
|
717
744
|
const newGroupWithCondition = (): void => {
|
|
745
|
+
QueryBuilderTelemetryHelper.logEvent_FilterCreateLogicalGroupLaunched(
|
|
746
|
+
applicationStore.telemetryService,
|
|
747
|
+
);
|
|
718
748
|
filterState.suppressClickawayEventListener();
|
|
719
749
|
if (
|
|
720
750
|
filterState.selectedNode instanceof
|
|
@@ -812,70 +842,82 @@ export const QueryBuilderFilterPanel = observer(
|
|
|
812
842
|
<div className="panel__header__title">
|
|
813
843
|
<div className="panel__header__title__label">filter</div>
|
|
814
844
|
</div>
|
|
845
|
+
|
|
815
846
|
<div className="panel__header__actions">
|
|
816
|
-
<
|
|
817
|
-
className="panel__header__action"
|
|
818
|
-
onClick={createCondition}
|
|
819
|
-
tabIndex={-1}
|
|
820
|
-
title="Create Condition"
|
|
821
|
-
>
|
|
822
|
-
<PlusIcon />
|
|
823
|
-
</button>
|
|
824
|
-
<button
|
|
847
|
+
<DropdownMenu
|
|
825
848
|
className="panel__header__action"
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
849
|
+
title="Show Filter Options Menu..."
|
|
850
|
+
content={
|
|
851
|
+
<MenuContent>
|
|
852
|
+
<MenuContentItem onClick={createCondition}>
|
|
853
|
+
<MenuContentItemIcon>
|
|
854
|
+
<PlusIcon />
|
|
855
|
+
</MenuContentItemIcon>
|
|
856
|
+
<MenuContentItemLabel>
|
|
857
|
+
Create Condition
|
|
858
|
+
</MenuContentItemLabel>
|
|
859
|
+
</MenuContentItem>
|
|
860
|
+
<MenuContentItem
|
|
861
|
+
disabled={
|
|
862
|
+
!(
|
|
863
|
+
filterState.selectedNode instanceof
|
|
864
|
+
QueryBuilderFilterTreeConditionNodeData
|
|
865
|
+
)
|
|
866
|
+
}
|
|
867
|
+
onClick={newGroupWithCondition}
|
|
868
|
+
>
|
|
869
|
+
<MenuContentItemIcon>
|
|
870
|
+
<PlusCircleIcon />
|
|
871
|
+
</MenuContentItemIcon>
|
|
872
|
+
<MenuContentItemLabel>
|
|
873
|
+
Create Group From Condition
|
|
874
|
+
</MenuContentItemLabel>
|
|
875
|
+
</MenuContentItem>
|
|
876
|
+
<MenuContentItem
|
|
877
|
+
disabled={!allowGroupCreation}
|
|
878
|
+
title={
|
|
879
|
+
!allowGroupCreation
|
|
880
|
+
? 'Please select a filter node first to create logical group'
|
|
881
|
+
: ''
|
|
882
|
+
}
|
|
883
|
+
onClick={createGroupCondition}
|
|
884
|
+
>
|
|
885
|
+
<MenuContentItemIcon>
|
|
886
|
+
<NewFolderIcon />
|
|
887
|
+
</MenuContentItemIcon>
|
|
888
|
+
<MenuContentItemLabel>
|
|
889
|
+
Create Logical Group
|
|
890
|
+
</MenuContentItemLabel>
|
|
891
|
+
</MenuContentItem>
|
|
892
|
+
<MenuContentItem onClick={pruneTree}>
|
|
893
|
+
<MenuContentItemIcon>
|
|
894
|
+
<TrashIcon />
|
|
895
|
+
</MenuContentItemIcon>
|
|
896
|
+
<MenuContentItemLabel>Cleanup Tree</MenuContentItemLabel>
|
|
897
|
+
</MenuContentItem>
|
|
898
|
+
<MenuContentItem onClick={simplifyTree}>
|
|
899
|
+
<MenuContentItemIcon>
|
|
900
|
+
<CircleIcon />
|
|
901
|
+
</MenuContentItemIcon>
|
|
902
|
+
<MenuContentItemLabel>Simplify Tree</MenuContentItemLabel>
|
|
903
|
+
</MenuContentItem>
|
|
904
|
+
<MenuContentItem onClick={collapseTree}>
|
|
905
|
+
<MenuContentItemIcon>
|
|
906
|
+
<CompressIcon />
|
|
907
|
+
</MenuContentItemIcon>
|
|
908
|
+
<MenuContentItemLabel>Collapse Tree</MenuContentItemLabel>
|
|
909
|
+
</MenuContentItem>
|
|
910
|
+
<MenuContentItem onClick={expandTree}>
|
|
911
|
+
<MenuContentItemIcon>
|
|
912
|
+
<ExpandIcon />
|
|
913
|
+
</MenuContentItemIcon>
|
|
914
|
+
<MenuContentItemLabel>Expand Tree</MenuContentItemLabel>
|
|
915
|
+
</MenuContentItem>
|
|
916
|
+
</MenuContent>
|
|
831
917
|
}
|
|
832
|
-
onClick={newGroupWithCondition}
|
|
833
|
-
tabIndex={-1}
|
|
834
|
-
title="Create Group From Condition"
|
|
835
918
|
>
|
|
836
|
-
<
|
|
837
|
-
</
|
|
838
|
-
<button
|
|
839
|
-
className="panel__header__action"
|
|
840
|
-
disabled={!allowGroupCreation}
|
|
841
|
-
onClick={createGroupCondition}
|
|
842
|
-
tabIndex={-1}
|
|
843
|
-
title="Create Logical Group"
|
|
844
|
-
>
|
|
845
|
-
<NewFolderIcon />
|
|
846
|
-
</button>
|
|
847
|
-
<button
|
|
848
|
-
className="panel__header__action"
|
|
849
|
-
onClick={pruneTree}
|
|
850
|
-
tabIndex={-1}
|
|
851
|
-
title="Cleanup Tree"
|
|
852
|
-
>
|
|
853
|
-
<TrashIcon />
|
|
854
|
-
</button>
|
|
855
|
-
<button
|
|
856
|
-
className="panel__header__action"
|
|
857
|
-
onClick={simplifyTree}
|
|
858
|
-
tabIndex={-1}
|
|
859
|
-
title="Simplify Tree"
|
|
860
|
-
>
|
|
861
|
-
<CircleIcon />
|
|
862
|
-
</button>
|
|
863
|
-
<button
|
|
864
|
-
className="panel__header__action"
|
|
865
|
-
onClick={collapseTree}
|
|
866
|
-
tabIndex={-1}
|
|
867
|
-
title="Collapse Tree"
|
|
868
|
-
>
|
|
869
|
-
<CompressIcon />
|
|
870
|
-
</button>
|
|
871
|
-
<button
|
|
872
|
-
className="panel__header__action"
|
|
873
|
-
onClick={expandTree}
|
|
874
|
-
tabIndex={-1}
|
|
875
|
-
title="Expand Tree"
|
|
876
|
-
>
|
|
877
|
-
<ExpandIcon />
|
|
878
|
-
</button>
|
|
919
|
+
<MoreVerticalIcon className="query-builder__icon__more-options" />
|
|
920
|
+
</DropdownMenu>
|
|
879
921
|
</div>
|
|
880
922
|
</div>
|
|
881
923
|
<PanelContent>
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
type ObserverContext,
|
|
31
31
|
PrimitiveType,
|
|
32
32
|
} from '@finos/legend-graph';
|
|
33
|
+
import { prettyCONSTName } from '@finos/legend-shared';
|
|
33
34
|
import { observer } from 'mobx-react-lite';
|
|
34
35
|
import { useState } from 'react';
|
|
35
36
|
import type { LambdaParametersState } from '../../stores/shared/LambdaParameterState.js';
|
|
@@ -119,15 +120,15 @@ export const LambdaParameterValuesEditor = observer(
|
|
|
119
120
|
)}
|
|
120
121
|
{submitAction && (
|
|
121
122
|
<ModalFooterButton
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
inProgressText={
|
|
124
|
+
isSubmitAction ? `${submitAction.label}...` : undefined
|
|
125
|
+
}
|
|
124
126
|
onClick={submit}
|
|
125
|
-
text={submitAction.label}
|
|
127
|
+
text={prettyCONSTName(submitAction.label)}
|
|
126
128
|
/>
|
|
127
129
|
)}
|
|
128
130
|
<ModalFooterButton
|
|
129
|
-
|
|
130
|
-
inProgressText={'Closing...'}
|
|
131
|
+
inProgressText={isClosingAction ? 'Closing...' : undefined}
|
|
131
132
|
onClick={close}
|
|
132
133
|
text="Close"
|
|
133
134
|
/>
|
package/src/index.ts
CHANGED
|
@@ -52,6 +52,8 @@ export * from './components/QuerySetupUtils.js';
|
|
|
52
52
|
export * from './components/QueryBuilderTextEditor.js';
|
|
53
53
|
|
|
54
54
|
export { QueryBuilderTextEditorMode } from './stores/QueryBuilderTextEditorState.js';
|
|
55
|
+
export { buildSerialzieFunctionWithGraphFetch } from './stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.js';
|
|
56
|
+
export { buildGetAllFunction } from './stores/QueryBuilderValueSpecificationBuilder.js';
|
|
55
57
|
|
|
56
58
|
// ------------------------------------------- Shared components -------------------------------------------
|
|
57
59
|
|
|
@@ -87,6 +87,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
87
87
|
readonly changeDetectionState: QueryBuilderChangeDetectionState;
|
|
88
88
|
readonly queryCompileState = ActionState.create();
|
|
89
89
|
readonly observerContext: ObserverContext;
|
|
90
|
+
readonly saveQueryProgressState = ActionState.create();
|
|
90
91
|
|
|
91
92
|
explorerState: QueryBuilderExplorerState;
|
|
92
93
|
functionsExplorerState: QueryFunctionsExplorerState;
|
|
@@ -102,8 +103,6 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
102
103
|
resultState: QueryBuilderResultState;
|
|
103
104
|
textEditorState: QueryBuilderTextEditorState;
|
|
104
105
|
unsupportedQueryState: QueryBuilderUnsupportedQueryState;
|
|
105
|
-
|
|
106
|
-
titleOfQuery: string | undefined;
|
|
107
106
|
showFunctionsExplorerPanel = false;
|
|
108
107
|
showParametersPanel = false;
|
|
109
108
|
isEditingWatermark = false;
|
|
@@ -129,7 +128,6 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
129
128
|
fetchStructureState: observable,
|
|
130
129
|
filterState: observable,
|
|
131
130
|
watermarkState: observable,
|
|
132
|
-
titleOfQuery: observable,
|
|
133
131
|
checkEntitlementsState: observable,
|
|
134
132
|
resultState: observable,
|
|
135
133
|
textEditorState: observable,
|
|
@@ -155,8 +153,6 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
155
153
|
setMapping: action,
|
|
156
154
|
setRuntimeValue: action,
|
|
157
155
|
|
|
158
|
-
setTitleOfQuery: action,
|
|
159
|
-
|
|
160
156
|
resetQueryResult: action,
|
|
161
157
|
resetQueryContent: action,
|
|
162
158
|
changeClass: action,
|
|
@@ -259,10 +255,6 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
259
255
|
this.runtimeValue = val;
|
|
260
256
|
}
|
|
261
257
|
|
|
262
|
-
setTitleOfQuery(val: string | undefined): void {
|
|
263
|
-
this.titleOfQuery = val;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
258
|
get isQuerySupported(): boolean {
|
|
267
259
|
return !this.unsupportedQueryState.rawLambda;
|
|
268
260
|
}
|
|
@@ -437,7 +429,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
437
429
|
}
|
|
438
430
|
} catch (error) {
|
|
439
431
|
assertErrorThrown(error);
|
|
440
|
-
this.resetQueryResult();
|
|
432
|
+
this.resetQueryResult({ preserveResult: options?.preserveResult });
|
|
441
433
|
this.resetQueryContent();
|
|
442
434
|
this.unsupportedQueryState.setLambdaError(error);
|
|
443
435
|
this.unsupportedQueryState.setRawLambda(query);
|
|
@@ -448,13 +440,14 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
448
440
|
)
|
|
449
441
|
.map((param) => observe_ValueSpecification(param, this.observerContext))
|
|
450
442
|
.filter(filterByType(VariableExpression));
|
|
451
|
-
processParameters(parameters, this);
|
|
443
|
+
processParameters(parameters, this, previousStateParameterValues);
|
|
452
444
|
}
|
|
453
445
|
}
|
|
454
446
|
|
|
455
447
|
async saveQuery(
|
|
456
448
|
onSaveQuery: (lambda: RawLambda) => Promise<void>,
|
|
457
449
|
): Promise<void> {
|
|
450
|
+
this.saveQueryProgressState.inProgress();
|
|
458
451
|
try {
|
|
459
452
|
const query = this.buildQuery();
|
|
460
453
|
await onSaveQuery(query);
|
|
@@ -463,6 +456,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
463
456
|
this.applicationStore.notificationService.notifyError(
|
|
464
457
|
`Can't save query: ${error.message}`,
|
|
465
458
|
);
|
|
459
|
+
} finally {
|
|
460
|
+
this.saveQueryProgressState.complete();
|
|
466
461
|
}
|
|
467
462
|
}
|
|
468
463
|
|
|
@@ -41,7 +41,7 @@ import { buildWatermarkExpression } from './watermark/QueryBuilderWatermarkValue
|
|
|
41
41
|
import { buildExecutionQueryFromLambdaFunction } from './shared/LambdaParameterState.js';
|
|
42
42
|
import type { QueryBuilderConstantExpressionState } from './QueryBuilderConstantsState.js';
|
|
43
43
|
|
|
44
|
-
const buildGetAllFunction = (
|
|
44
|
+
export const buildGetAllFunction = (
|
|
45
45
|
_class: Class,
|
|
46
46
|
multiplicity: Multiplicity,
|
|
47
47
|
): SimpleFunctionExpression => {
|