@wix/design-system
Version:
@wix/design-system
50 lines (48 loc) • 1.59 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.useCopyClipboard = useCopyClipboard;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
/** an object for value, onCopy, and resetTimeout props */
/**
* Hook to use copy to clipboard functionality.
* @returns object with values:
* - isCopied - boolean with status of clipboard action
* - copyToClipboard - a return function that allows to initiate copying
* - reset - an optional return function
*/
function useCopyClipboard(_ref) {
var value = _ref.value,
onCopy = _ref.onCopy,
resetTimeout = _ref.resetTimeout;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isCopied = _useState2[0],
setIsCopied = _useState2[1];
var copyToClipboard = (0, _react.useCallback)(() => {
navigator.clipboard.writeText(value).then(() => {
setIsCopied(true);
onCopy == null || onCopy();
});
}, [value, onCopy]);
var reset = (0, _react.useCallback)(() => {
setIsCopied(false);
}, [setIsCopied]);
(0, _react.useEffect)(() => {
var timeout;
if (isCopied && resetTimeout) {
timeout = setTimeout(reset, resetTimeout);
}
return () => {
clearTimeout(timeout);
};
}, [isCopied, reset, resetTimeout]);
(0, _react.useEffect)(reset, [value, reset]);
return {
isCopied,
copyToClipboard,
reset
};
}
//# sourceMappingURL=useCopyClipboard.js.map