1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-29 07:16:36 +01:00
metamask-extension/ui/components/multichain/address-copy-button/address-copy-button.js
George Marshall 8437d0491f
Deprecated Icon and ButtonIcon clean up (#19220)
* Updating all deprecated instances of Icon and ButtonIcon

* Removing unused deprecated components and scripts
2023-05-19 10:33:02 -07:00

73 lines
2.0 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { ButtonBase, IconName } from '../../component-library';
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 ? IconName.CopySuccess : IconName.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,
};