UNPKG

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

Version:
42 lines 1.45 kB
import _Object$assign from "@babel/runtime-corejs3/core-js/object/assign"; import React from "react"; import PropTypes from "prop-types"; import useRunningExperiments from "./useRunningExperiments.js"; const Context = /*#__PURE__*/React.createContext(); export const provideExperiments = Component => { const Wrapped = _ref => { let { experiments, ...props } = _ref; const experimentsRef = React.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 = useRunningExperiments(); } return /*#__PURE__*/React.createElement(Context.Provider, { value: finalExperiments }, /*#__PURE__*/React.createElement(Component, props)); }; process.env.NODE_ENV !== "production" ? Wrapped.propTypes = { experiments: PropTypes.shape() } : void 0; _Object$assign(Wrapped, Component); return Wrapped; }; export const useVariantName = key => { const experiments = React.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]; };