UNPKG

use-clipboard-copy

Version:

Lightweight copy to clipboard hook for React

65 lines (64 loc) 2.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useClipboard = void 0; var clipboard_copy_1 = __importDefault(require("clipboard-copy")); var react_1 = require("react"); var useTimedToggle_1 = require("./useTimedToggle"); function isInputLike(node) { return node && (node.nodeName === 'TEXTAREA' || node.nodeName === 'INPUT'); } function useClipboard(options) { if (options === void 0) { options = {}; } var _a = useTimedToggle_1.useTimedToggle(false), copied = _a[0], toggleCopied = _a[1]; var targetRef = react_1.useRef(null); var optionsRef = react_1.useRef(options); optionsRef.current = options; function isSupported() { return (!!navigator.clipboard || (typeof document.execCommand === 'function' && typeof document.queryCommandSupported === 'function' && document.queryCommandSupported('copy'))); } var copyHandler = react_1.useCallback(function (text) { var opts = optionsRef.current; var target = targetRef.current; function handleSuccess() { if (opts.onSuccess) { opts.onSuccess(); } if (opts.copiedTimeout) { toggleCopied(opts.copiedTimeout); } if (opts.selectOnCopy && isInputLike(target)) { target.select(); } } function handleError() { if (opts.onError) { opts.onError(); } if (opts.selectOnError !== false && isInputLike(target)) { target.select(); } } function copy(value) { clipboard_copy_1.default(value).then(handleSuccess).catch(handleError); } if (typeof text === 'string') { copy(text); } else if (target) { copy(target.value); } }, []); return { copied: copied, copy: copyHandler, isSupported: isSupported, target: targetRef, }; } exports.useClipboard = useClipboard;