- {t('s-udt.receive.notation', { symbol: getDisplaySymbol(tokenName || '', symbol || '') })}
+ {t('s-udt.receive.notation', { symbol: getDisplaySymbol(tokenName || '', symbol || '') })}
diff --git a/packages/neuron-ui/src/components/SUDTReceiveDialog/sUDTReceiveDialog.module.scss b/packages/neuron-ui/src/components/SUDTReceiveDialog/sUDTReceiveDialog.module.scss
index 2b494457fc..0c8359a35e 100644
--- a/packages/neuron-ui/src/components/SUDTReceiveDialog/sUDTReceiveDialog.module.scss
+++ b/packages/neuron-ui/src/components/SUDTReceiveDialog/sUDTReceiveDialog.module.scss
@@ -24,6 +24,7 @@
border-radius: 16px;
column-gap: 16px;
.right {
+ max-width: calc(100% - 48px);
.accountName {
font-weight: 500;
font-size: 14px;
@@ -43,9 +44,6 @@
}
.notification {
- font-weight: 500;
- font-size: 12px;
- line-height: 32px;
height: 32px;
text-align: center;
color: var(--notice-text-color);
@@ -53,13 +51,19 @@
justify-content: center;
align-items: center;
word-break: break-word;
- margin: 0;
+ margin: 0 4px;
background-color: var(--warn-background-color);
svg {
margin-right: 4px;
flex-shrink: 0;
}
+ & > span {
+ font-weight: 500;
+ font-size: 12px;
+ line-height: 32px;
+ @include text-overflow-ellipsis;
+ }
.symbol {
display: inline-flex;
margin: 0 2px;
diff --git a/packages/neuron-ui/src/components/SpecialAssetList/index.tsx b/packages/neuron-ui/src/components/SpecialAssetList/index.tsx
index beef7382d8..9b4c804427 100644
--- a/packages/neuron-ui/src/components/SpecialAssetList/index.tsx
+++ b/packages/neuron-ui/src/components/SpecialAssetList/index.tsx
@@ -121,6 +121,12 @@ const SpecialAssetList = () => {
)
const onCloseDialog = useCallback(() => {
+ setIsExistAccountDialogOpen(false)
+ setIsNewAccountDialogOpen(false)
+ setIsMigrateDialogOpen(false)
+ }, [setIsNewAccountDialogOpen, setIsExistAccountDialogOpen, setIsMigrateDialogOpen])
+
+ const onBack = useCallback(() => {
setIsExistAccountDialogOpen(false)
setIsNewAccountDialogOpen(false)
setIsMigrateDialogOpen(true)
@@ -522,7 +528,8 @@ const SpecialAssetList = () => {
sUDTAccounts={sUDTAccounts}
walletID={id}
tokenInfo={migrateTokenInfo}
- onCancel={onCloseDialog}
+ onCloseDialog={onCloseDialog}
+ onBack={onBack}
onSuccess={handleActionSuccess}
/>
) : null}
@@ -534,7 +541,8 @@ const SpecialAssetList = () => {
sUDTAccounts={sUDTAccounts}
isMainnet={isMainnet}
walletID={id}
- onCancel={onCloseDialog}
+ onCloseDialog={onCloseDialog}
+ onBack={onBack}
isLightClient={isLightClient}
onSuccess={handleActionSuccess}
/>
diff --git a/packages/neuron-ui/src/components/UANDisplay/index.module.scss b/packages/neuron-ui/src/components/UANDisplay/index.module.scss
index 60c32c9cb1..b41d961ad5 100644
--- a/packages/neuron-ui/src/components/UANDisplay/index.module.scss
+++ b/packages/neuron-ui/src/components/UANDisplay/index.module.scss
@@ -4,6 +4,7 @@
@include tooltip;
white-space: nowrap;
display: inline-flex;
+ max-width: calc(100px + (100vw - 1200px) / 2);
& > span {
@include text-overflow-ellipsis;
@@ -15,6 +16,7 @@
@include tooltip;
white-space: nowrap;
display: inline-flex;
+ max-width: calc(180px + (100vw - 1200px) / 2);
& > span {
@include text-overflow-ellipsis;
diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json
index 6da6cc615e..d9f7b3f354 100644
--- a/packages/neuron-ui/src/locales/zh.json
+++ b/packages/neuron-ui/src/locales/zh.json
@@ -305,7 +305,9 @@
"copy-balance": "复制余额",
"copy-address": "复制地址",
"create": "创建 {{name}} 资产账户",
- "destroy": "销毁 {{name}} 资产账户"
+ "destroy": "销毁 {{name}} 资产账户",
+ "createSUDT": "创建 <0>0> 资产账户",
+ "destroySUDT": "销毁 <0>0> 资产账户"
},
"transaction": {
"window-title": "交易: {{hash}}",
diff --git a/packages/neuron-ui/src/states/stateProvider/actionCreators/sudt.ts b/packages/neuron-ui/src/states/stateProvider/actionCreators/sudt.ts
index 49ad1e6ffa..20d22d46da 100644
--- a/packages/neuron-ui/src/states/stateProvider/actionCreators/sudt.ts
+++ b/packages/neuron-ui/src/states/stateProvider/actionCreators/sudt.ts
@@ -10,10 +10,10 @@ import { addNotification } from './app'
export const sendCreateSUDTAccountTransaction =
(params: Controller.SendCreateSUDTAccountTransaction.Params) => async (dispatch: StateDispatch) =>
- sendTxBaseAction(sendCreateAccountTx, params, dispatch, addNotification)
+ sendTxBaseAction(sendCreateAccountTx, params, dispatch)
export const sendSUDTTransaction = (params: Controller.SendSUDTTransaction.Params) => async (dispatch: StateDispatch) =>
- sendTxBaseAction(sendSUDTTx, params, dispatch, addNotification)
+ sendTxBaseAction(sendSUDTTx, params, dispatch)
export const migrateAcp = (params: Controller.MigrateAcp.Params) => async (dispatch: StateDispatch) => {
dispatch({
diff --git a/packages/neuron-ui/src/states/stateProvider/actionCreators/wallets.ts b/packages/neuron-ui/src/states/stateProvider/actionCreators/wallets.ts
index 944828d9c7..550df7d00b 100644
--- a/packages/neuron-ui/src/states/stateProvider/actionCreators/wallets.ts
+++ b/packages/neuron-ui/src/states/stateProvider/actionCreators/wallets.ts
@@ -74,7 +74,7 @@ export const setCurrentWallet = (id: string) => (dispatch: StateDispatch) => {
}
export const sendTransaction = (params: Controller.SendTransactionParams) => async (dispatch: StateDispatch) =>
- sendTxBaseAction(sendTx, params, dispatch, addNotification)
+ sendTxBaseAction(sendTx, params, dispatch)
export const updateAddressListAndBalance =
(params: Controller.GetAddressesByWalletIDParams) => (dispatch: StateDispatch) => {
diff --git a/packages/neuron-ui/src/utils/baseActions.ts b/packages/neuron-ui/src/utils/baseActions.ts
index f922e29a27..3357f2b2bc 100644
--- a/packages/neuron-ui/src/utils/baseActions.ts
+++ b/packages/neuron-ui/src/utils/baseActions.ts
@@ -1,20 +1,19 @@
-import { AppActions } from 'states'
+import { AppActions, showGlobalAlertDialog } from 'states'
import { isSuccessResponse } from './is'
import { ErrorCode, ResponseCode } from './enums'
-export const sendTxBaseAction = async (sendMethod: any, params: any, dispatch: any, addNotification: any) => {
+export const sendTxBaseAction = async (sendMethod: any, params: any, dispatch: any) => {
dispatch({ type: AppActions.UpdateLoadings, payload: { sending: true } })
try {
const res = await sendMethod(params)
if (isSuccessResponse(res)) {
dispatch({ type: AppActions.DismissPasswordRequest })
} else if (res.status !== ErrorCode.PasswordIncorrect && res.status !== ErrorCode.SignTransactionFailed) {
- addNotification({
- type: 'alert',
- timestamp: +new Date(),
- code: res.status,
- content: typeof res.message === 'string' ? res.message : res.message.content,
- meta: typeof res.message === 'string' ? undefined : res.message.meta,
+ showGlobalAlertDialog({
+ type: 'failed',
+ title: typeof res.message === 'string' ? res.message : res.message.content,
+ message: typeof res.message === 'string' ? undefined : res.message.meta,
+ action: 'ok',
})(dispatch)
dispatch({ type: AppActions.DismissPasswordRequest })
}
diff --git a/packages/neuron-ui/src/widgets/SUDTAvatar/sUDTAvatar.module.scss b/packages/neuron-ui/src/widgets/SUDTAvatar/sUDTAvatar.module.scss
index a7796d090d..7227f0d90c 100644
--- a/packages/neuron-ui/src/widgets/SUDTAvatar/sUDTAvatar.module.scss
+++ b/packages/neuron-ui/src/widgets/SUDTAvatar/sUDTAvatar.module.scss
@@ -8,6 +8,7 @@
background-color: var(--table-head-border-color);
font-size: 20px;
text-transform: uppercase;
+ flex-shrink: 0;
img {
width: 24px;
diff --git a/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts b/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts
index ae10bb37f5..1af3660c26 100644
--- a/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts
+++ b/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts
@@ -3,11 +3,18 @@ import { CONNECTION_NOT_FOUND_NAME } from '../database/chain/ormconfig'
import { FailedTransaction, TransactionPersistor } from '../services/tx'
import RpcService from '../services/rpc-service'
import NetworksService from '../services/networks'
-import { TransactionStatus } from '../models/chain/transaction'
+import Transaction, { TransactionStatus } from '../models/chain/transaction'
import TransactionWithStatus from '../models/chain/transaction-with-status'
import logger from '../utils/logger'
import { interval } from 'rxjs'
+type TransactionDetail = {
+ hash: string
+ tx: Transaction | undefined
+ status: TransactionStatus
+ blockHash: string | null
+}
+
const getTransactionStatus = async (hash: string) => {
const url: string = NetworksService.getInstance().getCurrent().remote
const rpcService = new RpcService(url)
@@ -42,18 +49,26 @@ const trackingStatus = async () => {
const pendingHashes = pendingTransactions.map(tx => tx.hash)
const txs = await Promise.all(
pendingHashes.map(async hash => {
- const txWithStatus = await getTransactionStatus(hash)
- return {
- hash,
- tx: txWithStatus.tx,
- status: txWithStatus.status,
- blockHash: txWithStatus.blockHash,
+ try {
+ const txWithStatus = await getTransactionStatus(hash)
+ return {
+ hash,
+ tx: txWithStatus.tx,
+ status: txWithStatus.status,
+ blockHash: txWithStatus.blockHash,
+ }
+ } catch (error) {
+ // ignore error, get failed skip current update
}
})
)
- const failedTxs = txs.filter(tx => tx.status === TransactionStatus.Failed)
- const successTxs = txs.filter(tx => tx.status === TransactionStatus.Success)
+ const failedTxs = txs.filter(
+ (tx): tx is TransactionDetail & { status: TransactionStatus.Failed } => tx?.status === TransactionStatus.Failed
+ )
+ const successTxs = txs.filter(
+ (tx): tx is TransactionDetail & { status: TransactionStatus.Success } => tx?.status === TransactionStatus.Success
+ )
if (failedTxs.length) {
await FailedTransaction.updateFailedTxs(failedTxs.map(tx => tx.hash))