Skip to content

Commit 78889e1

Browse files
authored
Add token and network icons and use token name (#278)
1 parent d8d30e4 commit 78889e1

File tree

8 files changed

+71
-29
lines changed

8 files changed

+71
-29
lines changed

main/api/chainport/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
fetchChainportTokens,
1212
fetchChainportTransactionStatus,
1313
} from "./vendor/requests";
14-
import { ChainportNetwork } from "./vendor/types";
14+
import { ChainportTokenWithNetwork } from "./vendor/types";
1515
import {
1616
assertTokenPathsApiResponse,
1717
assertTokensApiResponse,
@@ -52,7 +52,9 @@ ${err}
5252
}),
5353
)
5454
.query(
55-
async (opts): Promise<{ chainportTokenPaths: ChainportNetwork[] }> => {
55+
async (
56+
opts,
57+
): Promise<{ chainportTokenPaths: ChainportTokenWithNetwork[] }> => {
5658
const ironfish = await manager.getIronfish();
5759
const rpcClient = await ironfish.rpcClient();
5860
const network = await rpcClient.chain.getNetworkInfo();

main/api/chainport/vendor/requests.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
ChainportBridgeTransaction,
99
ChainportNetwork,
1010
ChainportToken,
11+
ChainportTokenWithNetwork,
1112
ChainportTransactionStatus,
1213
} from "./types";
1314

@@ -45,13 +46,16 @@ export const fetchChainportTokens = async (
4546
export const fetchChainportTokenPaths = async (
4647
networkId: number,
4748
tokenId: number,
48-
): Promise<ChainportNetwork[]> => {
49+
): Promise<ChainportTokenWithNetwork[]> => {
4950
const config = getConfig(networkId);
50-
const url = new URL(
51-
`/bridges/tokens/${tokenId}/networks`,
52-
config.endpoint,
53-
).toString();
54-
return (await makeChainportRequest<{ data: ChainportNetwork[] }>(url)).data;
51+
const url = new URL(`/bridges/tokens/${tokenId}/networks`, config.endpoint);
52+
url.searchParams.append("with_tokens", true.toString());
53+
54+
return (
55+
await makeChainportRequest<{ data: ChainportTokenWithNetwork[] }>(
56+
url.toString(),
57+
)
58+
).data;
5559
};
5660

5761
export const fetchChainportBridgeTransaction = async (

main/api/chainport/vendor/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ export type ChainportToken = {
4646
is_lifi: boolean;
4747
};
4848

49+
export type ChainportTokenWithNetwork = {
50+
network: ChainportNetwork;
51+
token: ChainportToken;
52+
};
53+
4954
export type ChainportTransactionStatus =
5055
| Record<string, never> // empty object
5156
| {

renderer/components/AssetAmountInput/AssetAmountInput.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export function AssetAmountInput({
5252
}}
5353
renderChildren={(children) => (
5454
<HStack minWidth="100px">
55+
<Image
56+
src={selectedAsset?.asset.verification.logoURI ?? ""}
57+
alt=""
58+
height="24"
59+
width="24"
60+
/>
5561
{children}
5662
{selectedAsset?.asset.verification.status === "verified" && (
5763
<Image src={verifiedIcon} alt="" />

renderer/components/BridgeAssetsForm/BridgeAssetsForm.tsx

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ function BridgeAssetsFormContent({
138138
...item,
139139
label: (
140140
<HStack>
141+
<Image
142+
src={item.asset.verification.logoURI ?? ""}
143+
alt=""
144+
width="24"
145+
height="24"
146+
/>
141147
<ItemText>{item.label}</ItemText>
142148
{item.asset.verification.status === "verified" && (
143149
<Image src={verifiedIcon} alt="" />
@@ -158,7 +164,7 @@ function BridgeAssetsFormContent({
158164

159165
const selectedAsset = assetOptionsMap.get(assetIdValue);
160166
const selectedNetwork = availableNetworks?.find(
161-
(n) => destinationNetworkId === n.chainport_network_id.toString(),
167+
(n) => destinationNetworkId === n.network.chainport_network_id.toString(),
162168
);
163169

164170
const handleIfAmountExceedsBalance = useCallback(
@@ -229,7 +235,7 @@ function BridgeAssetsFormContent({
229235
) {
230236
setValue(
231237
"destinationNetworkId",
232-
availableNetworks[0].chainport_network_id.toString(),
238+
availableNetworks[0].network.chainport_network_id.toString(),
233239
);
234240
}
235241
}, [availableNetworks, destinationNetworkId, setValue]);
@@ -242,7 +248,8 @@ function BridgeAssetsFormContent({
242248

243249
const destinationNetwork = availableNetworks?.find(
244250
(n) =>
245-
data.destinationNetworkId === n.chainport_network_id.toString(),
251+
data.destinationNetworkId ===
252+
n.network.chainport_network_id.toString(),
246253
);
247254
if (!destinationNetwork) {
248255
return;
@@ -372,14 +379,24 @@ function BridgeAssetsFormContent({
372379
value={destinationNetworkId ?? undefined}
373380
label={formatMessage(messages.destinationNetwork)}
374381
options={(availableNetworks ?? []).map((n) => ({
375-
label: n.label,
376-
value: n.chainport_network_id.toString(),
382+
label: (
383+
<HStack>
384+
<Image
385+
src={n.network.network_icon}
386+
alt={n.network.label}
387+
width="24"
388+
height="24"
389+
/>
390+
<ItemText>{n.network.label}</ItemText>
391+
</HStack>
392+
),
393+
value: n.network.chainport_network_id.toString(),
377394
}))}
378395
renderChildren={(children) => (
379396
<HStack>
380397
{selectedNetwork && (
381398
<ChakraImage
382-
src={selectedNetwork.network_icon}
399+
src={selectedNetwork.network.network_icon}
383400
boxSize="24px"
384401
/>
385402
)}

renderer/components/BridgeAssetsForm/BridgeConfirmationModal/BridgeConfirmationModal.tsx

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { trpcReact, TRPCRouterOutputs } from "@/providers/TRPCProvider";
1919
import { PillButton } from "@/ui/PillButton/PillButton";
2020
import { CurrencyUtils } from "@/utils/currency";
2121
import { formatOre } from "@/utils/ironUtils";
22-
import { IRON_ID, IRON_SYMBOL } from "@shared/constants";
2322

2423
import { StepIdle } from "./StepIdle";
2524
import { AssetOptionType } from "../../AssetAmountInput/utils";
@@ -115,7 +114,7 @@ export function BridgeConfirmationModal({
115114
amount: convertedAmount.toString(),
116115
assetId: chainportToken.web3_address,
117116
to: formData.destinationAddress,
118-
selectedNetwork: destinationNetwork.chainport_network_id,
117+
selectedNetwork: destinationNetwork.network.chainport_network_id,
119118
},
120119
{
121120
retry: false,
@@ -190,17 +189,12 @@ export function BridgeConfirmationModal({
190189
chainportToken.decimals,
191190
);
192191

193-
return `${convertedAmount} ${
194-
chainportToken.web3_address === IRON_ID
195-
? IRON_SYMBOL
196-
: chainportToken.symbol
197-
}`;
192+
return `${convertedAmount} ${destinationNetwork.token.symbol}`;
198193
}, [
199194
isTransactionDetailsLoading,
200195
txDetails,
196+
destinationNetwork.token.symbol,
201197
chainportToken.decimals,
202-
chainportToken.symbol,
203-
chainportToken.web3_address,
204198
]);
205199

206200
const chainportGasFee = useMemo(() => {
@@ -279,10 +273,12 @@ export function BridgeConfirmationModal({
279273
{isSubmitIdle && (
280274
<StepIdle
281275
fromAccount={formData.fromAccount}
282-
destinationNetwork={destinationNetwork.label}
283-
destinationNetworkIcon={destinationNetwork.network_icon}
276+
destinationNetwork={destinationNetwork.network.label}
277+
destinationNetworkIcon={destinationNetwork.network.network_icon}
284278
amountSending={amountToSend}
279+
amountSendingIcon={selectedAsset.asset.verification.logoURI}
285280
amountReceiving={amountToReceive}
281+
amountReceivingIcon={destinationNetwork.token.token_image}
286282
destinationAddress={formData.destinationAddress}
287283
chainportGasFee={chainportGasFee}
288284
chainportBridgeFee={chainportBridgeFee}

renderer/components/BridgeAssetsForm/BridgeConfirmationModal/StepIdle.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ type Props = {
8585
destinationNetwork: string;
8686
destinationNetworkIcon: string;
8787
amountSending: ReactNode;
88+
amountSendingIcon: string | undefined;
8889
amountReceiving: ReactNode;
90+
amountReceivingIcon: string;
8991
destinationAddress: string;
9092
chainportGasFee: ReactNode;
9193
chainportBridgeFee: ReactNode;
@@ -103,7 +105,9 @@ export function StepIdle({
103105
destinationNetwork,
104106
destinationNetworkIcon,
105107
amountSending,
108+
amountSendingIcon,
106109
amountReceiving,
110+
amountReceivingIcon,
107111
destinationAddress,
108112
chainportGasFee,
109113
chainportBridgeFee,
@@ -200,15 +204,15 @@ export function StepIdle({
200204
<LineItem
201205
label={formatMessage(messages.sendingLabel)}
202206
content={amountSending}
203-
icon={ironfishIcon}
207+
icon={amountSendingIcon ?? ironfishIcon}
204208
/>
205209
</GridItem>
206210
<GridItem>
207211
<LineItem
208212
label={formatMessage(messages.receivingLabel)}
209213
content={amountReceiving}
210214
tooltip={formatMessage(messages.receivingTooltip)}
211-
icon={chainportIcon}
215+
icon={amountReceivingIcon}
212216
/>
213217
</GridItem>
214218
</Grid>

shared/chainport.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { z } from "zod";
33
import type {
44
ChainportNetwork,
55
ChainportToken,
6+
ChainportTokenWithNetwork,
67
} from "../main/api/chainport/vendor/types";
78

89
type ZodTypeValue<Value, ZodType extends z.ZodType> = undefined extends Value
@@ -57,7 +58,12 @@ const chainportTokenSchema = createSchema<ChainportToken>({
5758
});
5859

5960
const TokensApiResponseSchema = z.array(chainportTokenSchema);
60-
const TokenPathsApiResponseSchema = z.array(chainportNetworkSchema);
61+
const TokenPathsApiResponseSchema = z.array(
62+
createSchema<ChainportTokenWithNetwork>({
63+
token: chainportTokenSchema,
64+
network: chainportNetworkSchema,
65+
}),
66+
);
6167

6268
export function assertTokensApiResponse(data: unknown): ChainportToken[] {
6369
try {
@@ -70,7 +76,9 @@ ${err}
7076
}
7177
}
7278

73-
export function assertTokenPathsApiResponse(data: unknown): ChainportNetwork[] {
79+
export function assertTokenPathsApiResponse(
80+
data: unknown,
81+
): ChainportTokenWithNetwork[] {
7482
try {
7583
return TokenPathsApiResponseSchema.parse(data);
7684
} catch (err) {

0 commit comments

Comments
 (0)