split-test-context.jsx 984 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. splitTestInfo: PropTypes.object.isRequired,
  9. }),
  10. }
  11. export function SplitTestProvider({ children }) {
  12. const value = useMemo(
  13. () => ({
  14. splitTestVariants: getMeta('ol-splitTestVariants') || {},
  15. splitTestInfo: getMeta('ol-splitTestInfo') || {},
  16. }),
  17. []
  18. )
  19. return (
  20. <SplitTestContext.Provider value={value}>
  21. {children}
  22. </SplitTestContext.Provider>
  23. )
  24. }
  25. SplitTestProvider.propTypes = {
  26. children: PropTypes.any,
  27. }
  28. export function useSplitTestContext(propTypes) {
  29. const context = useContext(SplitTestContext)
  30. PropTypes.checkPropTypes(
  31. propTypes,
  32. context,
  33. 'data',
  34. 'SplitTestContext.Provider'
  35. )
  36. return context
  37. }