mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-01 13:47:06 +01:00
75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import classnames from 'classnames';
|
|
import { ButtonBase } from '../../component-library';
|
|
// TODO: Replace ICON_NAMES with IconName when ButtonBase/Buttons have been updated
|
|
import { ICON_NAMES } from '../../component-library/icon/deprecated';
|
|
import {
|
|
BackgroundColor,
|
|
TextVariant,
|
|
TextColor,
|
|
Size,
|
|
BorderRadius,
|
|
AlignItems,
|
|
} from '../../../helpers/constants/design-system';
|
|
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
|
|
import { shortenAddress } from '../../../helpers/utils/util';
|
|
import Tooltip from '../../ui/tooltip/tooltip';
|
|
import { useI18nContext } from '../../../hooks/useI18nContext';
|
|
|
|
export const AddressCopyButton = ({
|
|
address,
|
|
shorten = false,
|
|
wrap = false,
|
|
onClick,
|
|
}) => {
|
|
const displayAddress = shorten ? shortenAddress(address) : address;
|
|
const [copied, handleCopy] = useCopyToClipboard();
|
|
const t = useI18nContext();
|
|
|
|
return (
|
|
<Tooltip position="bottom" title={copied ? t('copiedExclamation') : null}>
|
|
<ButtonBase
|
|
backgroundColor={BackgroundColor.primaryMuted}
|
|
onClick={() => {
|
|
handleCopy(address);
|
|
onClick?.();
|
|
}}
|
|
paddingRight={4}
|
|
paddingLeft={4}
|
|
size={Size.SM}
|
|
variant={TextVariant.bodySm}
|
|
color={TextColor.primaryDefault}
|
|
endIconName={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
|
|
className={classnames('multichain-address-copy-button', {
|
|
'multichain-address-copy-button__address--wrap': wrap,
|
|
})}
|
|
borderRadius={BorderRadius.pill}
|
|
alignItems={AlignItems.center}
|
|
data-testid="address-copy-button-text"
|
|
>
|
|
{displayAddress}
|
|
</ButtonBase>
|
|
</Tooltip>
|
|
);
|
|
};
|
|
|
|
AddressCopyButton.propTypes = {
|
|
/**
|
|
* Address to be copied
|
|
*/
|
|
address: PropTypes.string.isRequired,
|
|
/**
|
|
* Represents if the address should be shortened
|
|
*/
|
|
shorten: PropTypes.bool,
|
|
/**
|
|
* Represents if the element should wrap to multiple lines
|
|
*/
|
|
wrap: PropTypes.bool,
|
|
/**
|
|
* Fires when the button is clicked
|
|
*/
|
|
onClick: PropTypes.func,
|
|
};
|