519c411db0
* feat: sync and update with all changes from fork * refactor: extract clipboard copy logic into custom hook * fix: correct spelling of DEFAULT_REFRESH_FREQUENCY_MS in Stamps and WalletBalance providers * refactor(ui-tests): replace fixed sleeps with condition-based waits * fix: handle null values for size and granteeCount in infoGroups * fix(lint): add newline at end of file in useClipboardCopy hook * fix(ui-tests): page.goto URL * refactor: update import paths for useClipboardCopy --------- Co-authored-by: Ferenc Sárai <sarai.ferenc@gmail.com>
30 lines
831 B
TypeScript
30 lines
831 B
TypeScript
import IconButton from '@mui/material/IconButton'
|
|
import { useSnackbar } from 'notistack'
|
|
import type { ReactElement } from 'react'
|
|
import Clipboard from 'remixicon-react/ClipboardLineIcon'
|
|
|
|
interface Props {
|
|
value: string
|
|
}
|
|
|
|
export default function ClipboardCopy({ value }: Props): ReactElement {
|
|
const { enqueueSnackbar } = useSnackbar()
|
|
|
|
const handleCopy = async () => {
|
|
try {
|
|
await navigator.clipboard.writeText(value)
|
|
enqueueSnackbar(`Copied: ${value}`, { variant: 'success' })
|
|
} catch {
|
|
enqueueSnackbar('Failed to copy to clipboard', { variant: 'error' })
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div style={{ marginRight: '3px', marginLeft: '3px' }}>
|
|
<IconButton color="primary" size="small" onClick={handleCopy}>
|
|
<Clipboard style={{ height: '20px' }} />
|
|
</IconButton>
|
|
</div>
|
|
)
|
|
}
|