From dc2106bccec8a53ae8d4292375f067c8b255045e Mon Sep 17 00:00:00 2001 From: Ben Wheeler <wheeler.benjamin@gmail.com> Date: Fri, 16 Nov 2018 17:27:38 -0500 Subject: [PATCH] save before saving as a copy --- src/reducers/project-state.js | 35 +++++++++++++------ .../reducers/project-state-reducer.test.js | 13 +++++-- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/reducers/project-state.js b/src/reducers/project-state.js index 8824d5d5a..cc4df27f3 100644 --- a/src/reducers/project-state.js +++ b/src/reducers/project-state.js @@ -9,16 +9,17 @@ const DONE_LOADING_VM_WITH_ID = 'scratch-gui/project-state/DONE_LOADING_VM_WITH_ const DONE_LOADING_VM_WITHOUT_ID = 'scratch-gui/project-state/DONE_LOADING_VM_WITHOUT_ID'; const DONE_REMIXING = 'scratch-gui/project-state/DONE_REMIXING'; const DONE_UPDATING = 'scratch-gui/project-state/DONE_UPDATING'; +const DONE_UPDATING_BEFORE_COPY = 'scratch-gui/project-state/DONE_UPDATING_BEFORE_COPY'; const DONE_UPDATING_BEFORE_NEW = 'scratch-gui/project-state/DONE_UPDATING_BEFORE_NEW'; const SET_PROJECT_ID = 'scratch-gui/project-state/SET_PROJECT_ID'; const START_AUTO_UPDATING = 'scratch-gui/project-state/START_AUTO_UPDATING'; -const START_CREATING_COPY = 'scratch-gui/project-state/START_CREATING_COPY'; const START_CREATING_NEW = 'scratch-gui/project-state/START_CREATING_NEW'; const START_ERROR = 'scratch-gui/project-state/START_ERROR'; const START_FETCHING_NEW = 'scratch-gui/project-state/START_FETCHING_NEW'; const START_LOADING_VM_FILE_UPLOAD = 'scratch-gui/project-state/START_LOADING_FILE_UPLOAD'; const START_MANUAL_UPDATING = 'scratch-gui/project-state/START_MANUAL_UPDATING'; const START_REMIXING = 'scratch-gui/project-state/START_REMIXING'; +const START_UPDATING_BEFORE_CREATING_COPY = 'scratch-gui/project-state/START_UPDATING_BEFORE_CREATING_COPY'; const START_UPDATING_BEFORE_CREATING_NEW = 'scratch-gui/project-state/START_UPDATING_BEFORE_CREATING_NEW'; const defaultProjectId = '0'; // hardcoded id of default project @@ -27,18 +28,19 @@ const LoadingState = keyMirror({ NOT_LOADED: null, ERROR: null, AUTO_UPDATING: null, - FETCHING_WITH_ID: null, + CREATING_COPY: null, + CREATING_NEW: null, FETCHING_NEW_DEFAULT: null, - LOADING_VM_WITH_ID: null, + FETCHING_WITH_ID: null, LOADING_VM_FILE_UPLOAD: null, LOADING_VM_NEW_DEFAULT: null, + LOADING_VM_WITH_ID: null, MANUAL_UPDATING: null, REMIXING: null, SHOWING_WITH_ID: null, SHOWING_WITHOUT_ID: null, - CREATING_COPY: null, - UPDATING_BEFORE_NEW: null, - CREATING_NEW: null + UPDATING_BEFORE_COPY: null, + UPDATING_BEFORE_NEW: null }); const LoadingStates = Object.keys(LoadingState); @@ -71,6 +73,7 @@ const getIsRemixing = loadingState => ( const getIsUpdating = loadingState => ( loadingState === LoadingState.AUTO_UPDATING || loadingState === LoadingState.MANUAL_UPDATING || + loadingState === LoadingState.UPDATING_BEFORE_COPY || loadingState === LoadingState.UPDATING_BEFORE_NEW ); const getIsShowingProject = loadingState => ( @@ -174,6 +177,13 @@ const reducer = function (state, action) { }); } return state; + case DONE_UPDATING_BEFORE_COPY: + if (state.loadingState === LoadingState.UPDATING_BEFORE_COPY) { + return Object.assign({}, state, { + loadingState: LoadingState.CREATING_COPY + }); + } + return state; case DONE_UPDATING_BEFORE_NEW: if (state.loadingState === LoadingState.UPDATING_BEFORE_NEW) { return Object.assign({}, state, { @@ -255,18 +265,16 @@ const reducer = function (state, action) { } return state; case START_REMIXING: - // do not set projectId to null, because we nay reference it in creating project if (state.loadingState === LoadingState.SHOWING_WITH_ID) { return Object.assign({}, state, { loadingState: LoadingState.REMIXING }); } return state; - case START_CREATING_COPY: - // do not set projectId to null, because we nay reference it in creating project + case START_UPDATING_BEFORE_CREATING_COPY: if (state.loadingState === LoadingState.SHOWING_WITH_ID) { return Object.assign({}, state, { - loadingState: LoadingState.CREATING_COPY + loadingState: LoadingState.UPDATING_BEFORE_COPY }); } return state; @@ -296,6 +304,7 @@ const reducer = function (state, action) { LoadingState.CREATING_COPY, LoadingState.MANUAL_UPDATING, LoadingState.REMIXING, + LoadingState.UPDATING_BEFORE_COPY, LoadingState.UPDATING_BEFORE_NEW ].includes(state.loadingState)) { return Object.assign({}, state, { @@ -397,6 +406,10 @@ const doneUpdatingProject = loadingState => { return { type: DONE_UPDATING }; + case LoadingState.UPDATING_BEFORE_COPY: + return { + type: DONE_UPDATING_BEFORE_COPY + }; case LoadingState.UPDATING_BEFORE_NEW: return { type: DONE_UPDATING_BEFORE_NEW @@ -434,7 +447,7 @@ const manualUpdateProject = () => ({ }); const saveProjectAsCopy = () => ({ - type: START_CREATING_COPY + type: START_UPDATING_BEFORE_CREATING_COPY }); const remixProject = () => ({ diff --git a/test/unit/reducers/project-state-reducer.test.js b/test/unit/reducers/project-state-reducer.test.js index d5375a3f9..657bd39a4 100644 --- a/test/unit/reducers/project-state-reducer.test.js +++ b/test/unit/reducers/project-state-reducer.test.js @@ -146,6 +146,15 @@ test('doneUpdatingProject with id shows with id', () => { expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); }); +test('doneUpdatingProject with id, before copy, creates copy', () => { + const initialState = { + loadingState: LoadingState.UPDATING_BEFORE_COPY + }; + const action = doneUpdatingProject(initialState.loadingState); + const resultState = projectStateReducer(initialState, action); + expect(resultState.loadingState).toBe(LoadingState.CREATING_COPY); +}); + test('doneUpdatingProject with id, before new, fetches default project', () => { const initialState = { loadingState: LoadingState.UPDATING_BEFORE_NEW @@ -251,13 +260,13 @@ test('autoUpdateProject should prepare to update', () => { expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING); }); -test('saveProjectAsCopy should prepare to save as a copy', () => { +test('saveProjectAsCopy should save, before preparing to save as a copy', () => { const initialState = { loadingState: LoadingState.SHOWING_WITH_ID }; const action = saveProjectAsCopy(); const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.CREATING_COPY); + expect(resultState.loadingState).toBe(LoadingState.UPDATING_BEFORE_COPY); }); test('remixProject should prepare to remix', () => { -- GitLab