ab-test-jsx
Version:
React (JS) AB testing consumption
2 lines (1 loc) • 1.9 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).abtestjsx={},e.React)}(this,(function(e,t){"use strict";var n=t.createContext({}),r=t.createContext({defaultVariant:"A"}),a=function(){var e=t.useContext(n),a=t.useContext(r),i=function(t){return e[t]||a.defaultVariant};return{getVariant:i,isB:function(e){return"B"===i(e)},isA:function(e){return"A"===i(e)}}},i=t.memo((function(e){var n=e.children,r=e.variant,i=e.name;return(0,a().getVariant)(i)===r?t.createElement(t.Fragment,null,n):null}));i.displayName="ABTest";var o=t.memo((function(e){var a=e.abTests,i=e.children,o=e.defaultVariant,u=void 0===o?"A":o;return t.createElement(n.Provider,{value:a},t.createElement(r.Provider,{value:{defaultVariant:u}},i))}));n.displayName="ABTestsProvider";var u=function(e){return e.displayName||e.name||"Anonymous"};function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}e.ABTest=i,e.ABTestsProvider=o,e.useABTests=a,e.withABTest=function(e,n,r){var i=t.memo((function(i){return(0,a().isB)(r)?t.createElement(n,i):t.createElement(e,i)}));return i.displayName="withABTest(A:".concat(u(e),", B:").concat(u(n),")"),i},e.withABTests=function(e){var r=t.memo((function(r){var a=t.useContext(n);return t.createElement(e,s({},r,{abTests:a}))}));return r.displayName="withABTests(".concat(u(e),")"),r},e.withABTestsProvider=function(e,n,r){var a=t.memo((function(a){var i="function"==typeof n?n(a):n;return t.createElement(o,{abTests:i,defaultVariant:r},t.createElement(e,a))}));return a.displayName="withABTestsProvider(".concat(u(e),")"),a},Object.defineProperty(e,"__esModule",{value:!0})}));