@finos/legend-application-studio 28.19.65 → 28.19.67

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 (55) hide show
  1. package/lib/application/LegendStudioApplicationConfig.d.ts +6 -0
  2. package/lib/application/LegendStudioApplicationConfig.d.ts.map +1 -1
  3. package/lib/application/LegendStudioApplicationConfig.js +10 -0
  4. package/lib/application/LegendStudioApplicationConfig.js.map +1 -1
  5. package/lib/application/LegendStudioPluginManager.d.ts +5 -1
  6. package/lib/application/LegendStudioPluginManager.d.ts.map +1 -1
  7. package/lib/application/LegendStudioPluginManager.js +7 -0
  8. package/lib/application/LegendStudioPluginManager.js.map +1 -1
  9. package/lib/components/editor/ActivityBar.d.ts.map +1 -1
  10. package/lib/components/editor/ActivityBar.js +7 -1
  11. package/lib/components/editor/ActivityBar.js.map +1 -1
  12. package/lib/components/editor/editor-group/dataProduct/DataProductEditor.d.ts.map +1 -1
  13. package/lib/components/editor/editor-group/dataProduct/DataProductEditor.js +20 -5
  14. package/lib/components/editor/editor-group/dataProduct/DataProductEditor.js.map +1 -1
  15. package/lib/components/editor/side-bar/DevMetadataPanel.d.ts +19 -0
  16. package/lib/components/editor/side-bar/DevMetadataPanel.d.ts.map +1 -0
  17. package/lib/components/editor/side-bar/DevMetadataPanel.js +58 -0
  18. package/lib/components/editor/side-bar/DevMetadataPanel.js.map +1 -0
  19. package/lib/components/editor/side-bar/SideBar.d.ts.map +1 -1
  20. package/lib/components/editor/side-bar/SideBar.js +3 -0
  21. package/lib/components/editor/side-bar/SideBar.js.map +1 -1
  22. package/lib/index.css +1 -1
  23. package/lib/package.json +1 -1
  24. package/lib/stores/editor/EditorConfig.d.ts +1 -0
  25. package/lib/stores/editor/EditorConfig.d.ts.map +1 -1
  26. package/lib/stores/editor/EditorConfig.js +1 -0
  27. package/lib/stores/editor/EditorConfig.js.map +1 -1
  28. package/lib/stores/editor/EditorStore.d.ts +2 -0
  29. package/lib/stores/editor/EditorStore.d.ts.map +1 -1
  30. package/lib/stores/editor/EditorStore.js +3 -0
  31. package/lib/stores/editor/EditorStore.js.map +1 -1
  32. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.d.ts.map +1 -1
  33. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js +5 -2
  34. package/lib/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.js.map +1 -1
  35. package/lib/stores/editor/sidebar-state/dev-metadata/DevMetadataState.d.ts +29 -0
  36. package/lib/stores/editor/sidebar-state/dev-metadata/DevMetadataState.d.ts.map +1 -0
  37. package/lib/stores/editor/sidebar-state/dev-metadata/DevMetadataState.js +77 -0
  38. package/lib/stores/editor/sidebar-state/dev-metadata/DevMetadataState.js.map +1 -0
  39. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts +2 -2
  40. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.d.ts.map +1 -1
  41. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js +7 -7
  42. package/lib/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.js.map +1 -1
  43. package/package.json +15 -15
  44. package/src/application/LegendStudioApplicationConfig.ts +17 -0
  45. package/src/application/LegendStudioPluginManager.ts +13 -1
  46. package/src/components/editor/ActivityBar.tsx +12 -0
  47. package/src/components/editor/editor-group/dataProduct/DataProductEditor.tsx +89 -60
  48. package/src/components/editor/side-bar/DevMetadataPanel.tsx +168 -0
  49. package/src/components/editor/side-bar/SideBar.tsx +3 -0
  50. package/src/stores/editor/EditorConfig.ts +1 -0
  51. package/src/stores/editor/EditorStore.ts +3 -0
  52. package/src/stores/editor/editor-state/element-editor-state/dataProduct/DataProductEditorState.ts +6 -2
  53. package/src/stores/editor/sidebar-state/dev-metadata/DevMetadataState.ts +111 -0
  54. package/src/stores/graph-modifier/DSL_DataProduct_GraphModifierHelper.ts +9 -9
  55. package/tsconfig.json +2 -0
@@ -88,7 +88,11 @@ import {
88
88
  useRef,
89
89
  useState,
90
90
  } from 'react';
91
- import { filterByType, guaranteeType } from '@finos/legend-shared';
91
+ import {
92
+ filterByType,
93
+ guaranteeType,
94
+ UserSearchService,
95
+ } from '@finos/legend-shared';
92
96
  import { InlineLambdaEditor, LineageViewer } from '@finos/legend-query-builder';
93
97
  import { action, autorun, flowResult } from 'mobx';
94
98
  import { useAuth } from 'react-oidc-context';
@@ -142,7 +146,7 @@ import {
142
146
  expertise_setDescription,
143
147
  expertise_addId,
144
148
  expertise_deleteId,
145
- dataProduct_deleteExpertise,
149
+ supportInfo_deleteExpertise,
146
150
  externalType_setLinkURL,
147
151
  externalType_setLinkLabel,
148
152
  accessPointGroup_setTitle,
@@ -2488,7 +2492,9 @@ const ExpertiseEditor = observer(
2488
2492
  };
2489
2493
 
2490
2494
  const handleRemoveExpertise = (expertise: Expertise) => {
2491
- dataProduct_deleteExpertise(product, expertise);
2495
+ if (product.supportInfo) {
2496
+ supportInfo_deleteExpertise(product.supportInfo, expertise);
2497
+ }
2492
2498
  };
2493
2499
 
2494
2500
  return (
@@ -2507,66 +2513,68 @@ const ExpertiseEditor = observer(
2507
2513
  </PanelHeaderActionItem>
2508
2514
  </PanelHeaderActions>
2509
2515
  </PanelHeader>
2510
- {dataProductEditorState.product.expertise?.map((expertise) => (
2511
- <>
2512
- <div className="data-product-editor__expertise">
2513
- <div className="panel__content__form__section">
2514
- <div className="panel__content__form__section__header__prompt">
2515
- Description
2516
- </div>
2517
- <textarea
2518
- className="panel__content__form__section__textarea"
2519
- spellCheck={false}
2520
- disabled={dataProductEditorState.isReadOnly}
2521
- value={expertise.description ?? ''}
2522
- onChange={(event) =>
2523
- updateExpertiseDescription(expertise, event.target.value)
2524
- }
2525
- style={{
2526
- height: '100%',
2527
- }}
2528
- />
2529
- </div>
2530
- <div className="panel__content__form__section">
2531
- <div className="panel__content__form__section__header__prompt">
2532
- User IDs
2516
+ {dataProductEditorState.product.supportInfo?.expertise?.map(
2517
+ (expertise) => (
2518
+ <>
2519
+ <div className="data-product-editor__expertise">
2520
+ <div className="panel__content__form__section">
2521
+ <div className="panel__content__form__section__header__prompt">
2522
+ Description
2523
+ </div>
2524
+ <textarea
2525
+ className="panel__content__form__section__textarea"
2526
+ spellCheck={false}
2527
+ disabled={dataProductEditorState.isReadOnly}
2528
+ value={expertise.description ?? ''}
2529
+ onChange={(event) =>
2530
+ updateExpertiseDescription(expertise, event.target.value)
2531
+ }
2532
+ style={{
2533
+ height: '100%',
2534
+ }}
2535
+ />
2533
2536
  </div>
2534
- <div className="panel__content__form__section__list__id-list">
2535
- {expertise.expertIds?.map((id) => (
2536
- <div
2537
- className="panel__content__form__section__list__item"
2538
- key={id}
2539
- >
2540
- {id}
2541
-
2542
- <button
2543
- className="panel__content__form__section__list__item__remove-btn"
2544
- disabled={dataProductEditorState.isReadOnly}
2545
- onClick={() => handleRemoveId(expertise, id)}
2546
- tabIndex={-1}
2537
+ <div className="panel__content__form__section">
2538
+ <div className="panel__content__form__section__header__prompt">
2539
+ User IDs
2540
+ </div>
2541
+ <div className="panel__content__form__section__list__id-list">
2542
+ {expertise.expertIds?.map((id) => (
2543
+ <div
2544
+ className="panel__content__form__section__list__item"
2545
+ key={id}
2547
2546
  >
2548
- <TimesIcon />
2549
- </button>
2550
- </div>
2551
- ))}
2547
+ {id}
2548
+
2549
+ <button
2550
+ className="panel__content__form__section__list__item__remove-btn"
2551
+ disabled={dataProductEditorState.isReadOnly}
2552
+ onClick={() => handleRemoveId(expertise, id)}
2553
+ tabIndex={-1}
2554
+ >
2555
+ <TimesIcon />
2556
+ </button>
2557
+ </div>
2558
+ ))}
2559
+ </div>
2560
+ <NewExpertIdComponent expertise={expertise} />
2561
+ </div>
2562
+ <div className="data-product-editor__expertise__actions">
2563
+ <button
2564
+ className="access-point-editor__generic-entry__remove-btn--group"
2565
+ onClick={() => {
2566
+ handleRemoveExpertise(expertise);
2567
+ }}
2568
+ tabIndex={-1}
2569
+ title="Remove Expertise"
2570
+ >
2571
+ <TimesIcon />
2572
+ </button>
2552
2573
  </div>
2553
- <NewExpertIdComponent expertise={expertise} />
2554
- </div>
2555
- <div className="data-product-editor__expertise__actions">
2556
- <button
2557
- className="access-point-editor__generic-entry__remove-btn--group"
2558
- onClick={() => {
2559
- handleRemoveExpertise(expertise);
2560
- }}
2561
- tabIndex={-1}
2562
- title="Remove Expertise"
2563
- >
2564
- <TimesIcon />
2565
- </button>
2566
2574
  </div>
2567
- </div>
2568
- </>
2569
- ))}
2575
+ </>
2576
+ ),
2577
+ )}
2570
2578
  </>
2571
2579
  );
2572
2580
  },
@@ -2852,6 +2860,27 @@ const getDataProductViewerState = (
2852
2860
  V1_DataProduct,
2853
2861
  );
2854
2862
  const remoteEngine = guaranteeType(graphManager.engine, V1_RemoteEngine);
2863
+ let userSearchService: UserSearchService | undefined = undefined;
2864
+ if (applicationStore.pluginManager.getUserPlugins().length > 0) {
2865
+ applicationStore.pluginManager
2866
+ .getUserPlugins()
2867
+ .forEach((plugin) =>
2868
+ plugin.setup(
2869
+ applicationStore.config.options.userSearchConfig
2870
+ ?.applicationDirectoryUrl,
2871
+ ),
2872
+ );
2873
+ userSearchService = new UserSearchService({
2874
+ userProfileImageUrl:
2875
+ applicationStore.config.options.userSearchConfig?.userProfileImageUrl,
2876
+ applicationDirectoryUrl:
2877
+ applicationStore.config.options.userSearchConfig
2878
+ ?.applicationDirectoryUrl,
2879
+ });
2880
+ userSearchService.registerPlugins(
2881
+ applicationStore.pluginManager.getUserPlugins(),
2882
+ );
2883
+ }
2855
2884
  const dataProductViewerState = new DataProductViewerState(
2856
2885
  v1_dataProduct,
2857
2886
  applicationStore,
@@ -2859,7 +2888,7 @@ const getDataProductViewerState = (
2859
2888
  depotServerClient,
2860
2889
  graphManagerState,
2861
2890
  applicationStore.config.options.dataProductConfig,
2862
- undefined,
2891
+ userSearchService,
2863
2892
  undefined,
2864
2893
  {},
2865
2894
  );
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { observer } from 'mobx-react-lite';
18
+ import { useEditorStore } from '../EditorStoreProvider.js';
19
+ import { useEffect } from 'react';
20
+ import {
21
+ PanelFormSection,
22
+ PanelFormValidatedTextField,
23
+ PanelHeader,
24
+ PanelContent,
25
+ Panel,
26
+ clsx,
27
+ Dialog,
28
+ CheckCircleIcon,
29
+ ModalBody,
30
+ ModalFooterButton,
31
+ ModalFooter,
32
+ ModalHeader,
33
+ Modal,
34
+ ModalTitle,
35
+ } from '@finos/legend-art';
36
+ import { CODE_EDITOR_LANGUAGE } from '@finos/legend-code-editor';
37
+ import { CodeEditor } from '@finos/legend-lego/code-editor';
38
+ import { DevMetadataResult } from '@finos/legend-graph';
39
+
40
+ const DevMetadataResultModal = observer(
41
+ (props: {
42
+ closeModal: () => void;
43
+ deploymentResponse: DevMetadataResult;
44
+ }) => {
45
+ const { closeModal, deploymentResponse } = props;
46
+ return (
47
+ <Dialog
48
+ open={true}
49
+ classes={{
50
+ root: 'ingestion-modal__root-container',
51
+ container: 'ingestion-modal__container',
52
+ paper: 'ingestion-modal__content',
53
+ }}
54
+ >
55
+ <Modal darkMode={true} className="ingestion-modal">
56
+ <ModalHeader>
57
+ <ModalTitle
58
+ icon={<CheckCircleIcon className="ingestion-modal--success" />}
59
+ title="Push Response"
60
+ ></ModalTitle>
61
+ </ModalHeader>
62
+ <ModalBody>
63
+ <div className="ingestion-modal__write">
64
+ <div className="ingestion-modal__write--value">
65
+ <CodeEditor
66
+ inputValue={JSON.stringify(
67
+ DevMetadataResult.serialization.toJson(deploymentResponse),
68
+ null,
69
+ 2,
70
+ )}
71
+ isReadOnly={true}
72
+ language={CODE_EDITOR_LANGUAGE.JSON}
73
+ extraEditorOptions={{
74
+ wordWrap: 'on',
75
+ }}
76
+ hideActionBar={true}
77
+ />
78
+ </div>
79
+ </div>
80
+ </ModalBody>
81
+ <ModalFooter>
82
+ <ModalFooterButton
83
+ onClick={closeModal}
84
+ text="Close"
85
+ type="secondary"
86
+ />
87
+ </ModalFooter>
88
+ </Modal>
89
+ </Dialog>
90
+ );
91
+ },
92
+ );
93
+
94
+ export const DevMetadataPanel = observer(() => {
95
+ const editorStore = useEditorStore();
96
+ const devMetadataState = editorStore.devMetadataState;
97
+
98
+ useEffect(() => {
99
+ devMetadataState.init();
100
+ }, [devMetadataState]);
101
+
102
+ const handlePush = (): void => {
103
+ devMetadataState.push();
104
+ };
105
+
106
+ const handleDidChange = (value: string | undefined): void => {
107
+ devMetadataState.setDid(value ?? '');
108
+ };
109
+
110
+ const isPushDisabled = !devMetadataState.did.trim();
111
+
112
+ return (
113
+ <Panel>
114
+ <PanelHeader className="side-bar__header">
115
+ <div className="panel__header__title">
116
+ <div className="panel__header__title__label side-bar__header__title__content">
117
+ Push to Dev
118
+ </div>
119
+ </div>
120
+ </PanelHeader>
121
+ <PanelContent>
122
+ <form
123
+ onSubmit={(event) => {
124
+ event.preventDefault();
125
+ if (!isPushDisabled) {
126
+ handlePush();
127
+ }
128
+ }}
129
+ >
130
+ <PanelFormSection>
131
+ <div className="panel__content__form__section__header__label">
132
+ DID
133
+ </div>
134
+ <PanelFormValidatedTextField
135
+ value={devMetadataState.did}
136
+ update={handleDidChange}
137
+ placeholder="Enter DID..."
138
+ />
139
+ </PanelFormSection>
140
+ <PanelFormSection>
141
+ <button
142
+ type="submit"
143
+ className={clsx('btn btn--primary register-service__push-btn', {
144
+ 'btn--disabled': isPushDisabled,
145
+ })}
146
+ disabled={isPushDisabled}
147
+ title={
148
+ isPushDisabled
149
+ ? 'Please fill in both DID and Project Name'
150
+ : 'Push to Dev'
151
+ }
152
+ >
153
+ <div className="btn__content">
154
+ <div className="btn__content__label">Push</div>
155
+ </div>
156
+ </button>
157
+ </PanelFormSection>
158
+ </form>
159
+ </PanelContent>
160
+ {devMetadataState.result && (
161
+ <DevMetadataResultModal
162
+ closeModal={() => (devMetadataState.result = undefined)}
163
+ deploymentResponse={devMetadataState.result}
164
+ />
165
+ )}
166
+ </Panel>
167
+ );
168
+ });
@@ -30,6 +30,7 @@ import { useEditorStore } from '../EditorStoreProvider.js';
30
30
  import { GlobalTestRunner } from './testable/GlobalTestRunner.js';
31
31
  import { RegisterService } from './RegisterService.js';
32
32
  import { EndToEndWorkflow } from './end-to-end-workflow/EndToEndWorkflows.js';
33
+ import { DevMetadataPanel } from './DevMetadataPanel.js';
33
34
 
34
35
  /**
35
36
  * Wrapper component around different implementations of sidebar, such as to view domain, to manage SDLC, etc.
@@ -63,6 +64,8 @@ export const SideBar = observer(() => {
63
64
  globalTestRunnerState={editorStore.globalTestRunnerState}
64
65
  />
65
66
  );
67
+ case ACTIVITY_MODE.DEV_MODE:
68
+ return <DevMetadataPanel />;
66
69
  case ACTIVITY_MODE.REGISTER_SERVICES:
67
70
  return (
68
71
  <RegisterService
@@ -37,6 +37,7 @@ export enum ACTIVITY_MODE {
37
37
  PROJECT_OVERVIEW = 'PROJECT_OVERVIEW',
38
38
  WORKFLOW_MANAGER = 'WORKFLOW_MANAGER',
39
39
  TEST_RUNNER = 'TEST_RUNNER',
40
+ DEV_MODE = 'DEV_MODE',
40
41
  REGISTER_SERVICES = 'REGISTER_SERVICES',
41
42
  }
42
43
 
@@ -123,6 +123,7 @@ import {
123
123
  import type { QueryBuilderDataCubeViewerState } from '@finos/legend-query-builder';
124
124
  import { EditorInitialConfiguration } from './editor-state/element-editor-state/ElementEditorInitialConfiguration.js';
125
125
  import { LakehouseIngestionManager } from '@finos/legend-server-lakehouse';
126
+ import { DevMetadataState } from './sidebar-state/dev-metadata/DevMetadataState.js';
126
127
 
127
128
  export abstract class EditorExtensionState {
128
129
  /**
@@ -181,6 +182,7 @@ export class EditorStore implements CommandRegistrar {
181
182
  globalBulkServiceRegistrationState: GlobalBulkServiceRegistrationState;
182
183
  globalEndToEndWorkflowState: GlobalEndToEndWorkflowState;
183
184
  devToolState: DevToolPanelState;
185
+ devMetadataState: DevMetadataState;
184
186
  sqlPlaygroundState: SQLPlaygroundPanelState;
185
187
 
186
188
  modelImporterState: ModelImporterState;
@@ -277,6 +279,7 @@ export class EditorStore implements CommandRegistrar {
277
279
  this.graphEditorMode = new GraphEditFormModeState(this);
278
280
  this.changeDetectionState = new ChangeDetectionState(this, this.graphState);
279
281
  this.devToolState = new DevToolPanelState(this);
282
+ this.devMetadataState = new DevMetadataState(this);
280
283
  this.sqlPlaygroundState = new SQLPlaygroundPanelState(this);
281
284
  this.embeddedQueryBuilderState = new EmbeddedQueryBuilderState(this);
282
285
  // side bar panels
@@ -97,7 +97,7 @@ import {
97
97
  accessPointGroup_swapAccessPoints,
98
98
  dataProduct_addAccessPoint,
99
99
  dataProduct_addAccessPointGroup,
100
- dataProduct_addExpertise,
100
+ supportInfo_addExpertise,
101
101
  dataProduct_deleteAccessPoint,
102
102
  dataProduct_deleteAccessPointGroup,
103
103
  dataProduct_swapAccessPointGroups,
@@ -108,6 +108,7 @@ import {
108
108
  modelAccessPointGroup_setDefaultRuntime,
109
109
  modelAccessPointGroup_setElementExclude,
110
110
  modelAccessPointGroup_setMapping,
111
+ dataProduct_setSupportInfoIfAbsent,
111
112
  } from '../../../../graph-modifier/DSL_DataProduct_GraphModifierHelper.js';
112
113
  import { LambdaEditorState, LineageState } from '@finos/legend-query-builder';
113
114
  import {
@@ -1093,8 +1094,11 @@ export class DataProductEditorState extends ElementEditorState {
1093
1094
  }
1094
1095
 
1095
1096
  createExpertise() {
1097
+ dataProduct_setSupportInfoIfAbsent(this.product);
1096
1098
  const newExpertise = new Expertise();
1097
- dataProduct_addExpertise(this.product, newExpertise);
1099
+ if (this.product.supportInfo) {
1100
+ supportInfo_addExpertise(this.product.supportInfo, newExpertise);
1101
+ }
1098
1102
  }
1099
1103
 
1100
1104
  *deploy(token: string | undefined): GeneratorFn<void> {
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ ActionState,
19
+ assertErrorThrown,
20
+ assertNonEmptyString,
21
+ assertNonNullable,
22
+ assertTrue,
23
+ filterByType,
24
+ type GeneratorFn,
25
+ } from '@finos/legend-shared';
26
+ import type { EditorStore } from '../../EditorStore.js';
27
+ import { action, flow, makeObservable, observable } from 'mobx';
28
+ import { type DevMetadataResult, IngestDefinition } from '@finos/legend-graph';
29
+ import { generateGAVCoordinates } from '@finos/legend-storage';
30
+
31
+ export class DevMetadataState {
32
+ readonly editorStore: EditorStore;
33
+ result: DevMetadataResult | undefined;
34
+ pushState = ActionState.create();
35
+ did = '';
36
+
37
+ constructor(editorStore: EditorStore) {
38
+ this.editorStore = editorStore;
39
+
40
+ makeObservable(this, {
41
+ pushState: observable,
42
+ did: observable,
43
+ setDid: action,
44
+ push: flow,
45
+ init: action,
46
+ });
47
+ }
48
+
49
+ setDid(did: string): void {
50
+ this.did = did;
51
+ }
52
+
53
+ init(): void {
54
+ if (!this.did) {
55
+ const ingestDID = this.editorStore.graphManagerState.graph.allElements
56
+ .filter(filterByType(IngestDefinition))[0]
57
+ ?.appDirDeployment?.appDirId?.toString();
58
+ if (ingestDID) {
59
+ this.setDid(ingestDID);
60
+ }
61
+ }
62
+ }
63
+
64
+ *push(): GeneratorFn<void> {
65
+ try {
66
+ this.result = undefined;
67
+ const dependenciesSize =
68
+ this.editorStore.graphManagerState.graph.dependencyManager
69
+ .projectDependencyModelsIndex.size;
70
+ assertTrue(
71
+ dependenciesSize === 0,
72
+ 'Dependencies not supported in dev mode',
73
+ );
74
+ const currentProjectConfiguration =
75
+ this.editorStore.projectConfigurationEditorState
76
+ .currentProjectConfiguration;
77
+ assertNonNullable(
78
+ currentProjectConfiguration,
79
+ 'Project Name required to push to dev mode',
80
+ );
81
+ const projectId = generateGAVCoordinates(
82
+ currentProjectConfiguration.groupId,
83
+ currentProjectConfiguration.artifactId,
84
+ undefined,
85
+ );
86
+ assertNonEmptyString(this.did, 'DID required to push to dev mode');
87
+ this.pushState.inProgress();
88
+ this.editorStore.applicationStore.alertService.setBlockingAlert({
89
+ message: 'Pushing to Dev Mode',
90
+ showLoading: true,
91
+ });
92
+ const result =
93
+ (yield this.editorStore.graphManagerState.graphManager.pushToDevMetadata(
94
+ this.did,
95
+ projectId,
96
+ this.editorStore.graphManagerState.graph,
97
+ )) as DevMetadataResult;
98
+ this.result = result;
99
+ this.editorStore.applicationStore.notificationService.notifySuccess(
100
+ `Pushed to dev mode`,
101
+ );
102
+ } catch (error) {
103
+ assertErrorThrown(error);
104
+ this.pushState.fail();
105
+ } finally {
106
+ this.editorStore.applicationStore.alertService.setBlockingAlert(
107
+ undefined,
108
+ );
109
+ }
110
+ }
111
+ }
@@ -201,21 +201,21 @@ export const dataProduct_deleteAccessPointGroup = action(
201
201
  },
202
202
  );
203
203
 
204
- export const dataProduct_addExpertise = action(
205
- (product: DataProduct, expertise: Expertise) => {
204
+ export const supportInfo_addExpertise = action(
205
+ (supportInfo: SupportInfo, expertise: Expertise) => {
206
206
  const observedExpertise = observe_Expertise(expertise);
207
- if (!product.expertise) {
208
- product.expertise = [observedExpertise];
207
+ if (!supportInfo.expertise) {
208
+ supportInfo.expertise = [observedExpertise];
209
209
  } else {
210
- addUniqueEntry(product.expertise, observedExpertise);
210
+ addUniqueEntry(supportInfo.expertise, observedExpertise);
211
211
  }
212
212
  },
213
213
  );
214
214
 
215
- export const dataProduct_deleteExpertise = action(
216
- (product: DataProduct, expertise: Expertise) => {
217
- if (product.expertise) {
218
- deleteEntry(product.expertise, expertise);
215
+ export const supportInfo_deleteExpertise = action(
216
+ (supportInfo: SupportInfo, expertise: Expertise) => {
217
+ if (supportInfo.expertise) {
218
+ deleteEntry(supportInfo.expertise, expertise);
219
219
  }
220
220
  },
221
221
  );
package/tsconfig.json CHANGED
@@ -181,6 +181,7 @@
181
181
  "./src/stores/editor/sidebar-state/WorkspaceSyncState.ts",
182
182
  "./src/stores/editor/sidebar-state/WorkspaceUpdateConflictResolutionState.ts",
183
183
  "./src/stores/editor/sidebar-state/WorkspaceUpdaterState.ts",
184
+ "./src/stores/editor/sidebar-state/dev-metadata/DevMetadataState.ts",
184
185
  "./src/stores/editor/sidebar-state/end-to-end-workflow/GlobalEndToEndFlowState.ts",
185
186
  "./src/stores/editor/sidebar-state/testable/GlobalTestRunnerState.ts",
186
187
  "./src/stores/editor/utils/DnDUtils.ts",
@@ -331,6 +332,7 @@
331
332
  "./src/components/editor/panel-group/ProblemsPanel.tsx",
332
333
  "./src/components/editor/panel-group/SQLPlaygroundPanel.tsx",
333
334
  "./src/components/editor/side-bar/CreateNewElementModal.tsx",
335
+ "./src/components/editor/side-bar/DevMetadataPanel.tsx",
334
336
  "./src/components/editor/side-bar/Explorer.tsx",
335
337
  "./src/components/editor/side-bar/LocalChanges.tsx",
336
338
  "./src/components/editor/side-bar/ProjectOverview.tsx",