mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-05-08 04:37:56 +00:00
28f1f0de96
- Fix ReactPortal return types in PopupWindow, Tooltip, Modal - Fix RefObject type compatibility for React 18 - Update extension-dapp dependency to 0.62.19 - Update vanitygen dependency to 1.0.1 - Add eslint-scope resolution for webpack - Remove unused @ts-expect-error directives - Update mobile test snapshots
94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
// Copyright 2017-2026 @pezkuwi/react-components authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
|
|
import { useAccountInfo, useOutsideClick } from '@pezkuwi/react-hooks';
|
|
import { keyring } from '@pezkuwi/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<HTMLDivElement | null>;
|
|
}
|
|
|
|
function SidebarEditableSection ({ accountIndex, address, isBeingEdited, onUpdateName, sidebarRef }: Props): React.ReactElement<Props> {
|
|
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 (
|
|
<>
|
|
<AddressSection
|
|
accountIndex={accountIndex}
|
|
defaultValue={name}
|
|
editingName={isEditingName}
|
|
flags={flags}
|
|
onChange={setName}
|
|
value={address}
|
|
/>
|
|
<div
|
|
className='ui--AddressMenu-tags'
|
|
data-testid='sidebar-tags'
|
|
>
|
|
<Tags
|
|
isEditable
|
|
isEditing={isEditingTags}
|
|
onChange={setTags}
|
|
value={tags}
|
|
withEditButton={false}
|
|
withTitle
|
|
/>
|
|
</div>
|
|
<Flags flags={flags} />
|
|
<AccountMenuButtons
|
|
flags={flags}
|
|
isEditing={isEditing()}
|
|
isEditingName={isEditingName}
|
|
onCancel={onCancel}
|
|
onForgetAddress={onForgetAddress}
|
|
onSaveName={onSaveName}
|
|
onSaveTags={onSaveTags}
|
|
onUpdateName={onUpdateName}
|
|
recipientId={address}
|
|
toggleIsEditingName={toggleIsEditingName}
|
|
toggleIsEditingTags={toggleIsEditingTags}
|
|
/>
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default React.memo(SidebarEditableSection);
|