52 lines
1.0 KiB
TypeScript
52 lines
1.0 KiB
TypeScript
import { ContentCopy } from '@mui/icons-material/'
|
|
import { Box, IconButton, Typography } from '@mui/material'
|
|
import { toast } from 'react-toastify'
|
|
|
|
type Props = {
|
|
textToCopy: string
|
|
}
|
|
|
|
export const CopyToClipboard = ({ textToCopy }: Props) => {
|
|
const handleCopyClick = () => {
|
|
navigator.clipboard.writeText(textToCopy)
|
|
toast.success('Copied to clipboard', {
|
|
autoClose: 1000,
|
|
hideProgressBar: true
|
|
})
|
|
}
|
|
|
|
return (
|
|
<Box
|
|
sx={{
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
width: '100%'
|
|
}}
|
|
>
|
|
<Typography
|
|
onClick={(e) => {
|
|
e.stopPropagation()
|
|
handleCopyClick()
|
|
}}
|
|
component="label"
|
|
sx={{
|
|
flex: '1',
|
|
overflow: 'auto',
|
|
whiteSpace: 'nowrap',
|
|
cursor: 'pointer'
|
|
}}
|
|
>
|
|
{textToCopy}
|
|
</Typography>
|
|
<IconButton
|
|
onClick={(e) => {
|
|
e.stopPropagation()
|
|
handleCopyClick()
|
|
}}
|
|
>
|
|
<ContentCopy />
|
|
</IconButton>
|
|
</Box>
|
|
)
|
|
}
|