diff --git a/src/actions/transactions.js b/src/actions/transactions.js index e885b19..75ba3c3 100644 --- a/src/actions/transactions.js +++ b/src/actions/transactions.js @@ -28,6 +28,7 @@ export const fetchComissions = async ({ commit }) => { export const createOrdersFromDistribution = async (store) => { const { commit, rootGetters, getters } = store; + if (getters.areTransactionsProcessing) return; const distribution = getters.getPendingDistribution; if (!distribution) return; const userId = rootGetters['account/getAccountUserId']; @@ -57,7 +58,6 @@ export const createOrdersFromDistribution = async (store) => { } }); - // const update = calcPortfolioDistributionChange(baseBalances, distribution); const orders = API.Market.generateOrders({ userId, @@ -67,6 +67,8 @@ export const createOrdersFromDistribution = async (store) => { }); console.log(orders); + // if sell finished, only update buy orders + commit(types.UPDATE_PENDING_ORDERS, { orders }); }; @@ -81,12 +83,20 @@ export const removePendingDistribution = (store) => { commit(types.REMOVE_PENDING_DISTRIBUTION); }; + +export const handleOrdersError = (store) => { + const { commit } = store; + commit(types.PROCESS_PENDING_ORDERS_ERROR); + createOrdersFromDistribution(store); +}; + + export const processPendingOrders = async (store) => { const { getters, commit, rootGetters } = store; commit(types.PROCESS_PENDING_ORDERS_REQUEST); const keys = rootGetters['account/getKeys']; if (!keys) { - commit(types.PROCESS_PENDING_ORDERS_ERROR); + handleOrdersError(store); return { success: false, error: 'Account is locked' @@ -98,7 +108,7 @@ export const processPendingOrders = async (store) => { orders: pendingOrders.sellOrders, keys }); if (!sellResult.success) { - commit(types.PROCESS_PENDING_ORDERS_ERROR); + handleOrdersError(store); return { success: false, error: sellResult.error @@ -113,7 +123,7 @@ export const processPendingOrders = async (store) => { }); console.log(buyResult); if (!buyResult.success) { - commit(types.PROCESS_PENDING_ORDERS_ERROR); + handleOrdersError(store); return { success: false, error: buyResult.error diff --git a/src/modules/market.js b/src/modules/market.js index 0f9ecc9..8e051d8 100644 --- a/src/modules/market.js +++ b/src/modules/market.js @@ -53,6 +53,7 @@ const actions = { assetsIds.forEach(id => { console.log('unsubscribing: ', id); API.Market.unsubscribeFromExchangeRate(id); + API.Market.unsubscribeFromMarkets(); }); }, diff --git a/src/modules/transactions.js b/src/modules/transactions.js index bd63cc0..7c15af8 100644 --- a/src/modules/transactions.js +++ b/src/modules/transactions.js @@ -5,11 +5,15 @@ import * as actions from '../actions/transactions'; const initialState = { pendingDistributionUpdate: null, - pendingOrders: {}, + pendingOrders: { + sellOrders: [], + buyOrders: [] + }, pendingTransfer: false, pending: false, error: null, transactionsProcessing: false, + sellOrdersProcessed: false, fees: { order: { fee: 0 @@ -23,7 +27,8 @@ const initialState = { const getters = { getPendingOrders: state => state.pendingOrders, - hasPendingOrders: state => state.pendingOrders.sellOrders || state.pendingOrders.buyOrders, + hasPendingOrders: state => state.pendingOrders.sellOrders.length + || state.pendingOrders.buyOrders.length, getPendingDistribution: state => state.pendingDistributionUpdate, hasPendingTransfer: state => state.pendingTransfer !== false, areTransactionsProcessing: state => state.transactionsProcessing, @@ -52,6 +57,7 @@ const mutations = { state.transactionsProcessing = false; }, [types.UPDATE_PENDING_ORDERS](state, { orders }) { + if (state.sellOrdersProcessed) orders.sellOrders = []; Vue.set(state, 'pendingOrders', orders); }, [types.SET_PENDING_DISTRIBUTION](state, { distribution }) { @@ -59,7 +65,9 @@ const mutations = { }, [types.REMOVE_PENDING_DISTRIBUTION](state) { state.pendingDistributionUpdate = null; - state.pendingOrders = {}; + state.pendingOrders.sellOrders = []; + state.pendingOrders.buyOrders = []; + state.sellOrdersProcessed = false; }, [types.PROCESS_PENDING_ORDERS_REQUEST](state) { state.transactionsProcessing = true; @@ -78,6 +86,7 @@ const mutations = { }, [types.PROCESS_PENDING_ORDERS_SELL_COMPLETE](state) { state.pendingOrders.sellOrders = []; + state.sellOrdersProcessed = true; } };