split-test-context.js 880 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { createContext, useContext, useMemo } from 'react'
  2. import PropTypes from 'prop-types'
  3. import getMeta from '../../utils/meta'
  4. export const SplitTestContext = createContext()
  5. SplitTestContext.Provider.propTypes = {
  6. value: PropTypes.shape({
  7. splitTestVariants: PropTypes.object.isRequired,
  8. }),
  9. }
  10. export function SplitTestProvider({ children }) {
  11. const value = useMemo(
  12. () => ({
  13. splitTestVariants: getMeta('ol-splitTestVariants') || {},
  14. }),
  15. []
  16. )
  17. return (
  18. <SplitTestContext.Provider value={value}>
  19. {children}
  20. </SplitTestContext.Provider>
  21. )
  22. }
  23. SplitTestProvider.propTypes = {
  24. children: PropTypes.any,
  25. }
  26. export function useSplitTestContext(propTypes) {
  27. const context = useContext(SplitTestContext)
  28. PropTypes.checkPropTypes(
  29. propTypes,
  30. context,
  31. 'data',
  32. 'SplitTestContext.Provider'
  33. )
  34. return context
  35. }