// Copyright 2017-2025 @polkadot/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 import React, { useCallback, useEffect, useMemo } from 'react'; import { useAccountInfo, useOutsideClick } from '@polkadot/react-hooks'; import { keyring } from '@polkadot/ui-keyring'; import Tags from '../Tags.js'; import AccountMenuButtons from './AccountMenuButtons.js'; import AddressSection from './AddressSection.js'; import Flags from './Flags.js'; interface Props { accountIndex: string | undefined; address: string; isBeingEdited: (arg: boolean) => void; onUpdateName?: (() => void) | null; sidebarRef: React.RefObject; } function SidebarEditableSection ({ accountIndex, address, isBeingEdited, onUpdateName, sidebarRef }: Props): React.ReactElement { const { flags, isEditing, isEditingName, isEditingTags, name, onForgetAddress, onSaveName, onSaveTags, setIsEditingName, setIsEditingTags, setName, setTags, tags, toggleIsEditingName, toggleIsEditingTags } = useAccountInfo(address); const refs = useMemo( () => [sidebarRef], [sidebarRef] ); useEffect((): void => { isBeingEdited(isEditing()); }, [isBeingEdited, isEditing]); const onCancel = useCallback( (): void => { if (isEditing()) { try { const accountOrAddress = keyring.getAccount(address) || keyring.getAddress(address); setName(accountOrAddress?.meta.name || ''); setTags(accountOrAddress?.meta.tags ? (accountOrAddress.meta.tags).sort() : []); setIsEditingName(false); setIsEditingTags(false); } catch { // ignore } } }, [isEditing, setName, setTags, setIsEditingName, setIsEditingTags, address]); useOutsideClick(refs, onCancel); return ( <>
); } export default React.memo(SidebarEditableSection);