@finos/legend-application-studio 28.19.18 → 28.19.20

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.
Files changed (23) hide show
  1. package/lib/application/LegendStudioApplicationConfig.d.ts +1 -6
  2. package/lib/application/LegendStudioApplicationConfig.d.ts.map +1 -1
  3. package/lib/application/LegendStudioApplicationConfig.js +1 -9
  4. package/lib/application/LegendStudioApplicationConfig.js.map +1 -1
  5. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.d.ts.map +1 -1
  6. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js +10 -9
  7. package/lib/components/editor/editor-group/dataProduct/DataPoductEditor.js.map +1 -1
  8. package/lib/index.css +2 -2
  9. package/lib/index.css.map +1 -1
  10. package/lib/package.json +1 -1
  11. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts +1 -0
  12. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts.map +1 -1
  13. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js +10 -1
  14. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js.map +1 -1
  15. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts +1 -0
  16. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts.map +1 -1
  17. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js +3 -0
  18. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js.map +1 -1
  19. package/package.json +9 -9
  20. package/src/application/LegendStudioApplicationConfig.ts +1 -12
  21. package/src/components/editor/editor-group/dataProduct/DataPoductEditor.tsx +67 -41
  22. package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts +14 -3
  23. package/src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts +6 -0
@@ -63,6 +63,7 @@ import {
63
63
  BuildingIcon,
64
64
  Tooltip,
65
65
  InfoCircleIcon,
66
+ Checkbox,
66
67
  } from '@finos/legend-art';
67
68
  import React, {
68
69
  useRef,
@@ -97,6 +98,7 @@ import {
97
98
  supportInfo_addEmail,
98
99
  supportInfo_deleteEmail,
99
100
  accessPoint_setClassification,
101
+ accessPoint_setReproducible,
100
102
  } from '../../../../stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js';
101
103
  import { LEGEND_STUDIO_TEST_ID } from '../../../../__lib__/LegendStudioTesting.js';
102
104
  import { LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../../../../__lib__/LegendStudioApplicationNavigationContext.js';
@@ -438,46 +440,28 @@ export const LakehouseDataProductAcccessPointEditor = observer(
438
440
  <div style={{ flex: 1 }}>
439
441
  <div className="access-point-editor__metadata">
440
442
  <AccessPointTitle accessPoint={accessPoint} />
441
- {editingDescription ? (
442
- <textarea
443
- className="panel__content__form__section__input"
444
- spellCheck={false}
445
- value={accessPoint.description ?? ''}
446
- onChange={updateAccessPointDescription}
447
- placeholder="Access Point description"
448
- onBlur={handleDescriptionBlur}
449
- style={{
450
- overflow: 'hidden',
451
- resize: 'none',
452
- padding: '0.25rem',
453
- }}
454
- />
455
- ) : (
456
- <div
457
- onClick={handleDescriptionEdit}
458
- title="Click to edit access point description"
459
- className="access-point-editor__description-container"
460
- >
461
- {accessPoint.description ? (
462
- <HoverTextArea
463
- text={accessPoint.description}
464
- handleMouseOver={handleMouseOver}
465
- handleMouseOut={handleMouseOut}
466
- />
467
- ) : (
468
- <div
469
- className="access-point-editor__group-container__description--warning"
470
- onMouseOver={handleMouseOver}
471
- onMouseOut={handleMouseOut}
472
- >
473
- <WarningIcon />
474
- {AP_EMPTY_DESC_WARNING}
475
- </div>
476
- )}
477
- {isHovering && hoverIcon()}
478
- </div>
479
- )}
480
443
  <div className="access-point-editor__info">
444
+ <div className="access-point-editor__reproducible">
445
+ <Checkbox
446
+ disabled={groupState.state.isReadOnly}
447
+ checked={accessPoint.reproducible ?? false}
448
+ onChange={() =>
449
+ accessPoint_setReproducible(
450
+ accessPoint,
451
+ !accessPoint.reproducible,
452
+ )
453
+ }
454
+ size="small"
455
+ style={{ padding: 0, margin: 0 }}
456
+ />
457
+ <Tooltip
458
+ title="This access point is reproducible based on a specific Lakehouse batch in time"
459
+ arrow={true}
460
+ placement={'top'}
461
+ >
462
+ <div>Reproducible</div>
463
+ </Tooltip>
464
+ </div>
481
465
  {editorStore.applicationStore.config.options
482
466
  .dataProductConfig && (
483
467
  <AccessPointClassification
@@ -485,7 +469,6 @@ export const LakehouseDataProductAcccessPointEditor = observer(
485
469
  groupState={groupState}
486
470
  />
487
471
  )}
488
-
489
472
  <div
490
473
  className={clsx('access-point-editor__type')}
491
474
  title={'Change target environment'}
@@ -528,6 +511,46 @@ export const LakehouseDataProductAcccessPointEditor = observer(
528
511
  </div>
529
512
  </div>
530
513
  </div>
514
+ {editingDescription ? (
515
+ <textarea
516
+ className="panel__content__form__section__input"
517
+ spellCheck={false}
518
+ value={accessPoint.description ?? ''}
519
+ onChange={updateAccessPointDescription}
520
+ placeholder="Access Point description"
521
+ onBlur={handleDescriptionBlur}
522
+ style={{
523
+ overflow: 'hidden',
524
+ resize: 'none',
525
+ padding: '0.25rem',
526
+ marginLeft: '0.5rem',
527
+ }}
528
+ />
529
+ ) : (
530
+ <div
531
+ onClick={handleDescriptionEdit}
532
+ title="Click to edit access point description"
533
+ className="access-point-editor__description-container"
534
+ >
535
+ {accessPoint.description ? (
536
+ <HoverTextArea
537
+ text={accessPoint.description}
538
+ handleMouseOver={handleMouseOver}
539
+ handleMouseOut={handleMouseOut}
540
+ />
541
+ ) : (
542
+ <div
543
+ className="access-point-editor__group-container__description--warning"
544
+ onMouseOver={handleMouseOver}
545
+ onMouseOut={handleMouseOut}
546
+ >
547
+ <WarningIcon />
548
+ {AP_EMPTY_DESC_WARNING}
549
+ </div>
550
+ )}
551
+ {isHovering && hoverIcon()}
552
+ </div>
553
+ )}
531
554
  <div className="access-point-editor__content">
532
555
  <div className="access-point-editor__generic-entry">
533
556
  <div className="access-point-editor__entry__container">
@@ -841,7 +864,10 @@ const AccessPointGroupEditor = observer(
841
864
  </PanelHeaderActions>
842
865
  </PanelHeader>
843
866
  {groupState.accessPointStates.length === 0 && (
844
- <div className="access-point-editor__group-container__description--warning">
867
+ <div
868
+ className="access-point-editor__group-container__description--warning"
869
+ style={{ color: 'var(--color-red-300)' }}
870
+ >
845
871
  <WarningIcon />
846
872
  This group needs at least one access point defined.
847
873
  </div>
@@ -120,6 +120,10 @@ export class AccessPointLambdaEditorState extends LambdaEditorState {
120
120
  return this.val.accessPoint.id;
121
121
  }
122
122
 
123
+ override get fullLambdaString(): string {
124
+ return `${this.lambdaString}`;
125
+ }
126
+
123
127
  *convertLambdaGrammarStringToObject(): GeneratorFn<void> {
124
128
  const emptyLambda = stub_RawLambda();
125
129
  if (this.lambdaString) {
@@ -431,9 +435,16 @@ export class DataProductEditorState extends ElementEditorState {
431
435
  )) as Map<string, string>;
432
436
  isolatedLambdas.forEach((grammarText, key) => {
433
437
  const purePropertyMapping = index.get(key);
434
- purePropertyMapping?.lambdaState.setLambdaString(
435
- purePropertyMapping.lambdaState.extractLambdaString(grammarText),
436
- );
438
+ if (
439
+ purePropertyMapping?.lambdaState.lambdaPrefix &&
440
+ grammarText.startsWith(purePropertyMapping.lambdaState.lambdaPrefix)
441
+ ) {
442
+ purePropertyMapping.lambdaState.setLambdaString(
443
+ purePropertyMapping.lambdaState.extractLambdaString(grammarText),
444
+ );
445
+ } else {
446
+ purePropertyMapping?.lambdaState.setLambdaString(grammarText);
447
+ }
437
448
  });
438
449
  } catch (error) {
439
450
  assertErrorThrown(error);
@@ -47,6 +47,12 @@ export const accessPoint_setClassification = action(
47
47
  },
48
48
  );
49
49
 
50
+ export const accessPoint_setReproducible = action(
51
+ (accessPoint: LakehouseAccessPoint, reproducible: boolean | undefined) => {
52
+ accessPoint.reproducible = reproducible;
53
+ },
54
+ );
55
+
50
56
  export const accessPointGroup_setDescription = action(
51
57
  (group: AccessPointGroup, description: string) => {
52
58
  group.description = description;