@storm-stack/hooks
Version:
A collection of React hooks used by Storm Software in various client libraries and applications.
36 lines (35 loc) • 1.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useCopyToClipboard = useCopyToClipboard;
var _base = require("@storm-stack/types/utility-types/base");
var _react = require("react");
function oldSchoolCopy(text) {
const tempTextArea = document.createElement("textarea");
tempTextArea.value = text;
document.body.appendChild(tempTextArea);
tempTextArea.select();
document.execCommand("copy");
document.body.removeChild(tempTextArea);
}
function useCopyToClipboard() {
const [state, setState] = (0, _react.useState)(null);
const copyToClipboard = (0, _react.useCallback)(value => {
const handleCopy = async () => {
try {
if (navigator?.clipboard?.writeText) {
await navigator.clipboard.writeText(value ?? _base.EMPTY_STRING);
setState(value ?? _base.EMPTY_STRING);
} else {
throw new Error("writeText not supported");
}
} catch (e) {
oldSchoolCopy(value ?? _base.EMPTY_STRING);
setState(value ?? _base.EMPTY_STRING);
}
};
handleCopy();
}, []);
return [state, copyToClipboard];
}