Skip to content

Commit

Permalink
fix(sb): infinite scroll on fiat fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Philip London committed Jul 17, 2020
1 parent 04efa25 commit 5e78ba8
Show file tree
Hide file tree
Showing 17 changed files with 121 additions and 50 deletions.
Expand Up @@ -6,6 +6,7 @@ import * as btcTransactions from './btcTransactions/actionTypes'
import * as ethTransactions from './ethTransactions/actionTypes'
import * as exchange from './exchange/actionTypes'
import * as exchangeHistory from './exchangeHistory/actionTypes'
import * as fiatTransactions from './fiatTransactions/actionTypes'
import * as identityVerification from './identityVerification/actionTypes'
import * as importBtcAddress from './importBtcAddress/actionTypes'
import * as interest from './interest/actionTypes'
Expand Down Expand Up @@ -45,6 +46,7 @@ export {
xlmTransactions,
exchange,
exchangeHistory,
fiatTransactions,
identityVerification,
importBtcAddress,
interest,
Expand Down
Expand Up @@ -6,6 +6,7 @@ import * as btcTransactions from './btcTransactions/actions'
import * as ethTransactions from './ethTransactions/actions'
import * as exchange from './exchange/actions'
import * as exchangeHistory from './exchangeHistory/actions'
import * as fiatTransactions from './fiatTransactions/actions'
import * as identityVerification from './identityVerification/actions'
import * as importBtcAddress from './importBtcAddress/actions'
import * as interest from './interest/actions'
Expand Down Expand Up @@ -45,6 +46,7 @@ export {
xlmTransactions,
exchange,
exchangeHistory,
fiatTransactions,
identityVerification,
importBtcAddress,
interest,
Expand Down
@@ -0,0 +1,5 @@
export const FIAT_TRANSACTIONS_INITIALIZED =
'@EVENT.FIAT_TX.TRANSACTIONS_INITIALIZED'

export const FIAT_TRANSACTIONS_LOAD_MORE =
'@EVENT.FIAT_TX.TRANSACTIONS_LOAD_MORE'
@@ -0,0 +1,12 @@
import * as AT from './actionTypes'
import { FiatType } from 'core/types'

export const initialized = (currency: FiatType) => ({
type: AT.FIAT_TRANSACTIONS_INITIALIZED,
payload: { currency }
})

export const loadMore = (currency: FiatType) => ({
type: AT.FIAT_TRANSACTIONS_LOAD_MORE,
payload: { currency }
})
@@ -0,0 +1,18 @@
import * as AT from './actionTypes'
import { takeEvery, takeLatest } from 'redux-saga/effects'
import sagas from './sagas'

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

return function * fiatTransactionsSaga () {
yield takeEvery(
AT.FIAT_TRANSACTIONS_INITIALIZED,
fiatTransactionsSagas.initialized
)
yield takeLatest(
AT.FIAT_TRANSACTIONS_LOAD_MORE,
fiatTransactionsSagas.loadMore
)
}
}
@@ -0,0 +1,32 @@
import { actions } from 'data'
import { put } from 'redux-saga/effects'

import * as A from './actions'

export const logLocation = 'components/fiatTransactions/sagas'

export default () => {
const initialized = function * (action: ReturnType<typeof A.initialized>) {
try {
yield put(
actions.core.data.fiat.fetchTransactions(action.payload.currency, true)
)
} catch (e) {
yield put(actions.logs.logErrorMessage(logLocation, 'initialized', e))
}
}

const loadMore = function * (action: ReturnType<typeof A.loadMore>) {
try {
yield put(
actions.core.data.fiat.fetchTransactions(action.payload.currency)
)
} catch (e) {
yield put(actions.logs.logErrorMessage(logLocation, 'loadMore', e))
}
}
return {
initialized,
loadMore
}
}
Expand Up @@ -7,6 +7,7 @@ import btcTransactions from './btcTransactions/sagaRegister'
import ethTransactions from './ethTransactions/sagaRegister'
import exchange from './exchange/sagaRegister'
import exchangeHistory from './exchangeHistory/sagaRegister'
import fiatTransactions from './fiatTransactions/sagaRegister'
import identityVerification from './identityVerification/sagaRegister'
import importBtcAddress from './importBtcAddress/sagaRegister'
import interest from './interest/sagaRegister'
Expand Down Expand Up @@ -43,6 +44,7 @@ export default ({ api, coreSagas, networks }) =>
yield fork(xlmTransactions())
yield fork(exchange({ api, coreSagas, networks }))
yield fork(exchangeHistory({ api, coreSagas }))
yield fork(fiatTransactions({ api, coreSagas }))
yield fork(identityVerification({ api, coreSagas }))
yield fork(interest({ api, coreSagas, networks }))
yield fork(lockbox({ api, coreSagas }))
Expand Down
Expand Up @@ -6,6 +6,7 @@ import btcTransactions from './btcTransactions/sagas'
import ethTransactions from './ethTransactions/sagas'
import exchange from './exchange/exchange.sagas'
import exchangeHistory from './exchangeHistory/sagas'
import fiatTransactions from './fiatTransactions/sagas'
import identityVerification from './identityVerification/sagas.ts'
import importBtcAddress from './importBtcAddress/sagas'
import interest from './interest/sagas'
Expand Down Expand Up @@ -40,6 +41,7 @@ export default ({ api, coreSagas, networks }) => ({
xlmTransactions: xlmTransactions(),
exchange: exchange({ api, coreSagas, networks }),
exchangeHistory: exchangeHistory({ api, coreSagas }),
fiatTransactions: fiatTransactions({ api, coreSagas }),
identityVerification: identityVerification({ api, coreSagas, networks }),
interest: interest({ api, coreSagas, networks }),
importBtcAddress: importBtcAddress({ api, coreSagas, networks }),
Expand Down
Expand Up @@ -98,7 +98,6 @@ const Navigation = (props: OwnProps & Props) => {
mapObjIndexed(
(coin: SupportedCoinType, i) =>
coin &&
coin.method &&
coin.invited &&
coin.txListAppRoute && (
<LinkContainer
Expand Down
@@ -1,6 +1,4 @@
import media from 'services/ResponsiveService'
import React from 'react'
import styled from 'styled-components'

import { SBTransactionType } from 'core/types'
import { TransactionRow } from '../components'
Expand Down
Expand Up @@ -118,14 +118,17 @@ class TransactionsContainer extends React.PureComponent<Props> {
</Text>
</PageTitle>
<ExplainerWrapper>{getHeaderExplainer(coinModel)}</ExplainerWrapper>
<StatsContainer>
{/* <WalletBalanceDropdown
coin={coin}
coinModel={coinModel}
isCoinErc20={isCoinErc20}
/>
<CoinPerformance coin={coin} coinModel={coinModel} /> */}
</StatsContainer>
{/* TODO: render dropdown for fiat */}
{!(coin in FiatTypeEnum) && (
<StatsContainer>
<WalletBalanceDropdown
coin={coin}
coinModel={coinModel}
isCoinErc20={isCoinErc20}
/>
<CoinPerformance coin={coin} coinModel={coinModel} />
</StatsContainer>
)}
</Header>
{(hasTxResults || isSearchEntered) && (
<TransactionFilters coin={coin} />
Expand Down Expand Up @@ -181,8 +184,9 @@ const mapDispatchToProps = (dispatch: Dispatch, ownProps) => {
return {
fetchData: () => {},
loadMoreTxs: () =>
dispatch(actions.core.data.fiat.fetchTransactions(coin)),
initTxs: () => dispatch(actions.core.data.fiat.fetchTransactions(coin))
dispatch(actions.components.fiatTransactions.loadMore(coin)),
initTxs: () =>
dispatch(actions.components.fiatTransactions.initialized(coin))
}
}
return {
Expand Down
Expand Up @@ -237,7 +237,7 @@ export default ({

const getSBTransactions = (
currency: FiatType,
next?: string,
next?: string | null,
limit?: string,
type?: 'DEPOSIT' | 'WITHDRAWAL',
state?: SBTransactionStateType
Expand All @@ -246,7 +246,7 @@ export default ({
? authorizedGet({
url: nabuUrl,
endPoint: next,
ignoreQueryParams: true,
ignoreQueryParams: true
})
: authorizedGet({
url: nabuUrl,
Expand Down
@@ -1,15 +1,12 @@
import * as AT from './actionTypes'
import { takeLatest } from 'redux-saga/effects'
import { fork, takeLatest } from 'redux-saga/effects'
import sagas from './sagas'

export default ({ api }) => {
const dataAlgoSagas = sagas({ api })

return function * coreDataAlgoSaga () {
yield takeLatest(AT.FETCH_ALGO_RATES, dataAlgoSagas.fetchRates)
yield takeLatest(
AT.FETCH_ALGO_TRANSACTIONS,
dataAlgoSagas.fetchTransactions
)
yield fork(dataAlgoSagas.watchTransactions)
}
}
13 changes: 11 additions & 2 deletions packages/blockchain-wallet-v4/src/redux/data/algo/sagas.ts
@@ -1,10 +1,11 @@
import { call, put, select } from 'redux-saga/effects'
import { call, put, select, take } from 'redux-saga/effects'
import { flatten, last, length } from 'ramda'

import { APIType } from 'core/network/api'
import Remote from '../../../remote'

import * as A from './actions'
import * as AT from './actionTypes'
import * as S from './selectors'
import { SBOrderType } from 'core/types'
import moment from 'moment'
Expand All @@ -25,6 +26,13 @@ export default ({ api }: { api: APIType }) => {
}
}

const watchTransactions = function * () {
while (true) {
const action = yield take(AT.FETCH_ALGO_TRANSACTIONS)
yield call(fetchTransactions, action)
}
}

const fetchTransactions = function * (
action: ReturnType<typeof A.fetchTransactions>
) {
Expand Down Expand Up @@ -57,6 +65,7 @@ export default ({ api }: { api: APIType }) => {

return {
fetchRates,
fetchTransactions
fetchTransactions,
watchTransactions
}
}
@@ -1,14 +1,10 @@
import * as AT from './actionTypes'
import { takeLatest } from 'redux-saga/effects'
import { fork } from 'redux-saga/effects'
import sagas from './sagas'

export default ({ api }) => {
const dataFiatSagas = sagas({ api })

return function * coreDataFiatSaga () {
yield takeLatest(
AT.FETCH_FIAT_TRANSACTIONS,
dataFiatSagas.fetchTransactions
)
yield fork(dataFiatSagas.watchTransactions)
}
}
15 changes: 12 additions & 3 deletions packages/blockchain-wallet-v4/src/redux/data/fiat/sagas.ts
@@ -1,14 +1,22 @@
import { call, put, select } from 'redux-saga/effects'
import { call, put, select, take } from 'redux-saga/effects'
import { last } from 'ramda'

import { APIType } from 'core/network/api'
import Remote from '../../../remote'

import * as A from './actions'
import * as AT from './actionTypes'
import * as S from './selectors'
import { errorHandler } from 'blockchain-wallet-v4/src/utils'

export default ({ api }: { api: APIType }) => {
const watchTransactions = function * () {
while (true) {
const action = yield take(AT.FETCH_FIAT_TRANSACTIONS)
yield call(fetchTransactions, action)
}
}

const fetchTransactions = function * (
action: ReturnType<typeof A.fetchTransactions>
) {
Expand All @@ -17,7 +25,7 @@ export default ({ api }: { api: APIType }) => {
const { reset } = payload
const data = S.getFiatData(action.payload.currency, yield select())
if (data && Remote.Loading.is(last(data.transactions))) return
const next = data && data.next.getOrElse(undefined)
const next = data && data.next.getOrElse(null)
if (!next && !reset && data?.transactions.length) return
yield put(A.fetchTransactionsLoading(action.payload.currency, !!reset))
const response: ReturnType<typeof api.getSBTransactions> = yield call(
Expand All @@ -35,6 +43,7 @@ export default ({ api }: { api: APIType }) => {
}

return {
fetchTransactions
fetchTransactions,
watchTransactions
}
}
22 changes: 3 additions & 19 deletions packages/blockchain-wallet-v4/src/redux/walletOptions/selectors.ts
Expand Up @@ -11,9 +11,7 @@ import {
set,
toUpper
} from 'ramda'
import { FiatTypeEnum } from 'blockchain-wallet-v4/src/types'
import { getInvitations } from '../settings/selectors'
import { getSBPaymentMethods } from 'data/components/simpleBuy/selectors'
import { RootState } from 'data/rootReducer'
import { SupportedCoinType } from './types'

Expand All @@ -36,29 +34,15 @@ export const getAdsUrl = state => getWebOptions(state).map(path(['ads', 'url']))

// coins
export const getSupportedCoins = createDeepEqualSelector(
[getInvitations, getWebOptions, getSBPaymentMethods],
(invitationsR, webOptionsR, sbPaymentMethods) => {
[getInvitations, getWebOptions],
(invitationsR, webOptionsR) => {
const addInvited = (obj, coin) => {
// @ts-ignore
const invited = invitationsR.map(propOr(true, coin)).getOrElse(false)
return set(lensProp('invited'), invited, obj)
}
const addMethod = (obj, coin) => {
const methods = sbPaymentMethods.getOrElse({
currency: 'USD',
methods: []
})
const method =
coin in FiatTypeEnum
? methods.methods.find(method => method.currency === coin)
: true
return set(lensProp('method'), method, obj)
}

return webOptionsR
.map(prop('coins'))
.map(mapObjIndexed(addInvited))
.map(mapObjIndexed(addMethod))
return webOptionsR.map(prop('coins')).map(mapObjIndexed(addInvited))
}
)
export const getSyncToExchangeList = state =>
Expand Down

0 comments on commit 5e78ba8

Please sign in to comment.