Skip to content

Commit a38dc9f

Browse files
authored
Use SDK currency rendering functions (#115)
1 parent e30d3b3 commit a38dc9f

File tree

4 files changed

+58
-42
lines changed

4 files changed

+58
-42
lines changed

packages/mobile-app/app/(tabs)/index.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { Asset } from "../../data/facades/chain/types";
2424
import { useAccount } from "../../providers/AccountProvider";
2525
import { router } from "expo-router";
2626
import { SafeAreaView } from "react-native-safe-area-context";
27+
import { CurrencyUtils } from "@ironfish/sdk";
2728

2829
const MenuIcon = (props: IconProps) => <Icon {...props} name="menu-outline" />;
2930
const SettingsIcon = (props: IconProps) => (
@@ -177,7 +178,7 @@ export default function Balances() {
177178
</Layout>
178179
<Layout style={styles.headerBalance}>
179180
<Text category="h1" style={styles.balanceAmount}>
180-
{account?.balances.iron.confirmed ?? "0.00"}
181+
{CurrencyUtils.render(account?.balances.iron.confirmed ?? "0")}
181182
</Text>
182183
<Text category="s1" appearance="hint">
183184
{getIronAsset.data?.verification.status === "verified"
@@ -258,7 +259,9 @@ export default function Balances() {
258259
? getIronAsset.data.verification.symbol
259260
: (getIronAsset.data?.name ?? "IRON")
260261
}
261-
amount={account.balances.iron.confirmed}
262+
amount={CurrencyUtils.render(
263+
account.balances.iron.confirmed,
264+
)}
262265
verified={
263266
getIronAsset.data?.verification.status === "verified"
264267
}
@@ -275,7 +278,14 @@ export default function Balances() {
275278
? asset.verification.symbol
276279
: (asset?.name ?? balance.assetId)
277280
}
278-
amount={balance.confirmed}
281+
amount={CurrencyUtils.render(
282+
balance.confirmed,
283+
false,
284+
balance.assetId,
285+
asset?.verification.status === "verified"
286+
? asset.verification
287+
: undefined,
288+
)}
279289
verified={asset?.verification.status === "verified"}
280290
/>
281291
);

packages/mobile-app/app/account-select/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Button, StyleSheet, Text, View } from "react-native";
33
import { useRouter } from "expo-router";
44
import { LinkButton } from "../../components/LinkButton";
55
import { useFacade } from "../../data/facades";
6+
import { CurrencyUtils } from "@ironfish/sdk";
67

78
export default function AccountSelect() {
89
const router = useRouter();
@@ -31,7 +32,9 @@ export default function AccountSelect() {
3132
title={account.name}
3233
/>
3334
{account.active && <Text>Active</Text>}
34-
<Text>{`${account.balances.iron.confirmed} $IRON`}</Text>
35+
<Text>
36+
{`${CurrencyUtils.render(account.balances.iron.confirmed)} $IRON`}
37+
</Text>
3538
</View>
3639
))}
3740
<LinkButton title="Add Account" href="/add-account/" />

packages/mobile-app/app/account-settings/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { StyleSheet } from "react-native";
1111
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
1212
import { useState } from "react";
1313
import { useFacade } from "../../data/facades";
14+
import { CurrencyUtils } from "@ironfish/sdk";
1415

1516
const ForwardIcon = (props: any): IconElement => (
1617
<Icon {...props} name="arrow-ios-forward" />
@@ -92,8 +93,9 @@ export default function AccountSettings() {
9293

9394
const menuItems = getMenuItems({
9495
currentAccountName: getAccountResult.data?.name ?? "Unknown",
95-
currentAccountBalance:
96+
currentAccountBalance: CurrencyUtils.render(
9697
getAccountResult.data?.balances.iron.confirmed ?? "0",
98+
),
9799
});
98100

99101
const handleSelect = (index: number) => {

packages/mobile-app/app/send/index.tsx

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import { StyleSheet, View, Text, Button, TextInput } from "react-native";
33
import { useFacade } from "../../data/facades";
44
import { useState } from "react";
55
import { IRON_ASSET_ID_HEX } from "../../data/constants";
6+
import { CurrencyUtils } from "@ironfish/sdk";
7+
import { useQueries } from "@tanstack/react-query";
8+
import { Asset } from "@/data/facades/chain/types";
9+
import { AccountBalance } from "@/data/facades/wallet/types";
610

711
const isValidBigInt = (num: string) => {
812
if (num.length === 0) return false;
@@ -22,9 +26,9 @@ export default function Send() {
2226
const [selectedRecipient, setSelectedRecipient] = useState<string>("");
2327
const [amount, setAmount] = useState<string>("");
2428
const [customFee, setCustomFee] = useState<string>("");
25-
const [selectedFee, setSelectedFee] = useState<
26-
"slow" | "average" | "fast" | "custom"
27-
>("average");
29+
const [selectedFee, setSelectedFee] = useState<"default" | "custom">(
30+
"default",
31+
);
2832

2933
const getAccountResult = facade.getAccount.useQuery(
3034
{},
@@ -42,38 +46,44 @@ export default function Send() {
4246
},
4347
);
4448

45-
const estimatedFees = facade.getEstimatedFees.useQuery(
46-
{
47-
accountName: getAccountResult.data?.name ?? "",
48-
outputs: [{ amount, assetId: selectedAssetId }],
49-
},
50-
{
51-
enabled: () => {
52-
return !!getAccountResult.data && isValidBigInt(amount);
53-
},
54-
},
55-
);
49+
const getCustomAssets = useQueries({
50+
queries:
51+
getAccountResult.data?.balances.custom.map((b: AccountBalance) => {
52+
return {
53+
refetchInterval: 1000,
54+
queryFn: () => facade.getAsset.resolver({ assetId: b.assetId }),
55+
queryKey: facade.getAsset.buildQueryKey({ assetId: b.assetId }),
56+
};
57+
}) ?? [],
58+
});
59+
60+
const assetMap = new Map<string, Asset>();
61+
for (const asset of getCustomAssets) {
62+
if (asset.data) {
63+
assetMap.set(asset.data.id, asset.data);
64+
}
65+
}
5666

5767
const sendTransaction = facade.sendTransaction.useMutation();
5868

5969
return (
6070
<View style={styles.container}>
6171
{isValidPublicAddress.data === false && <Text>Invalid recipient</Text>}
62-
{estimatedFees.isError && (
63-
<Text>Error: {estimatedFees.error.message}</Text>
64-
)}
6572
<Text>Select asset</Text>
6673
<Button
67-
title={`IRON (${getAccountResult.data?.balances.iron.available ?? 0}) ${selectedAssetId === IRON_ASSET_ID_HEX ? "(selected)" : ""}`}
74+
title={`IRON (${CurrencyUtils.render(getAccountResult.data?.balances.iron.available ?? "0")}) ${selectedAssetId === IRON_ASSET_ID_HEX ? "(selected)" : ""}`}
6875
onPress={() => setSelectedAssetId(IRON_ASSET_ID_HEX)}
6976
/>
70-
{getAccountResult.data?.balances.custom.map((b) => (
71-
<Button
72-
key={b.assetId}
73-
title={`${b.assetId} (${b.confirmed ?? 0}) ${selectedAssetId === b.assetId ? "(selected)" : ""}`}
74-
onPress={() => setSelectedAssetId(b.assetId)}
75-
/>
76-
))}
77+
{getAccountResult.data?.balances.custom.map((b) => {
78+
const asset = assetMap.get(b.assetId);
79+
return (
80+
<Button
81+
key={b.assetId}
82+
title={`${asset?.name} (${CurrencyUtils.render(b.available, false, b.assetId, asset?.verification.status === "verified" ? asset.verification : undefined)}) ${selectedAssetId === b.assetId ? "(selected)" : ""}`}
83+
onPress={() => setSelectedAssetId(b.assetId)}
84+
/>
85+
);
86+
})}
7787
<TextInput
7888
placeholder="Recipient"
7989
value={selectedRecipient}
@@ -82,16 +92,8 @@ export default function Send() {
8292
<TextInput placeholder="Amount" value={amount} onChangeText={setAmount} />
8393
<Text style={{ fontSize: 20 }}>Fees</Text>
8494
<Button
85-
title={`Slow: ${estimatedFees.data?.slow ?? ""}${selectedFee === "slow" ? " (selected)" : ""}`}
86-
onPress={() => setSelectedFee("slow")}
87-
/>
88-
<Button
89-
title={`Average: ${estimatedFees.data?.average ?? ""}${selectedFee === "average" ? " (selected)" : ""}`}
90-
onPress={() => setSelectedFee("average")}
91-
/>
92-
<Button
93-
title={`Fast: ${estimatedFees.data?.fast ?? ""}${selectedFee === "fast" ? " (selected)" : ""}`}
94-
onPress={() => setSelectedFee("fast")}
95+
title={`Default${selectedFee === "default" ? " (selected)" : ""}`}
96+
onPress={() => setSelectedFee("default")}
9597
/>
9698
<TextInput
9799
placeholder="Custom fee"
@@ -107,7 +109,6 @@ export default function Send() {
107109
title="Send"
108110
disabled={
109111
isValidPublicAddress.data !== true ||
110-
!estimatedFees.isSuccess ||
111112
(selectedFee === "custom" && !isValidBigInt(customFee))
112113
}
113114
onPress={() => {
@@ -121,7 +122,7 @@ export default function Send() {
121122
assetId: selectedAssetId,
122123
},
123124
],
124-
fee: "1",
125+
fee: selectedFee === "default" ? undefined : customFee,
125126
});
126127
}}
127128
/>

0 commit comments

Comments
 (0)