@finos/legend-application-studio 16.0.1 → 17.0.0

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 (358) hide show
  1. package/lib/application/LegendStudioApplicationConfig.d.ts +4 -3
  2. package/lib/application/LegendStudioApplicationConfig.d.ts.map +1 -1
  3. package/lib/application/LegendStudioApplicationConfig.js +9 -3
  4. package/lib/application/LegendStudioApplicationConfig.js.map +1 -1
  5. package/lib/components/EditorComponentTestUtils.d.ts.map +1 -1
  6. package/lib/components/EditorComponentTestUtils.js +2 -2
  7. package/lib/components/EditorComponentTestUtils.js.map +1 -1
  8. package/lib/components/EmbeddedQueryBuilder.d.ts.map +1 -1
  9. package/lib/components/EmbeddedQueryBuilder.js +2 -6
  10. package/lib/components/EmbeddedQueryBuilder.js.map +1 -1
  11. package/lib/components/LegendStudioApplication.js +1 -1
  12. package/lib/components/LegendStudioApplication.js.map +1 -1
  13. package/lib/components/LegendStudioBaseStoreProvider.d.ts +0 -2
  14. package/lib/components/LegendStudioBaseStoreProvider.d.ts.map +1 -1
  15. package/lib/components/LegendStudioBaseStoreProvider.js +2 -2
  16. package/lib/components/LegendStudioBaseStoreProvider.js.map +1 -1
  17. package/lib/components/editor/EditorStoreProvider.d.ts.map +1 -1
  18. package/lib/components/editor/EditorStoreProvider.js +2 -3
  19. package/lib/components/editor/EditorStoreProvider.js.map +1 -1
  20. package/lib/components/editor/edit-panel/FunctionEditor.js +1 -1
  21. package/lib/components/editor/edit-panel/FunctionEditor.js.map +1 -1
  22. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js +1 -1
  23. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js.map +1 -1
  24. package/lib/components/editor/edit-panel/GrammarTextEditor.js +4 -4
  25. package/lib/components/editor/edit-panel/GrammarTextEditor.js.map +1 -1
  26. package/lib/components/editor/edit-panel/RuntimeEditor.js +1 -1
  27. package/lib/components/editor/edit-panel/RuntimeEditor.js.map +1 -1
  28. package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.d.ts.map +1 -1
  29. package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.js +19 -4
  30. package/lib/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.js.map +1 -1
  31. package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.d.ts.map +1 -1
  32. package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.js +6 -6
  33. package/lib/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.js.map +1 -1
  34. package/lib/components/editor/edit-panel/data-editor/DataElementEditor.js +1 -1
  35. package/lib/components/editor/edit-panel/data-editor/DataElementEditor.js.map +1 -1
  36. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.d.ts.map +1 -1
  37. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.js +1 -1
  38. package/lib/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.js.map +1 -1
  39. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.d.ts +1 -1
  40. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.d.ts.map +1 -1
  41. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.js +2 -2
  42. package/lib/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.js.map +1 -1
  43. package/lib/components/editor/edit-panel/external-format-editor/BindingElementEditor.js +1 -1
  44. package/lib/components/editor/edit-panel/external-format-editor/BindingElementEditor.js.map +1 -1
  45. package/lib/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.d.ts.map +1 -1
  46. package/lib/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.js +1 -1
  47. package/lib/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.js.map +1 -1
  48. package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.js +1 -1
  49. package/lib/components/editor/edit-panel/mapping-editor/ClassMappingEditor.js.map +1 -1
  50. package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.js +1 -1
  51. package/lib/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.js.map +1 -1
  52. package/lib/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.js +2 -2
  53. package/lib/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.js.map +1 -1
  54. package/lib/components/editor/edit-panel/mapping-editor/FlatDataRecordTypeTree.js +1 -1
  55. package/lib/components/editor/edit-panel/mapping-editor/FlatDataRecordTypeTree.js.map +1 -1
  56. package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.js +1 -1
  57. package/lib/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.js.map +1 -1
  58. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.d.ts.map +1 -1
  59. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js +2 -5
  60. package/lib/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.js.map +1 -1
  61. package/lib/components/editor/edit-panel/mapping-editor/MappingExplorer.js +1 -1
  62. package/lib/components/editor/edit-panel/mapping-editor/MappingExplorer.js.map +1 -1
  63. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.d.ts.map +1 -1
  64. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js +2 -5
  65. package/lib/components/editor/edit-panel/mapping-editor/MappingTestEditor.js.map +1 -1
  66. package/lib/components/editor/edit-panel/mapping-editor/MappingTestsExplorer.js +1 -1
  67. package/lib/components/editor/edit-panel/mapping-editor/MappingTestsExplorer.js.map +1 -1
  68. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.d.ts.map +1 -1
  69. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.js +2 -2
  70. package/lib/components/editor/edit-panel/mapping-editor/NewMappingElementModal.js.map +1 -1
  71. package/lib/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.js +1 -1
  72. package/lib/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.js.map +1 -1
  73. package/lib/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.js +1 -1
  74. package/lib/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.js.map +1 -1
  75. package/lib/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.js +2 -2
  76. package/lib/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.js.map +1 -1
  77. package/lib/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.js +1 -1
  78. package/lib/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.js.map +1 -1
  79. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js +3 -2
  80. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js.map +1 -1
  81. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.d.ts.map +1 -1
  82. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.js +1 -1
  83. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.js.map +1 -1
  84. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js +1 -1
  85. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js.map +1 -1
  86. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  87. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js +1 -4
  88. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  89. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.d.ts.map +1 -1
  90. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.js +8 -8
  91. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.js.map +1 -1
  92. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.js +2 -1
  93. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.js.map +1 -1
  94. package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.js +2 -2
  95. package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.js.map +1 -1
  96. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js +2 -2
  97. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js.map +1 -1
  98. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js +1 -1
  99. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js.map +1 -1
  100. package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.js +1 -1
  101. package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.js.map +1 -1
  102. package/lib/components/editor/side-bar/CreateNewElementModal.d.ts.map +1 -1
  103. package/lib/components/editor/side-bar/CreateNewElementModal.js +5 -2
  104. package/lib/components/editor/side-bar/CreateNewElementModal.js.map +1 -1
  105. package/lib/components/editor/side-bar/Explorer.js +4 -4
  106. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  107. package/lib/components/editor/side-bar/LocalChanges.d.ts.map +1 -1
  108. package/lib/components/editor/side-bar/LocalChanges.js +1 -1
  109. package/lib/components/editor/side-bar/LocalChanges.js.map +1 -1
  110. package/lib/components/editor/side-bar/WorkspaceReview.js +1 -1
  111. package/lib/components/editor/side-bar/WorkspaceReview.js.map +1 -1
  112. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.d.ts.map +1 -1
  113. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.js +1 -1
  114. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.js.map +1 -1
  115. package/lib/components/shared/ElementIconUtils.js +1 -1
  116. package/lib/components/shared/ElementIconUtils.js.map +1 -1
  117. package/lib/components/{workspace-setup/ProjectSelector.d.ts → shared/ProjectSelectorUtils.d.ts} +9 -7
  118. package/lib/components/shared/ProjectSelectorUtils.d.ts.map +1 -0
  119. package/lib/components/shared/ProjectSelectorUtils.js +28 -0
  120. package/lib/components/shared/ProjectSelectorUtils.js.map +1 -0
  121. package/lib/components/shared/TypeTree.js +2 -2
  122. package/lib/components/shared/TypeTree.js.map +1 -1
  123. package/lib/components/{workspace-setup/WorkspaceSetupStoreProvider.d.ts → shared/WorkspaceSelectorUtils.d.ts} +8 -8
  124. package/lib/components/shared/WorkspaceSelectorUtils.d.ts.map +1 -0
  125. package/lib/components/shared/WorkspaceSelectorUtils.js +24 -0
  126. package/lib/components/shared/WorkspaceSelectorUtils.js.map +1 -0
  127. package/lib/components/workspace-setup/{ProjectCreateModal.d.ts → CreateProjectModal.d.ts} +1 -1
  128. package/lib/components/workspace-setup/CreateProjectModal.d.ts.map +1 -0
  129. package/lib/components/workspace-setup/{ProjectCreateModal.js → CreateProjectModal.js} +4 -4
  130. package/lib/components/workspace-setup/{ProjectCreateModal.js.map → CreateProjectModal.js.map} +1 -1
  131. package/lib/components/workspace-setup/CreateWorkspaceModal.d.ts +22 -0
  132. package/lib/components/workspace-setup/CreateWorkspaceModal.d.ts.map +1 -0
  133. package/lib/components/workspace-setup/CreateWorkspaceModal.js +67 -0
  134. package/lib/components/workspace-setup/CreateWorkspaceModal.js.map +1 -0
  135. package/lib/components/workspace-setup/WorkspaceSetup.d.ts +2 -0
  136. package/lib/components/workspace-setup/WorkspaceSetup.d.ts.map +1 -1
  137. package/lib/components/workspace-setup/WorkspaceSetup.js +96 -115
  138. package/lib/components/workspace-setup/WorkspaceSetup.js.map +1 -1
  139. package/lib/index.css +2 -2
  140. package/lib/index.css.map +1 -1
  141. package/lib/index.d.ts +9 -6
  142. package/lib/index.d.ts.map +1 -1
  143. package/lib/index.js +9 -7
  144. package/lib/index.js.map +1 -1
  145. package/lib/package.json +4 -4
  146. package/lib/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.d.ts → DSLGeneration_LegendStudioApplicationPlugin_Extension.d.ts} +5 -2
  147. package/lib/stores/DSLGeneration_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -0
  148. package/lib/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.js → DSLGeneration_LegendStudioApplicationPlugin_Extension.js} +1 -1
  149. package/lib/stores/DSLGeneration_LegendStudioApplicationPlugin_Extension.js.map +1 -0
  150. package/lib/stores/EditorGraphState.d.ts +1 -1
  151. package/lib/stores/EditorGraphState.d.ts.map +1 -1
  152. package/lib/stores/EditorGraphState.js +3 -2
  153. package/lib/stores/EditorGraphState.js.map +1 -1
  154. package/lib/stores/EditorStore.d.ts +6 -8
  155. package/lib/stores/EditorStore.d.ts.map +1 -1
  156. package/lib/stores/EditorStore.js +39 -13
  157. package/lib/stores/EditorStore.js.map +1 -1
  158. package/lib/stores/EditorStoreTestUtils.d.ts.map +1 -1
  159. package/lib/stores/EditorStoreTestUtils.js +1 -1
  160. package/lib/stores/EditorStoreTestUtils.js.map +1 -1
  161. package/lib/stores/ExplorerTreeState.d.ts +2 -2
  162. package/lib/stores/ExplorerTreeState.d.ts.map +1 -1
  163. package/lib/stores/ExplorerTreeState.js +2 -2
  164. package/lib/stores/ExplorerTreeState.js.map +1 -1
  165. package/lib/stores/LegendStudioAppEvent.d.ts.map +1 -1
  166. package/lib/stores/LegendStudioAppEvent.js +2 -0
  167. package/lib/stores/LegendStudioAppEvent.js.map +1 -1
  168. package/lib/stores/LegendStudioBaseStore.d.ts +2 -3
  169. package/lib/stores/LegendStudioBaseStore.d.ts.map +1 -1
  170. package/lib/stores/LegendStudioBaseStore.js +7 -2
  171. package/lib/stores/LegendStudioBaseStore.js.map +1 -1
  172. package/lib/stores/LegendStudioRouter.js +1 -1
  173. package/lib/stores/LegendStudioRouter.js.map +1 -1
  174. package/lib/stores/editor/NewElementState.d.ts.map +1 -1
  175. package/lib/stores/editor/NewElementState.js +5 -2
  176. package/lib/stores/editor/NewElementState.js.map +1 -1
  177. package/lib/stores/editor-state/FileGenerationState.d.ts +1 -1
  178. package/lib/stores/editor-state/FileGenerationState.d.ts.map +1 -1
  179. package/lib/stores/editor-state/FileGenerationState.js +1 -1
  180. package/lib/stores/editor-state/FileGenerationState.js.map +1 -1
  181. package/lib/stores/editor-state/FileGenerationViewerState.d.ts +1 -1
  182. package/lib/stores/editor-state/FileGenerationViewerState.d.ts.map +1 -1
  183. package/lib/stores/editor-state/GraphGenerationState.d.ts +1 -1
  184. package/lib/stores/editor-state/GraphGenerationState.d.ts.map +1 -1
  185. package/lib/stores/editor-state/GraphGenerationState.js +2 -2
  186. package/lib/stores/editor-state/GraphGenerationState.js.map +1 -1
  187. package/lib/stores/editor-state/ProjectConfigurationEditorState.d.ts.map +1 -1
  188. package/lib/stores/editor-state/ProjectConfigurationEditorState.js +3 -1
  189. package/lib/stores/editor-state/ProjectConfigurationEditorState.js.map +1 -1
  190. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.d.ts +1 -1
  191. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.d.ts.map +1 -1
  192. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.d.ts +1 -1
  193. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.d.ts.map +1 -1
  194. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.js +2 -2
  195. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.js.map +1 -1
  196. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js +1 -1
  197. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  198. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js +1 -1
  199. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js.map +1 -1
  200. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.d.ts.map +1 -1
  201. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js +1 -1
  202. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  203. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.d.ts +5 -8
  204. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.d.ts.map +1 -1
  205. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.js +15 -20
  206. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.js.map +1 -1
  207. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js +1 -1
  208. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js.map +1 -1
  209. package/lib/stores/graphModifier/DSLMapping_GraphModifierHelper.js +1 -1
  210. package/lib/stores/graphModifier/DSLMapping_GraphModifierHelper.js.map +1 -1
  211. package/lib/stores/project-viewer/ProjectViewerStore.d.ts +1 -2
  212. package/lib/stores/project-viewer/ProjectViewerStore.d.ts.map +1 -1
  213. package/lib/stores/project-viewer/ProjectViewerStore.js +2 -1
  214. package/lib/stores/project-viewer/ProjectViewerStore.js.map +1 -1
  215. package/lib/stores/shared/{DnDUtil.d.ts → DnDUtils.d.ts} +2 -2
  216. package/lib/stores/shared/DnDUtils.d.ts.map +1 -0
  217. package/lib/stores/shared/{DnDUtil.js → DnDUtils.js} +1 -1
  218. package/lib/stores/shared/DnDUtils.js.map +1 -0
  219. package/lib/stores/shared/{FileGenerationTreeUtil.d.ts → FileGenerationTreeUtils.d.ts} +1 -1
  220. package/lib/stores/shared/FileGenerationTreeUtils.d.ts.map +1 -0
  221. package/lib/stores/shared/{FileGenerationTreeUtil.js → FileGenerationTreeUtils.js} +1 -1
  222. package/lib/stores/shared/FileGenerationTreeUtils.js.map +1 -0
  223. package/lib/stores/shared/{MockDataUtil.d.ts → MockDataUtils.d.ts} +1 -1
  224. package/lib/stores/shared/MockDataUtils.d.ts.map +1 -0
  225. package/lib/stores/shared/{MockDataUtil.js → MockDataUtils.js} +2 -2
  226. package/lib/stores/shared/MockDataUtils.js.map +1 -0
  227. package/lib/stores/shared/{ModelUtil.d.ts → ModelClassifierUtils.d.ts} +1 -1
  228. package/lib/stores/shared/ModelClassifierUtils.d.ts.map +1 -0
  229. package/lib/stores/shared/{ModelUtil.js → ModelClassifierUtils.js} +1 -1
  230. package/lib/stores/shared/ModelClassifierUtils.js.map +1 -0
  231. package/lib/stores/shared/{PackageTreeUtil.d.ts → PackageTreeUtils.d.ts} +2 -2
  232. package/lib/stores/shared/PackageTreeUtils.d.ts.map +1 -0
  233. package/lib/stores/shared/{PackageTreeUtil.js → PackageTreeUtils.js} +2 -2
  234. package/lib/stores/shared/PackageTreeUtils.js.map +1 -0
  235. package/lib/stores/shared/{TreeUtil.d.ts → TreeUtils.d.ts} +2 -2
  236. package/lib/stores/shared/TreeUtils.d.ts.map +1 -0
  237. package/lib/stores/shared/{TreeUtil.js → TreeUtils.js} +1 -1
  238. package/lib/stores/shared/TreeUtils.js.map +1 -0
  239. package/lib/stores/shared/testable/TestableUtils.js +1 -1
  240. package/lib/stores/shared/testable/TestableUtils.js.map +1 -1
  241. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts +18 -33
  242. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts.map +1 -1
  243. package/lib/stores/workspace-setup/WorkspaceSetupStore.js +137 -133
  244. package/lib/stores/workspace-setup/WorkspaceSetupStore.js.map +1 -1
  245. package/package.json +13 -13
  246. package/src/application/LegendStudioApplicationConfig.ts +12 -5
  247. package/src/components/EditorComponentTestUtils.tsx +1 -6
  248. package/src/components/EmbeddedQueryBuilder.tsx +2 -8
  249. package/src/components/LegendStudioApplication.tsx +1 -1
  250. package/src/components/LegendStudioBaseStoreProvider.tsx +2 -5
  251. package/src/components/editor/EditorStoreProvider.tsx +1 -6
  252. package/src/components/editor/edit-panel/FunctionEditor.tsx +1 -1
  253. package/src/components/editor/edit-panel/GenerationSpecificationEditor.tsx +5 -5
  254. package/src/components/editor/edit-panel/GrammarTextEditor.tsx +4 -4
  255. package/src/components/editor/edit-panel/RuntimeEditor.tsx +2 -2
  256. package/src/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.tsx +31 -3
  257. package/src/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.tsx +16 -11
  258. package/src/components/editor/edit-panel/data-editor/DataElementEditor.tsx +1 -1
  259. package/src/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.tsx +2 -3
  260. package/src/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.tsx +4 -4
  261. package/src/components/editor/edit-panel/external-format-editor/BindingElementEditor.tsx +1 -1
  262. package/src/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.tsx +0 -1
  263. package/src/components/editor/edit-panel/mapping-editor/ClassMappingEditor.tsx +1 -1
  264. package/src/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.tsx +1 -1
  265. package/src/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.tsx +2 -2
  266. package/src/components/editor/edit-panel/mapping-editor/FlatDataRecordTypeTree.tsx +2 -2
  267. package/src/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.tsx +1 -1
  268. package/src/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.tsx +2 -14
  269. package/src/components/editor/edit-panel/mapping-editor/MappingExplorer.tsx +1 -1
  270. package/src/components/editor/edit-panel/mapping-editor/MappingTestEditor.tsx +1 -9
  271. package/src/components/editor/edit-panel/mapping-editor/MappingTestsExplorer.tsx +1 -1
  272. package/src/components/editor/edit-panel/mapping-editor/NewMappingElementModal.tsx +2 -6
  273. package/src/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.tsx +1 -1
  274. package/src/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.tsx +1 -1
  275. package/src/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.tsx +2 -2
  276. package/src/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.tsx +1 -1
  277. package/src/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.tsx +5 -5
  278. package/src/components/editor/edit-panel/service-editor/NewServiceModal.tsx +2 -3
  279. package/src/components/editor/edit-panel/service-editor/ServiceExecutionEditor.tsx +1 -1
  280. package/src/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.tsx +1 -8
  281. package/src/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.tsx +15 -10
  282. package/src/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.tsx +1 -1
  283. package/src/components/editor/edit-panel/uml-editor/AssociationEditor.tsx +2 -2
  284. package/src/components/editor/edit-panel/uml-editor/ClassEditor.tsx +2 -2
  285. package/src/components/editor/edit-panel/uml-editor/EnumerationEditor.tsx +1 -1
  286. package/src/components/editor/edit-panel/uml-editor/PropertyEditor.tsx +1 -1
  287. package/src/components/editor/side-bar/CreateNewElementModal.tsx +5 -2
  288. package/src/components/editor/side-bar/Explorer.tsx +5 -5
  289. package/src/components/editor/side-bar/LocalChanges.tsx +1 -1
  290. package/src/components/editor/side-bar/WorkspaceReview.tsx +1 -1
  291. package/src/components/editor/side-bar/WorkspaceSyncConflictResolver.tsx +2 -8
  292. package/src/components/shared/ElementIconUtils.tsx +1 -1
  293. package/src/components/shared/ProjectSelectorUtils.tsx +63 -0
  294. package/src/components/shared/TypeTree.tsx +3 -3
  295. package/src/components/shared/WorkspaceSelectorUtils.tsx +45 -0
  296. package/src/components/workspace-setup/{ProjectCreateModal.tsx → CreateProjectModal.tsx} +7 -3
  297. package/src/components/workspace-setup/CreateWorkspaceModal.tsx +178 -0
  298. package/src/components/workspace-setup/WorkspaceSetup.tsx +300 -346
  299. package/src/index.ts +9 -9
  300. package/src/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.ts → DSLGeneration_LegendStudioApplicationPlugin_Extension.ts} +4 -1
  301. package/src/stores/EditorGraphState.ts +2 -3
  302. package/src/stores/EditorStore.ts +52 -19
  303. package/src/stores/EditorStoreTestUtils.ts +0 -1
  304. package/src/stores/ExplorerTreeState.ts +3 -3
  305. package/src/stores/LegendStudioAppEvent.ts +3 -0
  306. package/src/stores/LegendStudioBaseStore.ts +7 -4
  307. package/src/stores/LegendStudioRouter.ts +1 -1
  308. package/src/stores/editor/NewElementState.ts +5 -1
  309. package/src/stores/editor-state/FileGenerationState.ts +1 -1
  310. package/src/stores/editor-state/FileGenerationViewerState.ts +1 -1
  311. package/src/stores/editor-state/GraphGenerationState.ts +6 -6
  312. package/src/stores/editor-state/ProjectConfigurationEditorState.ts +2 -1
  313. package/src/stores/editor-state/element-editor-state/RuntimeEditorState.ts +1 -1
  314. package/src/stores/editor-state/element-editor-state/mapping/MappingEditorState.ts +2 -2
  315. package/src/stores/editor-state/element-editor-state/mapping/MappingExecutionState.ts +1 -1
  316. package/src/stores/editor-state/element-editor-state/mapping/MappingTestState.ts +1 -1
  317. package/src/stores/editor-state/element-editor-state/service/ServiceExecutionState.ts +1 -2
  318. package/src/stores/editor-state/element-editor-state/service/ServiceRegistrationState.ts +33 -32
  319. package/src/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.ts +1 -1
  320. package/src/stores/graphModifier/DSLMapping_GraphModifierHelper.ts +1 -1
  321. package/src/stores/project-viewer/ProjectViewerStore.ts +6 -6
  322. package/src/stores/shared/{DnDUtil.ts → DnDUtils.ts} +1 -1
  323. package/src/stores/shared/{FileGenerationTreeUtil.ts → FileGenerationTreeUtils.ts} +0 -0
  324. package/src/stores/shared/{MockDataUtil.ts → MockDataUtils.ts} +4 -1
  325. package/src/stores/shared/{ModelUtil.ts → ModelClassifierUtils.ts} +0 -0
  326. package/src/stores/shared/{PackageTreeUtil.ts → PackageTreeUtils.ts} +2 -2
  327. package/src/stores/shared/{TreeUtil.ts → TreeUtils.ts} +1 -1
  328. package/src/stores/shared/testable/TestableUtils.ts +1 -1
  329. package/src/stores/workspace-setup/WorkspaceSetupStore.ts +208 -190
  330. package/tsconfig.json +12 -12
  331. package/lib/components/workspace-setup/ProjectCreateModal.d.ts.map +0 -1
  332. package/lib/components/workspace-setup/ProjectSelector.d.ts.map +0 -1
  333. package/lib/components/workspace-setup/ProjectSelector.js +0 -65
  334. package/lib/components/workspace-setup/ProjectSelector.js.map +0 -1
  335. package/lib/components/workspace-setup/WorkspaceSelector.d.ts +0 -22
  336. package/lib/components/workspace-setup/WorkspaceSelector.d.ts.map +0 -1
  337. package/lib/components/workspace-setup/WorkspaceSelector.js +0 -57
  338. package/lib/components/workspace-setup/WorkspaceSelector.js.map +0 -1
  339. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.d.ts.map +0 -1
  340. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.js +0 -34
  341. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.js.map +0 -1
  342. package/lib/stores/DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.d.ts.map +0 -1
  343. package/lib/stores/DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.js.map +0 -1
  344. package/lib/stores/shared/DnDUtil.d.ts.map +0 -1
  345. package/lib/stores/shared/DnDUtil.js.map +0 -1
  346. package/lib/stores/shared/FileGenerationTreeUtil.d.ts.map +0 -1
  347. package/lib/stores/shared/FileGenerationTreeUtil.js.map +0 -1
  348. package/lib/stores/shared/MockDataUtil.d.ts.map +0 -1
  349. package/lib/stores/shared/MockDataUtil.js.map +0 -1
  350. package/lib/stores/shared/ModelUtil.d.ts.map +0 -1
  351. package/lib/stores/shared/ModelUtil.js.map +0 -1
  352. package/lib/stores/shared/PackageTreeUtil.d.ts.map +0 -1
  353. package/lib/stores/shared/PackageTreeUtil.js.map +0 -1
  354. package/lib/stores/shared/TreeUtil.d.ts.map +0 -1
  355. package/lib/stores/shared/TreeUtil.js.map +0 -1
  356. package/src/components/workspace-setup/ProjectSelector.tsx +0 -148
  357. package/src/components/workspace-setup/WorkspaceSelector.tsx +0 -135
  358. package/src/components/workspace-setup/WorkspaceSetupStoreProvider.tsx +0 -56
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { observable, action, makeAutoObservable, flowResult } from 'mobx';
17
+ import { observable, action, flowResult, makeObservable, flow } from 'mobx';
18
18
  import { LEGEND_STUDIO_APP_EVENT } from '../LegendStudioAppEvent.js';
19
19
  import {
20
20
  type GeneratorFn,
@@ -22,6 +22,7 @@ import {
22
22
  assertErrorThrown,
23
23
  LogEvent,
24
24
  ActionState,
25
+ IllegalStateError,
25
26
  } from '@finos/legend-shared';
26
27
  import { generateSetupRoute } from '../LegendStudioRouter.js';
27
28
  import {
@@ -31,7 +32,6 @@ import {
31
32
  Project,
32
33
  Review,
33
34
  Workspace,
34
- WorkspaceAccessType,
35
35
  } from '@finos/legend-server-sdlc';
36
36
  import type { LegendStudioApplicationStore } from '../LegendStudioBaseStore.js';
37
37
 
@@ -41,159 +41,242 @@ interface ImportProjectSuccessReport {
41
41
  reviewUrl: string;
42
42
  }
43
43
 
44
- export interface ProjectOption {
45
- label: string;
46
- value: string;
47
- }
48
-
49
- const buildProjectOption = (project: Project): ProjectOption => ({
50
- label: project.name,
51
- value: project.projectId,
52
- });
53
-
54
- export interface WorkspaceOption {
55
- label: string;
56
- value: Workspace;
57
- __isNew__?: boolean | undefined;
58
- }
59
-
60
- const buildWorkspaceOption = (workspace: Workspace): WorkspaceOption => ({
61
- label: workspace.workspaceId,
62
- value: workspace,
63
- });
64
-
65
- export interface WorkspaceIdentifier {
66
- workspaceId: string;
67
- workspaceType: WorkspaceType;
68
- }
44
+ const MINIMUM_PROJECT_LOADER_SEARCH_LENGTH = 3;
45
+ const DEFAULT_PROJECT_LOADER_LIMIT = 10;
69
46
 
70
47
  export class WorkspaceSetupStore {
71
48
  applicationStore: LegendStudioApplicationStore;
72
49
  sdlcServerClient: SDLCServerClient;
50
+ initState = ActionState.create();
73
51
 
74
- currentProjectId?: string | undefined;
75
- currentWorkspaceIdentifier?: WorkspaceIdentifier | undefined;
76
- projects?: Map<string, Project> | undefined;
77
- workspacesByProject = new Map<string, Map<string, Workspace>>();
78
- loadWorkspacesState = ActionState.create();
79
- createWorkspaceState = ActionState.create();
80
- createOrImportProjectState = ActionState.create();
52
+ projects: Project[] = [];
53
+ currentProject?: Project | undefined;
81
54
  loadProjectsState = ActionState.create();
55
+ createOrImportProjectState = ActionState.create();
56
+ importProjectSuccessReport?: ImportProjectSuccessReport | undefined;
82
57
  showCreateProjectModal = false;
58
+
59
+ workspaces: Workspace[] = [];
60
+ currentWorkspace?: Workspace | undefined;
61
+ loadWorkspacesState = ActionState.create();
62
+ createWorkspaceState = ActionState.create();
83
63
  showCreateWorkspaceModal = false;
84
- importProjectSuccessReport?: ImportProjectSuccessReport | undefined;
85
64
 
86
65
  constructor(
87
66
  applicationStore: LegendStudioApplicationStore,
88
67
  sdlcServerClient: SDLCServerClient,
89
68
  ) {
90
- makeAutoObservable(this, {
91
- applicationStore: false,
92
- sdlcServerClient: false,
69
+ makeObservable(this, {
70
+ projects: observable,
71
+ currentProject: observable,
72
+ importProjectSuccessReport: observable,
73
+ showCreateProjectModal: observable,
74
+ workspaces: observable,
75
+ currentWorkspace: observable,
76
+ showCreateWorkspaceModal: observable,
93
77
  setShowCreateProjectModal: action,
94
78
  setShowCreateWorkspaceModal: action,
95
- setCurrentProjectId: action,
96
- setCurrentWorkspaceIdentifier: action,
97
79
  setImportProjectSuccessReport: action,
80
+ changeWorkspace: action,
81
+ resetProject: action,
82
+ resetWorkspace: action,
83
+ initialize: flow,
84
+ loadProjects: flow,
85
+ changeProject: flow,
86
+ createProject: flow,
87
+ importProject: flow,
88
+ createWorkspace: flow,
98
89
  });
99
90
 
100
91
  this.applicationStore = applicationStore;
101
92
  this.sdlcServerClient = sdlcServerClient;
102
93
  }
103
94
 
104
- get currentProject(): Project | undefined {
105
- return this.projects && this.currentProjectId
106
- ? this.projects.get(this.currentProjectId)
107
- : undefined;
108
- }
109
-
110
- get currentProjectWorkspaces(): Map<string, Workspace> | undefined {
111
- return this.currentProjectId
112
- ? this.workspacesByProject.get(this.currentProjectId)
113
- : undefined;
114
- }
115
-
116
- get currentWorkspace(): Workspace | undefined {
117
- return this.currentProjectWorkspaces && this.currentWorkspaceCompositeId
118
- ? this.currentProjectWorkspaces.get(this.currentWorkspaceCompositeId)
119
- : undefined;
95
+ setShowCreateProjectModal(val: boolean): void {
96
+ this.showCreateProjectModal = val;
120
97
  }
121
98
 
122
- get currentWorkspaceCompositeId(): string | undefined {
123
- return this.currentWorkspaceIdentifier
124
- ? this.buildWorkspaceCompositeId(this.currentWorkspaceIdentifier)
125
- : undefined;
99
+ setShowCreateWorkspaceModal(val: boolean): void {
100
+ this.showCreateWorkspaceModal = val;
126
101
  }
127
102
 
128
- init(
129
- workspaceId: string | undefined,
130
- groupWorkspaceId: string | undefined,
103
+ setImportProjectSuccessReport(
104
+ importProjectSuccessReport: ImportProjectSuccessReport | undefined,
131
105
  ): void {
132
- if (workspaceId) {
133
- this.setCurrentWorkspaceIdentifier({
134
- workspaceId,
135
- workspaceType: WorkspaceType.USER,
136
- });
137
- } else if (groupWorkspaceId) {
138
- this.setCurrentWorkspaceIdentifier({
139
- workspaceId: groupWorkspaceId,
140
- workspaceType: WorkspaceType.GROUP,
141
- });
142
- } else {
143
- this.setCurrentWorkspaceIdentifier(undefined);
144
- }
106
+ this.importProjectSuccessReport = importProjectSuccessReport;
145
107
  }
146
108
 
147
- setShowCreateProjectModal(val: boolean): void {
148
- this.showCreateProjectModal = val;
109
+ resetProject(): void {
110
+ this.currentProject = undefined;
111
+ this.workspaces = [];
112
+ this.currentWorkspace = undefined;
113
+ this.applicationStore.navigator.goTo(
114
+ generateSetupRoute(undefined, undefined, undefined),
115
+ );
149
116
  }
150
117
 
151
- setShowCreateWorkspaceModal(val: boolean): void {
152
- this.showCreateWorkspaceModal = val;
118
+ resetWorkspace(): void {
119
+ this.currentWorkspace = undefined;
120
+ if (this.currentProject) {
121
+ this.applicationStore.navigator.goTo(
122
+ generateSetupRoute(this.currentProject.projectId, undefined, undefined),
123
+ );
124
+ }
153
125
  }
154
126
 
155
- setCurrentProjectId(id: string | undefined): void {
156
- this.currentProjectId = id;
157
- }
127
+ *initialize(
128
+ projectId: string | undefined,
129
+ workspaceId: string | undefined,
130
+ groupWorkspaceId: string | undefined,
131
+ ): GeneratorFn<void> {
132
+ if (!this.initState.isInInitialState) {
133
+ return;
134
+ }
135
+ this.initState.inProgress();
158
136
 
159
- setCurrentWorkspaceIdentifier(val: WorkspaceIdentifier | undefined): void {
160
- this.currentWorkspaceIdentifier = val;
161
- }
137
+ try {
138
+ if (projectId) {
139
+ let project: Project;
140
+ try {
141
+ project = Project.serialization.fromJson(
142
+ (yield this.sdlcServerClient.getProject(
143
+ projectId,
144
+ )) as PlainObject<Project>,
145
+ );
146
+ } catch {
147
+ this.applicationStore.navigator.goTo(generateSetupRoute(undefined));
148
+ this.initState.pass();
149
+ return;
150
+ }
151
+ yield flowResult(
152
+ this.changeProject(
153
+ project,
154
+ workspaceId
155
+ ? { workspaceId: workspaceId, workspaceType: WorkspaceType.USER }
156
+ : groupWorkspaceId
157
+ ? {
158
+ workspaceId: groupWorkspaceId,
159
+ workspaceType: WorkspaceType.GROUP,
160
+ }
161
+ : undefined,
162
+ ),
163
+ );
164
+ }
162
165
 
163
- setImportProjectSuccessReport(
164
- importProjectSuccessReport: ImportProjectSuccessReport | undefined,
165
- ): void {
166
- this.importProjectSuccessReport = importProjectSuccessReport;
166
+ this.initState.pass();
167
+ } catch (error) {
168
+ assertErrorThrown(error);
169
+ this.applicationStore.log.error(
170
+ LogEvent.create(LEGEND_STUDIO_APP_EVENT.DEPOT_MANAGER_FAILURE),
171
+ error,
172
+ );
173
+ this.applicationStore.notifyError(error);
174
+ this.initState.fail();
175
+ }
167
176
  }
168
177
 
169
- *fetchProjects(): GeneratorFn<void> {
178
+ *loadProjects(searchText: string): GeneratorFn<void> {
179
+ const isValidSearchString =
180
+ searchText.length >= MINIMUM_PROJECT_LOADER_SEARCH_LENGTH;
170
181
  this.loadProjectsState.inProgress();
171
182
  try {
172
- const projects = (
183
+ this.projects = (
173
184
  (yield this.sdlcServerClient.getProjects(
174
185
  undefined,
186
+ isValidSearchString ? searchText : undefined,
175
187
  undefined,
176
- undefined,
177
- undefined,
188
+ DEFAULT_PROJECT_LOADER_LIMIT,
178
189
  )) as PlainObject<Project>[]
179
190
  ).map((v) => Project.serialization.fromJson(v));
180
- const projectIndex = observable<string, Project>(new Map());
181
- projects.forEach((project) =>
182
- projectIndex.set(project.projectId, project),
183
- );
184
- this.projects = projectIndex;
185
191
  this.loadProjectsState.pass();
192
+ } catch (error) {
193
+ assertErrorThrown(error);
194
+ this.applicationStore.notifyError(error);
195
+ this.loadProjectsState.fail();
196
+ }
197
+ }
198
+
199
+ *changeProject(
200
+ project: Project,
201
+ workspaceInfo?:
202
+ | {
203
+ workspaceId: string;
204
+ workspaceType: WorkspaceType;
205
+ }
206
+ | undefined,
207
+ ): GeneratorFn<void> {
208
+ this.loadWorkspacesState.inProgress();
209
+
210
+ try {
211
+ this.currentProject = project;
212
+
213
+ const workspacesInConflictResolutionIds = (
214
+ (yield this.sdlcServerClient.getWorkspacesInConflictResolutionMode(
215
+ project.projectId,
216
+ )) as Workspace[]
217
+ ).map((workspace) => workspace.workspaceId);
218
+
219
+ this.workspaces = (
220
+ (yield this.sdlcServerClient.getWorkspaces(
221
+ project.projectId,
222
+ )) as PlainObject<Workspace>[]
223
+ )
224
+ .map((v) => Workspace.serialization.fromJson(v))
225
+ .filter(
226
+ // NOTE we don't handle workspaces that only have conflict resolution but no standard workspace
227
+ // since that indicates bad state of the SDLC server
228
+ (workspace) =>
229
+ !workspacesInConflictResolutionIds.includes(workspace.workspaceId),
230
+ );
231
+
232
+ if (workspaceInfo) {
233
+ const matchingWorkspace = this.workspaces.find(
234
+ (workspace) =>
235
+ workspace.workspaceType === workspaceInfo.workspaceType &&
236
+ workspace.workspaceId === workspaceInfo.workspaceId,
237
+ );
238
+ if (matchingWorkspace) {
239
+ this.changeWorkspace(matchingWorkspace);
240
+ } else {
241
+ this.applicationStore.navigator.goTo(
242
+ generateSetupRoute(project.projectId),
243
+ );
244
+ }
245
+ } else {
246
+ this.currentWorkspace = undefined;
247
+ this.applicationStore.navigator.goTo(
248
+ generateSetupRoute(project.projectId),
249
+ );
250
+ }
251
+
252
+ this.loadWorkspacesState.pass();
186
253
  } catch (error) {
187
254
  assertErrorThrown(error);
188
255
  this.applicationStore.log.error(
189
- LogEvent.create(LEGEND_STUDIO_APP_EVENT.WORKSPACE_SETUP_FAILURE),
256
+ LogEvent.create(LEGEND_STUDIO_APP_EVENT.DEPOT_MANAGER_FAILURE),
190
257
  error,
191
258
  );
192
259
  this.applicationStore.notifyError(error);
193
- this.loadProjectsState.fail();
260
+ this.loadWorkspacesState.fail();
194
261
  }
195
262
  }
196
263
 
264
+ changeWorkspace(workspace: Workspace): void {
265
+ if (!this.currentProject) {
266
+ throw new IllegalStateError(
267
+ `Can't change workspace: project is not specified`,
268
+ );
269
+ }
270
+ this.currentWorkspace = workspace;
271
+ this.applicationStore.navigator.goTo(
272
+ generateSetupRoute(
273
+ this.currentProject.projectId,
274
+ workspace.workspaceId,
275
+ workspace.workspaceType,
276
+ ),
277
+ );
278
+ }
279
+
197
280
  *createProject(
198
281
  name: string,
199
282
  description: string,
@@ -215,11 +298,9 @@ export class WorkspaceSetupStore {
215
298
  this.applicationStore.notifySuccess(
216
299
  `Project '${name}' is succesfully created`,
217
300
  );
218
- yield flowResult(this.fetchProjects());
219
- this.projects?.set(createdProject.projectId, createdProject);
220
- this.applicationStore.navigator.goTo(
221
- generateSetupRoute(createdProject.projectId),
222
- );
301
+
302
+ yield flowResult(this.changeProject(createdProject));
303
+
223
304
  this.setShowCreateProjectModal(false);
224
305
  } catch (error) {
225
306
  assertErrorThrown(error);
@@ -254,9 +335,8 @@ export class WorkspaceSetupStore {
254
335
  projectId: report.project.projectId,
255
336
  reviewUrl: importReview.webURL,
256
337
  });
257
- yield flowResult(this.fetchProjects());
258
- this.projects?.set(report.project.projectId, report.project);
259
- this.setCurrentProjectId(report.project.projectId);
338
+
339
+ yield flowResult(this.changeProject(report.project));
260
340
  } catch (error) {
261
341
  assertErrorThrown(error);
262
342
  this.applicationStore.notifyError(error);
@@ -265,66 +345,6 @@ export class WorkspaceSetupStore {
265
345
  }
266
346
  }
267
347
 
268
- get projectOptions(): ProjectOption[] {
269
- return this.projects
270
- ? Array.from(this.projects.values()).map(buildProjectOption)
271
- : [];
272
- }
273
-
274
- get currentProjectWorkspaceOptions(): WorkspaceOption[] {
275
- return this.currentProjectWorkspaces
276
- ? Array.from(this.currentProjectWorkspaces.values()).map(
277
- buildWorkspaceOption,
278
- )
279
- : [];
280
- }
281
-
282
- *fetchWorkspaces(projectId: string): GeneratorFn<void> {
283
- this.loadWorkspacesState.inProgress();
284
- try {
285
- const workspacesInConflictResolutionIds = (
286
- (yield this.sdlcServerClient.getWorkspacesInConflictResolutionMode(
287
- projectId,
288
- )) as Workspace[]
289
- ).map((workspace) => workspace.workspaceId);
290
- const workspaceIndex = observable<string, Workspace>(new Map());
291
-
292
- (
293
- (yield this.sdlcServerClient.getWorkspaces(
294
- projectId,
295
- )) as PlainObject<Workspace>[]
296
- )
297
- .map((v) => Workspace.serialization.fromJson(v))
298
- .forEach((workspace) => {
299
- // NOTE we don't handle workspaces that only have conflict resolution but no standard workspace
300
- // since that indicates bad state of the SDLC server
301
- if (
302
- workspacesInConflictResolutionIds.includes(workspace.workspaceId)
303
- ) {
304
- workspace.accessType = WorkspaceAccessType.CONFLICT_RESOLUTION;
305
- }
306
- workspaceIndex.set(
307
- this.buildWorkspaceCompositeId(workspace),
308
- workspace,
309
- );
310
- });
311
- this.workspacesByProject.set(projectId, workspaceIndex);
312
- } catch (error) {
313
- assertErrorThrown(error);
314
- // TODO handle error when fetching workspaces for an individual project
315
- this.applicationStore.log.error(
316
- LogEvent.create(LEGEND_STUDIO_APP_EVENT.WORKSPACE_SETUP_FAILURE),
317
- error,
318
- );
319
- } finally {
320
- this.loadWorkspacesState.reset();
321
- }
322
- }
323
-
324
- buildWorkspaceCompositeId(workspace: WorkspaceIdentifier): string {
325
- return `${workspace.workspaceType}/${workspace.workspaceId}`;
326
- }
327
-
328
348
  *createWorkspace(
329
349
  projectId: string,
330
350
  workspaceId: string,
@@ -332,35 +352,32 @@ export class WorkspaceSetupStore {
332
352
  ): GeneratorFn<void> {
333
353
  this.createWorkspaceState.inProgress();
334
354
  try {
335
- const workspace = Workspace.serialization.fromJson(
355
+ const newWorkspace = Workspace.serialization.fromJson(
336
356
  (yield this.sdlcServerClient.createWorkspace(
337
357
  projectId,
338
358
  workspaceId,
339
359
  workspaceType,
340
360
  )) as PlainObject<Workspace>,
341
361
  );
342
- const existingWorkspaceForProject: Map<string, Workspace> | undefined =
343
- this.workspacesByProject.get(projectId);
344
- if (existingWorkspaceForProject) {
345
- existingWorkspaceForProject.set(
346
- this.buildWorkspaceCompositeId(workspace),
347
- workspace,
348
- );
349
- } else {
350
- const workspaceIndex = observable<string, Workspace>(new Map());
351
- workspaceIndex.set(
352
- this.buildWorkspaceCompositeId(workspace),
353
- workspace,
354
- );
355
- this.workspacesByProject.set(projectId, workspaceIndex);
356
- }
362
+
357
363
  this.applicationStore.notifySuccess(
358
- `Workspace '${workspace.workspaceId}' is succesfully created`,
364
+ `Workspace '${newWorkspace.workspaceId}' is succesfully created`,
359
365
  );
360
- this.setCurrentProjectId(projectId);
361
- this.setCurrentWorkspaceIdentifier(workspace);
366
+
367
+ const matchingWorkspace = this.workspaces.find(
368
+ (workspace) =>
369
+ workspace.workspaceId === newWorkspace.workspaceId &&
370
+ workspace.workspaceType === newWorkspace.workspaceType,
371
+ );
372
+ const newWorkspaceToSelect = matchingWorkspace ?? newWorkspace;
373
+ this.changeWorkspace(newWorkspaceToSelect);
362
374
  this.setShowCreateWorkspaceModal(false);
363
- this.createWorkspaceState.pass();
375
+
376
+ // NOTE: do this after closing the modal to not interfere
377
+ // with validation of existing workspaces in create workspace modal
378
+ if (!matchingWorkspace) {
379
+ this.workspaces.push(newWorkspace);
380
+ }
364
381
  } catch (error) {
365
382
  assertErrorThrown(error);
366
383
  this.applicationStore.log.error(
@@ -368,7 +385,8 @@ export class WorkspaceSetupStore {
368
385
  error,
369
386
  );
370
387
  this.applicationStore.notifyError(error);
371
- this.createWorkspaceState.fail();
388
+ } finally {
389
+ this.createWorkspaceState.reset();
372
390
  }
373
391
  }
374
392
  }
package/tsconfig.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "./src/stores/ChangeDetectionEvent.ts",
44
44
  "./src/stores/ChangeDetectionState.ts",
45
45
  "./src/stores/DSLData_LegendStudioApplicationPlugin_Extension.ts",
46
- "./src/stores/DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.ts",
46
+ "./src/stores/DSLGeneration_LegendStudioApplicationPlugin_Extension.ts",
47
47
  "./src/stores/DSLMapping_LegendStudioApplicationPlugin_Extension.ts",
48
48
  "./src/stores/DSLService_LegendStudioApplicationPlugin_Extension.ts",
49
49
  "./src/stores/EditorConfig.ts",
@@ -126,12 +126,12 @@
126
126
  "./src/stores/graphModifier/ValueSpecificationGraphModifierHelper.ts",
127
127
  "./src/stores/project-viewer/ProjectViewerEditorMode.ts",
128
128
  "./src/stores/project-viewer/ProjectViewerStore.ts",
129
- "./src/stores/shared/DnDUtil.ts",
130
- "./src/stores/shared/FileGenerationTreeUtil.ts",
131
- "./src/stores/shared/MockDataUtil.ts",
132
- "./src/stores/shared/ModelUtil.ts",
133
- "./src/stores/shared/PackageTreeUtil.ts",
134
- "./src/stores/shared/TreeUtil.ts",
129
+ "./src/stores/shared/DnDUtils.ts",
130
+ "./src/stores/shared/FileGenerationTreeUtils.ts",
131
+ "./src/stores/shared/MockDataUtils.ts",
132
+ "./src/stores/shared/ModelClassifierUtils.ts",
133
+ "./src/stores/shared/PackageTreeUtils.ts",
134
+ "./src/stores/shared/TreeUtils.ts",
135
135
  "./src/stores/shared/testable/TestableUtils.ts",
136
136
  "./src/stores/sidebar-state/LocalChangesState.ts",
137
137
  "./src/stores/sidebar-state/ProjectOverviewState.ts",
@@ -239,18 +239,18 @@
239
239
  "./src/components/shared/DiffView.tsx",
240
240
  "./src/components/shared/ElementIconUtils.tsx",
241
241
  "./src/components/shared/MultiplicityBadge.tsx",
242
+ "./src/components/shared/ProjectSelectorUtils.tsx",
242
243
  "./src/components/shared/StudioLambdaEditor.tsx",
243
244
  "./src/components/shared/StudioTextInputEditor.tsx",
244
245
  "./src/components/shared/TypeTree.tsx",
246
+ "./src/components/shared/WorkspaceSelectorUtils.tsx",
245
247
  "./src/components/workspace-review/WorkspaceReview.tsx",
246
248
  "./src/components/workspace-review/WorkspaceReviewPanel.tsx",
247
249
  "./src/components/workspace-review/WorkspaceReviewSideBar.tsx",
248
250
  "./src/components/workspace-review/WorkspaceReviewStoreProvider.tsx",
249
- "./src/components/workspace-setup/ProjectCreateModal.tsx",
250
- "./src/components/workspace-setup/ProjectSelector.tsx",
251
- "./src/components/workspace-setup/WorkspaceSelector.tsx",
252
- "./src/components/workspace-setup/WorkspaceSetup.tsx",
253
- "./src/components/workspace-setup/WorkspaceSetupStoreProvider.tsx"
251
+ "./src/components/workspace-setup/CreateProjectModal.tsx",
252
+ "./src/components/workspace-setup/CreateWorkspaceModal.tsx",
253
+ "./src/components/workspace-setup/WorkspaceSetup.tsx"
254
254
  ],
255
255
  "include": [
256
256
  "src/**/*.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectCreateModal.d.ts","sourceRoot":"","sources":["../../../src/components/workspace-setup/ProjectCreateModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAopBH,eAAO,MAAM,kBAAkB;;CAiF7B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectSelector.d.ts","sourceRoot":"","sources":["../../../src/components/workspace-setup/ProjectSelector.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;AAKH,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,mBAAmB,CAAC;AAS3B,eAAO,MAAM,eAAe;0BAIA,OAAO,KAAK,IAAI;YAC9B,MAAM,IAAI;qIA2GvB,CAAC"}
@@ -1,65 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * Copyright (c) 2020-present, Goldman Sachs
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { forwardRef, useEffect } from 'react';
18
- import { observer } from 'mobx-react-lite';
19
- import { compareLabelFn, CustomSelectorInput, PlusIcon, RepoIcon, ArrowCircleRightIcon, } from '@finos/legend-art';
20
- import { generateSetupRoute, generateViewProjectRoute, } from '../../stores/LegendStudioRouter.js';
21
- import { flowResult } from 'mobx';
22
- import { useWorkspaceSetupStore } from './WorkspaceSetupStoreProvider.js';
23
- import { useLegendStudioApplicationStore } from '../LegendStudioBaseStoreProvider.js';
24
- export const ProjectSelector = observer(forwardRef(function ProjectSelector(props, ref) {
25
- const { onChange, create } = props;
26
- const setupStore = useWorkspaceSetupStore();
27
- const applicationStore = useLegendStudioApplicationStore();
28
- const currentProjectId = setupStore.currentProjectId;
29
- const options = setupStore.projectOptions.sort(compareLabelFn);
30
- const selectedOption = options.find((option) => option.value === currentProjectId) ?? null;
31
- const isLoadingOptions = setupStore.loadProjectsState.isInProgress;
32
- const formatOptionLabel = (option) => {
33
- const viewProject = () => applicationStore.navigator.openNewWindow(applicationStore.navigator.generateLocation(generateViewProjectRoute(option.value)));
34
- return (_jsxs("div", { className: "workspace-setup__project-option", children: [_jsx("div", { className: "workspace-setup__project-option__label", children: _jsx("div", { className: "workspace-setup__project-option__label__name", children: option.label }) }), _jsxs("button", { className: "workspace-setup__project-option__visit-btn", tabIndex: -1, onClick: viewProject, children: [_jsx("div", { className: "workspace-setup__project-option__visit-btn__label", children: "view" }), _jsx("div", { className: "workspace-setup__project-option__visit-btn__icon", children: _jsx(ArrowCircleRightIcon, {}) })] })] }));
35
- };
36
- const onSelectionChange = (val) => {
37
- if ((val !== null || selectedOption !== null) &&
38
- (!val || !selectedOption || val.value !== selectedOption.value)) {
39
- onChange(Boolean(selectedOption));
40
- setupStore.setCurrentProjectId(val?.value);
41
- if (val && !setupStore.currentProjectWorkspaces) {
42
- flowResult(setupStore.fetchWorkspaces(val.value)).catch(applicationStore.alertUnhandledError);
43
- }
44
- applicationStore.navigator.goTo(generateSetupRoute(val?.value));
45
- }
46
- };
47
- useEffect(() => {
48
- if (setupStore.projects && !setupStore.currentProject) {
49
- if (currentProjectId) {
50
- // For first load, if the project is not found, reset the URL
51
- applicationStore.navigator.goTo(generateSetupRoute(undefined));
52
- }
53
- onChange(false);
54
- }
55
- }, [applicationStore, setupStore.projects, setupStore.currentProject, currentProjectId, onChange]);
56
- const projectSelectorPlaceholder = isLoadingOptions
57
- ? 'Loading projects'
58
- : setupStore.loadProjectsState.hasFailed
59
- ? 'Error fetching projects'
60
- : options.length
61
- ? 'Choose an existing project'
62
- : 'You have no projects, please create or acquire access for at least one';
63
- return (_jsxs("div", { className: "workspace-setup-selector", children: [_jsx("div", { className: "workspace-setup-selector__icon-box", children: _jsx(RepoIcon, { className: "workspace-setup-selector__icon" }) }), _jsx(CustomSelectorInput, { className: "workspace-setup-selector__input", ref: ref, options: options, disabled: isLoadingOptions || !options.length, isLoading: isLoadingOptions, onChange: onSelectionChange, value: selectedOption, placeholder: projectSelectorPlaceholder, isClearable: true, escapeClearsValue: true, darkMode: true, formatOptionLabel: formatOptionLabel }), _jsx("button", { className: "workspace-setup-selector__action btn--dark", onClick: create, tabIndex: -1, title: 'Create a Project', children: _jsx(PlusIcon, {}) })] }));
64
- }));
65
- //# sourceMappingURL=ProjectSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectSelector.js","sourceRoot":"","sources":["../../../src/components/workspace-setup/ProjectSelector.tsx"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
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
- /// <reference types="react" resolution-mode="require"/>
17
- import { type SelectComponent } from '@finos/legend-art';
18
- export declare const WorkspaceSelector: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Pick<{
19
- onChange: (focusNext: boolean) => void;
20
- create: () => void;
21
- } & import("react").RefAttributes<SelectComponent>, "key" | "onChange" | "create"> & import("react").RefAttributes<SelectComponent>>>;
22
- //# sourceMappingURL=WorkspaceSelector.d.ts.map