UNPKG

react-decoy

Version:

<p align="center" role="heading" aria-level="1"><picture><source srcset="https://codeberg.org/colingourlay/react-decoy/raw/branch/master/assets/logo-block.svg" media="(max-width: 640px)" /><img title="React Decoy" alt="React Decoy" src="https://codeberg.o

87 lines (82 loc) 2.56 kB
import React, { useRef, useLayoutEffect } from 'react'; function activeLayoutEffect(el) { if (!el) { return; } var cloneEl = el.cloneNode(true); var parentEl = el.parentElement; if (parentEl) { parentEl.insertBefore(cloneEl, el); parentEl.removeChild(el); } return function () { if (parentEl) { parentEl.insertBefore(el, cloneEl); parentEl.removeChild(cloneEl); } }; } function Decoy(_ref) { var _ref$active = _ref.active, active = _ref$active === void 0 ? false : _ref$active, _ref$as = _ref.as, as = _ref$as === void 0 ? 'div' : _ref$as, children = _ref.children; var ref = useRef(); useLayoutEffect(function () { if (!active) { return; } return activeLayoutEffect(ref.current); }, [active]); return React.createElement(as, { children: children, ref: ref }); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function getDisplayName(Component) { return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Component'; } var withDecoy = function withDecoy(Component, _temp) { var _ref = _temp === void 0 ? {} : _temp, _ref$activePropName = _ref.activePropName, activePropName = _ref$activePropName === void 0 ? 'decoy' : _ref$activePropName, _ref$asPropName = _ref.asPropName, asPropName = _ref$asPropName === void 0 ? 'decoy-as' : _ref$asPropName; function WithDecoy(props) { var active = props[activePropName], as = props[asPropName], componentProps = _objectWithoutPropertiesLoose(props, [activePropName, asPropName].map(_toPropertyKey)); return React.createElement(Decoy, { active: active, as: as }, React.createElement(Component, Object.assign({}, componentProps))); } WithDecoy.displayName = "withDecoy(" + getDisplayName(Component) + ")"; return WithDecoy; }; export { Decoy, withDecoy }; //# sourceMappingURL=react-decoy.esm.js.map