UNPKG

@xo-union/tk-component-header-nav

Version:
52 lines (51 loc) 2.05 kB
"use strict"; var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property"); var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.useVariantName = exports.provideExperiments = void 0; var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/object/assign")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _useRunningExperimentsCjs = _interopRequireDefault(require("./useRunningExperiments.cjs.js")); const Context = /*#__PURE__*/_react.default.createContext(); const provideExperiments = Component => { const Wrapped = _ref => { let { experiments, ...props } = _ref; const experimentsRef = _react.default.useRef(experiments); // Make sure value never changes let finalExperiments; if (experimentsRef.current || experimentsRef.current === false) { finalExperiments = experimentsRef.current; } else { // eslint-disable-next-line react-hooks/rules-of-hooks finalExperiments = (0, _useRunningExperimentsCjs.default)(); } return /*#__PURE__*/_react.default.createElement(Context.Provider, { value: finalExperiments }, /*#__PURE__*/_react.default.createElement(Component, props)); }; process.env.NODE_ENV !== "production" ? Wrapped.propTypes = { experiments: _propTypes.default.shape() } : void 0; (0, _assign.default)(Wrapped, Component); return Wrapped; }; exports.provideExperiments = provideExperiments; const useVariantName = key => { const experiments = _react.default.useContext(Context); if (experiments === false) { return null; } if (!experiments) { throw new Error('Experiments not provided'); } if (!Object.prototype.hasOwnProperty.call(experiments, key)) { throw new Error(`Experiment: ${key}. Is not defined`); } return experiments[key]; }; exports.useVariantName = useVariantName;