@finos/legend-application-studio 28.18.26 → 28.18.27

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.
@@ -34,6 +34,7 @@ import {
34
34
  import { GrammarTextEditor } from './editor-group/GrammarTextEditor.js';
35
35
  import { StatusBar } from './StatusBar.js';
36
36
  import { ActivityBar } from './ActivityBar.js';
37
+ import { ShowcaseSideBar } from './ShowcaseSideBar.js';
37
38
  import type { WorkspaceEditorPathParams } from '../../__lib__/LegendStudioNavigation.js';
38
39
  import { ProjectSearchCommand } from '../editor/command-center/ProjectSearchCommand.js';
39
40
  import { guaranteeNonNullable, isNonNullable } from '@finos/legend-shared';
@@ -53,6 +54,7 @@ import { LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../../__lib__/
53
54
  import { EmbeddedQueryBuilder } from './EmbeddedQueryBuilder.js';
54
55
  import { GRAPH_EDITOR_MODE } from '../../stores/editor/EditorConfig.js';
55
56
  import { QuickInput } from './QuickInput.js';
57
+ import { ShowcaseManager } from '../ShowcaseManager.js';
56
58
 
57
59
  export const Editor = withEditorStore(
58
60
  observer(() => {
@@ -118,6 +120,22 @@ export const Editor = withEditorStore(
118
120
  const maximizedCollapsiblePanelGroupProps = getCollapsiblePanelGroupProps(
119
121
  editorStore.panelGroupDisplayState.isMaximized,
120
122
  );
123
+ // handle resizing showcase sidebar
124
+ const showcaseResizeSideBar = (
125
+ handleProps: ResizablePanelHandlerProps,
126
+ ): void =>
127
+ editorStore.showcasePanelDisplayState.setSize(
128
+ (handleProps.domElement as HTMLDivElement).getBoundingClientRect()
129
+ .width,
130
+ );
131
+
132
+ const showcaseCollapsibleSideBarGroupProps = getCollapsiblePanelGroupProps(
133
+ editorStore.showcasePanelDisplayState.size === 0,
134
+ {
135
+ onStopResize: showcaseResizeSideBar,
136
+ size: editorStore.showcasePanelDisplayState.size,
137
+ },
138
+ );
121
139
 
122
140
  useEffect(() => {
123
141
  if (ref.current) {
@@ -193,7 +211,6 @@ export const Editor = withEditorStore(
193
211
 
194
212
  // Cleanup the editor
195
213
  useEffect(() => (): void => editorStore.cleanUp(), [editorStore]);
196
-
197
214
  return (
198
215
  <div className="app__page">
199
216
  <div className="editor">
@@ -210,7 +227,10 @@ export const Editor = withEditorStore(
210
227
  </ResizablePanel>
211
228
  <ResizablePanelSplitter />
212
229
  <ResizablePanel
213
- {...collapsibleSideBarGroupProps.remainingPanel}
230
+ {...(!editorStore.sideBarDisplayState.isOpen &&
231
+ !editorStore.showcasePanelDisplayState.isOpen
232
+ ? { flex: 1 }
233
+ : {})}
214
234
  minSize={300}
215
235
  >
216
236
  <ResizablePanelGroup orientation="horizontal">
@@ -250,9 +270,19 @@ export const Editor = withEditorStore(
250
270
  </ResizablePanel>
251
271
  </ResizablePanelGroup>
252
272
  </ResizablePanel>
273
+ <ResizablePanelSplitter />
274
+ <ResizablePanel
275
+ {...showcaseCollapsibleSideBarGroupProps.collapsiblePanel}
276
+ direction={-1}
277
+ >
278
+ <div className="panel__content explorer__content__container">
279
+ <ShowcaseManager />
280
+ </div>
281
+ </ResizablePanel>
253
282
  </ResizablePanelGroup>
254
283
  </div>
255
284
  </div>
285
+ <ShowcaseSideBar />
256
286
  </div>
257
287
  <QuickInput />
258
288
  <StatusBar actionsDisabled={!editable} />
@@ -0,0 +1,66 @@
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 {
19
+ MenuContentDivider,
20
+ DoubleArrowLeft,
21
+ DoubleArrowRight,
22
+ } from '@finos/legend-art';
23
+ import { useEditorStore } from './EditorStoreProvider.js';
24
+ import type { EditorStore } from '../../stores/editor/EditorStore.js';
25
+
26
+ export enum SHOWCASE_PANEL_LOCAL_STORAGE {
27
+ PANEL_STATE_KEY = 'ShowShowcasePanel',
28
+ }
29
+
30
+ export const toggleShowcasePanel = (editorStore: EditorStore) => {
31
+ editorStore.showcasePanelDisplayState.toggle();
32
+ editorStore.applicationStore.userDataService.persistValue(
33
+ SHOWCASE_PANEL_LOCAL_STORAGE.PANEL_STATE_KEY,
34
+ editorStore.showcasePanelDisplayState.isOpen,
35
+ );
36
+ };
37
+
38
+ export const ShowcaseSideBar = observer(() => {
39
+ const editorStore = useEditorStore();
40
+
41
+ return (
42
+ <div className="activity-bar">
43
+ <div className="activity-bar__items">
44
+ <button
45
+ className="activity-bar__item"
46
+ onClick={() => {
47
+ toggleShowcasePanel(editorStore);
48
+ }}
49
+ tabIndex={-1}
50
+ title={
51
+ editorStore.showcasePanelDisplayState.isOpen
52
+ ? 'Close Showcases'
53
+ : 'Open Showcases'
54
+ }
55
+ >
56
+ {editorStore.showcasePanelDisplayState.isOpen ? (
57
+ <DoubleArrowRight />
58
+ ) : (
59
+ <DoubleArrowLeft />
60
+ )}
61
+ </button>
62
+ <MenuContentDivider />
63
+ </div>
64
+ </div>
65
+ );
66
+ });
@@ -109,7 +109,10 @@ import { GlobalBulkServiceRegistrationState } from './sidebar-state/BulkServiceR
109
109
  import { SQLPlaygroundPanelState } from './panel-group/SQLPlaygroundPanelState.js';
110
110
  import type { QuickInputState } from './QuickInputState.js';
111
111
  import { GlobalEndToEndWorkflowState } from './sidebar-state/end-to-end-workflow/GlobalEndToEndFlowState.js';
112
- import { openShowcaseManager } from '../ShowcaseManagerState.js';
112
+ import {
113
+ SHOWCASE_PANEL_LOCAL_STORAGE,
114
+ toggleShowcasePanel,
115
+ } from '../../components/editor/ShowcaseSideBar.js';
113
116
  import {
114
117
  GraphEditLazyGrammarModeState,
115
118
  LazyTextEditorStore,
@@ -196,6 +199,8 @@ export class EditorStore implements CommandRegistrar {
196
199
  default: 300,
197
200
  snap: 150,
198
201
  });
202
+ readonly showcasePanelDisplayState: PanelDisplayState;
203
+ readonly showcaseDefaultSize = 500;
199
204
  readonly tabManagerState = new EditorTabManagerState(this);
200
205
  supportedElementTypesWithCategory: Map<string, string[]>;
201
206
 
@@ -303,6 +308,24 @@ export class EditorStore implements CommandRegistrar {
303
308
  .filter(isNonNullable);
304
309
  this.supportedElementTypesWithCategory =
305
310
  this.getSupportedElementTypesWithCategory();
311
+
312
+ this.showcasePanelDisplayState = new PanelDisplayState({
313
+ initial: this.showcaseInitialSize,
314
+ default: this.showcaseDefaultSize,
315
+ snap: 150,
316
+ });
317
+ }
318
+
319
+ get showcaseInitialSize(): number {
320
+ const showcasesSavedAsOpen =
321
+ this.applicationStore.userDataService.getBooleanValue(
322
+ SHOWCASE_PANEL_LOCAL_STORAGE.PANEL_STATE_KEY,
323
+ );
324
+ if (showcasesSavedAsOpen || showcasesSavedAsOpen === undefined) {
325
+ return this.showcaseDefaultSize;
326
+ } else {
327
+ return 0;
328
+ }
306
329
  }
307
330
 
308
331
  get isInitialized(): boolean {
@@ -439,7 +462,7 @@ export class EditorStore implements CommandRegistrar {
439
462
  this.conflictResolutionState.hasResolvedAllConflicts),
440
463
  ),
441
464
  action: () => {
442
- openShowcaseManager(this.applicationStore);
465
+ toggleShowcasePanel(this);
443
466
  },
444
467
  });
445
468
  this.applicationStore.commandService.registerCommand({
package/tsconfig.json CHANGED
@@ -215,6 +215,7 @@
215
215
  "./src/components/editor/EditorStoreProvider.tsx",
216
216
  "./src/components/editor/EmbeddedQueryBuilder.tsx",
217
217
  "./src/components/editor/QuickInput.tsx",
218
+ "./src/components/editor/ShowcaseSideBar.tsx",
218
219
  "./src/components/editor/StatusBar.tsx",
219
220
  "./src/components/editor/__test-utils__/EditorComponentTestUtils.tsx",
220
221
  "./src/components/editor/command-center/ProjectSearchCommand.tsx",