From d853b1d02082e3199fdefb4a5b54f5e3ebe6e145 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Thu, 10 Apr 2025 18:21:36 +0000 Subject: [PATCH] Enhance copyToClipboard with file support and error handling --- .../app/src/utils/copyToClipboard/index.js | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/packages/app/src/utils/copyToClipboard/index.js b/packages/app/src/utils/copyToClipboard/index.js index 253d315a..3926831c 100755 --- a/packages/app/src/utils/copyToClipboard/index.js +++ b/packages/app/src/utils/copyToClipboard/index.js @@ -1,8 +1,48 @@ -export default (text) => { - if (!navigator.clipboard?.writeText) { - return app.message.error("Clipboard API not supported") - } +/** + * Copies content to clipboard, supporting both text and file data + * @param {string|File|Blob} content - The content to copy (text string or file/blob data) + * @param {Object} options - Optional configuration + * @param {string} options.successMessage - Custom success message + * @returns {Promise} - Promise resolving to success state + */ +export default async (content, options = {}) => { + const { successMessage = "Copied to clipboard" } = options - navigator.clipboard.writeText(text) - app.message.success("Copied to clipboard") -} \ No newline at end of file + try { + if (!navigator.clipboard) { + app.message.error("Clipboard API not supported") + return false + } + + if (typeof content === "string") { + await navigator.clipboard.writeText(content) + + app.message.success(successMessage) + + return true + } + + if (content instanceof File || content instanceof Blob) { + const clipboardItem = new ClipboardItem({ + [content.type]: content, + }) + + if (!navigator.clipboard.write) { + app.message.error("File copying not supported in this browser") + return false + } + + await navigator.clipboard.write([clipboardItem]) + app.message.success(successMessage) + return true + } + + app.message.error("Unsupported content type") + return false + } catch (error) { + console.error("Clipboard operation failed:", error) + app.message.error("Failed to copy to clipboard") + + return false + } +}