Skip to content
This repository has been archived by the owner on Nov 7, 2023. It is now read-only.

Add Copy button to dashboard persona information #34

Merged
merged 1 commit into from
Dec 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/app/Dashboard/DashboardScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { Token } from '../state/reducers/tokens'
import DataVaultSummary from './panels/DataVaultSummary'
import { screens } from '../Authenticated/components/Navigation'
import { DataVaultStorageState } from '../state/reducers/datavault'
import { createDidFormat } from '../../formatters'

interface DashboardScreenInterface {
chainId?: number | null
Expand All @@ -23,9 +22,7 @@ const DashboardScreen: React.FC<DashboardScreenInterface> = ({
}) => {
return (
<div className="content dashboard">
<IdentitySummary
did={(address && chainId) ? createDidFormat(address, chainId) : undefined}
/>
{address && chainId && <IdentitySummary address={address} chainId={chainId} />}
<div className="container">
<div className="column">
<Balance tokens={tokens} addCustomToken={addCustomToken} />
Expand Down
54 changes: 32 additions & 22 deletions src/app/Dashboard/panels/IdentitySummary.tsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,43 @@
import React from 'react'
import LoadingComponent from '../../../components/Loading/LoadingComponent'
import CopyButton from '../../../components/CopyButton/CopyButton'
import Panel from '../../../components/Panel/Panel'
import ToolTip from '../../../components/Tooltip/Tooltip'
import { truncateAddressDid } from '../../../formatters'
import { createDidFormat, truncateAddressDid } from '../../../formatters'

interface IdentityInformationPanelI {
did?: string
address: string
chainId: number
}

const IdentityInformationPanel: React.FC<IdentityInformationPanelI> = ({ did }) =>
!did ? <LoadingComponent />
: (
<div className="container">
<div className="column">
<Panel
title="Persona information"
className="identity-information"
>
<div className="container">
<div className="column">
<h2>Persona Address</h2>
<p className="value">
<ToolTip hoverContent={did}>{truncateAddressDid(did)}</ToolTip>
</p>
</div>
const IdentityInformationPanel: React.FC<IdentityInformationPanelI> = ({ address, chainId }) => {
const did = createDidFormat(address, chainId)
return (
<div className="container">
<div className="column">
<Panel
title="Persona information"
className="identity-information"
>
<div className="container">
<div className="column">
<h2>Persona DID</h2>
<p className="value">
<ToolTip hoverContent={did}>{truncateAddressDid(did)}</ToolTip>
<CopyButton value={did} />
</p>
</div>
</Panel>
</div>
<div className="column">
<h2>Persona Address</h2>
<p className="value">
{address}
<CopyButton value={address} />
</p>
</div>
</div>
</Panel>
</div>
)
</div>
)
}

export default IdentityInformationPanel
3 changes: 3 additions & 0 deletions src/assets/images/icons/copy.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions src/components/CopyButton/CopyButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import React, { useRef, useState } from 'react'
import CopyIcon from '../../assets/images/icons/copy.svg'

interface CopyButtonInterface {
value: string
}

const CopyButton: React.FC<CopyButtonInterface> = ({ value }) => {
const [showResponse, setShowResponse] = useState<boolean>(false)
const copyTextField = useRef<HTMLInputElement>(null)

const handleClick = () => {
setShowResponse(true)
copyTextField.current && copyTextField.current.select()
document.execCommand('copy')
setTimeout(() => {
setShowResponse(false)
}, 1000)
}

return (
<span className="copyButton">
<button type="button" onClick={handleClick} className="icon">
<img src={CopyIcon} alt="Copy text" />
</button>
{showResponse && <span className="response">Copied to clipboard.</span>}
<input
type="text"
className="copyText"
defaultValue={value}
ref={copyTextField}
style={{ position: 'absolute', left: '-10000px' }}
/>
</span>
)
}

export default CopyButton