diff --git a/src/lib/project-fetcher-hoc.jsx b/src/lib/project-fetcher-hoc.jsx index 1879d69e582468e3af8ffa5377f7a80c1e5e544a..9f82fb3d7b878a9f9c430ccf67b5f0d080148a92 100644 --- a/src/lib/project-fetcher-hoc.jsx +++ b/src/lib/project-fetcher-hoc.jsx @@ -8,12 +8,18 @@ import {setProjectUnchanged} from '../reducers/project-changed'; import { LoadingStates, defaultProjectId, + getIsCreatingNew, getIsFetchingWithId, + getIsLoading, getIsShowingProject, onFetchedProjectData, projectError, setProjectId } from '../reducers/project-state'; +import { + activateTab, + BLOCKS_TAB_INDEX +} from '../reducers/editor-tab'; import analytics from './analytics'; import log from './log'; @@ -59,6 +65,9 @@ const ProjectFetcherHOC = function (WrappedComponent) { if (this.props.isShowingProject && !prevProps.isShowingProject) { this.props.onProjectLoaded(); } + if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) { + this.props.onActivateTab(BLOCKS_TAB_INDEX); + } } fetchProject (projectId, loadingState) { return storage @@ -89,7 +98,9 @@ const ProjectFetcherHOC = function (WrappedComponent) { /* eslint-disable no-unused-vars */ assetHost, intl, + isLoadingProject: isLoadingProjectProp, loadingState, + onActivateTab, onError: onErrorProp, onFetchedProjectData: onFetchedProjectDataProp, projectHost, @@ -113,7 +124,9 @@ const ProjectFetcherHOC = function (WrappedComponent) { canSave: PropTypes.bool, intl: intlShape.isRequired, isFetchingWithId: PropTypes.bool, + isLoadingProject: PropTypes.bool, loadingState: PropTypes.oneOf(LoadingStates), + onActivateTab: PropTypes.func, onError: PropTypes.func, onFetchedProjectData: PropTypes.func, projectHost: PropTypes.string, @@ -127,12 +140,15 @@ const ProjectFetcherHOC = function (WrappedComponent) { }; const mapStateToProps = state => ({ + isCreatingNew: getIsCreatingNew(state.scratchGui.projectState.loadingState), isFetchingWithId: getIsFetchingWithId(state.scratchGui.projectState.loadingState), + isLoadingProject: getIsLoading(state.scratchGui.projectState.loadingState), isShowingProject: getIsShowingProject(state.scratchGui.projectState.loadingState), loadingState: state.scratchGui.projectState.loadingState, reduxProjectId: state.scratchGui.projectState.projectId }); const mapDispatchToProps = dispatch => ({ + onActivateTab: tab => dispatch(activateTab(tab)), onError: error => dispatch(projectError(error)), onFetchedProjectData: (projectData, loadingState) => dispatch(onFetchedProjectData(projectData, loadingState)), diff --git a/src/reducers/project-state.js b/src/reducers/project-state.js index edec52a537c0f9fde8d9cbb07fbeffb281038227..a587844243a80dbac98e152b18989c614c6056c8 100644 --- a/src/reducers/project-state.js +++ b/src/reducers/project-state.js @@ -58,6 +58,11 @@ const getIsLoadingWithId = loadingState => ( loadingState === LoadingState.LOADING_VM_WITH_ID || loadingState === LoadingState.LOADING_VM_NEW_DEFAULT ); +const getIsLoading = loadingState => ( + loadingState === LoadingState.LOADING_VM_FILE_UPLOAD || + loadingState === LoadingState.LOADING_VM_WITH_ID || + loadingState === LoadingState.LOADING_VM_NEW_DEFAULT +); const getIsCreatingNew = loadingState => ( loadingState === LoadingState.CREATING_NEW ); @@ -488,6 +493,7 @@ export { getIsError, getIsFetchingWithId, getIsFetchingWithoutId, + getIsLoading, getIsLoadingWithId, getIsManualUpdating, getIsRemixing,