diff --git a/packages/bbui/src/Table/InternalRenderer.svelte b/packages/bbui/src/Table/InternalRenderer.svelte index 0f894ac85..858d51f12 100644 --- a/packages/bbui/src/Table/InternalRenderer.svelte +++ b/packages/bbui/src/Table/InternalRenderer.svelte @@ -8,10 +8,35 @@ copyToClipboard(value) } - function copyToClipboard(value) { - navigator.clipboard.writeText(value).then(() => { - notifications.success("Copied") + const copyToClipboard = value => { + return new Promise(res => { + if (navigator.clipboard && window.isSecureContext) { + // Try using the clipboard API first + navigator.clipboard.writeText(value).then(res) + } else { + // Fall back to the textarea hack + let textArea = document.createElement("textarea") + textArea.value = value + textArea.style.position = "fixed" + textArea.style.left = "-9999px" + textArea.style.top = "-9999px" + document.body.appendChild(textArea) + textArea.focus() + textArea.select() + document.execCommand("copy") + textArea.remove() + res() + } }) + .then(() => { + notifications.success("Copied to clipboard") + }) + .catch(() => { + notifications.error( + "Failed to copy to clipboard. Check the dev console for the value." + ) + console.warn("Failed to copy the value", value) + }) }