Created a Nickname popover (#12632)
* Created a Nickname popover * Fixing lines in index.scss * Handle copy button and fix some paddings * Added text to be editable in the storybook component * Simplify nickname scss and html * Delete harcoded address * Change color usage with new color systemfeature/default_network_editable
parent
7ace0497c8
commit
35c1eaa2bd
@ -0,0 +1 @@ |
|||||||
|
export { default } from './nickname-popover.component'; |
@ -0,0 +1,67 @@ |
|||||||
|
.nickname-popover { |
||||||
|
&__popover-wrap { |
||||||
|
height: 232px; |
||||||
|
border-radius: 8px; |
||||||
|
background: $ui-white; |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
|
||||||
|
.popover-header { |
||||||
|
padding: 16px 16px 0 0; |
||||||
|
} |
||||||
|
|
||||||
|
.popover-content { |
||||||
|
margin-top: -15px; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&__address { |
||||||
|
@include H4; |
||||||
|
|
||||||
|
font-weight: bold; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
color: $Black-100; |
||||||
|
padding-top: 8px; |
||||||
|
} |
||||||
|
|
||||||
|
&__public-address { |
||||||
|
@include H7; |
||||||
|
|
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: center; |
||||||
|
min-height: 25px; |
||||||
|
background: $Grey-000; |
||||||
|
border-radius: 40px; |
||||||
|
padding-left: 8px; |
||||||
|
padding-right: 2px; |
||||||
|
margin-top: 8px; |
||||||
|
|
||||||
|
button { |
||||||
|
background: none; |
||||||
|
} |
||||||
|
|
||||||
|
&__constant { |
||||||
|
@include H8; |
||||||
|
|
||||||
|
color: $Grey-500; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&__view-on-block-explorer { |
||||||
|
@include H7; |
||||||
|
|
||||||
|
color: $primary-1; |
||||||
|
margin-top: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
&__footer-button { |
||||||
|
margin-top: 16px; |
||||||
|
width: 152px; |
||||||
|
height: 40px; |
||||||
|
border-radius: 100px; |
||||||
|
background: $primary-1; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
import React, { useCallback, useContext } from 'react'; |
||||||
|
import PropTypes from 'prop-types'; |
||||||
|
import { I18nContext } from '../../../contexts/i18n'; |
||||||
|
import Popover from '../popover'; |
||||||
|
import Button from '../button'; |
||||||
|
import Identicon from '../identicon/identicon.component'; |
||||||
|
import { shortenAddress } from '../../../helpers/utils/util'; |
||||||
|
import CopyIcon from '../icon/copy-icon.component'; |
||||||
|
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard'; |
||||||
|
|
||||||
|
const NicknamePopover = ({ address, onClose = null, onAdd = null }) => { |
||||||
|
const t = useContext(I18nContext); |
||||||
|
|
||||||
|
const onAddClick = useCallback(() => { |
||||||
|
onAdd(address); |
||||||
|
onClose(); |
||||||
|
}, [address, onClose, onAdd]); |
||||||
|
|
||||||
|
const [copied, handleCopy] = useCopyToClipboard(); |
||||||
|
|
||||||
|
return ( |
||||||
|
<div className="nickname-popover"> |
||||||
|
<Popover onClose={onClose} className="nickname-popover__popover-wrap"> |
||||||
|
<Identicon |
||||||
|
address={address} |
||||||
|
diameter={36} |
||||||
|
className="nickname-popover__identicon" |
||||||
|
/> |
||||||
|
<div className="nickname-popover__address"> |
||||||
|
{shortenAddress(address)} |
||||||
|
</div> |
||||||
|
<div className="nickname-popover__public-address"> |
||||||
|
<div className="nickname-popover__public-address__constant"> |
||||||
|
{address} |
||||||
|
</div> |
||||||
|
<button |
||||||
|
type="link" |
||||||
|
onClick={() => { |
||||||
|
handleCopy(address); |
||||||
|
}} |
||||||
|
title={copied ? t('copiedExclamation') : t('copyToClipboard')} |
||||||
|
> |
||||||
|
<CopyIcon size={11} color="#989a9b" /> |
||||||
|
</button> |
||||||
|
</div> |
||||||
|
<div className="nickname-popover__view-on-block-explorer"> |
||||||
|
{t('viewOnBlockExplorer')} |
||||||
|
</div> |
||||||
|
<Button |
||||||
|
type="primary" |
||||||
|
className="nickname-popover__footer-button" |
||||||
|
onClick={onAddClick} |
||||||
|
> |
||||||
|
{t('addANickname')} |
||||||
|
</Button> |
||||||
|
</Popover> |
||||||
|
</div> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
NicknamePopover.propTypes = { |
||||||
|
address: PropTypes.string, |
||||||
|
onClose: PropTypes.func, |
||||||
|
onAdd: PropTypes.func, |
||||||
|
}; |
||||||
|
|
||||||
|
export default NicknamePopover; |
@ -0,0 +1,32 @@ |
|||||||
|
import React, { useState } from 'react'; |
||||||
|
import { action } from '@storybook/addon-actions'; |
||||||
|
import { text } from '@storybook/addon-knobs'; |
||||||
|
import Button from '../button'; |
||||||
|
import NicknamePopover from '.'; |
||||||
|
|
||||||
|
export default { |
||||||
|
title: 'NicknamePopover', |
||||||
|
id: __filename, |
||||||
|
}; |
||||||
|
|
||||||
|
export const Default = () => { |
||||||
|
const [showNicknamePopover, setShowNicknamePopover] = useState(false); |
||||||
|
|
||||||
|
return ( |
||||||
|
<div> |
||||||
|
<Button onClick={() => setShowNicknamePopover(true)}> |
||||||
|
Open Nickname Popover |
||||||
|
</Button> |
||||||
|
{showNicknamePopover && ( |
||||||
|
<NicknamePopover |
||||||
|
address={text( |
||||||
|
'Address', |
||||||
|
'0x5e6DaAD1BE117e26590F9eEcD509336ABFBe5966', |
||||||
|
)} |
||||||
|
onClose={() => setShowNicknamePopover(false)} |
||||||
|
onAdd={action('add NicknamePopover')} |
||||||
|
/> |
||||||
|
)} |
||||||
|
</div> |
||||||
|
); |
||||||
|
}; |
Loading…
Reference in new issue