Skip to content
This repository has been archived by the owner on Jun 16, 2022. It is now read-only.

EGLD Integration #2476

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ module.exports = {
"eslint-comments/no-unlimited-disable": "warn",
"eslint-comments/no-unused-disable": "warn",
"react-native/no-inline-styles": "warn",
"react/jsx-fragments": "warn",
"react/jsx-fragments": 0,
"react/no-deprecated": "warn",
"prettier/prettier": "error",
},
Expand Down
5 changes: 1 addition & 4 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,6 @@ DEPENDENCIES:
- EXBarCodeScanner (from `../node_modules/expo-barcode-scanner/ios`)
- EXCamera (from `../node_modules/expo-camera/ios`)
- EXConstants (from `../node_modules/expo-constants/ios`)
- EXErrorRecovery (from `../node_modules/expo-error-recovery/ios`)
- EXFileSystem (from `../node_modules/expo-file-system/ios`)
- EXFont (from `../node_modules/expo-font/ios`)
- EXImageLoader (from `../node_modules/expo-image-loader/ios`)
Expand Down Expand Up @@ -743,8 +742,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-camera/ios"
EXConstants:
:path: "../node_modules/expo-constants/ios"
EXErrorRecovery:
:path: "../node_modules/expo-error-recovery/ios"
EXFileSystem:
:path: "../node_modules/expo-file-system/ios"
EXFont:
Expand Down Expand Up @@ -1010,4 +1007,4 @@ SPEC CHECKSUMS:

PODFILE CHECKSUM: 706678d86edbba64cabd5f097814715fd00a1b59

COCOAPODS: 1.11.2
COCOAPODS: 1.10.2
3 changes: 2 additions & 1 deletion src/config/urls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ export const urls = {
algorandStaking:
"https://support.ledger.com/hc/en-us/articles/360015897740?utm_source=ledger_live_mobile&utm_medium=self_referral&utm_content=algorand",
polkadotStaking:
"https://support.ledger.com/hc/en-us/articles/360018131260-Earning-Polkadot-DOT-bonding-rewards?docs=true&utm_source=ledger_live_mobile&utm_medium=self_referral&utm_content=polkadot",
"https://support.ledger.com/hc/en-us/articles/360019187260?utm_source=ledger_live_mobile&utm_medium=self_referral&utm_content=polkadot",
elrondStaking: "https://everstake.one/elrond",
swap: {
info:
"https://www.ledger.com/swap?utm_source=ledger_live_mobile&utm_medium=self_referral&utm_content=swap_intro",
Expand Down
31 changes: 31 additions & 0 deletions src/const/navigation.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,33 @@ export const ScreenName = {
CosmosClaimRewardsValidationError: "CosmosClaimRewardsValidationError",
CosmosClaimRewardsValidationSuccess: "CosmosClaimRewardsValidationSuccess",

ElrondEditMemo: "ElrondEditMemo",
ElrondDelegationStarted: "ElrondDelegationStarted",
ElrondDelegationValidator: "ElrondDelegationValidator",
ElrondDelegationAmount: "ElrondDelegationAmount",
ElrondDelegationSelectDevice: "ElrondDelegationSelectDevice",
ElrondDelegationConnectDevice: "ElrondDelegationConnectDevice",
ElrondDelegationValidationError: "ElrondDelegationValidationError",
ElrondDelegationValidationSuccess: "ElrondDelegationValidationSuccess",
ElrondUndelegationAmount: "ElrondUndelegationAmount",
ElrondUndelegationSelectDevice: "ElrondUndelegationSelectDevice",
ElrondUndelegationConnectDevice: "ElrondUndelegationConnectDevice",
ElrondUndelegationValidationError: "ElrondUndelegationValidationError",
ElrondUndelegationValidationSuccess: "ElrondUndelegationValidationSuccess",
ElrondClaimRewardsValidator: "ElrondClaimRewardsValidator",
ElrondClaimRewardsMethod: "ElrondClaimRewardsMethod",
ElrondClaimRewardsSelectDevice: "ElrondClaimRewardsSelectDevice",
ElrondClaimRewardsConnectDevice: "ElrondClaimRewardsConnectDevice",
ElrondClaimRewardsValidation: "ElrondClaimRewardsValidation",
ElrondClaimRewardsValidationError: "ElrondClaimRewardsValidationError",
ElrondClaimRewardsValidationSuccess: "ElrondClaimRewardsValidationSuccess",
ElrondWithdrawMethod: "ElrondWithdrawMethod",
ElrondWithdrawSelectDevice: "ElrondWithdrawSelectDevice",
ElrondWithdrawConnectDevice: "ElrondWithdrawConnectDevice",
ElrondWithdrawValidation: "ElrondWithdrawValidation",
ElrondWithdrawValidationError: "ElrondWithdrawValidationError",
ElrondWithdrawValidationSuccess: "ElrondWithdrawValidationSuccess",

// crypto_org
CryptoOrgEditMemo: "CryptoOrgEditMemo",

Expand Down Expand Up @@ -374,6 +401,10 @@ export const NavigatorName = {
CosmosDelegationFlow: "CosmosDelegationFlow",
CosmosRedelegationFlow: "CosmosRedelegationFlow",
CosmosUndelegationFlow: "CosmosUndelegationFlow",
ElrondClaimRewardsFlow: "ElrondClaimRewardsFlow",
ElrondDelegationFlow: "ElrondDelegationFlow",
ElrondUndelegationFlow: "ElrondUndelegationFlow",
ElrondWithdrawFlow: "ElrondWithdrawFlow",
AlgorandClaimRewardsFlow: "AlgorandClaimRewardsFlow",
AlgorandOptInFlow: "AlgorandOptInFlow",
ClaimRewards: "ClaimRewards",
Expand Down
2 changes: 1 addition & 1 deletion src/families/cosmos/shared/Item.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function Item({

<LText style={styles.subText} color="grey" numberOfLines={1}>
<Trans
i18nKey="cosmos.delegation.flow.steps.validator.estYield"
i18nKey="cosmos.delegation.flow.steps.validator.apr"
values={{
amount: estimatedYearlyRewardsRate
? Number(100 * estimatedYearlyRewardsRate).toFixed(2)
Expand Down
157 changes: 157 additions & 0 deletions src/families/elrond/AccountBalanceSummaryFooter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
import React, { useCallback, useMemo, useEffect, useState } from "react";
import { ScrollView, StyleSheet, View } from "react-native";
import { useTranslation } from "react-i18next";
import { useTheme } from "@react-navigation/native";
import { getCryptoCurrencyById } from "@ledgerhq/live-common/lib/currencies";
import { getAccountUnit } from "@ledgerhq/live-common/lib/account/helpers";
import { getCryptoCurrencyIcon } from "@ledgerhq/live-common/lib/reactNative";
import { BigNumber } from "bignumber.js";
import axios from "axios";

import InfoModal from "../../modals/Info";
import CurrencyUnitValue from "../../components/CurrencyUnitValue";
import InfoItem from "../../components/BalanceSummaryInfoItem";

import { constants } from "./constants";

const styles = StyleSheet.create({
root: {
flex: 1,
flexDirection: "row",
borderTopWidth: 1,
paddingTop: 16,
overflow: "visible",
},
});

const withSummary = Component => props =>
props.account.elrondResources || props.account.balance.gt(0) ? (
<Component {...props} />
) : null;

const Summary = props => {
const { account } = props;
const { colors } = useTheme();
const { t } = useTranslation();

const unit = getAccountUnit(account);
const currency = getCryptoCurrencyById(account.currency.family);
const Elrond = getCryptoCurrencyIcon(currency);

const [data, setData] = useState([]);
const [delegationsResources, setDelegationResources] = useState(
account.elrondResources.delegations || [],
);

const onCloseModal = useCallback(() => {
setData([]);
}, []);

const fetchDelegations = useCallback(() => {
const fetchData = async () => {
try {
const delegations = await axios.get(
`${constants.delegations}/accounts/${account.freshAddress}/delegations`,
);

setDelegationResources(delegations.data);
} catch (error) {
setDelegationResources([]);
}
};

if (account.elrondResources && !account.elrondResources.delegations) {
fetchData();
}

return () =>
setDelegationResources(account.elrondResources.delegations || []);
}, [account.elrondResources, account.freshAddress]);

const total = useCallback(
key =>
delegationsResources.reduce(
(total, delegation) => total.plus(delegation[key]),
BigNumber(0),
),
[delegationsResources],
);

const delegations = useMemo(() => total("userActiveStake"), [total]);
const unbondings = useMemo(() => total("userUnBondable"), [total]);
const available = useMemo(() => account.spendableBalance, [account]);

const items = useMemo(
() =>
[
{
title: "account.availableBalance",
show: true,
value: available,
modal: {
Icon: () => <Elrond color={currency.color} size={18} />,
title: t("elrond.info.available.title"),
description: t("elrond.info.available.description"),
},
},
{
title: "account.delegatedAssets",
show: delegations.gt(0),
value: delegations,
modal: {
title: t("elrond.info.delegated.title"),
description: t("elrond.info.delegated.description"),
},
},
{
title: "account.undelegating",
show: unbondings.gt(0),
value: unbondings,
modal: {
title: t("elrond.info.undelegating.title"),
description: t("elrond.info.undelegating.description"),
},
},
].filter(item => item.show),
[available, delegations, unbondings, t, currency.color],
);

useEffect(fetchDelegations, [fetchDelegations]);

if (delegations.lte(0) && unbondings.lte(0)) {
return null;
}

return (
<ScrollView
horizontal={true}
showsHorizontalScrollIndicator={false}
style={[styles.root, { borderTopColor: colors.lightFog }]}
>
<InfoModal
isOpened={data.length > 0}
onClose={onCloseModal}
data={data}
/>

<View>
{items.map(item => (
<InfoItem
key={item.title}
title={t(item.title)}
onPress={() => setData([item.modal])}
value={
<CurrencyUnitValue
unit={unit}
value={item.value}
disableRounding={true}
/>
}
/>
))}
</View>
</ScrollView>
);
};

export default withSummary(Summary);
Loading