From 95ce0f692aed9c886e52c60c2ed17c6242b70a68 Mon Sep 17 00:00:00 2001 From: nguyentiendung Date: Mon, 17 Jun 2024 15:38:44 +0700 Subject: [PATCH 1/3] [Issue-170] Can't import Rune with decimals = 0 --- .../src/Popup/Settings/Tokens/FungibleTokenImport.tsx | 2 +- packages/extension-koni-ui/src/utils/form/form.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx index 0ebe34e967a..ae6557bfb83 100644 --- a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx +++ b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx @@ -420,7 +420,7 @@ function Component ({ className = '' }: Props): React.ReactElement { name={'decimals'} > ('Decimals')} tooltip={t('Decimals')} tooltipPlacement={'topLeft'} diff --git a/packages/extension-koni-ui/src/utils/form/form.ts b/packages/extension-koni-ui/src/utils/form/form.ts index a3232bd91f3..8db9c8f44f3 100644 --- a/packages/extension-koni-ui/src/utils/form/form.ts +++ b/packages/extension-koni-ui/src/utils/form/form.ts @@ -56,7 +56,7 @@ export const simpleCheckForm = (allFields: FormFieldData[], requiredFields: stri const needCheck = checkAll || (ignorePass && requirePass); - return !needCheck ? false : typeof value === 'boolean' ? false : !value; + return !needCheck ? false : typeof value === 'boolean' ? false : (typeof value === 'number' ? false : !value); }); return { From 67e233f83062d254578c6802ae8f4ed01f6d9a2d Mon Sep 17 00:00:00 2001 From: nguyentiendung Date: Tue, 18 Jun 2024 10:20:59 +0700 Subject: [PATCH 2/3] [Issue-170] Fix the issue where decimals are not displayed in token details, and improve validation messages when importing tokens --- .../src/Popup/Settings/Tokens/FungibleTokenImport.tsx | 10 ++++------ .../src/Popup/Settings/Tokens/TokenDetail.tsx | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx index ae6557bfb83..2bd57c59df3 100644 --- a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx +++ b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx @@ -163,7 +163,7 @@ function Component ({ className = '' }: Props): React.ReactElement { } if (validationResult.contractError) { - reject(new Error(t('Error validating this token'))); + reject(new Error(t('Invalid ID'))); } if (!validationResult.isExist && !validationResult.contractError) { @@ -178,10 +178,9 @@ function Component ({ className = '' }: Props): React.ReactElement { }) .catch(() => { setLoading(false); - reject(new Error(t('Error validating this token'))); + reject(new Error(t('Invalid ID'))); }); } else if (isValidBrc20) { - console.log('successfull passed brc20'); setLoading(true); validateCustomBrc20({ ticker: inputMetadata, @@ -189,7 +188,6 @@ function Component ({ className = '' }: Props): React.ReactElement { type: selectedTokenType }) .then((validationResult) => { - console.log('validationResultBRC20', validationResult); setLoading(false); if (validationResult.isExist) { @@ -197,7 +195,7 @@ function Component ({ className = '' }: Props): React.ReactElement { } if (validationResult.contractError) { - reject(new Error(t('Error validating this token'))); + reject(new Error(t('Invalid ticker'))); } if (!validationResult.isExist && !validationResult.contractError) { @@ -212,7 +210,7 @@ function Component ({ className = '' }: Props): React.ReactElement { }) .catch(() => { setLoading(false); - reject(new Error(t('Error validating this token'))); + reject(new Error(t('Invalid ticker'))); }); } else { reject(t('Invalid contract address')); diff --git a/packages/extension-koni-ui/src/Popup/Settings/Tokens/TokenDetail.tsx b/packages/extension-koni-ui/src/Popup/Settings/Tokens/TokenDetail.tsx index ebe5508c44c..f1c29dbfa99 100644 --- a/packages/extension-koni-ui/src/Popup/Settings/Tokens/TokenDetail.tsx +++ b/packages/extension-koni-ui/src/Popup/Settings/Tokens/TokenDetail.tsx @@ -323,7 +323,7 @@ function Component ({ className = '' }: Props): React.ReactElement { >
('Decimals')} />
From b7c9a614ce9f43fadd0affb367baa60c9c1ed877 Mon Sep 17 00:00:00 2001 From: nguyentiendung Date: Wed, 19 Jun 2024 18:08:43 +0700 Subject: [PATCH 3/3] [Issue-44] hotfix to resetForm case change contractAddress --- .../Popup/Settings/Tokens/FungibleTokenImport.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx index 2bd57c59df3..4006e059e1d 100644 --- a/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx +++ b/packages/extension-koni-ui/src/Popup/Settings/Tokens/FungibleTokenImport.tsx @@ -15,7 +15,7 @@ import { Col, Field, Form, Icon, Input, Row } from '@subwallet/react-ui'; import SwAvatar from '@subwallet/react-ui/es/sw-avatar'; import { PlusCircle } from 'phosphor-react'; import { FieldData } from 'rc-field-form/lib/interface'; -import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import styled, { useTheme } from 'styled-components'; import { isEthereumAddress } from '@polkadot/util-crypto'; @@ -87,6 +87,9 @@ function Component ({ className = '' }: Props): React.ReactElement { const decimals = Form.useWatch('decimals', form); const tokenName = Form.useWatch('tokenName', form); const selectedTokenType = Form.useWatch('type', form); + const contractAddress = Form.useWatch('contractAddress', form); + + const contractRef = useRef(contractAddress); const chainChecker = useChainChecker(); const chainNetworkPrefix = useGetChainPrefixBySlug(selectedChain); @@ -327,6 +330,13 @@ function Component ({ className = '' }: Props): React.ReactElement { chainChecker(selectedChain); }, [chainChecker, selectedChain]); + useEffect(() => { + if (loading && (contractRef.current !== contractAddress)) { + contractRef.current = contractAddress; + form.resetFields(['tokenName', 'symbol', 'decimals', 'priceId']); + } + }, [contractAddress, form, loading]); + return (