@finos/legend-application-studio 22.2.1 → 22.3.1

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 (212) hide show
  1. package/lib/components/editor/StatusBar.js +1 -1
  2. package/lib/components/editor/StatusBar.js.map +1 -1
  3. package/lib/components/editor/command-center/ProjectSearchCommand.d.ts.map +1 -1
  4. package/lib/components/editor/command-center/ProjectSearchCommand.js +1 -0
  5. package/lib/components/editor/command-center/ProjectSearchCommand.js.map +1 -1
  6. package/lib/components/editor/edit-panel/EditPanel.d.ts.map +1 -1
  7. package/lib/components/editor/edit-panel/EditPanel.js +24 -11
  8. package/lib/components/editor/edit-panel/EditPanel.js.map +1 -1
  9. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.d.ts.map +1 -1
  10. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js +2 -1
  11. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js.map +1 -1
  12. package/lib/components/editor/edit-panel/connection-editor/ConnectionEditor.d.ts.map +1 -1
  13. package/lib/components/editor/edit-panel/connection-editor/ConnectionEditor.js +1 -0
  14. package/lib/components/editor/edit-panel/connection-editor/ConnectionEditor.js.map +1 -1
  15. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.d.ts.map +1 -1
  16. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.js +4 -3
  17. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.js.map +1 -1
  18. package/lib/components/editor/edit-panel/element-generation-editor/ElementXTGenerationEditor.d.ts +32 -0
  19. package/lib/components/editor/edit-panel/element-generation-editor/ElementXTGenerationEditor.d.ts.map +1 -0
  20. package/lib/components/editor/edit-panel/element-generation-editor/ElementXTGenerationEditor.js +66 -0
  21. package/lib/components/editor/edit-panel/element-generation-editor/ElementXTGenerationEditor.js.map +1 -0
  22. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.d.ts +0 -23
  23. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.d.ts.map +1 -1
  24. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.js +6 -58
  25. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.js.map +1 -1
  26. package/lib/components/editor/edit-panel/element-generation-editor/FileSystemViewer.d.ts +41 -0
  27. package/lib/components/editor/edit-panel/element-generation-editor/FileSystemViewer.d.ts.map +1 -0
  28. package/lib/components/editor/edit-panel/element-generation-editor/FileSystemViewer.js +77 -0
  29. package/lib/components/editor/edit-panel/element-generation-editor/FileSystemViewer.js.map +1 -0
  30. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.d.ts +7 -0
  31. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.d.ts.map +1 -1
  32. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.js +19 -14
  33. package/lib/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.js.map +1 -1
  34. package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.d.ts.map +1 -1
  35. package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.js +3 -1
  36. package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.js.map +1 -1
  37. package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationSourceSelectorModal.js +3 -1
  38. package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationSourceSelectorModal.js.map +1 -1
  39. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.d.ts.map +1 -1
  40. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.js +3 -0
  41. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.js.map +1 -1
  42. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.d.ts.map +1 -1
  43. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.js +3 -1
  44. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.js.map +1 -1
  45. package/lib/components/editor/edit-panel/service-editor/ServiceEditor.d.ts.map +1 -1
  46. package/lib/components/editor/edit-panel/service-editor/ServiceEditor.js +51 -13
  47. package/lib/components/editor/edit-panel/service-editor/ServiceEditor.js.map +1 -1
  48. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  49. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js +18 -10
  50. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  51. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.d.ts +1 -3
  52. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.d.ts.map +1 -1
  53. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.js +2 -20
  54. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.js.map +1 -1
  55. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.d.ts.map +1 -1
  56. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js +9 -3
  57. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js.map +1 -1
  58. package/lib/components/editor/side-bar/CreateNewElementModal.d.ts.map +1 -1
  59. package/lib/components/editor/side-bar/CreateNewElementModal.js +1 -0
  60. package/lib/components/editor/side-bar/CreateNewElementModal.js.map +1 -1
  61. package/lib/components/editor/side-bar/Explorer.d.ts.map +1 -1
  62. package/lib/components/editor/side-bar/Explorer.js +29 -8
  63. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  64. package/lib/components/editor/side-bar/testable/GlobalTestRunner.d.ts.map +1 -1
  65. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js +17 -3
  66. package/lib/components/editor/side-bar/testable/GlobalTestRunner.js.map +1 -1
  67. package/lib/index.css +2 -2
  68. package/lib/index.css.map +1 -1
  69. package/lib/index.d.ts +2 -2
  70. package/lib/index.d.ts.map +1 -1
  71. package/lib/index.js +2 -2
  72. package/lib/index.js.map +1 -1
  73. package/lib/package.json +3 -3
  74. package/lib/stores/DSL_Generation_LegendStudioApplicationPlugin_Extension.d.ts +2 -2
  75. package/lib/stores/DSL_Generation_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -1
  76. package/lib/stores/DependencyProjectViewerHelper.d.ts +19 -0
  77. package/lib/stores/DependencyProjectViewerHelper.d.ts.map +1 -0
  78. package/lib/stores/DependencyProjectViewerHelper.js +23 -0
  79. package/lib/stores/DependencyProjectViewerHelper.js.map +1 -0
  80. package/lib/stores/EditorGraphState.d.ts +9 -2
  81. package/lib/stores/EditorGraphState.d.ts.map +1 -1
  82. package/lib/stores/EditorGraphState.js +35 -95
  83. package/lib/stores/EditorGraphState.js.map +1 -1
  84. package/lib/stores/EditorStore.d.ts.map +1 -1
  85. package/lib/stores/EditorStore.js +7 -1
  86. package/lib/stores/EditorStore.js.map +1 -1
  87. package/lib/stores/EditorTabManagerState.d.ts +1 -1
  88. package/lib/stores/EditorTabManagerState.d.ts.map +1 -1
  89. package/lib/stores/EditorTabManagerState.js +11 -13
  90. package/lib/stores/EditorTabManagerState.js.map +1 -1
  91. package/lib/stores/ExplorerTreeState.d.ts +4 -4
  92. package/lib/stores/ExplorerTreeState.d.ts.map +1 -1
  93. package/lib/stores/ExplorerTreeState.js +12 -13
  94. package/lib/stores/ExplorerTreeState.js.map +1 -1
  95. package/lib/stores/editor/NewElementState.d.ts.map +1 -1
  96. package/lib/stores/editor/NewElementState.js +0 -3
  97. package/lib/stores/editor/NewElementState.js.map +1 -1
  98. package/lib/stores/editor-state/ExternalFormatState.d.ts +2 -0
  99. package/lib/stores/editor-state/ExternalFormatState.d.ts.map +1 -1
  100. package/lib/stores/editor-state/ExternalFormatState.js +6 -0
  101. package/lib/stores/editor-state/ExternalFormatState.js.map +1 -1
  102. package/lib/stores/editor-state/FileGenerationState.d.ts +18 -18
  103. package/lib/stores/editor-state/FileGenerationState.d.ts.map +1 -1
  104. package/lib/stores/editor-state/FileGenerationState.js +86 -133
  105. package/lib/stores/editor-state/FileGenerationState.js.map +1 -1
  106. package/lib/stores/editor-state/FileGenerationViewerState.d.ts +3 -3
  107. package/lib/stores/editor-state/FileGenerationViewerState.d.ts.map +1 -1
  108. package/lib/stores/editor-state/FileGenerationViewerState.js.map +1 -1
  109. package/lib/stores/editor-state/FileSystemState.d.ts +30 -0
  110. package/lib/stores/editor-state/FileSystemState.d.ts.map +1 -0
  111. package/lib/stores/editor-state/FileSystemState.js +82 -0
  112. package/lib/stores/editor-state/FileSystemState.js.map +1 -0
  113. package/lib/stores/editor-state/GraphGenerationState.d.ts +9 -9
  114. package/lib/stores/editor-state/GraphGenerationState.d.ts.map +1 -1
  115. package/lib/stores/editor-state/GraphGenerationState.js +14 -15
  116. package/lib/stores/editor-state/GraphGenerationState.js.map +1 -1
  117. package/lib/stores/editor-state/element-editor-state/ElementEditorState.d.ts +25 -2
  118. package/lib/stores/editor-state/element-editor-state/ElementEditorState.d.ts.map +1 -1
  119. package/lib/stores/editor-state/element-editor-state/ElementEditorState.js +50 -7
  120. package/lib/stores/editor-state/element-editor-state/ElementEditorState.js.map +1 -1
  121. package/lib/stores/editor-state/element-editor-state/ElementExternalFormatGenerationState.d.ts +44 -0
  122. package/lib/stores/editor-state/element-editor-state/ElementExternalFormatGenerationState.d.ts.map +1 -0
  123. package/lib/stores/editor-state/element-editor-state/ElementExternalFormatGenerationState.js +172 -0
  124. package/lib/stores/editor-state/element-editor-state/ElementExternalFormatGenerationState.js.map +1 -0
  125. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.d.ts.map +1 -1
  126. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.js +7 -3
  127. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.js.map +1 -1
  128. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js +1 -1
  129. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  130. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js +2 -2
  131. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js.map +1 -1
  132. package/lib/stores/editor-state/element-editor-state/service/ServiceEditorState.d.ts +3 -0
  133. package/lib/stores/editor-state/element-editor-state/service/ServiceEditorState.d.ts.map +1 -1
  134. package/lib/stores/editor-state/element-editor-state/service/ServiceEditorState.js +14 -2
  135. package/lib/stores/editor-state/element-editor-state/service/ServiceEditorState.js.map +1 -1
  136. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.d.ts +9 -6
  137. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.d.ts.map +1 -1
  138. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js +39 -29
  139. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  140. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js +2 -2
  141. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js.map +1 -1
  142. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestEditorState.d.ts.map +1 -1
  143. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js +6 -3
  144. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestEditorState.js.map +1 -1
  145. package/lib/stores/shared/FileSystemTreeUtils.d.ts +56 -0
  146. package/lib/stores/shared/FileSystemTreeUtils.d.ts.map +1 -0
  147. package/lib/stores/shared/{FileGenerationTreeUtils.js → FileSystemTreeUtils.js} +31 -32
  148. package/lib/stores/shared/FileSystemTreeUtils.js.map +1 -0
  149. package/lib/stores/shared/PackageTreeUtils.d.ts +6 -4
  150. package/lib/stores/shared/PackageTreeUtils.d.ts.map +1 -1
  151. package/lib/stores/shared/PackageTreeUtils.js +90 -11
  152. package/lib/stores/shared/PackageTreeUtils.js.map +1 -1
  153. package/lib/stores/shared/testable/TestableUtils.d.ts +1 -1
  154. package/lib/stores/shared/testable/TestableUtils.d.ts.map +1 -1
  155. package/lib/stores/shared/testable/TestableUtils.js +6 -4
  156. package/lib/stores/shared/testable/TestableUtils.js.map +1 -1
  157. package/lib/stores/sidebar-state/testable/GlobalTestRunnerState.d.ts +3 -3
  158. package/lib/stores/sidebar-state/testable/GlobalTestRunnerState.d.ts.map +1 -1
  159. package/lib/stores/sidebar-state/testable/GlobalTestRunnerState.js +37 -1
  160. package/lib/stores/sidebar-state/testable/GlobalTestRunnerState.js.map +1 -1
  161. package/package.json +12 -12
  162. package/src/components/editor/StatusBar.tsx +1 -1
  163. package/src/components/editor/command-center/ProjectSearchCommand.tsx +1 -0
  164. package/src/components/editor/edit-panel/EditPanel.tsx +79 -25
  165. package/src/components/editor/edit-panel/GenerationSpecificationEditor.tsx +2 -1
  166. package/src/components/editor/edit-panel/connection-editor/ConnectionEditor.tsx +1 -0
  167. package/src/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.tsx +5 -7
  168. package/src/components/editor/edit-panel/element-generation-editor/ElementXTGenerationEditor.tsx +194 -0
  169. package/src/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.tsx +6 -270
  170. package/src/components/editor/edit-panel/element-generation-editor/FileSystemViewer.tsx +296 -0
  171. package/src/components/editor/edit-panel/external-format-editor/DSL_ExternalFormat_BindingElementEditor.tsx +177 -155
  172. package/src/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.tsx +3 -1
  173. package/src/components/editor/edit-panel/mapping-editor/InstanceSetImplementationSourceSelectorModal.tsx +3 -3
  174. package/src/components/editor/edit-panel/mapping-editor/MappingExecutionQueryBuilder.tsx +3 -0
  175. package/src/components/editor/edit-panel/mapping-editor/NewMappingElementModal.tsx +3 -1
  176. package/src/components/editor/edit-panel/service-editor/ServiceEditor.tsx +243 -184
  177. package/src/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.tsx +42 -15
  178. package/src/components/editor/edit-panel/service-editor/testable/ServiceTestableEditor.tsx +2 -65
  179. package/src/components/editor/edit-panel/uml-editor/ClassEditor.tsx +9 -3
  180. package/src/components/editor/side-bar/CreateNewElementModal.tsx +1 -0
  181. package/src/components/editor/side-bar/Explorer.tsx +82 -13
  182. package/src/components/editor/side-bar/testable/GlobalTestRunner.tsx +31 -9
  183. package/src/index.ts +5 -2
  184. package/src/stores/DSL_Generation_LegendStudioApplicationPlugin_Extension.ts +2 -2
  185. package/src/stores/DependencyProjectViewerHelper.ts +39 -0
  186. package/src/stores/EditorGraphState.ts +56 -153
  187. package/src/stores/EditorStore.ts +15 -5
  188. package/src/stores/EditorTabManagerState.ts +17 -20
  189. package/src/stores/ExplorerTreeState.ts +26 -18
  190. package/src/stores/editor/NewElementState.ts +0 -2
  191. package/src/stores/editor-state/ExternalFormatState.ts +9 -0
  192. package/src/stores/editor-state/FileGenerationState.ts +129 -180
  193. package/src/stores/editor-state/FileGenerationViewerState.ts +3 -3
  194. package/src/stores/editor-state/FileSystemState.ts +111 -0
  195. package/src/stores/editor-state/GraphGenerationState.ts +35 -31
  196. package/src/stores/editor-state/element-editor-state/ElementEditorState.ts +91 -6
  197. package/src/stores/editor-state/element-editor-state/ElementExternalFormatGenerationState.ts +266 -0
  198. package/src/stores/editor-state/element-editor-state/RuntimeEditorState.ts +10 -8
  199. package/src/stores/editor-state/element-editor-state/mapping/MappingExecutionState.ts +1 -1
  200. package/src/stores/editor-state/element-editor-state/mapping/MappingTestState.ts +2 -2
  201. package/src/stores/editor-state/element-editor-state/service/ServiceEditorState.ts +23 -2
  202. package/src/stores/editor-state/element-editor-state/service/ServiceExecutionState.ts +61 -56
  203. package/src/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.ts +2 -2
  204. package/src/stores/editor-state/element-editor-state/service/testable/ServiceTestEditorState.ts +6 -2
  205. package/src/stores/shared/{FileGenerationTreeUtils.ts → FileSystemTreeUtils.ts} +77 -76
  206. package/src/stores/shared/PackageTreeUtils.ts +144 -10
  207. package/src/stores/shared/testable/TestableUtils.ts +8 -4
  208. package/src/stores/sidebar-state/testable/GlobalTestRunnerState.ts +42 -3
  209. package/tsconfig.json +6 -1
  210. package/lib/stores/shared/FileGenerationTreeUtils.d.ts +0 -56
  211. package/lib/stores/shared/FileGenerationTreeUtils.d.ts.map +0 -1
  212. package/lib/stores/shared/FileGenerationTreeUtils.js.map +0 -1
@@ -14,15 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useState, useMemo, useCallback, Fragment } from 'react';
17
+ import { useState, useMemo, useCallback } from 'react';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { flowResult, runInAction } from 'mobx';
20
20
  import { getElementIcon } from '../../../shared/ElementIconUtils.js';
21
21
  import { useDrop } from 'react-dnd';
22
- import {
23
- getTextContent,
24
- getEditorLanguageForFormat,
25
- } from '../../../../stores/editor-state/FileGenerationViewerState.js';
26
22
  import { FileGenerationEditorState } from '../../../../stores/editor-state/element-editor-state/FileGenerationEditorState.js';
27
23
  import {
28
24
  type DebouncedFunc,
@@ -32,28 +28,17 @@ import {
32
28
  type PlainObject,
33
29
  } from '@finos/legend-shared';
34
30
  import {
35
- type TreeNodeContainerProps,
36
- type TreeData,
37
- type TreeNodeData,
38
31
  ResizablePanelGroup,
39
32
  ResizablePanel,
40
33
  ResizablePanelSplitter,
41
34
  ResizablePanelSplitterLine,
42
35
  clsx,
43
- TreeView,
44
- BlankPanelContent,
45
- PanelLoadingIndicator,
46
36
  CustomSelectorInput,
47
37
  PencilIcon,
48
38
  RefreshIcon,
49
39
  TimesIcon,
50
40
  CheckSquareIcon,
51
41
  SquareIcon,
52
- ChevronDownIcon,
53
- ChevronRightIcon,
54
- FolderOpenIcon,
55
- FolderIcon,
56
- FileCodeIcon,
57
42
  LockIcon,
58
43
  SaveIcon,
59
44
  PanelDropZone,
@@ -68,12 +53,6 @@ import {
68
53
  } from '../../../../stores/shared/DnDUtils.js';
69
54
  import type { FileGenerationState } from '../../../../stores/editor-state/FileGenerationState.js';
70
55
  import type { ElementFileGenerationState } from '../../../../stores/editor-state/element-editor-state/ElementFileGenerationState.js';
71
- import {
72
- type GenerationTreeNodeData,
73
- GenerationDirectory,
74
- GenerationFile,
75
- getFileGenerationChildNodes,
76
- } from '../../../../stores/shared/FileGenerationTreeUtils.js';
77
56
  import { LEGEND_STUDIO_TEST_ID } from '../../../LegendStudioTestID.js';
78
57
  import { useEditorStore } from '../../EditorStoreProvider.js';
79
58
  import {
@@ -86,256 +65,14 @@ import {
86
65
  resolvePackagePathAndElementName,
87
66
  getNullableFileGenerationConfig,
88
67
  } from '@finos/legend-graph';
89
- import {
90
- TextInputEditor,
91
- useApplicationStore,
92
- } from '@finos/legend-application';
93
- import type { DSL_Generation_LegendStudioApplicationPlugin_Extension } from '../../../../stores/DSL_Generation_LegendStudioApplicationPlugin_Extension.js';
68
+ import { useApplicationStore } from '@finos/legend-application';
94
69
  import {
95
70
  fileGeneration_addScopeElement,
96
71
  fileGeneration_changeScopeElement,
97
72
  fileGeneration_deleteScopeElement,
98
73
  fileGeneration_setGenerationOutputPath,
99
74
  } from '../../../../stores/shared/modifier/DSL_Generation_GraphModifierHelper.js';
100
-
101
- export const FileGenerationTreeNodeContainer: React.FC<
102
- TreeNodeContainerProps<
103
- GenerationTreeNodeData,
104
- {
105
- selectedNode?: TreeNodeData | undefined;
106
- }
107
- >
108
- > = (props) => {
109
- const { node, level, stepPaddingInRem, onNodeSelect, innerProps } = props;
110
- const { selectedNode } = innerProps;
111
- const isSelected = selectedNode === node;
112
- const isDirectory = node.fileNode instanceof GenerationDirectory;
113
- const expandIcon = !isDirectory ? (
114
- <div />
115
- ) : node.isOpen ? (
116
- <ChevronDownIcon />
117
- ) : (
118
- <ChevronRightIcon />
119
- );
120
- const iconPackageColor = 'color--generated';
121
- const nodeIcon = isDirectory ? (
122
- node.isOpen ? (
123
- <div className={iconPackageColor}>
124
- <FolderOpenIcon />
125
- </div>
126
- ) : (
127
- <div className={iconPackageColor}>
128
- <FolderIcon />
129
- </div>
130
- )
131
- ) : (
132
- <div className="icon">
133
- <FileCodeIcon />
134
- </div>
135
- );
136
- const selectNode: React.MouseEventHandler = (event) => onNodeSelect?.(node);
137
-
138
- return (
139
- <div
140
- className={clsx(
141
- 'tree-view__node__container generation-result-viewer__explorer__package-tree__node__container',
142
- {
143
- 'generation-result-viewer__explorer__package-tree__node__container--selected':
144
- isSelected,
145
- },
146
- )}
147
- onClick={selectNode}
148
- style={{
149
- paddingLeft: `${level * (stepPaddingInRem ?? 1)}rem`,
150
- display: 'flex',
151
- }}
152
- >
153
- <div className="tree-view__node__icon generation-result-viewer__explorer__package-tree__node__icon">
154
- <div className="generation-result-viewer__explorer__package-tree__node__icon__expand">
155
- {expandIcon}
156
- </div>
157
- <div className="generation-result-viewer__explorer__package-tree__node__icon__type">
158
- {nodeIcon}
159
- </div>
160
- </div>
161
- <button
162
- className="tree-view__node__label generation-result-viewer__explorer__package-tree__node__label"
163
- tabIndex={-1}
164
- title={node.fileNode.path}
165
- >
166
- {node.label}
167
- </button>
168
- </div>
169
- );
170
- };
171
-
172
- export const FileGenerationTree = observer(
173
- (props: {
174
- selectedNode?: TreeNodeData | undefined;
175
- directoryTreeData: TreeData<GenerationTreeNodeData>;
176
- onNodeSelect: (node: GenerationTreeNodeData) => void;
177
- getFileElementTreeChildNodes: (
178
- node: GenerationTreeNodeData,
179
- ) => GenerationTreeNodeData[];
180
- }) => {
181
- const {
182
- directoryTreeData,
183
- onNodeSelect,
184
- getFileElementTreeChildNodes,
185
- selectedNode,
186
- } = props;
187
-
188
- return (
189
- <TreeView
190
- components={{
191
- TreeNodeContainer: FileGenerationTreeNodeContainer,
192
- }}
193
- treeData={directoryTreeData}
194
- onNodeSelect={onNodeSelect}
195
- getChildNodes={getFileElementTreeChildNodes}
196
- innerProps={{
197
- selectedNode: selectedNode,
198
- }}
199
- />
200
- );
201
- },
202
- );
203
-
204
- export const GenerationResultExplorer = observer(
205
- (props: { fileGenerationState: FileGenerationState }) => {
206
- const { fileGenerationState } = props;
207
- const treeData = guaranteeNonNullable(
208
- fileGenerationState.directoryTreeData,
209
- );
210
- const onNodeSelect = (node: GenerationTreeNodeData): void =>
211
- fileGenerationState.onTreeNodeSelect(node, treeData);
212
- const getMappingElementTreeChildNodes = (
213
- node: GenerationTreeNodeData,
214
- ): GenerationTreeNodeData[] => getFileGenerationChildNodes(node, treeData);
215
-
216
- if (!treeData.nodes.size) {
217
- return <BlankPanelContent>No content</BlankPanelContent>;
218
- }
219
- return (
220
- <div className="generation-result-viewer__explorer__content">
221
- <FileGenerationTree
222
- selectedNode={fileGenerationState.selectedNode}
223
- directoryTreeData={treeData}
224
- onNodeSelect={onNodeSelect}
225
- getFileElementTreeChildNodes={getMappingElementTreeChildNodes}
226
- />
227
- </div>
228
- );
229
- },
230
- );
231
-
232
- export const GenerationResultViewer = observer(
233
- (props: { fileGenerationState: FileGenerationState }) => {
234
- const { fileGenerationState } = props;
235
- const applicationStore = useApplicationStore();
236
- const selectedNode = fileGenerationState.selectedNode;
237
- const fileNode = selectedNode?.fileNode;
238
- const regenerate = applicationStore.guardUnhandledError(() =>
239
- flowResult(fileGenerationState.generate()),
240
- );
241
- const extraFileGenerationResultViewerActions =
242
- fileNode instanceof GenerationFile
243
- ? fileGenerationState.editorStore.pluginManager
244
- .getApplicationPlugins()
245
- .flatMap(
246
- (plugin) =>
247
- (
248
- plugin as DSL_Generation_LegendStudioApplicationPlugin_Extension
249
- ).getExtraFileGenerationResultViewerActionConfigurations?.() ??
250
- [],
251
- )
252
- .map((config) => (
253
- <Fragment key={config.key}>
254
- {config.renderer(fileGenerationState)}
255
- </Fragment>
256
- ))
257
- : null;
258
- return (
259
- <ResizablePanelGroup orientation="vertical">
260
- <ResizablePanel size={250} minSize={250}>
261
- <div className="generation-result-viewer__side-bar">
262
- <div className="panel generation-result-viewer__explorer">
263
- <div className="panel__header">
264
- <div className="panel__header__title">
265
- <div className="panel__header__title__label">result</div>
266
- </div>
267
- <div className="panel__header__actions">
268
- <button
269
- className={clsx(
270
- 'panel__header__action generation-result-viewer__regenerate-btn',
271
- {
272
- ' generation-result-viewer__regenerate-btn--loading':
273
- fileGenerationState.isGenerating,
274
- },
275
- )}
276
- tabIndex={-1}
277
- disabled={fileGenerationState.isGenerating}
278
- onClick={regenerate}
279
- title="Regenerate"
280
- >
281
- <RefreshIcon />
282
- </button>
283
- </div>
284
- </div>
285
- <PanelContent>
286
- <PanelLoadingIndicator
287
- isLoading={fileGenerationState.isGenerating}
288
- />
289
- {Boolean(fileGenerationState.directoryTreeData) && (
290
- <GenerationResultExplorer
291
- fileGenerationState={fileGenerationState}
292
- />
293
- )}
294
- {Boolean(!fileGenerationState.directoryTreeData) && (
295
- <BlankPanelContent>
296
- Generation result not available
297
- </BlankPanelContent>
298
- )}
299
- </PanelContent>
300
- </div>
301
- </div>
302
- </ResizablePanel>
303
- <ResizablePanelSplitter>
304
- <ResizablePanelSplitterLine color="var(--color-dark-grey-200)" />
305
- </ResizablePanelSplitter>
306
- <ResizablePanel>
307
- <div className="panel generation-result-viewer__file">
308
- <div className="panel__header">
309
- {fileNode && !(fileNode instanceof GenerationDirectory) && (
310
- <div className="panel__header__title">
311
- <div className="panel__header__title__label">file</div>
312
- <div className="panel__header__title__content generation-result-viewer__file__header__name">
313
- {fileNode.name}
314
- </div>
315
- </div>
316
- )}
317
- <div className="panel__header__actions">
318
- {extraFileGenerationResultViewerActions}
319
- </div>
320
- </div>
321
- <PanelContent>
322
- {fileNode instanceof GenerationFile && (
323
- <TextInputEditor
324
- inputValue={getTextContent(fileNode.content, fileNode.format)}
325
- isReadOnly={true}
326
- language={getEditorLanguageForFormat(fileNode.format)}
327
- />
328
- )}
329
- {!(fileNode instanceof GenerationFile) && (
330
- <BlankPanelContent>No file selected</BlankPanelContent>
331
- )}
332
- </PanelContent>
333
- </div>
334
- </ResizablePanel>
335
- </ResizablePanelGroup>
336
- );
337
- },
338
- );
75
+ import { FileSystemViewer } from './FileSystemViewer.js';
339
76
 
340
77
  const FileGenerationScopeEditor = observer(
341
78
  (props: {
@@ -1299,7 +1036,7 @@ export const FileGenerationConfigurationEditor = observer(
1299
1036
  };
1300
1037
  const resetDefaultConfiguration = (): void => {
1301
1038
  debouncedRegenerate.cancel();
1302
- fileGenerationState.resetFileGeneration();
1039
+ fileGenerationState.resetGenerator();
1303
1040
  debouncedRegenerate()?.catch(applicationStore.alertUnhandledError);
1304
1041
  };
1305
1042
 
@@ -1474,10 +1211,9 @@ export const FileGenerationEditor = observer(() => {
1474
1211
  <ResizablePanelSplitter>
1475
1212
  <ResizablePanelSplitterLine color="var(--color-dark-grey-200)" />
1476
1213
  </ResizablePanelSplitter>
1477
-
1478
1214
  <ResizablePanel>
1479
- <GenerationResultViewer
1480
- fileGenerationState={
1215
+ <FileSystemViewer
1216
+ generatedFileState={
1481
1217
  fileGenerationEditorState.fileGenerationState
1482
1218
  }
1483
1219
  />
@@ -0,0 +1,296 @@
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 { Fragment } from 'react';
18
+ import { observer } from 'mobx-react-lite';
19
+ import { flowResult } from 'mobx';
20
+ import {
21
+ getTextContent,
22
+ getEditorLanguageForFormat,
23
+ } from '../../../../stores/editor-state/FileGenerationViewerState.js';
24
+ import { guaranteeNonNullable } from '@finos/legend-shared';
25
+ import {
26
+ type TreeNodeContainerProps,
27
+ type TreeData,
28
+ type TreeNodeData,
29
+ ResizablePanelGroup,
30
+ ResizablePanel,
31
+ ResizablePanelSplitter,
32
+ ResizablePanelSplitterLine,
33
+ clsx,
34
+ TreeView,
35
+ BlankPanelContent,
36
+ PanelLoadingIndicator,
37
+ RefreshIcon,
38
+ ChevronDownIcon,
39
+ ChevronRightIcon,
40
+ FolderOpenIcon,
41
+ FolderIcon,
42
+ FileCodeIcon,
43
+ PanelContent,
44
+ } from '@finos/legend-art';
45
+ import type { GeneratedFileStructureState } from '../../../../stores/editor-state/FileGenerationState.js';
46
+ import {
47
+ type FileSystemTreeNodeData,
48
+ FileSystem_Directory,
49
+ FileSystem_File,
50
+ getFileSystemChildNodes,
51
+ } from '../../../../stores/shared/FileSystemTreeUtils.js';
52
+ import {
53
+ TextInputEditor,
54
+ useApplicationStore,
55
+ } from '@finos/legend-application';
56
+ import type { DSL_Generation_LegendStudioApplicationPlugin_Extension } from '../../../../stores/DSL_Generation_LegendStudioApplicationPlugin_Extension.js';
57
+
58
+ export const FileSystemTreeNodeContainer: React.FC<
59
+ TreeNodeContainerProps<
60
+ FileSystemTreeNodeData,
61
+ {
62
+ selectedNode?: TreeNodeData | undefined;
63
+ }
64
+ >
65
+ > = (props) => {
66
+ const { node, level, stepPaddingInRem, onNodeSelect, innerProps } = props;
67
+ const { selectedNode } = innerProps;
68
+ const isSelected = selectedNode === node;
69
+ const isDirectory = node.fileNode instanceof FileSystem_Directory;
70
+ const expandIcon = !isDirectory ? (
71
+ <div />
72
+ ) : node.isOpen ? (
73
+ <ChevronDownIcon />
74
+ ) : (
75
+ <ChevronRightIcon />
76
+ );
77
+ const iconPackageColor = 'color--generated';
78
+ const nodeIcon = isDirectory ? (
79
+ node.isOpen ? (
80
+ <div className={iconPackageColor}>
81
+ <FolderOpenIcon />
82
+ </div>
83
+ ) : (
84
+ <div className={iconPackageColor}>
85
+ <FolderIcon />
86
+ </div>
87
+ )
88
+ ) : (
89
+ <div className="icon">
90
+ <FileCodeIcon />
91
+ </div>
92
+ );
93
+ const selectNode: React.MouseEventHandler = (event) => onNodeSelect?.(node);
94
+
95
+ return (
96
+ <div
97
+ className={clsx(
98
+ 'tree-view__node__container generation-result-viewer__explorer__package-tree__node__container',
99
+ {
100
+ 'generation-result-viewer__explorer__package-tree__node__container--selected':
101
+ isSelected,
102
+ },
103
+ )}
104
+ onClick={selectNode}
105
+ style={{
106
+ paddingLeft: `${level * (stepPaddingInRem ?? 1)}rem`,
107
+ display: 'flex',
108
+ }}
109
+ >
110
+ <div className="tree-view__node__icon generation-result-viewer__explorer__package-tree__node__icon">
111
+ <div className="generation-result-viewer__explorer__package-tree__node__icon__expand">
112
+ {expandIcon}
113
+ </div>
114
+ <div className="generation-result-viewer__explorer__package-tree__node__icon__type">
115
+ {nodeIcon}
116
+ </div>
117
+ </div>
118
+ <button
119
+ className="tree-view__node__label generation-result-viewer__explorer__package-tree__node__label"
120
+ tabIndex={-1}
121
+ title={node.fileNode.path}
122
+ >
123
+ {node.label}
124
+ </button>
125
+ </div>
126
+ );
127
+ };
128
+
129
+ export const FileSystemTree = observer(
130
+ (props: {
131
+ selectedNode?: TreeNodeData | undefined;
132
+ directoryTreeData: TreeData<FileSystemTreeNodeData>;
133
+ onNodeSelect: (node: FileSystemTreeNodeData) => void;
134
+ getFileElementTreeChildNodes: (
135
+ node: FileSystemTreeNodeData,
136
+ ) => FileSystemTreeNodeData[];
137
+ }) => {
138
+ const {
139
+ directoryTreeData,
140
+ onNodeSelect,
141
+ getFileElementTreeChildNodes,
142
+ selectedNode,
143
+ } = props;
144
+
145
+ return (
146
+ <TreeView
147
+ components={{
148
+ TreeNodeContainer: FileSystemTreeNodeContainer,
149
+ }}
150
+ treeData={directoryTreeData}
151
+ onNodeSelect={onNodeSelect}
152
+ getChildNodes={getFileElementTreeChildNodes}
153
+ innerProps={{
154
+ selectedNode: selectedNode,
155
+ }}
156
+ />
157
+ );
158
+ },
159
+ );
160
+
161
+ export const FileSystemExplorer = observer(
162
+ (props: { generatedFileState: GeneratedFileStructureState }) => {
163
+ const { generatedFileState } = props;
164
+ const fileSystemState = generatedFileState.fileSystemState;
165
+ const treeData = guaranteeNonNullable(fileSystemState.directoryTreeData);
166
+ const onNodeSelect = (node: FileSystemTreeNodeData): void =>
167
+ fileSystemState.onTreeNodeSelect(node, treeData);
168
+ const getMappingElementTreeChildNodes = (
169
+ node: FileSystemTreeNodeData,
170
+ ): FileSystemTreeNodeData[] => getFileSystemChildNodes(node, treeData);
171
+
172
+ if (!treeData.nodes.size) {
173
+ return <BlankPanelContent>No content</BlankPanelContent>;
174
+ }
175
+ return (
176
+ <div className="generation-result-viewer__explorer__content">
177
+ <FileSystemTree
178
+ selectedNode={fileSystemState.selectedNode}
179
+ directoryTreeData={treeData}
180
+ onNodeSelect={onNodeSelect}
181
+ getFileElementTreeChildNodes={getMappingElementTreeChildNodes}
182
+ />
183
+ </div>
184
+ );
185
+ },
186
+ );
187
+
188
+ export const FileSystemViewer = observer(
189
+ (props: { generatedFileState: GeneratedFileStructureState }) => {
190
+ const { generatedFileState } = props;
191
+ const applicationStore = useApplicationStore();
192
+ const selectedNode = generatedFileState.fileSystemState.selectedNode;
193
+ const fileNode = selectedNode?.fileNode;
194
+ const regenerate = applicationStore.guardUnhandledError(() =>
195
+ flowResult(generatedFileState.generate()),
196
+ );
197
+ const extraFileGenerationResultViewerActions =
198
+ fileNode instanceof FileSystem_File
199
+ ? generatedFileState.editorStore.pluginManager
200
+ .getApplicationPlugins()
201
+ .flatMap(
202
+ (plugin) =>
203
+ (
204
+ plugin as DSL_Generation_LegendStudioApplicationPlugin_Extension
205
+ ).getExtraFileGenerationResultViewerActionConfigurations?.() ??
206
+ [],
207
+ )
208
+ .map((config) => (
209
+ <Fragment key={config.key}>
210
+ {config.renderer(generatedFileState)}
211
+ </Fragment>
212
+ ))
213
+ : null;
214
+ return (
215
+ <ResizablePanelGroup orientation="vertical">
216
+ <ResizablePanel size={250} minSize={250}>
217
+ <div className="generation-result-viewer__side-bar">
218
+ <div className="panel generation-result-viewer__explorer">
219
+ <div className="panel__header">
220
+ <div className="panel__header__title">
221
+ <div className="panel__header__title__label">result</div>
222
+ </div>
223
+ <div className="panel__header__actions">
224
+ <button
225
+ className={clsx(
226
+ 'panel__header__action generation-result-viewer__regenerate-btn',
227
+ {
228
+ ' generation-result-viewer__regenerate-btn--loading':
229
+ generatedFileState.generatingAction.isInProgress,
230
+ },
231
+ )}
232
+ tabIndex={-1}
233
+ disabled={generatedFileState.generatingAction.isInProgress}
234
+ onClick={regenerate}
235
+ title="Regenerate"
236
+ >
237
+ <RefreshIcon />
238
+ </button>
239
+ </div>
240
+ </div>
241
+ <PanelContent>
242
+ <PanelLoadingIndicator
243
+ isLoading={generatedFileState.generatingAction.isInProgress}
244
+ />
245
+ {Boolean(
246
+ generatedFileState.fileSystemState.directoryTreeData,
247
+ ) && (
248
+ <FileSystemExplorer generatedFileState={generatedFileState} />
249
+ )}
250
+ {Boolean(
251
+ !generatedFileState.fileSystemState.directoryTreeData,
252
+ ) && (
253
+ <BlankPanelContent>
254
+ Generation result not available
255
+ </BlankPanelContent>
256
+ )}
257
+ </PanelContent>
258
+ </div>
259
+ </div>
260
+ </ResizablePanel>
261
+ <ResizablePanelSplitter>
262
+ <ResizablePanelSplitterLine color="var(--color-dark-grey-200)" />
263
+ </ResizablePanelSplitter>
264
+ <ResizablePanel>
265
+ <div className="panel generation-result-viewer__file">
266
+ <div className="panel__header">
267
+ {fileNode && !(fileNode instanceof FileSystem_Directory) && (
268
+ <div className="panel__header__title">
269
+ <div className="panel__header__title__label">file</div>
270
+ <div className="panel__header__title__content generation-result-viewer__file__header__name">
271
+ {fileNode.name}
272
+ </div>
273
+ </div>
274
+ )}
275
+ <div className="panel__header__actions">
276
+ {extraFileGenerationResultViewerActions}
277
+ </div>
278
+ </div>
279
+ <PanelContent>
280
+ {fileNode instanceof FileSystem_File && (
281
+ <TextInputEditor
282
+ inputValue={getTextContent(fileNode.content, fileNode.format)}
283
+ isReadOnly={true}
284
+ language={getEditorLanguageForFormat(fileNode.format)}
285
+ />
286
+ )}
287
+ {!(fileNode instanceof FileSystem_File) && (
288
+ <BlankPanelContent>No file selected</BlankPanelContent>
289
+ )}
290
+ </PanelContent>
291
+ </div>
292
+ </ResizablePanel>
293
+ </ResizablePanelGroup>
294
+ );
295
+ },
296
+ );