From f2f57087f3865096c7d485b6de40df5ef11d772a Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 28 Jun 2023 22:35:17 +0800 Subject: [PATCH] feat: Multisig Address with new ui (#2666) * feat: Multisig Address with new ui * fix: tests * fix: menu * fix * fix: Test error * feat: Multisig Address * fix: Multisig Address * fix: Multisig Address for pr --- .../approveMultisigTx.module.scss | 109 ----- .../components/ApproveMultisigTx/index.tsx | 157 ------ .../approveMultisigTx.module.scss | 168 +++++++ .../hooks.ts | 0 .../ApproveMultisigTxDialog/index.tsx | 187 +++++++ .../src/components/DataSetting/index.tsx | 13 +- .../ImportHardware/detect-device.tsx | 10 +- .../LanguageDialog/languageDialog.module.scss | 15 +- .../src/components/MultisigAddress/hooks.ts | 77 ++- .../src/components/MultisigAddress/index.tsx | 458 +++++++++++------- .../multisigAddress.module.scss | 256 ++++++---- .../MultisigAddressCreateDialog/hooks.ts | 45 +- .../MultisigAddressCreateDialog/index.tsx | 134 ++--- ...multisig-address-create-dialog.module.scss | 33 -- .../multisigAddressCreateDialog.module.scss | 50 ++ .../components/MultisigAddressInfo/index.tsx | 132 ++--- .../multisig-address-info.module.scss | 79 ++- .../src/components/PasswordRequest/index.tsx | 2 + .../src/components/ScriptTag/index.tsx | 5 +- .../src/components/SendFieldset/index.tsx | 10 +- .../SendFromMultisigDialog/index.tsx | 167 ++++--- .../sendFromMultisigDialog.module.scss | 113 +++-- .../src/components/SignAndVerify/index.tsx | 12 - .../SignAndVerify/signAndVerify.module.scss | 4 +- .../neuron-ui/src/containers/Main/hooks.ts | 25 +- packages/neuron-ui/src/index.tsx | 8 - packages/neuron-ui/src/locales/en.json | 46 +- packages/neuron-ui/src/locales/zh-tw.json | 36 +- packages/neuron-ui/src/locales/zh.json | 36 +- packages/neuron-ui/src/router.tsx | 64 +-- .../neuron-ui/src/services/remote/updater.ts | 4 +- packages/neuron-ui/src/styles/mixin.scss | 29 +- packages/neuron-ui/src/styles/theme.scss | 2 + .../neuron-ui/src/types/Subject/index.d.ts | 1 + packages/neuron-ui/src/utils/const.ts | 2 + packages/neuron-ui/src/utils/enums.ts | 1 + packages/neuron-ui/src/utils/multisig.ts | 5 +- .../src/widgets/Dialog/dialog.module.scss | 27 +- .../neuron-ui/src/widgets/Dialog/index.tsx | 15 +- .../src/widgets/Icons/CheckboxDisabled.svg | 3 + .../widgets/Icons/CheckboxDisabledDark.svg | 3 + .../neuron-ui/src/widgets/Icons/Confirm.svg | 3 + .../neuron-ui/src/widgets/Icons/Details.svg | 3 + .../neuron-ui/src/widgets/Icons/Search.svg | 4 +- .../neuron-ui/src/widgets/Icons/Transfer.svg | 4 +- .../neuron-ui/src/widgets/Icons/Upload.svg | 3 + .../src/widgets/InputSelect/index.tsx | 2 +- .../neuron-ui/src/widgets/Table/index.tsx | 61 +-- .../neuron-ui/src/widgets/Tooltip/index.tsx | 21 +- .../src/widgets/Tooltip/tooltip.module.scss | 86 ++-- .../sync/indexer-cache-service.ts | 7 +- .../src/block-sync-renderer/sync/queue.ts | 14 +- packages/neuron-wallet/src/controllers/api.ts | 20 +- .../neuron-wallet/src/controllers/app/menu.ts | 40 +- .../neuron-wallet/src/controllers/multisig.ts | 21 +- .../src/database/chain/entities/sync-info.ts | 7 +- .../src/database/chain/entities/tx-lock.ts | 9 +- .../neuron-wallet/src/database/chain/index.ts | 4 +- .../src/models/subjects/command.ts | 1 + .../src/services/asset-account-service.ts | 9 +- .../tests/controllers/multisig.test.ts | 6 - 61 files changed, 1732 insertions(+), 1136 deletions(-) delete mode 100644 packages/neuron-ui/src/components/ApproveMultisigTx/approveMultisigTx.module.scss delete mode 100644 packages/neuron-ui/src/components/ApproveMultisigTx/index.tsx create mode 100644 packages/neuron-ui/src/components/ApproveMultisigTxDialog/approveMultisigTx.module.scss rename packages/neuron-ui/src/components/{ApproveMultisigTx => ApproveMultisigTxDialog}/hooks.ts (100%) create mode 100644 packages/neuron-ui/src/components/ApproveMultisigTxDialog/index.tsx delete mode 100644 packages/neuron-ui/src/components/MultisigAddressCreateDialog/multisig-address-create-dialog.module.scss create mode 100644 packages/neuron-ui/src/components/MultisigAddressCreateDialog/multisigAddressCreateDialog.module.scss create mode 100644 packages/neuron-ui/src/widgets/Icons/CheckboxDisabled.svg create mode 100644 packages/neuron-ui/src/widgets/Icons/CheckboxDisabledDark.svg create mode 100644 packages/neuron-ui/src/widgets/Icons/Confirm.svg create mode 100644 packages/neuron-ui/src/widgets/Icons/Details.svg create mode 100644 packages/neuron-ui/src/widgets/Icons/Upload.svg diff --git a/packages/neuron-ui/src/components/ApproveMultisigTx/approveMultisigTx.module.scss b/packages/neuron-ui/src/components/ApproveMultisigTx/approveMultisigTx.module.scss deleted file mode 100644 index a62acbda93..0000000000 --- a/packages/neuron-ui/src/components/ApproveMultisigTx/approveMultisigTx.module.scss +++ /dev/null @@ -1,109 +0,0 @@ -@import '../../styles/mixin.scss'; - -.title { - display: flex; - line-height: 1.625rem; - flex-wrap: wrap; -} - -.textarea { - margin-top: 8px; - width: 100%; - height: 140px; - resize: none; -} - -.action { - display: flex; - justify-content: space-between; - margin-top: 24px; -} - -.recordTab { - position: relative; - display: flex; - box-sizing: border-box; - margin: 0 0 10px 0; - padding: 0; - line-height: 1.6875rem; - font-size: 1.375rem; - color: #000; - border-bottom: 1px solid #ccc; - - button { - @include bold-text; - appearance: none; - flex: 1; - display: flex; - justify-content: center; - align-items: center; - height: 1.875rem; - font-size: 1rem; - background-color: transparent; - padding: 0 0 6px 0; - margin: 0; - border: none; - - &:hover { - color: var(--nervos-green); - opacity: 0.8; - } - } - - .underline { - display: block; - position: absolute; - bottom: -1px; - left: 0; - height: 4px; - width: 50%; - background: var(--nervos-green); - box-sizing: border-box; - padding: 0; - transition: transform 0.1s ease-in-out; - } - - &[data-idx='1'] { - .underline { - transform: translateX(100%); - } - } -} - -.cellItem { - display: flex; - align-items: center; - justify-content: space-between; - - & > div { - display: flex; - align-items: center; - } - - .tag { - background-color: #ddd; - color: #fff; - padding: 2px; - margin: 4px; - padding: 0 6px; - font-size: 12px; - border-radius: 4px; - border: 1px solid #ddd; - text-decoration: line-through; - - &+.activity { - background: var(--nervos-green); - border-color: var(--nervos-green); - text-decoration: none; - } - } - - .capacity { - flex-shrink: 0; - margin-left: 16px; - } -} - -.statusTitle { - margin-top: 8px; -} diff --git a/packages/neuron-ui/src/components/ApproveMultisigTx/index.tsx b/packages/neuron-ui/src/components/ApproveMultisigTx/index.tsx deleted file mode 100644 index 3bc19fa7c1..0000000000 --- a/packages/neuron-ui/src/components/ApproveMultisigTx/index.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import React, { useMemo } from 'react' -import { useTranslation, Trans } from 'react-i18next' -import { MultisigConfig, OfflineSignJSON } from 'services/remote' -import Button from 'widgets/Button' -import CopyZoneAddress from 'widgets/CopyZoneAddress' -import { useState as useGlobalState } from 'states' -import { ckbCore } from 'services/chain' -import { shannonToCKBFormatter } from 'utils' -import ScriptTag from 'components/ScriptTag' -import getMultisigSignStatus from 'utils/getMultisigSignStatus' -import styles from './approveMultisigTx.module.scss' -import { useBroadcast, useExport, useSignAndBroadcast, useSignAndExport, useTabView } from './hooks' - -const Cell = React.memo( - ({ - cell, - isMainnet, - }: { - cell: { - lock: CKBComponents.Script - type?: CKBComponents.Script - data?: string - capacity: string - } - isMainnet: boolean - }) => { - return ( -
-
- - Type - Data - -
- {`${shannonToCKBFormatter(cell.capacity)} CKB`} -
- ) - } -) -const ApproveMultisigTx = ({ - multisigConfig, - closeDialog, - offlineSignJson, - isMainnet, -}: { - multisigConfig: MultisigConfig - closeDialog: () => void - offlineSignJson: OfflineSignJSON - isMainnet: boolean -}) => { - const [t] = useTranslation() - const { wallet } = useGlobalState() - const jsonContent = useMemo(() => { - return JSON.stringify(offlineSignJson, null, 2) - }, [offlineSignJson]) - const { lackOfRCount, lackOfMCount, canBroadcastAfterSign, canSign } = useMemo( - () => - getMultisigSignStatus({ - multisigConfig, - signatures: offlineSignJson.transaction.signatures, - addresses: wallet.addresses, - }), - [multisigConfig, offlineSignJson.transaction.signatures, wallet.addresses] - ) - const onSignAndExport = useSignAndExport({ - multisigConfig, - walletID: wallet.id, - offlineSignJson, - closeDialog, - }) - const onBroadcast = useBroadcast({ offlineSignJson, walletID: wallet.id, closeDialog, t }) - const onSignAndBroadcast = useSignAndBroadcast({ - multisigConfig, - walletID: wallet.id, - offlineSignJson, - canBroadcastAfterSign, - closeDialog, - }) - const onExport = useExport({ offlineSignJson, closeDialog }) - const { tabIdx, onTabClick } = useTabView() - const [label, action] = useMemo(() => { - if (!lackOfMCount && !lackOfRCount) { - return ['broadcast', onBroadcast] - } - if (!canSign) { - return ['export', onExport] - } - if (canBroadcastAfterSign) { - return ['signAndBroadcast', onSignAndBroadcast] - } - return ['signAndExport', onSignAndExport] - }, [ - lackOfMCount, - lackOfRCount, - canSign, - canBroadcastAfterSign, - onBroadcast, - onExport, - onSignAndBroadcast, - onSignAndExport, - ]) - return ( - <> -
- ]} - /> -
-

{t('multisig-address.approve-dialog.transaction')}

-
-
{t('multisig-address.approve-dialog.content')}
-
- - -
-
- {tabIdx === '0' ? ( -