feat: sync and update with all changes from fork (#720)
* 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>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user