From c95f36162a7e8152a354cf96035d4d06aa87510f Mon Sep 17 00:00:00 2001 From: Monia <3ditds@gmail.com> Date: Sat, 11 May 2019 17:11:52 +0300 Subject: [PATCH] feat: wait for response before sending another request (#185) * feat: wait for response to send another request * chore: lint * refactor: fix test --- .../unit/reducers/SwapReducer.spec.js | 2 + src/reducers/swapReducer.js | 3 + src/views/swap/index.js | 1 + src/views/swap/swap.js | 58 ++++++++++--------- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/__test__/unit/reducers/SwapReducer.spec.js b/src/__test__/unit/reducers/SwapReducer.spec.js index be696a9..677658a 100644 --- a/src/__test__/unit/reducers/SwapReducer.spec.js +++ b/src/__test__/unit/reducers/SwapReducer.spec.js @@ -18,6 +18,7 @@ describe('swap reducer', () => { ) ).toEqual({ isFetching: true, + retry: false, }); }); @@ -31,6 +32,7 @@ describe('swap reducer', () => { } ) ).toEqual({ + retry: true, isFetching: false, swapResponse: 'payload', }); diff --git a/src/reducers/swapReducer.js b/src/reducers/swapReducer.js index 86edc6d..08e5bb5 100644 --- a/src/reducers/swapReducer.js +++ b/src/reducers/swapReducer.js @@ -1,6 +1,7 @@ import * as actionTypes from '../constants/actions'; export const initialState = { + retry: true, inSwapMode: false, webln: null, isFetching: false, @@ -26,6 +27,7 @@ const reducer = (state = initialState, action) => { case actionTypes.SWAP_REQUEST: return { ...state, + retry: false, isFetching: true, }; @@ -33,6 +35,7 @@ const reducer = (state = initialState, action) => { return { ...state, isFetching: false, + retry: true, swapResponse: action.payload, }; diff --git a/src/views/swap/index.js b/src/views/swap/index.js index a8229a6..33b79fd 100644 --- a/src/views/swap/index.js +++ b/src/views/swap/index.js @@ -10,6 +10,7 @@ const mapStateToProps = state => ({ webln: state.swapReducer.webln, swapInfo: state.swapReducer.swapInfo, swapResponse: state.swapReducer.swapResponse.response, + retrySwap: state.swapReducer.retry, swapStatus: state.swapReducer.swapStatus, inSwapMode: state.swapReducer.inSwapMode, }); diff --git a/src/views/swap/swap.js b/src/views/swap/swap.js index dd7ae7f..27637e7 100644 --- a/src/views/swap/swap.js +++ b/src/views/swap/swap.js @@ -38,15 +38,31 @@ class Swap extends Component { } }; + onExit = () => { + if (window.confirm('Are you sure you want to exit')) { + this.props.completeSwap(); + navigation.navHome(); + } + }; + + startSwap = cb => { + if (this.props.swapInfo.invoice && this.props.retrySwap) { + this.props.startSwap(this.props.swapInfo, cb); + } + }; + + completeSwap = () => { + this.props.completeSwap(); + navigation.navHome(); + }; + render() { const { classes, webln, setSwapInvoice, - completeSwap, swapInfo, swapResponse, - startSwap, swapStatus, } = this.props; return ( @@ -57,12 +73,7 @@ class Swap extends Component { range={4} stage={1} id={swapResponse ? swapResponse.id : null} - onExit={() => { - if (window.confirm('Are you sure you want to exit')) { - completeSwap(); - navigation.navHome(); - } - }} + onExit={this.onExit} > ( { - if (swapInfo.invoice) { - startSwap(swapInfo, props.nextStage); - } - }} + loadingText={ + !this.props.retrySwap + ? 'Executing swap...' + : 'Invalid invoice' + } + onPress={() => this.startSwap(props.nextStage)} /> )} /> @@ -132,9 +143,7 @@ class Swap extends Component { { - props.nextStage(); - }} + onPress={props.nextStage} /> )} /> @@ -149,22 +158,14 @@ class Swap extends Component { errorText={swapStatus.message} errorRender={() => {}} loadingRender={() => } - onPress={() => { - props.nextStage(); - }} + onPress={props.nextStage} /> )} /> ( - { - completeSwap(); - navigation.navHome(); - }} - /> + )} /> @@ -184,6 +185,7 @@ Swap.propTypes = { completeSwap: PropTypes.func, setSwapInvoice: PropTypes.func, onExit: PropTypes.func, + retrySwap: PropTypes.bool, nextStage: PropTypes.func, startSwap: PropTypes.func.isRequired, swapStatus: PropTypes.string.isRequired,