Skip to content

Commit

Permalink
feat(add doge): much wow
Browse files Browse the repository at this point in the history
  • Loading branch information
plondon committed Jul 12, 2021
1 parent 1e0a85b commit 03a02eb
Show file tree
Hide file tree
Showing 22 changed files with 216 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -281,14 +281,23 @@ export const getAlgoBalanceInfo = createDeepEqualSelector(
)

export const getCloutBalanceInfo = createDeepEqualSelector(
[getAlgoBalance, selectors.core.data.clout.getRates, selectors.core.settings.getCurrency],
[getCloutBalance, selectors.core.data.clout.getRates, selectors.core.settings.getCurrency],
(cloutBalanceR, cloutRatesR, currencyR) => {
const transform = (value, rates, toCurrency) =>
Exchange.convertCoinToFiat({ coin: 'CLOUT', currency: toCurrency, rates, value })
return lift(transform)(cloutBalanceR, cloutRatesR, currencyR)
}
)

export const getDogeBalanceInfo = createDeepEqualSelector(
[getDogeBalance, selectors.core.data.doge.getRates, selectors.core.settings.getCurrency],
(dogeBalanceR, dogeRatesR, currencyR) => {
const transform = (value, rates, toCurrency) =>
Exchange.convertCoinToFiat({ coin: 'DOGE', currency: toCurrency, rates, value })
return lift(transform)(dogeBalanceR, dogeRatesR, currencyR)
}
)

export const getFiatBalanceInfo = createDeepEqualSelector(
[
selectors.core.data.btc.getRates,
Expand Down Expand Up @@ -336,6 +345,8 @@ export const getBalanceSelector = (coin: string) => {
return getBtcBalance
case 'CLOUT':
return getCloutBalance
case 'DOGE':
return getDogeBalance
case 'DOT':
return getDotBalance
case 'ETH':
Expand All @@ -358,6 +369,7 @@ export const getAllCoinsBalancesSelector = (state) => {
BCH: new BigNumber(getBchBalance(state).getOrElse(0)).valueOf(),
BTC: new BigNumber(getBtcBalance(state).getOrElse(0)).valueOf(),
CLOUT: getCloutBalance(state).getOrElse(new BigNumber(0)).valueOf(),
DOGE: getDogeBalance(state).getOrElse(new BigNumber(0)).valueOf(),
DOT: getDotBalance(state).getOrElse(new BigNumber(0)).valueOf(),
ETH: getEthBalance(state).getOrElse(new BigNumber(0)).valueOf(),
XLM: getXlmBalance(state).getOrElse(new BigNumber(0)).valueOf()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export const getTotalBalance = createDeepEqualSelector(
S.getBchBalanceInfo,
S.getBtcBalanceInfo,
S.getCloutBalanceInfo,
S.getDogeBalanceInfo,
S.getDotBalanceInfo,
S.getEthBalanceInfo,
S.getXlmBalanceInfo,
Expand All @@ -27,6 +28,7 @@ export const getTotalBalance = createDeepEqualSelector(
btcBalanceInfoR,
dotBalanceInfoR,
cloutBalanceInfoR,
dogeBalanceInfoR,
ethBalanceInfoR,
xlmBalanceInfoR,
fiatBalanceInfoR,
Expand All @@ -38,8 +40,9 @@ export const getTotalBalance = createDeepEqualSelector(
algoBalance,
bchBalance,
btcBalance,
cloutBalance,
dotBalance,
// cloutBalance,
// dogeBalance,
// dotBalance,
ethBalance,
xlmBalance,
fiatBalance,
Expand All @@ -54,9 +57,10 @@ export const getTotalBalance = createDeepEqualSelector(
Number(algoBalance) +
Number(bchBalance) +
Number(btcBalance) +
Number(cloutBalance) +
Number(cloutBalanceInfoR.getOrElse('0')) +
Number(dogeBalanceInfoR.getOrElse('0')) +
Number(dotBalanceInfoR.getOrElse('0')) +
Number(ethBalance) +
Number(dotBalance) +
Number(xlmBalance) +
Number(fiatBalance) +
erc20Balance
Expand All @@ -68,8 +72,9 @@ export const getTotalBalance = createDeepEqualSelector(
algoBalanceInfoR,
bchBalanceInfoR,
btcBalanceInfoR,
cloutBalanceInfoR,
dotBalanceInfoR,
// cloutBalanceInfoR,
// dogeBalanceInfoR,
// dotBalanceInfoR,
ethBalanceInfoR,
xlmBalanceInfoR,
fiatBalanceInfoR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const mapDispatchToProps = (dispatch) => ({
bchActions: bindActionCreators(actions.core.data.bch, dispatch),
btcActions: bindActionCreators(actions.core.data.btc, dispatch),
cloutActions: bindActionCreators(actions.core.data.clout, dispatch),
dogeActions: bindActionCreators(actions.core.data.doge, dispatch),
dotActions: bindActionCreators(actions.core.data.dot, dispatch),
ethActions: bindActionCreators(actions.core.data.eth, dispatch),
xlmActions: bindActionCreators(actions.core.data.xlm, dispatch)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const getData = (state, ownProps: OwnProps) => {
const { coin, includeCustodial } = ownProps
let addressDataR

// TODO: erc20 phase 2, remove hardcoded list
switch (coin) {
case 'BCH':
addressDataR = getBchAddressData(state, {
Expand All @@ -41,6 +42,13 @@ const getData = (state, ownProps: OwnProps) => {
includeInterest: false
})
break
case 'XLM':
addressDataR = getXlmAddressData(state, {
excludeLockbox: true,
includeCustodial,
includeInterest: false
})
break
case 'PAX':
addressDataR = getErc20AddressData(state, {
coin: 'PAX',
Expand All @@ -62,13 +70,6 @@ const getData = (state, ownProps: OwnProps) => {
includeInterest: false
})
break
case 'XLM':
addressDataR = getXlmAddressData(state, {
excludeLockbox: true,
includeCustodial,
includeInterest: false
})
break
case 'AAVE':
addressDataR = getErc20AddressData(state, {
coin: 'AAVE',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// @ts-ignore
import { concat, curry, reduce, sequence } from 'ramda'

import { Exchange, Remote } from 'blockchain-wallet-v4/src'
import { ADDRESS_TYPES } from 'blockchain-wallet-v4/src/redux/payment/btc/utils'
import { selectors } from 'data'

export const getData = (
state,
ownProps: {
exclude?: Array<string>
includeCustodial?: boolean
includeExchangeAddress?: boolean
}
) => {
const { /* exclude = [], */ includeCustodial, includeExchangeAddress } = ownProps

const buildCustodialDisplay = (x) => {
return (
`Trading Account` +
` (${Exchange.displayCoinToCoin({
coin: 'DOGE',
value: x ? x.available : 0
})})`
)
}
// @ts-ignore
// const excluded = filter(x => !exclude.includes(x.label))
const toGroup = curry((label, options) => [{ label, options }])
const toExchange = (x) => [{ label: `Exchange Account`, value: x }]
const toCustodialDropdown = (currencyDetails) => [
{
label: buildCustodialDisplay(currencyDetails),
value: {
...currencyDetails,
label: 'Trading Account',
type: ADDRESS_TYPES.CUSTODIAL
}
}
]

const exchangeAddress = selectors.components.send.getPaymentsAccountExchange('DOGE', state)
const hasExchangeAddress = Remote.Success.is(exchangeAddress)

return sequence(Remote.of, [
includeExchangeAddress && hasExchangeAddress
? exchangeAddress.map(toExchange).map(toGroup('Exchange'))
: Remote.of([]),
includeCustodial
? selectors.components.simpleBuy
.getSBBalances(state)
.map((x) => x.DOGE)
.map(toCustodialDropdown)
.map(toGroup('Custodial Wallet'))
: Remote.of([])
]).map(([b1, b2]) => ({
// @ts-ignore
data: reduce(concat, [], [b1, b2])
}))
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ export const SUPPORTED_COINS: Array<CoinType | string> = [
'USDT',
'WDGLD',
'ALGO',
'CLOUT'
'CLOUT',
'DOGE'
]

// used in the coin/account selector in Swap
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import React from 'react'
import { FormattedMessage } from 'react-intl'
import { lift } from 'ramda'

import { SBBalanceType } from 'blockchain-wallet-v4/src/network/api/simpleBuy/types'
import { ExtractSuccess } from 'blockchain-wallet-v4/src/remote/types'
import { CoinType } from 'blockchain-wallet-v4/src/types'
import { createDeepEqualSelector } from 'blockchain-wallet-v4/src/utils'
import { generateTradingAccount } from 'data/coins/utils'
import { SwapAccountType } from 'data/components/types'

import { getTradingBalance } from '..'

// retrieves introduction text for coin on its transaction page
export const getTransactionPageHeaderText = () => (
<FormattedMessage
id='coins.doge.intro'
defaultMessage='Dogecoin (DOGE) was created in 2013 as an alternative to traditional cryptocurrencies like Bitcoin.'
/>
)

// main selector for all DOGE account types
// accepts a CoinAccountSelectorType config object
// NOT IMPLEMENTED FOR COIN: non-custodial accounts, imported addresses/accounts
export const getAccounts = createDeepEqualSelector(
[
(state, { coin }) => getTradingBalance(coin, state), // custodial accounts
(state, ownProps) => ownProps // selector config
],
(sbBalanceR, ownProps) => {
const transform = (sbBalance: ExtractSuccess<typeof sbBalanceR>) => {
const { coin } = ownProps
let accounts: SwapAccountType[] = []

// add trading accounts if requested
if (ownProps?.tradingAccounts) {
accounts = accounts.concat(
generateTradingAccount(coin as CoinType, sbBalance as SBBalanceType)
)
}

return accounts
}

return lift(transform)(sbBalanceR)
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import * as ALGO from './coins/algo'
import * as BCH from './coins/bch'
import * as BTC from './coins/btc'
import * as CLOUT from './coins/clout'
import * as DOGE from './coins/doge'
import * as DOT from './coins/dot'
import * as ERC20 from './coins/erc20'
import * as ETH from './coins/eth'
Expand All @@ -26,6 +27,7 @@ const coinSelectors = {
BCH,
BTC,
CLOUT,
DOGE,
DOT,
ERC20,
ETH,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as borrow from './borrow/actionTypes'
import * as brokerage from './brokerage/actionTypes'
import * as btcTransactions from './btcTransactions/actionTypes'
import * as cloutTransactions from './cloutTransactions/actionTypes'
import * as dogeTransactions from './dogeTransactions/actionTypes'
import * as dotTransactions from './dotTransactions/actionTypes'
import * as ethTransactions from './ethTransactions/actionTypes'
import * as fiatTransactions from './fiatTransactions/actionTypes'
Expand Down Expand Up @@ -44,6 +45,7 @@ export {
brokerage,
btcTransactions,
cloutTransactions,
dogeTransactions,
dotTransactions,
ethTransactions,
fiatTransactions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as borrow from './borrow/actions'
import * as brokerage from './brokerage/actions'
import * as btcTransactions from './btcTransactions/actions'
import * as cloutTransactions from './cloutTransactions/actions'
import * as dogeTransactions from './dogeTransactions/actions'
import * as dotTransactions from './dotTransactions/actions'
import * as ethTransactions from './ethTransactions/actions'
import * as fiatTransactions from './fiatTransactions/actions'
Expand Down Expand Up @@ -44,6 +45,7 @@ export {
brokerage,
btcTransactions,
cloutTransactions,
dogeTransactions,
dotTransactions,
ethTransactions,
fiatTransactions,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const TRANSACTIONS_INITIALIZED = '@EVENT.DOGE_TX.TRANSACTIONS_INITIALIZED'

export const DOGE_TRANSACTIONS_LOAD_MORE = '@EVENT.DOGE_TX.TRANSACTIONS_LOAD_MORE'
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import * as AT from './actionTypes'

export const initialized = () => ({ type: AT.TRANSACTIONS_INITIALIZED })

export const loadMore = () => ({
type: AT.DOGE_TRANSACTIONS_LOAD_MORE
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { takeEvery, takeLatest } from 'redux-saga/effects'

import * as AT from './actionTypes'
import sagas from './sagas'

export default () => {
const dogeTransactionsSagas = sagas()

return function* dogeTransactionsSaga() {
yield takeEvery(AT.TRANSACTIONS_INITIALIZED, dogeTransactionsSagas.initialized)
yield takeLatest(AT.DOGE_TRANSACTIONS_LOAD_MORE, dogeTransactionsSagas.loadMore)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { put } from 'redux-saga/effects'

import { actions } from 'data'

export const logLocation = 'components/dogeTransactions/sagas'

export default () => {
const initialized = function* () {
try {
yield put(actions.core.data.doge.fetchTransactions('', true))
} catch (e) {
yield put(actions.logs.logErrorMessage(logLocation, 'initialized', e))
}
}

const loadMore = function* () {
try {
yield put(actions.core.data.doge.fetchTransactions())
} catch (e) {
yield put(actions.logs.logErrorMessage(logLocation, 'loadMore', e))
}
}
return {
initialized,
loadMore
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import borrow from './borrow/sagaRegister'
import brokerage from './brokerage/sagaRegister'
import btcTransactions from './btcTransactions/sagaRegister'
import cloutTransactions from './cloutTransactions/sagaRegister'
import dogeTransactions from './dogeTransactions/sagaRegister'
import dotTransactions from './dotTransactions/sagaRegister'
import ethTransactions from './ethTransactions/sagaRegister'
import fiatTransactions from './fiatTransactions/sagaRegister'
Expand Down Expand Up @@ -44,6 +45,7 @@ export default ({ api, coreSagas, networks }) =>
yield fork(bchTransactions())
yield fork(btcTransactions())
yield fork(cloutTransactions())
yield fork(dogeTransactions())
yield fork(dotTransactions())
yield fork(ethTransactions())
yield fork(xlmTransactions())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import borrow from './borrow/sagas'
import brokerage from './brokerage/sagas'
import btcTransactions from './btcTransactions/sagas'
import cloutTransactions from './cloutTransactions/sagas'
import dogeTransactions from './dogeTransactions/sagas'
import dotTransactions from './dotTransactions/sagas'
import ethTransactions from './ethTransactions/sagas'
import fiatTransactions from './fiatTransactions/sagas'
Expand Down Expand Up @@ -40,6 +41,7 @@ export default ({ api, coreSagas, networks }) => ({
brokerage: brokerage({ api, coreSagas, networks }),
btcTransactions: btcTransactions(),
cloutTransactions: cloutTransactions(),
dogeTransactions: dogeTransactions(),
dotTransactions: dotTransactions(),
ethTransactions: ethTransactions(),
fiatTransactions: fiatTransactions(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const getCoinsWithMethodAndOrder = (state: RootState) => {
coins.ALGO,
coins.DOT,
coins.CLOUT,
coins.DOGE,
// ...coins.rest // erc20s
...[...new Set([...erc20s.map(({ tokenSymbol }) => tokenSymbol), ...custodialErc20s])].map(
(value) => {
Expand Down

0 comments on commit 03a02eb

Please sign in to comment.