| import { convertImageUrlToBlob } from 'common/util/convertImageUrlToBlob'; |
| import { copyBlobToClipboard } from 'features/system/util/copyBlobToClipboard'; |
| import { toast } from 'features/toast/toast'; |
| import { useCallback, useMemo } from 'react'; |
| import { useTranslation } from 'react-i18next'; |
|
|
| export const useCopyImageToClipboard = () => { |
| const { t } = useTranslation(); |
|
|
| const isClipboardAPIAvailable = useMemo(() => { |
| return Boolean(navigator.clipboard) && Boolean(window.ClipboardItem); |
| }, []); |
|
|
| const copyImageToClipboard = useCallback( |
| async (image_url: string) => { |
| if (!isClipboardAPIAvailable) { |
| toast({ |
| id: 'PROBLEM_COPYING_IMAGE', |
| title: t('toast.problemCopyingImage'), |
| description: "Your browser doesn't support the Clipboard API.", |
| status: 'error', |
| }); |
| } |
| try { |
| const blob = await convertImageUrlToBlob(image_url); |
|
|
| if (!blob) { |
| throw new Error('Unable to create Blob'); |
| } |
|
|
| copyBlobToClipboard(blob); |
|
|
| toast({ |
| id: 'IMAGE_COPIED', |
| title: t('toast.imageCopied'), |
| status: 'success', |
| }); |
| } catch (err) { |
| toast({ |
| id: 'PROBLEM_COPYING_IMAGE', |
| title: t('toast.problemCopyingImage'), |
| description: String(err), |
| status: 'error', |
| }); |
| } |
| }, |
| [isClipboardAPIAvailable, t] |
| ); |
|
|
| return { isClipboardAPIAvailable, copyImageToClipboard }; |
| }; |
|
|