diff --git a/src/RedialContext.js b/src/RedialContext.js index 196af12..ed08322 100755 --- a/src/RedialContext.js +++ b/src/RedialContext.js @@ -185,7 +185,32 @@ export default class RedialContext extends Component { aborted, abort, loading: true, - prevRenderProps: this.state.aborted() ? this.state.prevRenderProps : this.props.renderProps, + prevRenderProps: this.state.loading || this.state.aborted() + ? this.state.prevRenderProps + : this.props.renderProps, + }); + + this.runBeforeTransition( + this.props.beforeTransition, + components, + renderProps, + force, + bail + ) + .catch((error) => { + let afterTransition = false; + if (error && error.afterTransition !== undefined) { + afterTransition = error.afterTransition; + error = error.error; // eslint-disable-line + } + + this.props.onError(error, { + reason: bail() || 'other', + // If not defined before it's a beforeTransition error + beforeTransition: !afterTransition, + router: this.props.renderProps.router, + abort: () => this.abort(true, abort), + }); }); if (this.props.parallel) { @@ -198,6 +223,7 @@ export default class RedialContext extends Component { ) .then(() => { if (this.completed.afterTransition) { + this.completed.afterTransition = false; this.props.onCompleted('afterTransition'); } }) @@ -218,29 +244,6 @@ export default class RedialContext extends Component { } }); } - - this.runBeforeTransition( - this.props.beforeTransition, - components, - renderProps, - force, - bail - ) - .catch((error) => { - let afterTransition = false; - if (error && error.afterTransition !== undefined) { - afterTransition = error.afterTransition; - error = error.error; // eslint-disable-line - } - - this.props.onError(error, { - reason: bail() || 'other', - // If not defined before it's a beforeTransition error - beforeTransition: !afterTransition, - router: this.props.renderProps.router, - abort: () => this.abort(true, abort), - }); - }); } runAfterTransition(hooks, components, renderProps, force = false, bail) {