@finos/legend-query-builder 4.14.38 → 4.14.39

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. package/lib/__lib__/QueryBuilderTesting.d.ts +2 -1
  2. package/lib/__lib__/QueryBuilderTesting.d.ts.map +1 -1
  3. package/lib/__lib__/QueryBuilderTesting.js +1 -0
  4. package/lib/__lib__/QueryBuilderTesting.js.map +1 -1
  5. package/lib/components/QueryBuilderParametersPanel.js +2 -2
  6. package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
  7. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +0 -2
  8. package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
  9. package/lib/components/QueryBuilderPropertyExpressionEditor.js +10 -26
  10. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
  11. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
  12. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +10 -9
  13. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  14. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  15. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +3 -5
  16. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  17. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  18. package/lib/components/filter/QueryBuilderFilterPanel.js +1 -2
  19. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  20. package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
  21. package/lib/components/shared/BasicValueSpecificationEditor.js +49 -8
  22. package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
  23. package/lib/index.css +2 -2
  24. package/lib/index.css.map +1 -1
  25. package/lib/package.json +1 -1
  26. package/lib/stores/watermark/QueryBuilderWatermarkState.d.ts.map +1 -1
  27. package/lib/stores/watermark/QueryBuilderWatermarkState.js +0 -1
  28. package/lib/stores/watermark/QueryBuilderWatermarkState.js.map +1 -1
  29. package/package.json +8 -8
  30. package/src/__lib__/QueryBuilderTesting.ts +1 -0
  31. package/src/components/QueryBuilderParametersPanel.tsx +2 -2
  32. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +40 -92
  33. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +25 -31
  34. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +5 -15
  35. package/src/components/filter/QueryBuilderFilterPanel.tsx +0 -11
  36. package/src/components/shared/BasicValueSpecificationEditor.tsx +141 -34
  37. package/src/stores/watermark/QueryBuilderWatermarkState.ts +0 -1
@@ -776,6 +776,98 @@ const setCollectionValue = (
776
776
  instanceValue_setValues(valueSpecification, result, obseverContext);
777
777
  };
778
778
 
779
+ const EnumCollectionInstanceValueEditor = observer(
780
+ (props: {
781
+ valueSpecification: CollectionInstanceValue;
782
+ observerContext: ObserverContext;
783
+ saveEdit: () => void;
784
+ }) => {
785
+ const { valueSpecification, observerContext, saveEdit } = props;
786
+ const applicationStore = useApplicationStore();
787
+ const enumType = guaranteeType(
788
+ valueSpecification.genericType?.value.rawType,
789
+ Enumeration,
790
+ );
791
+
792
+ const [selectedOptions, setSelectedOptions] = useState<
793
+ { label: string; value: Enum }[]
794
+ >(
795
+ (valueSpecification.values as EnumValueInstanceValue[])
796
+ .filter((valueSpec) => valueSpec.values[0]?.value !== undefined)
797
+ .map((valueSpec) => ({
798
+ label: valueSpec.values[0]!.value.name,
799
+ value: valueSpec.values[0]!.value,
800
+ })),
801
+ );
802
+
803
+ const availableOptions = enumType.values
804
+ .filter(
805
+ (value) =>
806
+ !selectedOptions.some(
807
+ (selectedValue) => selectedValue.value.name === value.name,
808
+ ),
809
+ )
810
+ .map((value) => ({
811
+ label: value.name,
812
+ value: value,
813
+ }));
814
+
815
+ const changeValue = (
816
+ newSelectedOptions: { value: Enum; label: string }[],
817
+ ): void => {
818
+ setSelectedOptions(newSelectedOptions);
819
+ };
820
+
821
+ const updateValueSpecAndSaveEdit = (): void => {
822
+ const result = selectedOptions
823
+ .map((value) => {
824
+ const enumValueInstanceValue = new EnumValueInstanceValue(
825
+ GenericTypeExplicitReference.create(new GenericType(enumType)),
826
+ );
827
+ instanceValue_setValues(
828
+ enumValueInstanceValue,
829
+ [EnumValueExplicitReference.create(value.value)],
830
+ observerContext,
831
+ );
832
+ return enumValueInstanceValue;
833
+ })
834
+ .filter(isNonNullable);
835
+ instanceValue_setValues(valueSpecification, result, observerContext);
836
+ saveEdit();
837
+ };
838
+
839
+ return (
840
+ <>
841
+ <CustomSelectorInput
842
+ className="value-spec-editor__enum-collection-selector"
843
+ options={availableOptions}
844
+ isMulti={true}
845
+ onChange={changeValue}
846
+ onBlur={updateValueSpecAndSaveEdit}
847
+ onKeyDown={(event: KeyboardEvent): void => {
848
+ if (event.key === 'Enter' && !event.shiftKey) {
849
+ updateValueSpecAndSaveEdit();
850
+ }
851
+ }}
852
+ value={selectedOptions}
853
+ darkMode={
854
+ !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
855
+ }
856
+ placeholder="Select value"
857
+ autoFocus={true}
858
+ menuIsOpen={true}
859
+ />
860
+ <button
861
+ className="value-spec-editor__list-editor__save-button btn--dark"
862
+ onClick={updateValueSpecAndSaveEdit}
863
+ >
864
+ <SaveIcon />
865
+ </button>
866
+ </>
867
+ );
868
+ },
869
+ );
870
+
779
871
  const COLLECTION_PREVIEW_CHAR_LIMIT = 50;
780
872
 
781
873
  const getPlaceHolder = (expectedType: Type): string => {
@@ -836,6 +928,11 @@ const CollectionValueInstanceValueEditor = observer(
836
928
  if (editable) {
837
929
  setEditable(false);
838
930
  setShowAdvancedEditorPopover(false);
931
+ setValueSpecification(valueSpecification);
932
+ }
933
+ };
934
+ const updateValueSpecAndSaveEdit = (): void => {
935
+ if (editable) {
839
936
  setCollectionValue(
840
937
  valueSpecification,
841
938
  expectedType,
@@ -843,7 +940,7 @@ const CollectionValueInstanceValueEditor = observer(
843
940
  obseverContext,
844
941
  );
845
942
  setText(stringifyValue(valueSpecification.values));
846
- setValueSpecification(valueSpecification);
943
+ saveEdit();
847
944
  }
848
945
  };
849
946
 
@@ -861,7 +958,7 @@ const CollectionValueInstanceValueEditor = observer(
861
958
  (event.relatedTarget as HTMLButtonElement | undefined)?.name !==
862
959
  expandButtonName
863
960
  ) {
864
- saveEdit();
961
+ updateValueSpecAndSaveEdit();
865
962
  }
866
963
  };
867
964
 
@@ -891,7 +988,7 @@ const CollectionValueInstanceValueEditor = observer(
891
988
  onChange={changeValueTextArea}
892
989
  onKeyDown={(event): void => {
893
990
  if (event.key === 'Enter' && !event.shiftKey) {
894
- saveEdit();
991
+ updateValueSpecAndSaveEdit();
895
992
  }
896
993
  }}
897
994
  />
@@ -903,37 +1000,47 @@ const CollectionValueInstanceValueEditor = observer(
903
1000
  </BasePopover>
904
1001
  )}
905
1002
  <div className={clsx('value-spec-editor', className)}>
906
- <textarea
907
- ref={inputRef}
908
- className={clsx(
909
- 'panel__content__form__section__input value-spec-editor__input value-spec-editor__textarea ',
910
- )}
911
- spellCheck={false}
912
- value={text}
913
- placeholder={placeholder}
914
- onChange={changeValueTextArea}
915
- onKeyDown={(event): void => {
916
- if (event.key === 'Enter' && !event.shiftKey) {
917
- saveEdit();
918
- }
919
- }}
920
- onBlur={handleOnBlur}
921
- />
922
- <button
923
- className="value-spec-editor__list-editor__expand-button btn--dark"
924
- onClick={() => setShowAdvancedEditorPopover(true)}
925
- tabIndex={-1}
926
- name={expandButtonName}
927
- title="Expand window..."
928
- >
929
- <FilledWindowMaximizeIcon />
930
- </button>
931
- <button
932
- className="value-spec-editor__list-editor__save-button btn--dark"
933
- onClick={saveEdit}
934
- >
935
- <SaveIcon />
936
- </button>
1003
+ {expectedType instanceof Enumeration ? (
1004
+ <EnumCollectionInstanceValueEditor
1005
+ valueSpecification={valueSpecification}
1006
+ observerContext={obseverContext}
1007
+ saveEdit={saveEdit}
1008
+ />
1009
+ ) : (
1010
+ <>
1011
+ <textarea
1012
+ ref={inputRef}
1013
+ className={clsx(
1014
+ 'panel__content__form__section__input value-spec-editor__input value-spec-editor__textarea ',
1015
+ )}
1016
+ spellCheck={false}
1017
+ value={text}
1018
+ placeholder={placeholder}
1019
+ onChange={changeValueTextArea}
1020
+ onKeyDown={(event): void => {
1021
+ if (event.key === 'Enter' && !event.shiftKey) {
1022
+ updateValueSpecAndSaveEdit();
1023
+ }
1024
+ }}
1025
+ onBlur={handleOnBlur}
1026
+ />
1027
+ <button
1028
+ className="value-spec-editor__list-editor__expand-button btn--dark"
1029
+ onClick={() => setShowAdvancedEditorPopover(true)}
1030
+ tabIndex={-1}
1031
+ name={expandButtonName}
1032
+ title="Expand window..."
1033
+ >
1034
+ <FilledWindowMaximizeIcon />
1035
+ </button>
1036
+ <button
1037
+ className="value-spec-editor__list-editor__save-button btn--dark"
1038
+ onClick={saveEdit}
1039
+ >
1040
+ <SaveIcon />
1041
+ </button>
1042
+ </>
1043
+ )}
937
1044
  <button
938
1045
  className="value-spec-editor__reset-btn"
939
1046
  name="Reset"
@@ -50,7 +50,6 @@ export class QueryBuilderWatermarkState implements Hashable {
50
50
  ),
51
51
  );
52
52
 
53
- watermarkConstant.values = ['watermarkValue'];
54
53
  return watermarkConstant;
55
54
  }
56
55