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>
34 lines
872 B
TypeScript
34 lines
872 B
TypeScript
import { IconButton } from '@mui/material'
|
|
import { closeSnackbar, useSnackbar } from 'notistack'
|
|
import { useState } from 'react'
|
|
import CloseLineIcon from 'remixicon-react/CloseLineIcon'
|
|
|
|
export function useClipboardCopy(value: string) {
|
|
const { enqueueSnackbar } = useSnackbar()
|
|
const [copied, setCopied] = useState(false)
|
|
|
|
const handleCopy = async () => {
|
|
try {
|
|
await navigator.clipboard.writeText(value)
|
|
setCopied(true)
|
|
} catch {
|
|
enqueueSnackbar(`Failed to copy text`, {
|
|
variant: 'error',
|
|
action: key => (
|
|
<IconButton onClick={() => closeSnackbar(key)} size="small" color="inherit">
|
|
<CloseLineIcon fontSize="small" />
|
|
</IconButton>
|
|
),
|
|
})
|
|
}
|
|
}
|
|
|
|
const tooltipCloseHandler = () => setCopied(false)
|
|
|
|
return {
|
|
copied,
|
|
handleCopy,
|
|
tooltipCloseHandler,
|
|
}
|
|
}
|