From 41c50e3b28cd14bebf34c298c7120c4f747347cd Mon Sep 17 00:00:00 2001 From: Oskar Date: Sun, 25 Apr 2021 19:45:23 +0200 Subject: [PATCH 1/2] Use most traded pair before all pairs fetched --- src/actions/index.js | 109 ++++++++++++--------------------------- src/actions/pickCoins.js | 57 ++++++++++++++++++++ 2 files changed, 89 insertions(+), 77 deletions(-) create mode 100644 src/actions/pickCoins.js diff --git a/src/actions/index.js b/src/actions/index.js index 3b8c69a0c..20b4abd97 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,6 +7,7 @@ import serialize from 'Utils/serialize'; import preparePairs from 'Utils/preparePairs'; import i18n from 'Src/i18n'; import generateDepth from '../utils/generateDepth'; +import { pickedCoinsPair, mostTradedPair } from './pickCoins'; export const errorAlert = payload => ({ type: types.ERROR_ALERT, @@ -275,19 +276,37 @@ export const fetchPrice = payload => dispatch => { }); }; -export const fetchPairs = ({ base, quote } = {}) => dispatch => { +export const fetchPairs = ({ base, quote } = {}) => async dispatch => { const url = `${config.API_BASE_URL}/pair/`; const request = axios.get(url); + let params = urlParams(); + const pathNameParams = window.location.pathname.split('/'); + // Checks if pathname section of url has params. + if (pathNameParams[1] === 'pair') { + params = {}; + params.pair = pathNameParams[2].toUpperCase(); + } else { + //Assuming that we can safely choose most traded pair if there is no URL param + let { base: deposit, quote: receive } = await mostTradedPair(); + dispatch( + selectCoin({ + deposit, + receive, + prev: { + deposit, + receive, + }, + lastSelected: 'deposit', + selectedByUser: { + deposit: false, + receive: false, + }, + }) + ); + } return request .then(async response => { - let params = urlParams(); - const pathNameParams = window.location.pathname.split('/'); - // Checks if pathname section of url has params. - if (pathNameParams[1] === 'pair') { - params = {}; - params.pair = pathNameParams[2].toUpperCase(); - } const pairs = response.data.filter(pair => { if (params && params.hasOwnProperty('test')) { return !pair.disabled; @@ -302,79 +321,15 @@ export const fetchPairs = ({ base, quote } = {}) => dispatch => { payload: processedPairs, }); - let depositCoin = base; - let receiveCoin = quote; - - const loadPair = pair => { - const url = `${config.API_BASE_URL}/pair/${pair.toUpperCase()}/`; - return new Promise((resolve, reject) => { - axios - .get(url) - .then(res => resolve(res.data)) - .catch(err => { - resolve(pickRandomPair()); - }); - }); - }; + let { base: deposit, quote: receive } = await pickedCoinsPair(base, quote, params, pairs); - const pickMostTraded = () => { - return new Promise((resolve, reject) => { - axios - .get(`${config.API_BASE_URL}/pair/most_traded/`) - .then(res => resolve(res.data)) - .catch(err => resolve(null)); - }); - }; - - const pickRandomPair = async () => { - const pair = pairs[Math.floor(Math.random() * pairs.length)]; - depositCoin = pair.quote; - receiveCoin = pair.base; - }; - - // Picks random deposit and receive coins. - const pickCoins = async () => { - // Checks if url has params. If yes then update accordingly and if no then pick random coins. - if (base && quote) { - try { - const pair = await loadPair(`${base}${quote}`); - if (pair) { - depositCoin = pair.quote; - receiveCoin = pair.base; - } - } catch (err) { - /* istanbul ignore next */ - console.log('Error:', err); - } - } else if (params && params.hasOwnProperty('pair')) { - try { - const pair = await loadPair(params.pair); - if (pair) { - depositCoin = pair.quote; - receiveCoin = pair.base; - } - } catch (err) { - /* istanbul ignore next */ - console.log('Error:', err); - } - } else { - const pair = await pickMostTraded(); - if (pair) { - depositCoin = pair.quote; - receiveCoin = pair.base; - } else { - pickRandomPair(); - } - } - }; - await pickCoins(); dispatch( selectCoin({ - deposit: depositCoin, - receive: receiveCoin, + deposit, + receive, prev: { - deposit: depositCoin, - receive: receiveCoin, + deposit, + receive, }, lastSelected: 'deposit', selectedByUser: { diff --git a/src/actions/pickCoins.js b/src/actions/pickCoins.js new file mode 100644 index 000000000..148c22ec5 --- /dev/null +++ b/src/actions/pickCoins.js @@ -0,0 +1,57 @@ +import axios from 'axios'; +import config from 'Config'; + +// Picks random deposit and receive coins. +export const pickedCoinsPair = async (base, quote, params, pairs) => { + // Checks if url has params. If yes then update accordingly and if no then pick random coins. + if (base && quote) { + try { + const pair = await loadPair(`${base}${quote}`, pairs); + if (pair) { + return { depositCoin: pair.quote, receiveCoin: pair.base }; + } + } catch (err) { + /* istanbul ignore next */ + console.log('Error:', err); + } + } else if (params && params.hasOwnProperty('pair')) { + try { + const pair = await loadPair(params.pair, pairs); + if (pair) { + return pair; + } + } catch (err) { + /* istanbul ignore next */ + console.log('Error:', err); + } + } else { + const pair = await mostTradedPair(); + if (pair) { + return pair; + } else { + return randomPair(pairs); + } + } +}; + +export const mostTradedPair = () => + new Promise((resolve, reject) => { + axios + .get(`${config.API_BASE_URL}/pair/most_traded/`) + .then(res => resolve(res.data)) + .catch(err => resolve(null)); + }); + +const loadPair = (pair, pairs) => { + const url = `${config.API_BASE_URL}/pair/${pair.toUpperCase()}/`; + return new Promise((resolve, reject) => { + axios + .get(url) + .then(res => resolve(res.data)) + .catch(err => { + resolve(randomPair(pairs)); + }); + }); +}; + +const randomPair = pairs => pairs[Math.floor(Math.random() * pairs.length)]; From 0a40cdef57b1753e89787b1913a50717446d9694 Mon Sep 17 00:00:00 2001 From: Oskar Date: Mon, 26 Apr 2021 10:25:34 +0200 Subject: [PATCH 2/2] Refactor error handling --- src/actions/index.js | 54 +++++++++++++------------------------ src/actions/pickCoins.js | 57 ---------------------------------------- src/actions/pickPair.js | 19 ++++++++++++++ 3 files changed, 37 insertions(+), 93 deletions(-) delete mode 100644 src/actions/pickCoins.js create mode 100644 src/actions/pickPair.js diff --git a/src/actions/index.js b/src/actions/index.js index 20b4abd97..d8b66772a 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,7 +7,7 @@ import serialize from 'Utils/serialize'; import preparePairs from 'Utils/preparePairs'; import i18n from 'Src/i18n'; import generateDepth from '../utils/generateDepth'; -import { pickedCoinsPair, mostTradedPair } from './pickCoins'; +import pickedPair from './pickPair'; export const errorAlert = payload => ({ type: types.ERROR_ALERT, @@ -286,25 +286,25 @@ export const fetchPairs = ({ base, quote } = {}) => async dispatch => { if (pathNameParams[1] === 'pair') { params = {}; params.pair = pathNameParams[2].toUpperCase(); - } else { - //Assuming that we can safely choose most traded pair if there is no URL param - let { base: deposit, quote: receive } = await mostTradedPair(); - dispatch( - selectCoin({ + } + + let { base: deposit, quote: receive } = await pickedPair({ base, quote }, params); + dispatch( + selectCoin({ + deposit, + receive, + prev: { deposit, receive, - prev: { - deposit, - receive, - }, - lastSelected: 'deposit', - selectedByUser: { - deposit: false, - receive: false, - }, - }) - ); - } + }, + lastSelected: 'deposit', + selectedByUser: { + deposit: false, + receive: false, + }, + }) + ); + return request .then(async response => { const pairs = response.data.filter(pair => { @@ -320,24 +320,6 @@ export const fetchPairs = ({ base, quote } = {}) => async dispatch => { type: types.PAIRS_FETCHED, payload: processedPairs, }); - - let { base: deposit, quote: receive } = await pickedCoinsPair(base, quote, params, pairs); - - dispatch( - selectCoin({ - deposit, - receive, - prev: { - deposit, - receive, - }, - lastSelected: 'deposit', - selectedByUser: { - deposit: false, - receive: false, - }, - }) - ); }) .catch(error => { /* istanbul ignore next */ diff --git a/src/actions/pickCoins.js b/src/actions/pickCoins.js deleted file mode 100644 index 148c22ec5..000000000 --- a/src/actions/pickCoins.js +++ /dev/null @@ -1,57 +0,0 @@ -import axios from 'axios'; -import config from 'Config'; - -// Picks random deposit and receive coins. -export const pickedCoinsPair = async (base, quote, params, pairs) => { - // Checks if url has params. If yes then update accordingly and if no then pick random coins. - if (base && quote) { - try { - const pair = await loadPair(`${base}${quote}`, pairs); - if (pair) { - return { depositCoin: pair.quote, receiveCoin: pair.base }; - } - } catch (err) { - /* istanbul ignore next */ - console.log('Error:', err); - } - } else if (params && params.hasOwnProperty('pair')) { - try { - const pair = await loadPair(params.pair, pairs); - if (pair) { - return pair; - } - } catch (err) { - /* istanbul ignore next */ - console.log('Error:', err); - } - } else { - const pair = await mostTradedPair(); - if (pair) { - return pair; - } else { - return randomPair(pairs); - } - } -}; - -export const mostTradedPair = () => - new Promise((resolve, reject) => { - axios - .get(`${config.API_BASE_URL}/pair/most_traded/`) - .then(res => resolve(res.data)) - .catch(err => resolve(null)); - }); - -const loadPair = (pair, pairs) => { - const url = `${config.API_BASE_URL}/pair/${pair.toUpperCase()}/`; - return new Promise((resolve, reject) => { - axios - .get(url) - .then(res => resolve(res.data)) - .catch(err => { - resolve(randomPair(pairs)); - }); - }); -}; - -const randomPair = pairs => pairs[Math.floor(Math.random() * pairs.length)]; diff --git a/src/actions/pickPair.js b/src/actions/pickPair.js new file mode 100644 index 000000000..66c7040cd --- /dev/null +++ b/src/actions/pickPair.js @@ -0,0 +1,19 @@ +import axios from 'axios'; +import config from 'Config'; + +// Picks random deposit and receive coins. +export default async ({ base, quote }, params) => { + // Checks if url has params. If yes then update accordingly and if no then pick random coins. + let response; + if (base && quote) { + response = await loadPair(`${base}${quote}`, pairs).catch(console.error); + } else if (params && params.hasOwnProperty('pair')) { + response = await loadPair(params.pair).catch(console.error); + } else { + response = await mostTradedPair().catch(console.error); + } + return response.data; +}; + +const mostTradedPair = () => axios.get(`${config.API_BASE_URL}/pair/most_traded/`); +const loadPair = pair => axios.get(`${config.API_BASE_URL}/pair/${pair.toUpperCase()}/`);