@xo-union/tk-component-header-nav
Version:
52 lines (51 loc) • 2.05 kB
JavaScript
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;
;