// Copyright 2019-2020 @polkadot/extension-ui 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 { AccountJson } from '@polkadot/extension-base/background/types'; import React, { useCallback, useContext, useMemo, useState } from 'react'; import styled from 'styled-components'; import genesisOptions from '@polkadot/extension-chains/genesisHashes'; import { ActionContext, Address, Checkbox, Dropdown, Link, MenuDivider } from '../../components'; import useTranslation from '../../hooks/useTranslation'; import { editAccount, showAccount, tieAccount } from '../../messaging'; import { Name } from '../../partials'; interface Props extends AccountJson { className?: string; parentName?: string; } interface EditState { isEditing: boolean; toggleActions: number; } function Account ({ address, className, genesisHash, isExternal, isHidden, parentName, suri }: Props): React.ReactElement { const { t } = useTranslation(); const onAction = useContext(ActionContext); const [{ isEditing, toggleActions }, setEditing] = useState({ isEditing: false, toggleActions: 0 }); const [editedName, setName] = useState(null); const _onChangeGenesis = useCallback( (genesisHash?: string | null): void => { tieAccount(address, genesisHash || null) .catch(console.error); }, [address] ); const _toggleEdit = useCallback( (): void => setEditing(({ toggleActions }) => ({ isEditing: !isEditing, toggleActions: ++toggleActions })), [isEditing] ); const _saveChanges = useCallback( (): void => { if (editedName && editedName !== name) { editAccount(address, editedName) .then(() => onAction()) .catch(console.error); } _toggleEdit(); }, [editedName, address, _toggleEdit, onAction] ); const _toggleVisibility = useCallback( (): void => { showAccount(address, isHidden || false) .catch(console.error); }, [address, isHidden] ); const _actions = useMemo(() => ( <> {t('Rename')} {!isExternal && ( {t('Derive New Account')} )} {!isExternal && ( {t('Export Account')} )} {t('Forget Account')}
('Visible (always inject)')} onClick={_toggleVisibility} />
), [_onChangeGenesis, _toggleEdit, _toggleVisibility, address, genesisHash, isExternal, isHidden, t]); return (
{isEditing && ( )}
); } export default styled(Account)` .address { margin-bottom: 8px; } .editName { position: absolute; flex: 1; left: 80px; top: 6px; width: 315px; } .menuItem { border-radius: 8px; display: block; font-weight: 600; font-size: 15px; line-height: 20px; margin: 0; min-width: 13rem; padding: 4px 16px; .inputItem { margin: 0; } } `;