use-copy-to-clipboard.ts 624 B

1234567891011121314151617181920212223242526
  1. import { useCallback, useState } from 'react'
  2. import writeText from 'copy-to-clipboard'
  3. type CopiedValue = string | null
  4. type CopyFn = (text: string) => Promise<boolean>
  5. function useCopyToClipboard(): [CopiedValue, CopyFn] {
  6. const [copiedText, setCopiedText] = useState<CopiedValue>(null)
  7. const copy: CopyFn = useCallback(async (text: string) => {
  8. try {
  9. writeText(text)
  10. setCopiedText(text)
  11. return true
  12. }
  13. catch (error) {
  14. console.warn('Copy failed', error)
  15. setCopiedText(null)
  16. return false
  17. }
  18. }, [])
  19. return [copiedText, copy]
  20. }
  21. export default useCopyToClipboard