@finos/legend-application-studio 16.0.2 → 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 (359) 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.d.ts.map +1 -1
  80. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js +2 -1
  81. package/lib/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.js.map +1 -1
  82. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.d.ts.map +1 -1
  83. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.js +1 -1
  84. package/lib/components/editor/edit-panel/service-editor/NewServiceModal.js.map +1 -1
  85. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js +1 -1
  86. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionEditor.js.map +1 -1
  87. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.d.ts.map +1 -1
  88. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js +1 -4
  89. package/lib/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.js.map +1 -1
  90. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.d.ts.map +1 -1
  91. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.js +8 -8
  92. package/lib/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.js.map +1 -1
  93. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.js +2 -1
  94. package/lib/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.js.map +1 -1
  95. package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.js +2 -2
  96. package/lib/components/editor/edit-panel/uml-editor/AssociationEditor.js.map +1 -1
  97. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js +2 -2
  98. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js.map +1 -1
  99. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js +1 -1
  100. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js.map +1 -1
  101. package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.js +1 -1
  102. package/lib/components/editor/edit-panel/uml-editor/PropertyEditor.js.map +1 -1
  103. package/lib/components/editor/side-bar/CreateNewElementModal.d.ts.map +1 -1
  104. package/lib/components/editor/side-bar/CreateNewElementModal.js +5 -2
  105. package/lib/components/editor/side-bar/CreateNewElementModal.js.map +1 -1
  106. package/lib/components/editor/side-bar/Explorer.js +4 -4
  107. package/lib/components/editor/side-bar/Explorer.js.map +1 -1
  108. package/lib/components/editor/side-bar/LocalChanges.d.ts.map +1 -1
  109. package/lib/components/editor/side-bar/LocalChanges.js +1 -1
  110. package/lib/components/editor/side-bar/LocalChanges.js.map +1 -1
  111. package/lib/components/editor/side-bar/WorkspaceReview.js +1 -1
  112. package/lib/components/editor/side-bar/WorkspaceReview.js.map +1 -1
  113. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.d.ts.map +1 -1
  114. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.js +1 -1
  115. package/lib/components/editor/side-bar/WorkspaceSyncConflictResolver.js.map +1 -1
  116. package/lib/components/shared/ElementIconUtils.js +1 -1
  117. package/lib/components/shared/ElementIconUtils.js.map +1 -1
  118. package/lib/components/{workspace-setup/ProjectSelector.d.ts → shared/ProjectSelectorUtils.d.ts} +9 -7
  119. package/lib/components/shared/ProjectSelectorUtils.d.ts.map +1 -0
  120. package/lib/components/shared/ProjectSelectorUtils.js +28 -0
  121. package/lib/components/shared/ProjectSelectorUtils.js.map +1 -0
  122. package/lib/components/shared/TypeTree.js +2 -2
  123. package/lib/components/shared/TypeTree.js.map +1 -1
  124. package/lib/components/{workspace-setup/WorkspaceSetupStoreProvider.d.ts → shared/WorkspaceSelectorUtils.d.ts} +8 -8
  125. package/lib/components/shared/WorkspaceSelectorUtils.d.ts.map +1 -0
  126. package/lib/components/shared/WorkspaceSelectorUtils.js +24 -0
  127. package/lib/components/shared/WorkspaceSelectorUtils.js.map +1 -0
  128. package/lib/components/workspace-setup/{ProjectCreateModal.d.ts → CreateProjectModal.d.ts} +1 -1
  129. package/lib/components/workspace-setup/CreateProjectModal.d.ts.map +1 -0
  130. package/lib/components/workspace-setup/{ProjectCreateModal.js → CreateProjectModal.js} +4 -4
  131. package/lib/components/workspace-setup/{ProjectCreateModal.js.map → CreateProjectModal.js.map} +1 -1
  132. package/lib/components/workspace-setup/CreateWorkspaceModal.d.ts +22 -0
  133. package/lib/components/workspace-setup/CreateWorkspaceModal.d.ts.map +1 -0
  134. package/lib/components/workspace-setup/CreateWorkspaceModal.js +67 -0
  135. package/lib/components/workspace-setup/CreateWorkspaceModal.js.map +1 -0
  136. package/lib/components/workspace-setup/WorkspaceSetup.d.ts +2 -0
  137. package/lib/components/workspace-setup/WorkspaceSetup.d.ts.map +1 -1
  138. package/lib/components/workspace-setup/WorkspaceSetup.js +96 -115
  139. package/lib/components/workspace-setup/WorkspaceSetup.js.map +1 -1
  140. package/lib/index.css +2 -2
  141. package/lib/index.css.map +1 -1
  142. package/lib/index.d.ts +9 -6
  143. package/lib/index.d.ts.map +1 -1
  144. package/lib/index.js +9 -7
  145. package/lib/index.js.map +1 -1
  146. package/lib/package.json +4 -4
  147. package/lib/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.d.ts → DSLGeneration_LegendStudioApplicationPlugin_Extension.d.ts} +5 -2
  148. package/lib/stores/DSLGeneration_LegendStudioApplicationPlugin_Extension.d.ts.map +1 -0
  149. package/lib/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.js → DSLGeneration_LegendStudioApplicationPlugin_Extension.js} +1 -1
  150. package/lib/stores/DSLGeneration_LegendStudioApplicationPlugin_Extension.js.map +1 -0
  151. package/lib/stores/EditorGraphState.d.ts +1 -1
  152. package/lib/stores/EditorGraphState.d.ts.map +1 -1
  153. package/lib/stores/EditorGraphState.js +3 -2
  154. package/lib/stores/EditorGraphState.js.map +1 -1
  155. package/lib/stores/EditorStore.d.ts +6 -8
  156. package/lib/stores/EditorStore.d.ts.map +1 -1
  157. package/lib/stores/EditorStore.js +39 -13
  158. package/lib/stores/EditorStore.js.map +1 -1
  159. package/lib/stores/EditorStoreTestUtils.d.ts.map +1 -1
  160. package/lib/stores/EditorStoreTestUtils.js +1 -1
  161. package/lib/stores/EditorStoreTestUtils.js.map +1 -1
  162. package/lib/stores/ExplorerTreeState.d.ts +2 -2
  163. package/lib/stores/ExplorerTreeState.d.ts.map +1 -1
  164. package/lib/stores/ExplorerTreeState.js +2 -2
  165. package/lib/stores/ExplorerTreeState.js.map +1 -1
  166. package/lib/stores/LegendStudioAppEvent.d.ts.map +1 -1
  167. package/lib/stores/LegendStudioAppEvent.js +2 -0
  168. package/lib/stores/LegendStudioAppEvent.js.map +1 -1
  169. package/lib/stores/LegendStudioBaseStore.d.ts +2 -3
  170. package/lib/stores/LegendStudioBaseStore.d.ts.map +1 -1
  171. package/lib/stores/LegendStudioBaseStore.js +7 -2
  172. package/lib/stores/LegendStudioBaseStore.js.map +1 -1
  173. package/lib/stores/LegendStudioRouter.js +1 -1
  174. package/lib/stores/LegendStudioRouter.js.map +1 -1
  175. package/lib/stores/editor/NewElementState.d.ts.map +1 -1
  176. package/lib/stores/editor/NewElementState.js +5 -2
  177. package/lib/stores/editor/NewElementState.js.map +1 -1
  178. package/lib/stores/editor-state/FileGenerationState.d.ts +1 -1
  179. package/lib/stores/editor-state/FileGenerationState.d.ts.map +1 -1
  180. package/lib/stores/editor-state/FileGenerationState.js +1 -1
  181. package/lib/stores/editor-state/FileGenerationState.js.map +1 -1
  182. package/lib/stores/editor-state/FileGenerationViewerState.d.ts +1 -1
  183. package/lib/stores/editor-state/FileGenerationViewerState.d.ts.map +1 -1
  184. package/lib/stores/editor-state/GraphGenerationState.d.ts +1 -1
  185. package/lib/stores/editor-state/GraphGenerationState.d.ts.map +1 -1
  186. package/lib/stores/editor-state/GraphGenerationState.js +2 -2
  187. package/lib/stores/editor-state/GraphGenerationState.js.map +1 -1
  188. package/lib/stores/editor-state/ProjectConfigurationEditorState.d.ts.map +1 -1
  189. package/lib/stores/editor-state/ProjectConfigurationEditorState.js +2 -1
  190. package/lib/stores/editor-state/ProjectConfigurationEditorState.js.map +1 -1
  191. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.d.ts +1 -1
  192. package/lib/stores/editor-state/element-editor-state/RuntimeEditorState.d.ts.map +1 -1
  193. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.d.ts +1 -1
  194. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.d.ts.map +1 -1
  195. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.js +2 -2
  196. package/lib/stores/editor-state/element-editor-state/mapping/MappingEditorState.js.map +1 -1
  197. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js +1 -1
  198. package/lib/stores/editor-state/element-editor-state/mapping/MappingExecutionState.js.map +1 -1
  199. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js +1 -1
  200. package/lib/stores/editor-state/element-editor-state/mapping/MappingTestState.js.map +1 -1
  201. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.d.ts.map +1 -1
  202. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js +1 -1
  203. package/lib/stores/editor-state/element-editor-state/service/ServiceExecutionState.js.map +1 -1
  204. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.d.ts +5 -8
  205. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.d.ts.map +1 -1
  206. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.js +15 -20
  207. package/lib/stores/editor-state/element-editor-state/service/ServiceRegistrationState.js.map +1 -1
  208. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js +1 -1
  209. package/lib/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.js.map +1 -1
  210. package/lib/stores/graphModifier/DSLMapping_GraphModifierHelper.js +1 -1
  211. package/lib/stores/graphModifier/DSLMapping_GraphModifierHelper.js.map +1 -1
  212. package/lib/stores/project-viewer/ProjectViewerStore.d.ts +1 -2
  213. package/lib/stores/project-viewer/ProjectViewerStore.d.ts.map +1 -1
  214. package/lib/stores/project-viewer/ProjectViewerStore.js +2 -1
  215. package/lib/stores/project-viewer/ProjectViewerStore.js.map +1 -1
  216. package/lib/stores/shared/{DnDUtil.d.ts → DnDUtils.d.ts} +2 -2
  217. package/lib/stores/shared/DnDUtils.d.ts.map +1 -0
  218. package/lib/stores/shared/{DnDUtil.js → DnDUtils.js} +1 -1
  219. package/lib/stores/shared/DnDUtils.js.map +1 -0
  220. package/lib/stores/shared/{FileGenerationTreeUtil.d.ts → FileGenerationTreeUtils.d.ts} +1 -1
  221. package/lib/stores/shared/FileGenerationTreeUtils.d.ts.map +1 -0
  222. package/lib/stores/shared/{FileGenerationTreeUtil.js → FileGenerationTreeUtils.js} +1 -1
  223. package/lib/stores/shared/FileGenerationTreeUtils.js.map +1 -0
  224. package/lib/stores/shared/{MockDataUtil.d.ts → MockDataUtils.d.ts} +1 -1
  225. package/lib/stores/shared/MockDataUtils.d.ts.map +1 -0
  226. package/lib/stores/shared/{MockDataUtil.js → MockDataUtils.js} +2 -2
  227. package/lib/stores/shared/MockDataUtils.js.map +1 -0
  228. package/lib/stores/shared/{ModelUtil.d.ts → ModelClassifierUtils.d.ts} +1 -1
  229. package/lib/stores/shared/ModelClassifierUtils.d.ts.map +1 -0
  230. package/lib/stores/shared/{ModelUtil.js → ModelClassifierUtils.js} +1 -1
  231. package/lib/stores/shared/ModelClassifierUtils.js.map +1 -0
  232. package/lib/stores/shared/{PackageTreeUtil.d.ts → PackageTreeUtils.d.ts} +2 -2
  233. package/lib/stores/shared/PackageTreeUtils.d.ts.map +1 -0
  234. package/lib/stores/shared/{PackageTreeUtil.js → PackageTreeUtils.js} +2 -2
  235. package/lib/stores/shared/PackageTreeUtils.js.map +1 -0
  236. package/lib/stores/shared/{TreeUtil.d.ts → TreeUtils.d.ts} +2 -2
  237. package/lib/stores/shared/TreeUtils.d.ts.map +1 -0
  238. package/lib/stores/shared/{TreeUtil.js → TreeUtils.js} +1 -1
  239. package/lib/stores/shared/TreeUtils.js.map +1 -0
  240. package/lib/stores/shared/testable/TestableUtils.js +1 -1
  241. package/lib/stores/shared/testable/TestableUtils.js.map +1 -1
  242. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts +18 -33
  243. package/lib/stores/workspace-setup/WorkspaceSetupStore.d.ts.map +1 -1
  244. package/lib/stores/workspace-setup/WorkspaceSetupStore.js +137 -133
  245. package/lib/stores/workspace-setup/WorkspaceSetupStore.js.map +1 -1
  246. package/package.json +13 -13
  247. package/src/application/LegendStudioApplicationConfig.ts +12 -5
  248. package/src/components/EditorComponentTestUtils.tsx +1 -6
  249. package/src/components/EmbeddedQueryBuilder.tsx +2 -8
  250. package/src/components/LegendStudioApplication.tsx +1 -1
  251. package/src/components/LegendStudioBaseStoreProvider.tsx +2 -5
  252. package/src/components/editor/EditorStoreProvider.tsx +1 -6
  253. package/src/components/editor/edit-panel/FunctionEditor.tsx +1 -1
  254. package/src/components/editor/edit-panel/GenerationSpecificationEditor.tsx +5 -5
  255. package/src/components/editor/edit-panel/GrammarTextEditor.tsx +4 -4
  256. package/src/components/editor/edit-panel/RuntimeEditor.tsx +2 -2
  257. package/src/components/editor/edit-panel/connection-editor/RelationalDatabaseConnectionEditor.tsx +31 -3
  258. package/src/components/editor/edit-panel/connection-editor/post-processor-editor/MapperPostProcessorEditor.tsx +16 -11
  259. package/src/components/editor/edit-panel/data-editor/DataElementEditor.tsx +1 -1
  260. package/src/components/editor/edit-panel/element-generation-editor/ElementGenerationEditor.tsx +2 -3
  261. package/src/components/editor/edit-panel/element-generation-editor/FileGenerationEditor.tsx +4 -4
  262. package/src/components/editor/edit-panel/external-format-editor/BindingElementEditor.tsx +1 -1
  263. package/src/components/editor/edit-panel/external-format-editor/SchemaSetElementEditor.tsx +0 -1
  264. package/src/components/editor/edit-panel/mapping-editor/ClassMappingEditor.tsx +1 -1
  265. package/src/components/editor/edit-panel/mapping-editor/EnumerationMappingEditor.tsx +1 -1
  266. package/src/components/editor/edit-panel/mapping-editor/FlatDataPropertyMappingEditor.tsx +2 -2
  267. package/src/components/editor/edit-panel/mapping-editor/FlatDataRecordTypeTree.tsx +2 -2
  268. package/src/components/editor/edit-panel/mapping-editor/InstanceSetImplementationEditor.tsx +1 -1
  269. package/src/components/editor/edit-panel/mapping-editor/MappingExecutionBuilder.tsx +2 -14
  270. package/src/components/editor/edit-panel/mapping-editor/MappingExplorer.tsx +1 -1
  271. package/src/components/editor/edit-panel/mapping-editor/MappingTestEditor.tsx +1 -9
  272. package/src/components/editor/edit-panel/mapping-editor/MappingTestsExplorer.tsx +1 -1
  273. package/src/components/editor/edit-panel/mapping-editor/NewMappingElementModal.tsx +2 -6
  274. package/src/components/editor/edit-panel/mapping-editor/OperationSetImplementationEditor.tsx +1 -1
  275. package/src/components/editor/edit-panel/mapping-editor/PropertyMappingsEditor.tsx +1 -1
  276. package/src/components/editor/edit-panel/mapping-editor/PurePropertyMappingEditor.tsx +2 -2
  277. package/src/components/editor/edit-panel/mapping-editor/relational/RelationalPropertyMappingEditor.tsx +1 -1
  278. package/src/components/editor/edit-panel/project-configuration-editor/ProjectConfigurationEditor.tsx +4 -2
  279. package/src/components/editor/edit-panel/service-editor/NewServiceModal.tsx +2 -3
  280. package/src/components/editor/edit-panel/service-editor/ServiceExecutionEditor.tsx +1 -1
  281. package/src/components/editor/edit-panel/service-editor/ServiceExecutionQueryEditor.tsx +1 -8
  282. package/src/components/editor/edit-panel/service-editor/ServiceRegistrationEditor.tsx +15 -10
  283. package/src/components/editor/edit-panel/service-editor/testable/ServiceTestDataEditor.tsx +1 -1
  284. package/src/components/editor/edit-panel/uml-editor/AssociationEditor.tsx +2 -2
  285. package/src/components/editor/edit-panel/uml-editor/ClassEditor.tsx +2 -2
  286. package/src/components/editor/edit-panel/uml-editor/EnumerationEditor.tsx +1 -1
  287. package/src/components/editor/edit-panel/uml-editor/PropertyEditor.tsx +1 -1
  288. package/src/components/editor/side-bar/CreateNewElementModal.tsx +5 -2
  289. package/src/components/editor/side-bar/Explorer.tsx +5 -5
  290. package/src/components/editor/side-bar/LocalChanges.tsx +1 -1
  291. package/src/components/editor/side-bar/WorkspaceReview.tsx +1 -1
  292. package/src/components/editor/side-bar/WorkspaceSyncConflictResolver.tsx +2 -8
  293. package/src/components/shared/ElementIconUtils.tsx +1 -1
  294. package/src/components/shared/ProjectSelectorUtils.tsx +63 -0
  295. package/src/components/shared/TypeTree.tsx +3 -3
  296. package/src/components/shared/WorkspaceSelectorUtils.tsx +45 -0
  297. package/src/components/workspace-setup/{ProjectCreateModal.tsx → CreateProjectModal.tsx} +7 -3
  298. package/src/components/workspace-setup/CreateWorkspaceModal.tsx +178 -0
  299. package/src/components/workspace-setup/WorkspaceSetup.tsx +300 -346
  300. package/src/index.ts +9 -9
  301. package/src/stores/{DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.ts → DSLGeneration_LegendStudioApplicationPlugin_Extension.ts} +4 -1
  302. package/src/stores/EditorGraphState.ts +2 -3
  303. package/src/stores/EditorStore.ts +52 -19
  304. package/src/stores/EditorStoreTestUtils.ts +0 -1
  305. package/src/stores/ExplorerTreeState.ts +3 -3
  306. package/src/stores/LegendStudioAppEvent.ts +3 -0
  307. package/src/stores/LegendStudioBaseStore.ts +7 -4
  308. package/src/stores/LegendStudioRouter.ts +1 -1
  309. package/src/stores/editor/NewElementState.ts +5 -1
  310. package/src/stores/editor-state/FileGenerationState.ts +1 -1
  311. package/src/stores/editor-state/FileGenerationViewerState.ts +1 -1
  312. package/src/stores/editor-state/GraphGenerationState.ts +6 -6
  313. package/src/stores/editor-state/ProjectConfigurationEditorState.ts +1 -1
  314. package/src/stores/editor-state/element-editor-state/RuntimeEditorState.ts +1 -1
  315. package/src/stores/editor-state/element-editor-state/mapping/MappingEditorState.ts +2 -2
  316. package/src/stores/editor-state/element-editor-state/mapping/MappingExecutionState.ts +1 -1
  317. package/src/stores/editor-state/element-editor-state/mapping/MappingTestState.ts +1 -1
  318. package/src/stores/editor-state/element-editor-state/service/ServiceExecutionState.ts +1 -2
  319. package/src/stores/editor-state/element-editor-state/service/ServiceRegistrationState.ts +33 -32
  320. package/src/stores/editor-state/element-editor-state/service/testable/ServiceTestDataState.ts +1 -1
  321. package/src/stores/graphModifier/DSLMapping_GraphModifierHelper.ts +1 -1
  322. package/src/stores/project-viewer/ProjectViewerStore.ts +6 -6
  323. package/src/stores/shared/{DnDUtil.ts → DnDUtils.ts} +1 -1
  324. package/src/stores/shared/{FileGenerationTreeUtil.ts → FileGenerationTreeUtils.ts} +0 -0
  325. package/src/stores/shared/{MockDataUtil.ts → MockDataUtils.ts} +4 -1
  326. package/src/stores/shared/{ModelUtil.ts → ModelClassifierUtils.ts} +0 -0
  327. package/src/stores/shared/{PackageTreeUtil.ts → PackageTreeUtils.ts} +2 -2
  328. package/src/stores/shared/{TreeUtil.ts → TreeUtils.ts} +1 -1
  329. package/src/stores/shared/testable/TestableUtils.ts +1 -1
  330. package/src/stores/workspace-setup/WorkspaceSetupStore.ts +208 -190
  331. package/tsconfig.json +12 -12
  332. package/lib/components/workspace-setup/ProjectCreateModal.d.ts.map +0 -1
  333. package/lib/components/workspace-setup/ProjectSelector.d.ts.map +0 -1
  334. package/lib/components/workspace-setup/ProjectSelector.js +0 -65
  335. package/lib/components/workspace-setup/ProjectSelector.js.map +0 -1
  336. package/lib/components/workspace-setup/WorkspaceSelector.d.ts +0 -22
  337. package/lib/components/workspace-setup/WorkspaceSelector.d.ts.map +0 -1
  338. package/lib/components/workspace-setup/WorkspaceSelector.js +0 -57
  339. package/lib/components/workspace-setup/WorkspaceSelector.js.map +0 -1
  340. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.d.ts.map +0 -1
  341. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.js +0 -34
  342. package/lib/components/workspace-setup/WorkspaceSetupStoreProvider.js.map +0 -1
  343. package/lib/stores/DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.d.ts.map +0 -1
  344. package/lib/stores/DSLGenerationSpecification_LegendStudioApplicationPlugin_Extension.js.map +0 -1
  345. package/lib/stores/shared/DnDUtil.d.ts.map +0 -1
  346. package/lib/stores/shared/DnDUtil.js.map +0 -1
  347. package/lib/stores/shared/FileGenerationTreeUtil.d.ts.map +0 -1
  348. package/lib/stores/shared/FileGenerationTreeUtil.js.map +0 -1
  349. package/lib/stores/shared/MockDataUtil.d.ts.map +0 -1
  350. package/lib/stores/shared/MockDataUtil.js.map +0 -1
  351. package/lib/stores/shared/ModelUtil.d.ts.map +0 -1
  352. package/lib/stores/shared/ModelUtil.js.map +0 -1
  353. package/lib/stores/shared/PackageTreeUtil.d.ts.map +0 -1
  354. package/lib/stores/shared/PackageTreeUtil.js.map +0 -1
  355. package/lib/stores/shared/TreeUtil.d.ts.map +0 -1
  356. package/lib/stores/shared/TreeUtil.js.map +0 -1
  357. package/src/components/workspace-setup/ProjectSelector.tsx +0 -148
  358. package/src/components/workspace-setup/WorkspaceSelector.tsx +0 -135
  359. package/src/components/workspace-setup/WorkspaceSetupStoreProvider.tsx +0 -56
@@ -14,393 +14,347 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useState, useEffect, useRef } from 'react';
18
- import { ProjectSelector } from './ProjectSelector.js';
19
- import { WorkspaceSelector } from './WorkspaceSelector.js';
20
- import { observer } from 'mobx-react-lite';
17
+ import { createContext, useContext, useEffect, useMemo, useState } from 'react';
18
+ import { observer, useLocalObservable } from 'mobx-react-lite';
21
19
  import {
22
- type SelectComponent,
23
20
  clsx,
24
- Dialog,
25
- SquareIcon,
26
- compareLabelFn,
27
- CustomSelectorInput,
28
- PanelLoadingIndicator,
29
- CheckSquareIcon,
30
21
  MarkdownTextViewer,
31
22
  AssistantIcon,
23
+ compareLabelFn,
24
+ PlusIcon,
25
+ GitBranchIcon,
26
+ CustomSelectorInput,
27
+ RepoIcon,
32
28
  } from '@finos/legend-art';
33
- import type { ProjectOption } from '../../stores/workspace-setup/WorkspaceSetupStore.js';
34
- import {
35
- useWorkspaceSetupStore,
36
- withWorkspaceSetupStore,
37
- } from './WorkspaceSetupStoreProvider.js';
38
29
  import { useParams } from 'react-router';
39
30
  import { LEGEND_STUDIO_TEST_ID } from '../LegendStudioTestID.js';
40
31
  import {
41
32
  type SetupPathParams,
42
33
  generateEditorRoute,
34
+ LEGEND_STUDIO_PATH_PARAM_TOKEN,
43
35
  } from '../../stores/LegendStudioRouter.js';
44
36
  import { flowResult } from 'mobx';
45
- import { WorkspaceType } from '@finos/legend-server-sdlc';
46
37
  import {
47
- useApplicationStore,
48
38
  DocumentationLink,
49
39
  useApplicationNavigationContext,
50
40
  } from '@finos/legend-application';
51
41
  import { LEGEND_STUDIO_DOCUMENTATION_KEY } from '../../stores/LegendStudioDocumentation.js';
52
- import { CreateProjectModal } from './ProjectCreateModal.js';
42
+ import { CreateProjectModal } from './CreateProjectModal.js';
53
43
  import { ActivityBarMenu } from '../editor/ActivityBar.js';
54
44
  import { LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../../stores/LegendStudioApplicationNavigationContext.js';
45
+ import { CreateWorkspaceModal } from './CreateWorkspaceModal.js';
55
46
  import { useLegendStudioApplicationStore } from '../LegendStudioBaseStoreProvider.js';
47
+ import {
48
+ type ProjectOption,
49
+ buildProjectOption,
50
+ getProjectOptionLabelFormatter,
51
+ } from '../shared/ProjectSelectorUtils.js';
52
+ import {
53
+ type WorkspaceOption,
54
+ buildWorkspaceOption,
55
+ formatWorkspaceOptionLabel,
56
+ } from '../shared/WorkspaceSelectorUtils.js';
57
+ import { debounce, guaranteeNonNullable } from '@finos/legend-shared';
58
+ import { WorkspaceSetupStore } from '../../stores/workspace-setup/WorkspaceSetupStore.js';
59
+ import { useSDLCServerClient } from '@finos/legend-server-sdlc';
56
60
 
57
- const CreateWorkspaceModal = observer(() => {
58
- const setupStore = useWorkspaceSetupStore();
59
- const applicationStore = useApplicationStore();
60
- const {
61
- loadProjectsState,
62
- createOrImportProjectState,
63
- createWorkspaceState,
64
- showCreateWorkspaceModal,
65
- } = setupStore;
66
- const isFetchingProjects = loadProjectsState.isInProgress;
67
- const projectSelectorRef = useRef<SelectComponent>(null);
68
- const workspaceNameInputRef = useRef<HTMLInputElement>(null);
69
- const [currentProjectId, setCurrentProjectId] = useState<string | undefined>(
70
- setupStore.currentProjectId,
71
- );
72
- const [workspaceName, setWorkspaceName] = useState('');
73
- const [isGroupWorkspace, setIsGroupWorkspace] = useState<boolean>(true);
74
- const workspaceType = isGroupWorkspace
75
- ? WorkspaceType.GROUP
76
- : WorkspaceType.USER;
77
- const projectOptions = setupStore.projectOptions.sort(compareLabelFn);
78
- const selectedOption =
79
- projectOptions.find((option) => option.value === currentProjectId) ?? null;
80
- const dispatchingActions =
81
- createWorkspaceState.isInProgress ||
82
- createOrImportProjectState.isInProgress;
83
- const onSelectionChange = (val: ProjectOption | null): void => {
84
- if (
85
- (val !== null || selectedOption !== null) &&
86
- (!val || !selectedOption || val.value !== selectedOption.value)
87
- ) {
88
- setCurrentProjectId(val?.value);
89
- workspaceNameInputRef.current?.focus();
90
- }
91
- };
92
- const projectSelectorPlaceholder = isFetchingProjects
93
- ? 'Loading projects'
94
- : loadProjectsState.hasFailed
95
- ? 'Error fetching projects'
96
- : projectOptions.length
97
- ? 'Choose an existing project'
98
- : 'You have no projects, please create or acquire access for at least one';
99
-
100
- const closeModal = (): void => {
101
- setupStore.setShowCreateWorkspaceModal(false);
102
- };
103
- const createWorkspace = (): void => {
104
- if (currentProjectId && workspaceName) {
105
- flowResult(
106
- setupStore.createWorkspace(
107
- currentProjectId,
108
- workspaceName,
109
- workspaceType,
110
- ),
111
- ).catch(applicationStore.alertUnhandledError);
112
- }
113
- };
114
- const changeWorkspaceName: React.ChangeEventHandler<HTMLInputElement> = (
115
- event,
116
- ) => setWorkspaceName(event.target.value);
117
- const handleSubmit = (event: React.FormEvent<HTMLFormElement>): void => {
118
- event.preventDefault();
119
- createWorkspace();
120
- };
121
- const handleEnter = (): void => {
122
- if (currentProjectId) {
123
- workspaceNameInputRef.current?.focus();
124
- } else {
125
- projectSelectorRef.current?.focus();
126
- }
127
- };
128
- const toggleGroupWorkspace = (
129
- event: React.FormEvent<HTMLButtonElement>,
130
- ): void => {
131
- event.preventDefault();
132
- setIsGroupWorkspace(!isGroupWorkspace);
133
- };
134
-
135
- return (
136
- <Dialog
137
- open={showCreateWorkspaceModal}
138
- onClose={closeModal}
139
- TransitionProps={{
140
- onEnter: handleEnter,
141
- }}
142
- classes={{ container: 'search-modal__container' }}
143
- PaperProps={{ classes: { root: 'search-modal__inner-container' } }}
144
- >
145
- <div className="modal modal--dark workspace-setup__create-workspace-modal">
146
- <div className="modal__title">
147
- Create Workspace
148
- <DocumentationLink
149
- className="workspace-setup__create-workspace-modal__doc__create-workspace"
150
- documentationKey={LEGEND_STUDIO_DOCUMENTATION_KEY.CREATE_WORKSPACE}
151
- />
152
- </div>
153
- <form onSubmit={handleSubmit}>
154
- <PanelLoadingIndicator
155
- isLoading={setupStore.createWorkspaceState.isInProgress}
156
- />
157
- <div className="panel__content__form workspace-setup__create-workspace-modal__form workspace-setup__create-workspace-modal__form__workspace">
158
- <div className="panel__content__form__section">
159
- <div className="panel__content__form__section__header__label">
160
- Project Name
161
- </div>
162
- <CustomSelectorInput
163
- className="workspace-setup-selector__input workspace-setup__workspace__selector"
164
- ref={projectSelectorRef}
165
- options={projectOptions}
166
- disabled={
167
- dispatchingActions ||
168
- isFetchingProjects ||
169
- !projectOptions.length
170
- }
171
- isLoading={isFetchingProjects}
172
- onChange={onSelectionChange}
173
- value={selectedOption}
174
- placeholder={projectSelectorPlaceholder}
175
- isClearable={true}
176
- escapeClearsValue={true}
177
- darkMode={true}
178
- />
179
- </div>
180
- <div className="panel__content__form__section">
181
- <div className="panel__content__form__section__header__label">
182
- Workspace Name
183
- </div>
184
- <input
185
- className="workspace-setup__create-workspace-modal__form__workspace-name__input"
186
- ref={workspaceNameInputRef}
187
- spellCheck={false}
188
- disabled={dispatchingActions}
189
- placeholder="MyWorkspace"
190
- value={workspaceName}
191
- onChange={changeWorkspaceName}
192
- />
193
- </div>
194
- <div className="panel__content__form__section">
195
- <div className="panel__content__form__section__header__label">
196
- Group Workspace
197
- </div>
198
- <div className="panel__content__form__section__toggler">
199
- <button
200
- onClick={toggleGroupWorkspace}
201
- type="button" // prevent this toggler being activated on form submission
202
- className={clsx(
203
- 'panel__content__form__section__toggler__btn',
204
- {
205
- 'panel__content__form__section__toggler__btn--toggled':
206
- isGroupWorkspace,
207
- },
208
- )}
209
- tabIndex={-1}
210
- >
211
- {isGroupWorkspace ? <CheckSquareIcon /> : <SquareIcon />}
212
- </button>
213
- <div className="panel__content__form__section__toggler__prompt">
214
- Group workspaces can be edited by all users in the
215
- corresponding project.
216
- </div>
217
- </div>
218
- </div>
219
- </div>
220
- <div className="panel__content__form__actions">
221
- <button
222
- disabled={
223
- dispatchingActions || !workspaceName || !currentProjectId
224
- }
225
- className="btn btn--dark"
226
- >
227
- Create
228
- </button>
229
- </div>
230
- </form>
231
- </div>
232
- </Dialog>
233
- );
234
- });
61
+ const WorkspaceSetupStoreContext = createContext<
62
+ WorkspaceSetupStore | undefined
63
+ >(undefined);
235
64
 
236
- const WorkspaceSetupContent = observer(() => {
237
- const setupStore = useWorkspaceSetupStore();
65
+ const WorkspaceSetupStoreProvider: React.FC<{
66
+ children: React.ReactNode;
67
+ }> = ({ children }) => {
238
68
  const applicationStore = useLegendStudioApplicationStore();
239
- const projectSelectorRef = useRef<SelectComponent>(null);
240
- const workspaceSelectorRef = useRef<SelectComponent>(null);
241
- const proceedButtonRef = useRef<HTMLButtonElement>(null);
242
- const documentation = applicationStore.documentationService.getDocEntry(
243
- LEGEND_STUDIO_DOCUMENTATION_KEY.SETUP_WORKSPACE,
69
+ const sdlcServerClient = useSDLCServerClient();
70
+ const store = useLocalObservable(
71
+ () => new WorkspaceSetupStore(applicationStore, sdlcServerClient),
244
72
  );
245
- const isCreatingWorkspace = setupStore.createWorkspaceState.isInProgress;
246
- const isCreatingOrImportingProject =
247
- setupStore.createOrImportProjectState.isInProgress;
248
- const disableProceedButton =
249
- !setupStore.currentProjectId ||
250
- !setupStore.currentWorkspaceCompositeId ||
251
- isCreatingWorkspace ||
252
- isCreatingOrImportingProject;
253
- const onProjectChange = (focusNext: boolean): void =>
254
- focusNext
255
- ? workspaceSelectorRef.current?.focus()
256
- : projectSelectorRef.current?.focus();
257
- const onWorkspaceChange = (focusNext: boolean): void =>
258
- focusNext
259
- ? proceedButtonRef.current?.focus()
260
- : workspaceSelectorRef.current?.focus();
261
- const handleCreateProjectModal = (): void =>
262
- setupStore.setShowCreateProjectModal(true);
263
- const handleCreateWorkspaceModal = (): void =>
264
- setupStore.setShowCreateWorkspaceModal(true);
265
- const handleProceed = (): void => {
266
- if (
267
- setupStore.currentProjectId &&
268
- setupStore.currentProject &&
269
- setupStore.currentWorkspaceCompositeId &&
270
- setupStore.currentWorkspace
271
- ) {
272
- applicationStore.navigator.goTo(
273
- generateEditorRoute(
274
- setupStore.currentProjectId,
275
- setupStore.currentWorkspace.workspaceId,
276
- setupStore.currentWorkspace.workspaceType,
277
- ),
278
- );
279
- }
280
- };
281
- const toggleAssistant = (): void =>
282
- applicationStore.assistantService.toggleAssistant();
283
-
284
- useEffect(() => {
285
- if (!disableProceedButton) {
286
- proceedButtonRef.current?.focus();
287
- }
288
- }, [disableProceedButton]);
289
-
290
73
  return (
291
- <div className="app__page">
292
- <div className="workspace-setup">
293
- <div className="workspace-setup__body">
294
- <div className="activity-bar">
295
- {/*
296
- TODO: consider what we can put here and componentize it
297
- Currently, we reuse the one from editor which might
298
- no longer be right in the future
299
- */}
300
- <ActivityBarMenu />
301
- </div>
302
- <div
303
- className="workspace-setup__content"
304
- data-testid={LEGEND_STUDIO_TEST_ID.SETUP__CONTENT}
305
- >
306
- <div className="workspace-setup__content__main">
307
- <div className="workspace-setup__title">
308
- <div className="workspace-setup__title__header">
309
- Setup Workspace
310
- <DocumentationLink
311
- className="workspace-setup__doc__setup-workspace"
312
- documentationKey={
313
- LEGEND_STUDIO_DOCUMENTATION_KEY.SETUP_WORKSPACE
314
- }
315
- />
316
- </div>
317
- {documentation?.markdownText && (
318
- <div className="workspace-setup__title__documentation">
319
- <MarkdownTextViewer value={documentation.markdownText} />
320
- </div>
321
- )}
322
- </div>
323
- <div>
324
- <ProjectSelector
325
- ref={projectSelectorRef}
326
- onChange={onProjectChange}
327
- create={handleCreateProjectModal}
328
- />
329
- <WorkspaceSelector
330
- ref={workspaceSelectorRef}
331
- onChange={onWorkspaceChange}
332
- create={handleCreateWorkspaceModal}
333
- />
334
- <div className="workspace-setup__actions">
335
- <button
336
- ref={proceedButtonRef}
337
- className="workspace-setup__next-btn btn--dark"
338
- onClick={handleProceed}
339
- disabled={disableProceedButton}
340
- >
341
- Edit Workspace
342
- </button>
343
- </div>
344
- </div>
345
- {/* NOTE: We do this to reset the initial state of the modals */}
346
- {setupStore.showCreateProjectModal && <CreateProjectModal />}
347
- {setupStore.showCreateWorkspaceModal && <CreateWorkspaceModal />}
348
- </div>
349
- </div>
350
- </div>
74
+ <WorkspaceSetupStoreContext.Provider value={store}>
75
+ {children}
76
+ </WorkspaceSetupStoreContext.Provider>
77
+ );
78
+ };
351
79
 
352
- <div
353
- data-testid={LEGEND_STUDIO_TEST_ID.STATUS_BAR}
354
- className="editor__status-bar"
355
- >
356
- <div className="editor__status-bar__left"></div>
357
- <div className="editor__status-bar__right">
358
- <button
359
- className={clsx(
360
- 'editor__status-bar__action editor__status-bar__action__toggler',
361
- {
362
- 'editor__status-bar__action__toggler--active':
363
- !applicationStore.assistantService.isHidden,
364
- },
365
- )}
366
- onClick={toggleAssistant}
367
- tabIndex={-1}
368
- title="Toggle assistant"
369
- >
370
- <AssistantIcon />
371
- </button>
372
- </div>
373
- </div>
374
- </div>
375
- </div>
80
+ export const useWorkspaceSetupStore = (): WorkspaceSetupStore =>
81
+ guaranteeNonNullable(
82
+ useContext(WorkspaceSetupStoreContext),
83
+ `Can't find workspace setup store in context`,
376
84
  );
377
- });
85
+
86
+ const withWorkspaceSetupStore = (WrappedComponent: React.FC): React.FC =>
87
+ function WithWorkspaceSetupStore() {
88
+ return (
89
+ <WorkspaceSetupStoreProvider>
90
+ <WrappedComponent />
91
+ </WorkspaceSetupStoreProvider>
92
+ );
93
+ };
378
94
 
379
95
  export const WorkspaceSetup = withWorkspaceSetupStore(
380
96
  observer(() => {
381
97
  const params = useParams<SetupPathParams>();
98
+ const projectId = params[LEGEND_STUDIO_PATH_PARAM_TOKEN.PROJECT_ID];
99
+ const workspaceId = params[LEGEND_STUDIO_PATH_PARAM_TOKEN.WORKSPACE_ID];
100
+ const groupWorkspaceId =
101
+ params[LEGEND_STUDIO_PATH_PARAM_TOKEN.GROUP_WORKSPACE_ID];
382
102
  const setupStore = useWorkspaceSetupStore();
383
- const applicationStore = useApplicationStore();
103
+ const applicationStore = useLegendStudioApplicationStore();
104
+ const [projectSearchText, setProjectSearchText] = useState('');
105
+
106
+ const toggleAssistant = (): void =>
107
+ applicationStore.assistantService.toggleAssistant();
108
+ const documentation = applicationStore.documentationService.getDocEntry(
109
+ LEGEND_STUDIO_DOCUMENTATION_KEY.SETUP_WORKSPACE,
110
+ );
111
+
112
+ // projects
113
+ const projectOptions = setupStore.projects
114
+ .map(buildProjectOption)
115
+ .sort(compareLabelFn);
116
+ const selectedProjectOption = setupStore.currentProject
117
+ ? buildProjectOption(setupStore.currentProject)
118
+ : null;
119
+
120
+ const onProjectChange = (val: ProjectOption | null): void => {
121
+ if (val) {
122
+ flowResult(setupStore.changeProject(val.value)).catch(
123
+ applicationStore.alertUnhandledError,
124
+ );
125
+ } else {
126
+ setupStore.resetProject();
127
+ }
128
+ };
129
+ const showCreateProjectModal = (): void =>
130
+ setupStore.setShowCreateProjectModal(true);
131
+
132
+ // project search text
133
+ const debouncedLoadProjects = useMemo(
134
+ () =>
135
+ debounce((input: string): void => {
136
+ flowResult(setupStore.loadProjects(input)).catch(
137
+ applicationStore.alertUnhandledError,
138
+ );
139
+ }, 500),
140
+ [applicationStore, setupStore],
141
+ );
142
+ const onProjectSearchTextChange = (value: string): void => {
143
+ if (value !== projectSearchText) {
144
+ setProjectSearchText(value);
145
+ debouncedLoadProjects.cancel();
146
+ debouncedLoadProjects(value);
147
+ }
148
+ };
149
+
150
+ // workspaces
151
+ const workspaceOptions = setupStore.workspaces
152
+ .map(buildWorkspaceOption)
153
+ .sort(compareLabelFn);
154
+ const selectedWorkspaceOption = setupStore.currentWorkspace
155
+ ? buildWorkspaceOption(setupStore.currentWorkspace)
156
+ : null;
157
+
158
+ const onWorkspaceChange = (val: WorkspaceOption | null): void => {
159
+ if (val) {
160
+ setupStore.changeWorkspace(val.value);
161
+ } else {
162
+ setupStore.resetWorkspace();
163
+ }
164
+ };
165
+ const showCreateWorkspaceModal = (): void =>
166
+ setupStore.setShowCreateWorkspaceModal(true);
167
+
168
+ const handleProceed = (): void => {
169
+ if (setupStore.currentProject && setupStore.currentWorkspace) {
170
+ applicationStore.navigator.goTo(
171
+ generateEditorRoute(
172
+ setupStore.currentProject.projectId,
173
+ setupStore.currentWorkspace.workspaceId,
174
+ setupStore.currentWorkspace.workspaceType,
175
+ ),
176
+ );
177
+ }
178
+ };
179
+
384
180
  useEffect(() => {
385
- setupStore.setCurrentProjectId(params.projectId);
386
- setupStore.init(params.workspaceId, params.groupWorkspaceId);
387
- }, [setupStore, params]);
181
+ flowResult(
182
+ setupStore.initialize(projectId, workspaceId, groupWorkspaceId),
183
+ ).catch(applicationStore.alertUnhandledError);
184
+ }, [
185
+ setupStore,
186
+ applicationStore,
187
+ projectId,
188
+ workspaceId,
189
+ groupWorkspaceId,
190
+ ]);
388
191
 
389
192
  useEffect(() => {
390
- flowResult(setupStore.fetchProjects()).catch(
193
+ flowResult(setupStore.loadProjects('')).catch(
391
194
  applicationStore.alertUnhandledError,
392
195
  );
393
- if (setupStore.currentProjectId) {
394
- flowResult(
395
- setupStore.fetchWorkspaces(setupStore.currentProjectId),
396
- ).catch(applicationStore.alertUnhandledError);
397
- }
398
- }, [applicationStore, setupStore]);
196
+ }, [setupStore, applicationStore]);
399
197
 
400
198
  useApplicationNavigationContext(
401
199
  LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.SETUP,
402
200
  );
403
201
 
404
- return <WorkspaceSetupContent />;
202
+ return (
203
+ <div className="app__page">
204
+ <div className="workspace-setup">
205
+ <div className="workspace-setup__body">
206
+ <div className="activity-bar">
207
+ <ActivityBarMenu />
208
+ </div>
209
+ <div
210
+ className="workspace-setup__content"
211
+ data-testid={LEGEND_STUDIO_TEST_ID.SETUP__CONTENT}
212
+ >
213
+ <div className="workspace-setup__content__main">
214
+ <div className="workspace-setup__title">
215
+ <div className="workspace-setup__title__header">
216
+ Setup Workspace
217
+ <DocumentationLink
218
+ className="workspace-setup__doc__setup-workspace"
219
+ documentationKey={
220
+ LEGEND_STUDIO_DOCUMENTATION_KEY.SETUP_WORKSPACE
221
+ }
222
+ />
223
+ </div>
224
+ {documentation?.markdownText && (
225
+ <div className="workspace-setup__title__documentation">
226
+ <MarkdownTextViewer value={documentation.markdownText} />
227
+ </div>
228
+ )}
229
+ </div>
230
+ <form onSubmit={handleProceed}>
231
+ <div className="workspace-setup__selector">
232
+ <div
233
+ className="workspace-setup__selector__icon"
234
+ title="project"
235
+ >
236
+ <RepoIcon className="workspace-setup__selector__icon--project" />
237
+ </div>
238
+ <CustomSelectorInput
239
+ className="workspace-setup__selector__input"
240
+ options={projectOptions}
241
+ isLoading={setupStore.loadProjectsState.isInProgress}
242
+ onInputChange={onProjectSearchTextChange}
243
+ inputValue={projectSearchText}
244
+ onChange={onProjectChange}
245
+ value={selectedProjectOption}
246
+ placeholder="Search for project..."
247
+ isClearable={true}
248
+ escapeClearsValue={true}
249
+ darkMode={true}
250
+ formatOptionLabel={getProjectOptionLabelFormatter(
251
+ applicationStore,
252
+ )}
253
+ />
254
+ <button
255
+ className="workspace-setup__selector__action btn--dark"
256
+ onClick={showCreateProjectModal}
257
+ tabIndex={-1}
258
+ type="button" // prevent this toggler being activated on form submission
259
+ title="Create a Project"
260
+ >
261
+ <PlusIcon />
262
+ </button>
263
+ </div>
264
+ <div className="workspace-setup__selector">
265
+ <div
266
+ className="workspace-setup__selector__icon"
267
+ title="workspace"
268
+ >
269
+ <GitBranchIcon className="workspace-setup__selector__icon--workspace" />
270
+ </div>
271
+ <CustomSelectorInput
272
+ className="workspace-setup__selector__input"
273
+ options={workspaceOptions}
274
+ disabled={
275
+ !setupStore.currentProject ||
276
+ setupStore.loadProjectsState.isInProgress ||
277
+ setupStore.loadWorkspacesState.isInProgress
278
+ }
279
+ isLoading={setupStore.loadWorkspacesState.isInProgress}
280
+ onChange={onWorkspaceChange}
281
+ formatOptionLabel={formatWorkspaceOptionLabel}
282
+ value={selectedWorkspaceOption}
283
+ placeholder={
284
+ setupStore.loadWorkspacesState.isInProgress
285
+ ? 'Loading workspaces...'
286
+ : !setupStore.currentProject
287
+ ? 'In order to select a workspace, a project must be selected'
288
+ : workspaceOptions.length
289
+ ? 'Choose an existing workspace'
290
+ : 'You have no workspaces. Please create one to proceed...'
291
+ }
292
+ isClearable={true}
293
+ escapeClearsValue={true}
294
+ darkMode={true}
295
+ />
296
+ <button
297
+ className="workspace-setup__selector__action btn--dark"
298
+ onClick={showCreateWorkspaceModal}
299
+ disabled={!setupStore.currentProject}
300
+ tabIndex={-1}
301
+ type="button" // prevent this toggler being activated on form submission
302
+ title="Create a Workspace"
303
+ >
304
+ <PlusIcon />
305
+ </button>
306
+ </div>
307
+ <div className="workspace-setup__actions">
308
+ <button
309
+ className="workspace-setup__next-btn btn--dark"
310
+ onClick={handleProceed}
311
+ disabled={
312
+ !setupStore.currentProject ||
313
+ !setupStore.currentWorkspace ||
314
+ setupStore.createWorkspaceState.isInProgress ||
315
+ setupStore.createOrImportProjectState.isInProgress
316
+ }
317
+ >
318
+ Edit Workspace
319
+ </button>
320
+ </div>
321
+ </form>
322
+ {/* NOTE: We do this to reset the initial state of the modals */}
323
+ {setupStore.showCreateProjectModal && <CreateProjectModal />}
324
+ {setupStore.showCreateWorkspaceModal &&
325
+ setupStore.currentProject && (
326
+ <CreateWorkspaceModal
327
+ selectedProject={setupStore.currentProject}
328
+ />
329
+ )}
330
+ </div>
331
+ </div>
332
+ </div>
333
+
334
+ <div
335
+ data-testid={LEGEND_STUDIO_TEST_ID.STATUS_BAR}
336
+ className="editor__status-bar"
337
+ >
338
+ <div className="editor__status-bar__left"></div>
339
+ <div className="editor__status-bar__right">
340
+ <button
341
+ className={clsx(
342
+ 'editor__status-bar__action editor__status-bar__action__toggler',
343
+ {
344
+ 'editor__status-bar__action__toggler--active':
345
+ !applicationStore.assistantService.isHidden,
346
+ },
347
+ )}
348
+ onClick={toggleAssistant}
349
+ tabIndex={-1}
350
+ title="Toggle assistant"
351
+ >
352
+ <AssistantIcon />
353
+ </button>
354
+ </div>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ );
405
359
  }),
406
360
  );