Skip to content

Commit

Permalink
Match defaultAltCurrency with Coinbase exchange rates
Browse files Browse the repository at this point in the history
  • Loading branch information
cmgustavo committed Jul 12, 2022
1 parent 59d7954 commit b9ba400
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 38 deletions.
44 changes: 36 additions & 8 deletions src/navigation/coinbase/components/CoinbaseBalanceCard.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import React from 'react';
import HomeCard from '../../../components/home-card/HomeCard';
import {formatFiatAmount} from '../../../utils/helper-methods';
import {
formatFiatAmount,
formatFiatAmountObj,
} from '../../../utils/helper-methods';
import {useNavigation} from '@react-navigation/native';
import CoinbaseSvg from '../../../../assets/img/logos/coinbase.svg';
import styled, {useTheme} from 'styled-components/native';
Expand All @@ -9,7 +12,13 @@ import {useAppSelector} from '../../../utils/hooks';
import {HomeCarouselLayoutType} from '../../../store/app/app.models';
import {Balance, KeyName} from '../../wallet/components/KeyDropdownOption';
import {BoxShadow} from '../../tabs/home/components/Styled';
import {LightBlack, White} from '../../../styles/colors';
import {BaseText} from '../../../components/styled/Text';
import {
LightBlack,
White,
NeutralSlate,
SlateDark,
} from '../../../styles/colors';
import {
ActiveOpacity,
Column,
Expand Down Expand Up @@ -46,6 +55,16 @@ const HeaderImgList = styled.View`
justify-content: center;
`;

const BalanceCode = styled(BaseText)`
font-size: 12px;
color: ${({theme: {dark}}) => (dark ? NeutralSlate : SlateDark)};
font-weight: 500;
`;

const BalanceCodeContainer = styled.View`
padding-left: 2px;
`;

const HeaderComponent = (
<HeaderImg>
<CoinbaseSvg width="22" height="22" />
Expand All @@ -68,14 +87,16 @@ const CoinbaseBalanceCard: React.FC<CoinbaseCardComponentProps> = ({
};
const balance =
useAppSelector(({COINBASE}) => COINBASE.balance[COINBASE_ENV]) || 0.0;
const user = useAppSelector(({COINBASE}) => COINBASE.user[COINBASE_ENV]);
const defaultAltCurrency = useAppSelector(({APP}) => APP.defaultAltCurrency);

const {amount, code} = formatFiatAmountObj(
balance,
defaultAltCurrency.isoCode,
);

const body = {
title: 'Coinbase',
value: formatFiatAmount(
balance,
user?.data?.native_currency?.toUpperCase(),
),
value: formatFiatAmount(balance, defaultAltCurrency.isoCode),
};

if (layout === 'listView') {
Expand All @@ -90,7 +111,14 @@ const CoinbaseBalanceCard: React.FC<CoinbaseCardComponentProps> = ({
<KeyName>Coinbase</KeyName>
</Column>
<Column style={{justifyContent: 'center', alignItems: 'flex-end'}}>
<Balance>{body.value}</Balance>
<Balance>
{amount}
{code ? (
<BalanceCodeContainer>
<BalanceCode>{code}</BalanceCode>
</BalanceCodeContainer>
) : null}
</Balance>
</Column>
</Row>
</ListCard>
Expand Down
15 changes: 8 additions & 7 deletions src/navigation/coinbase/components/CoinbaseDashboard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ const CoinbaseDashboard = () => {
({COINBASE}) => COINBASE.isApiLoading,
);
const exchangeRates = useAppSelector(({COINBASE}) => COINBASE.exchangeRates);
const user = useAppSelector(({COINBASE}) => COINBASE.user[COINBASE_ENV]);
const accounts = useAppSelector(
({COINBASE}) => COINBASE.accounts[COINBASE_ENV],
);
const balance =
useAppSelector(({COINBASE}) => COINBASE.balance[COINBASE_ENV]) || 0.0;
const defaultAltCurrency = useAppSelector(({APP}) => APP.defaultAltCurrency);

useLayoutEffect(() => {
navigation.setOptions({
Expand Down Expand Up @@ -120,7 +120,11 @@ const CoinbaseDashboard = () => {

const renderItem = useCallback(
({item}: any) => {
const walletItem = coinbaseAccountToWalletRow(item, exchangeRates);
const walletItem = coinbaseAccountToWalletRow(
item,
exchangeRates,
defaultAltCurrency.isoCode,
);
return (
<WalletRow
id={walletItem.id}
Expand All @@ -136,7 +140,7 @@ const CoinbaseDashboard = () => {
/>
);
},
[dispatch, navigation, exchangeRates],
[dispatch, navigation, exchangeRates, defaultAltCurrency.isoCode],
);

const showError = async (error: CoinbaseErrorsProps) => {
Expand Down Expand Up @@ -178,10 +182,7 @@ const CoinbaseDashboard = () => {
<BalanceContainer>
{balance ? (
<Balance scale={shouldScale(balance)}>
{formatFiatAmount(
balance,
user?.data?.native_currency?.toUpperCase(),
)}
{formatFiatAmount(balance, defaultAltCurrency.isoCode)}
</Balance>
) : (
<SkeletonPlaceholder
Expand Down
8 changes: 2 additions & 6 deletions src/navigation/coinbase/screens/CoinbaseAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,8 @@ const CoinbaseAccount = ({

const [selectedWallet, setSelectedWallet] = useState<Wallet>();

const defaultAltCurrency = useAppSelector(({APP}) => APP.defaultAltCurrency);
const exchangeRates = useAppSelector(({COINBASE}) => COINBASE.exchangeRates);
const user = useAppSelector(({COINBASE}) => COINBASE.user[COINBASE_ENV]);
const transactions = useAppSelector(
({COINBASE}) => COINBASE.transactions[COINBASE_ENV],
);
Expand Down Expand Up @@ -279,7 +279,6 @@ const CoinbaseAccount = ({
exchangeRates,
);
setFiatAmount(fa);
console.log(fa);
setCryptoAmount(account.balance.amount.toString());
} else {
setFiatAmount(0);
Expand Down Expand Up @@ -447,10 +446,7 @@ const CoinbaseAccount = ({
<Row>
<H5>
{fiatAmount
? formatFiatAmount(
fiatAmount,
user?.data?.native_currency?.toUpperCase(),
)
? formatFiatAmount(fiatAmount, defaultAltCurrency.isoCode)
: '0'}
</H5>
{account?.primary && <Type>Primary</Type>}
Expand Down
12 changes: 1 addition & 11 deletions src/navigation/tabs/home/components/PortfolioBalance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,6 @@ const PercentageContainer = styled.View`

const PortfolioBalance = () => {
const {t} = useTranslation();
const coinbaseUser = useAppSelector(
({COINBASE}) => COINBASE.user[COINBASE_ENV],
);
const coinbaseBalance =
useAppSelector(({COINBASE}) => COINBASE.balance[COINBASE_ENV]) || 0.0;
const portfolioBalance = useSelector(
Expand All @@ -61,14 +58,7 @@ const PortfolioBalance = () => {

const defaultAltCurrency = useAppSelector(({APP}) => APP.defaultAltCurrency);

// Sum only if same currency
let totalBalance: number = portfolioBalance.current;
if (
coinbaseUser &&
coinbaseUser.data.native_currency === defaultAltCurrency.isoCode
) {
totalBalance += coinbaseBalance;
}
const totalBalance: number = portfolioBalance.current + coinbaseBalance;

const dispatch = useAppDispatch();
const percentageDifference = calculatePercentageDifference(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {getPriceHistory} from '../../../../../store/wallet/effects';
import {batch} from 'react-redux';
import {useTranslation} from 'react-i18next';
import {logSegmentEvent} from '../../../../../store/app/app.effects';
import {coinbaseInitialize} from '../../../../../store/coinbase';

const AltCurrencySettingsContainer = styled.SafeAreaView`
margin-top: 20px;
Expand Down Expand Up @@ -125,6 +126,7 @@ const AltCurrencySettings = () => {
dispatch(setDefaultAltCurrency(item));
dispatch(FormatKeyBalances());
dispatch(updatePortfolioBalance());
dispatch(coinbaseInitialize());
dispatch(getPriceHistory(item.isoCode));
});
});
Expand All @@ -134,7 +136,7 @@ const AltCurrencySettings = () => {
</>
);
},
[selectedAltCurrency],
[navigation, dispatch, selectedAltCurrency],
);

return (
Expand Down
11 changes: 6 additions & 5 deletions src/store/coinbase/coinbase.effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,19 +90,20 @@ export const coinbaseInitialize =
if (!COINBASE.token[COINBASE_ENV]) {
return;
}
await dispatch(coinbaseGetUser());
await dispatch(coinbaseUpdateExchangeRate());
dispatch(coinbaseGetUser());
dispatch(coinbaseGetAccountsAndBalance());
};

export const coinbaseUpdateExchangeRate =
(): Effect<Promise<any>> => async (dispatch, getState) => {
const {COINBASE} = getState();
const nativeCurrency: string =
COINBASE.user[COINBASE_ENV]?.data.native_currency || 'USD';
const {APP} = getState();
const selectedCurrency: string = APP.defaultAltCurrency.isoCode || 'USD';
try {
dispatch(exchangeRatesPending());
const exchangeRates = await CoinbaseAPI.getExchangeRates(nativeCurrency);
const exchangeRates = await CoinbaseAPI.getExchangeRates(
selectedCurrency,
);
dispatch(exchangeRatesSuccess(exchangeRates));
} catch (error: CoinbaseErrorsProps | any) {
dispatch(LogActions.warn(coinbaseParseErrorToString(error)));
Expand Down

0 comments on commit b9ba400

Please sign in to comment.