From 5569fe60fafa176a233db92403385ffeded875bb Mon Sep 17 00:00:00 2001 From: Antonio Ventilii <169057656+AntonioVentilii-DFINITY@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:15:40 -0300 Subject: [PATCH] Feature/chain fusion/include network tokens in manage modal (#1496) * feat: created variable allTokens to merge networkTokens and ICRC tokens * feat: use allTokens list to show in the modal * fix: there were duplicates keys in the token loop * feat: add ManageTokenToggle to non-ICRC tokens * revert: change EACH loop key to previous value * feat: include hint to specify network --- .../components/tokens/ManageTokens.svelte | 44 ++++++++++++++++--- src/frontend/src/lib/i18n/en.json | 3 +- src/frontend/src/lib/types/i18n.d.ts | 7 ++- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/frontend/src/icp-eth/components/tokens/ManageTokens.svelte b/src/frontend/src/icp-eth/components/tokens/ManageTokens.svelte index 267ec58f1..b6eeb2083 100644 --- a/src/frontend/src/icp-eth/components/tokens/ManageTokens.svelte +++ b/src/frontend/src/icp-eth/components/tokens/ManageTokens.svelte @@ -19,6 +19,9 @@ import { icTokenContainsEnabled, sortIcTokens } from '$icp/utils/icrc.utils'; import { replacePlaceholders } from '$lib/utils/i18n.utils'; import type { Token } from '$lib/types/token'; + import { networkTokens } from '$lib/derived/network-tokens.derived'; + import ManageTokenToggle from '$lib/components/tokens/ManageTokenToggle.svelte'; + import { selectedNetwork } from '$lib/derived/network.derived'; const dispatch = createEventDispatcher(); @@ -51,6 +54,22 @@ ) ].sort(sortIcTokens); + let allTokens: Token[] = []; + $: allTokens = [ + ...$networkTokens.map( + (token) => + allIcrcTokens.find( + (icrcToken) => token.id === icrcToken.id && token.network.id === icrcToken.network.id + ) ?? { ...token, show: true } + ), + ...allIcrcTokens.filter( + (icrcToken) => + !$networkTokens.some( + (token) => icrcToken.id === token.id && icrcToken.network.id === token.network.id + ) + ) + ]; + let filterTokens = ''; const updateFilter = () => (filterTokens = filter); const debounceUpdateFilter = debounce(updateFilter); @@ -60,12 +79,13 @@ let filteredTokens: Token[] = []; $: filteredTokens = isNullishOrEmpty(filterTokens) - ? allIcrcTokens - : allIcrcTokens.filter( - ({ name, symbol, alternativeName }) => - name.toLowerCase().includes(filterTokens.toLowerCase()) || - symbol.toLowerCase().includes(filterTokens.toLowerCase()) || - (alternativeName ?? '').toLowerCase().includes(filterTokens.toLowerCase()) + ? allTokens + : allTokens.filter( + (token) => + token.name.toLowerCase().includes(filterTokens.toLowerCase()) || + token.symbol.toLowerCase().includes(filterTokens.toLowerCase()) || + (icTokenContainsEnabled(token) && + (token.alternativeName ?? '').toLowerCase().includes(filterTokens.toLowerCase())) ); let tokens: Token[] = []; @@ -127,6 +147,16 @@ +{#if nonNullish($selectedNetwork)} +
+

+ {replacePlaceholders($i18n.tokens.manage.text.manage_for_network, { + $network: $selectedNetwork.name + })} +

+
+{/if} + {#if noTokensMatch}