add copy to clipboard util

This commit is contained in:
Abhinav 2022-11-22 19:41:04 +05:30
parent d9b623ab19
commit 7c2b64bb18

View file

@ -28,6 +28,10 @@ import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata';
import { addLogLine } from 'utils/logging'; import { addLogLine } from 'utils/logging';
import { makeHumanReadableStorage } from 'utils/billing'; import { makeHumanReadableStorage } from 'utils/billing';
import { CustomError } from 'utils/error';
const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000;
export function downloadAsFile(filename: string, content: string) { export function downloadAsFile(filename: string, content: string) {
const file = new Blob([content], { const file = new Blob([content], {
type: 'text/plain', type: 'text/plain',
@ -526,3 +530,44 @@ export const getUserOwnedNonTrashedFiles = (files: EnteFile[]) => {
} }
return files.filter((file) => file.isTrashed || file.ownerID === user.id); return files.filter((file) => file.isTrashed || file.ownerID === user.id);
}; };
export const copyFileToClipboard = async (fileUrl: string) => {
const canvas = document.createElement('canvas');
const canvasCTX = canvas.getContext('2d');
const image = new Image();
await new Promise((resolve, reject) => {
let timeout: NodeJS.Timeout = null;
try {
image.setAttribute('src', fileUrl);
image.onload = () => {
canvas.width = image.width;
canvas.height = image.height;
canvasCTX.drawImage(image, 0, 0, image.width, image.height);
resolve(null);
clearTimeout(timeout);
};
} catch (e) {
void logError(e, 'failed to copy to clipboard');
} finally {
clearTimeout(timeout);
}
timeout = setTimeout(
() => reject(Error(CustomError.WAIT_TIME_EXCEEDED)),
WAIT_TIME_IMAGE_CONVERSION
);
});
const { ClipboardItem } = window;
canvas.toBlob(
async (blob) => {
console.log(URL.createObjectURL(blob), blob.size);
await navigator.clipboard
.write([new ClipboardItem({ 'image/png': blob })])
.then(() => console.log('copied'))
.catch((e) => console.log(e));
},
'image/png',
1
);
};