From e5e46accf690aeab4b66f4f160d0d3fddb6badc3 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 28 Jun 2020 14:05:35 +0200 Subject: [PATCH] Cleanup account menus (#3076) --- .../page-accounts/src/Accounts/Account.tsx | 178 ++++++++++-------- .../modals/{Identity.tsx => IdentityMain.tsx} | 4 +- .../page-accounts/src/Contacts/Address.tsx | 18 +- packages/page-accounts/src/util.tsx | 14 ++ packages/react-components/src/ChainLock.tsx | 6 +- packages/react-hooks/src/useAccountInfo.ts | 1 + 6 files changed, 122 insertions(+), 99 deletions(-) rename packages/page-accounts/src/Accounts/modals/{Identity.tsx => IdentityMain.tsx} (98%) create mode 100644 packages/page-accounts/src/util.tsx diff --git a/packages/page-accounts/src/Accounts/Account.tsx b/packages/page-accounts/src/Accounts/Account.tsx index c531dc50d6..1dd8dc851f 100644 --- a/packages/page-accounts/src/Accounts/Account.tsx +++ b/packages/page-accounts/src/Accounts/Account.tsx @@ -20,10 +20,11 @@ import keyring from '@polkadot/ui-keyring'; import { BN_ZERO, formatBalance, formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; +import { createMenuGroup } from '../util'; import Backup from './modals/Backup'; import ChangePass from './modals/ChangePass'; import Derive from './modals/Derive'; -import Identity from './modals/Identity'; +import IdentityMain from './modals/IdentityMain'; import MultisigApprove from './modals/MultisigApprove'; import RecoverAccount from './modals/RecoverAccount'; import RecoverSetup from './modals/RecoverSetup'; @@ -81,7 +82,7 @@ function Account ({ account: { address, meta }, className = '', filter, isFavori const [isBackupOpen, toggleBackup] = useToggle(); const [isDeriveOpen, toggleDerive] = useToggle(); const [isForgetOpen, toggleForget] = useToggle(); - const [isIdentityOpen, toggleIdentity] = useToggle(); + const [isIdentityMainOpen, toggleIdentityMain] = useToggle(); const [isMultisigOpen, toggleMultisig] = useToggle(); const [isPasswordOpen, togglePassword] = useToggle(); const [isRecoverAccountOpen, toggleRecoverAccount] = useToggle(); @@ -263,11 +264,11 @@ function Account ({ account: { address, meta }, className = '', filter, isFavori onForget={_onForget} /> )} - {isIdentityOpen && ( - )} {isPasswordOpen && ( @@ -355,84 +356,99 @@ function Account ({ account: { address, meta }, className = '', filter, isFavori text vertical > - - {t('Set on-chain identity')} - - - {t('Clear expired democracy locks')} - - - - {t('Derive account via derivation path')} - - {isHardware && ( - - {t('Show address on hardware device')} - - )} - - - {t('Create a backup file for this account')} - - - {t("Change this account's password")} - - - {t('Forget this account')} - - {api.api.tx.recovery?.createRecovery && ( - <> - - {!recoveryInfo && ( - - {t('Make recoverable')} - - )} - - {t('Initiate recovery for another')} - - - )} - {isMultisig && ( - <> - + {createMenuGroup([ + api.api.tx.identity?.setIdentity && ( - {t('Multisig approvals')} + {t('Set on-chain identity')} - - )} - {!api.isDevelopment && ( - <> - - - - )} + ), + api.api.tx.democracy?.unlock && democracyUnlockTx && ( + + {t('Clear expired democracy locks')} + + ) + ])} + {createMenuGroup([ + !(isExternal || isHardware || isInjected || isMultisig) && ( + + {t('Derive account via derivation path')} + + ), + isHardware && ( + + {t('Show address on hardware device')} + + ) + ])} + {createMenuGroup([ + !(isExternal || isInjected || isMultisig || isDevelopment) && ( + + {t('Create a backup file for this account')} + + ), + !(isExternal || isInjected || isMultisig || isDevelopment) && ( + + {t("Change this account's password")} + + ), + !(isInjected || isDevelopment) && ( + + {t('Forget this account')} + + ) + ])} + {api.api.tx.recovery?.createRecovery && createMenuGroup([ + !recoveryInfo && ( + + {t('Make recoverable')} + + ), + + {t('Initiate recovery for another')} + + ])} + {api.api.tx.multisig?.asMulti && isMultisig && createMenuGroup([ + + {t('Multisig approvals')} + + ])} + diff --git a/packages/page-accounts/src/Accounts/modals/Identity.tsx b/packages/page-accounts/src/Accounts/modals/IdentityMain.tsx similarity index 98% rename from packages/page-accounts/src/Accounts/modals/Identity.tsx rename to packages/page-accounts/src/Accounts/modals/IdentityMain.tsx index 4b90811996..408f055f87 100644 --- a/packages/page-accounts/src/Accounts/modals/Identity.tsx +++ b/packages/page-accounts/src/Accounts/modals/IdentityMain.tsx @@ -69,7 +69,7 @@ function checkValue (hasValue: boolean, value: string | null | undefined, minLen ); } -function Identity ({ address, className = '', onClose }: Props): React.ReactElement { +function IdentityMain ({ address, className = '', onClose }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const identityOpt = useCall>(api.query.identity.identityOf, [address]); @@ -267,7 +267,7 @@ function Identity ({ address, className = '', onClose }: Props): React.ReactElem ); } -export default styled(Identity)` +export default styled(IdentityMain)` .toggle-Wrap { position: relative; diff --git a/packages/page-accounts/src/Contacts/Address.tsx b/packages/page-accounts/src/Contacts/Address.tsx index 0e53e13ff3..147d3c9544 100644 --- a/packages/page-accounts/src/Contacts/Address.tsx +++ b/packages/page-accounts/src/Contacts/Address.tsx @@ -223,17 +223,13 @@ function Address ({ address, className = '', filter, isFavorite, toggleFavorite > {t('Forget this address')} - {!api.isDevelopment && ( - <> - - - - )} + + diff --git a/packages/page-accounts/src/util.tsx b/packages/page-accounts/src/util.tsx new file mode 100644 index 0000000000..6777accbe1 --- /dev/null +++ b/packages/page-accounts/src/util.tsx @@ -0,0 +1,14 @@ +// Copyright 2017-2020 @polkadot/app-accounts authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import React from 'react'; +import { Menu } from '@polkadot/react-components'; + +export function createMenuGroup (items: (React.ReactNode | false | undefined | null)[]): React.ReactNode | null { + const filtered = items.filter((item): item is React.ReactNode => !!item); + + return filtered.length + ? <>{filtered} + : null; +} diff --git a/packages/react-components/src/ChainLock.tsx b/packages/react-components/src/ChainLock.tsx index a16ab8a6c2..900b70ccb9 100644 --- a/packages/react-components/src/ChainLock.tsx +++ b/packages/react-components/src/ChainLock.tsx @@ -56,11 +56,7 @@ function ChainLock ({ className = '', genesisHash, isDisabled, onChange }: Props ('only this network') - : t('use on any network') - } + label={t('only this network')} onChange={_onChange} preventDefault value={isTiedToChain} diff --git a/packages/react-hooks/src/useAccountInfo.ts b/packages/react-hooks/src/useAccountInfo.ts index 7231528a59..74743b676d 100644 --- a/packages/react-hooks/src/useAccountInfo.ts +++ b/packages/react-hooks/src/useAccountInfo.ts @@ -113,6 +113,7 @@ export default function useAccountInfo (value: string | null, isContract = false isExternal: !!accountOrAddress?.meta.isExternal || false, isHardware: !!accountOrAddress?.meta.isHardware || false, isInContacts, + isInjected: !!accountOrAddress?.meta.isInjected || false, isMultisig: !!accountOrAddress?.meta.isMultisig || false, isOwned, isProxied: !!accountOrAddress?.meta.isProxied || false