mirror of
https://github.com/status-im/MyCrypto.git
synced 2025-01-31 13:25:29 +00:00
88532cdc3c
* progress * Normalize bity api response * Filter api response * Track swap information in component state * Update dropdown onchange * remove dead code * Update Min Max Validation * Update minmax err msg && fix onChangeOriginKind * Add origin & destination to redux state * Update types & Update tests * Update types * Update swap.spec.ts test * Remove commented out code * Remove hardcoded coin array * Create types.ts for swap reducer * Update swapinput type * Update bityRates in localStorage & Replace all instances of ...Kind / ...Amount props * Add shapeshift banner * initial work for sagas * Update Types * Update swap reducer initial state * Update Types & Store empty obj for bityRates / options * Update more types * added shapeshift file and rates comments * action reducers and prop mapping to components * add typings and swap icon * more actions reducers and sagas * debugging shapeshift service * add Headers * Fix content type * add order reset saga and ui fixes * remove console log and swap b/w Bity and Shapeshift * working state for Shapeshift and Bity - tested with mainnet * add icon component * UI improvements and fix select bug * fix timer bug * add bity fallback options and toFixed floats * tslint errors * add arrow to dropdown and add support footer * Add service provider * fix minor $ bug and stop timer on order complete * better load UX and dropdown UX * fixed single test * currRate prop bugs and reduce LS bloat * takeEvery on timer saga and don't clear state.options to restartSwap reducer * export tx sagas and fix minor type * Add ShapeShift Rates functionality when selecting a ShapeShift pair. * type fixes * BugFix: Don't change displayed ShapeShift Rate Inputs on every dropdown change Also contains some caching / performance improvements * BugFix: Don't remote rate inputs when falsy amount * fix type error * Progress commit * Implement saga logic * Make address field factory component * Shorten debounce time * Make new actions / sagas for handling single token lookup * Implement working version of litesend * Change saga into selector * Add failing spec * fix broken test * add debounce to error message * fix tests * update snapshots * test coverage * move setState disabled property from debounce so we instantly can go to next step on valid amounts * much deeper test coverage, fix debounce ux, and fix bity flashing at swap page load * fix minor failing test * seperate shapeshift erc20 token whitelist * fix saveState store bug * break orderTimeRemaining saga up and rewrite tests * add new swap icon * remove unused allowReadOnly prop * change offlineaware to walletdecrypt for litesend * fix LiteSend changewallet bug * fix error message UX * fix button styling to match develop * fix liteSend test * Fix LiteSend UX on unavl tokens, dropdown null value, and don't show decrypt in litesend after successful wallet decrypt. * add litesend network check
106 lines
2.7 KiB
TypeScript
106 lines
2.7 KiB
TypeScript
import bityConfig, { WhitelistedCoins } from 'config/bity';
|
|
import { checkHttpStatus, parseJSON, filter } from './utils';
|
|
import bitcoinIcon from 'assets/images/bitcoin.png';
|
|
import repIcon from 'assets/images/augur.png';
|
|
import etherIcon from 'assets/images/ether.png';
|
|
|
|
const isCryptoPair = (from: string, to: string, arr: WhitelistedCoins[]) => {
|
|
return filter(from, arr) && filter(to, arr);
|
|
};
|
|
|
|
const btcOptions = {
|
|
id: 'BTC',
|
|
status: 'available',
|
|
image: bitcoinIcon,
|
|
name: 'Bitcoin'
|
|
};
|
|
|
|
const ethOptions = {
|
|
id: 'ETH',
|
|
status: 'available',
|
|
image: etherIcon,
|
|
name: 'Ether'
|
|
};
|
|
|
|
const repOptions = {
|
|
id: 'REP',
|
|
status: 'available',
|
|
image: repIcon,
|
|
name: 'Augur'
|
|
};
|
|
|
|
export function getAllRates() {
|
|
const mappedRates = {};
|
|
return _getAllRates().then(bityRates => {
|
|
bityRates.objects.forEach(each => {
|
|
const pairName = each.pair;
|
|
const from = { id: pairName.substring(0, 3) };
|
|
const to = { id: pairName.substring(3, 6) };
|
|
// Check if rate exists= && check if the pair only crypto to crypto, not crypto to fiat, or any other combination
|
|
if (parseFloat(each.rate_we_sell) && isCryptoPair(from.id, to.id, ['BTC', 'ETH', 'REP'])) {
|
|
let fromOptions;
|
|
let toOptions;
|
|
switch (from.id) {
|
|
case 'BTC':
|
|
fromOptions = btcOptions;
|
|
break;
|
|
case 'ETH':
|
|
fromOptions = ethOptions;
|
|
break;
|
|
case 'REP':
|
|
fromOptions = repOptions;
|
|
}
|
|
switch (to.id) {
|
|
case 'BTC':
|
|
toOptions = btcOptions;
|
|
break;
|
|
case 'ETH':
|
|
toOptions = ethOptions;
|
|
break;
|
|
case 'REP':
|
|
toOptions = repOptions;
|
|
}
|
|
mappedRates[pairName] = {
|
|
id: pairName,
|
|
options: [fromOptions, toOptions],
|
|
rate: parseFloat(each.rate_we_sell)
|
|
};
|
|
}
|
|
});
|
|
return mappedRates;
|
|
});
|
|
}
|
|
|
|
export function postOrder(amount: number, destAddress: string, mode: number, pair: string) {
|
|
return fetch(`${bityConfig.serverURL}/order`, {
|
|
method: 'post',
|
|
body: JSON.stringify({
|
|
amount,
|
|
destAddress,
|
|
mode,
|
|
pair
|
|
}),
|
|
headers: new Headers(bityConfig.postConfig.headers)
|
|
})
|
|
.then(checkHttpStatus)
|
|
.then(parseJSON);
|
|
}
|
|
|
|
export function getOrderStatus(orderId: string) {
|
|
return fetch(`${bityConfig.serverURL}/status`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
orderid: orderId
|
|
}),
|
|
headers: new Headers(bityConfig.postConfig.headers)
|
|
})
|
|
.then(checkHttpStatus)
|
|
.then(parseJSON);
|
|
}
|
|
|
|
function _getAllRates() {
|
|
return fetch(`${bityConfig.bityURL}/v1/rate2/`)
|
|
.then(checkHttpStatus)
|
|
.then(parseJSON);
|
|
}
|