From efcb99c4514ab5d51c42f75cca236108748563e6 Mon Sep 17 00:00:00 2001 From: Valentin Hervieu Date: Tue, 7 May 2019 19:42:55 +0200 Subject: [PATCH 1/2] Reset isForkingSandbox on error Close #1803. I'm not sure what's the best way to reset some state on error with Cerebral though. Basically, I'd like to be able to always reset this state at the end of the `forkSandbox` sequence (https://github.com/codesandbox/codesandbox-client/blob/master/packages/app/src/app/store/sequences.js#L162) instead of doing this in every single action called by this sequence. --- packages/app/src/app/store/actions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app/src/app/store/actions.js b/packages/app/src/app/store/actions.js index d84f516d8a4..1e3b25b1181 100644 --- a/packages/app/src/app/store/actions.js +++ b/packages/app/src/app/store/actions.js @@ -176,7 +176,8 @@ export function forkSandbox({ state, props, api }) { return api .post(url, props.body || {}) - .then(data => ({ forkedSandbox: data })); + .then(data => ({ forkedSandbox: data })) + .catch(() => state.set('editor.isForkingSandbox', false)); } export function moveModuleContent({ props, state }) { From 5c13369adf70369d75c35acd28d8b15a95b2fa53 Mon Sep 17 00:00:00 2001 From: Valentin Hervieu Date: Wed, 8 May 2019 21:27:03 +0200 Subject: [PATCH 2/2] Use path for success/error --- packages/app/src/app/store/actions.js | 6 +++--- packages/app/src/app/store/sequences.js | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/app/src/app/store/actions.js b/packages/app/src/app/store/actions.js index 1e3b25b1181..bea71792221 100644 --- a/packages/app/src/app/store/actions.js +++ b/packages/app/src/app/store/actions.js @@ -168,7 +168,7 @@ export function getGitChanges({ api, state }) { .then(gitChanges => ({ gitChanges })); } -export function forkSandbox({ state, props, api }) { +export function forkSandbox({ state, props, api, path }) { const sandboxId = props.sandboxId || state.get('editor.currentId'); const url = sandboxId.includes('/') ? `/sandboxes/fork/${sandboxId}` @@ -176,8 +176,8 @@ export function forkSandbox({ state, props, api }) { return api .post(url, props.body || {}) - .then(data => ({ forkedSandbox: data })) - .catch(() => state.set('editor.isForkingSandbox', false)); + .then(data => path.success({ forkedSandbox: data })) + .catch(error => path.error({ error })); } export function moveModuleContent({ props, state }) { diff --git a/packages/app/src/app/store/sequences.js b/packages/app/src/app/store/sequences.js index 13d4b616097..ab1f83d0120 100644 --- a/packages/app/src/app/store/sequences.js +++ b/packages/app/src/app/store/sequences.js @@ -166,13 +166,18 @@ export const forkSandbox = sequence('forkSandbox', [ factories.track('Fork Sandbox', {}), set(state`editor.isForkingSandbox`, true), actions.forkSandbox, - actions.moveModuleContent, - setSandboxData, - set(state`editor.currentId`, props`sandbox.id`), - factories.addNotification('Forked sandbox!', 'success'), - factories.updateSandboxUrl(props`sandbox`), - ensurePackageJSON, - set(state`editor.isForkingSandbox`, false), + { + success: [ + actions.moveModuleContent, + setSandboxData, + set(state`editor.currentId`, props`sandbox.id`), + factories.addNotification('Forked sandbox!', 'success'), + factories.updateSandboxUrl(props`sandbox`), + ensurePackageJSON, + set(state`editor.isForkingSandbox`, false), + ], + error: set(state`editor.isForkingSandbox`, false), + }, ], false: [ factories.track('Show Server Fork Sign In Modal', {}),