react-experiment-hoc
Version:
Simple hoc to provide a/b-test features.
18 lines (14 loc) • 590 B
JavaScript
import weighted from './weighted';
export const getVariant = (variants, experiment, fallback, persistent, setCookie, getCookie) => {
const key = `experiment_${experiment}${persistent}`;
const cookieIndex = getCookie(key);
let index = cookieIndex;
if (!index || !variants[index] || persistent < 0)
index = weighted(variants.map(v => v.weight));
if (!cookieIndex && !fallback && persistent >= 0)
setCookie(key, index, {
path: '/',
expires: !persistent ? null : new Date(Date.now()+(60 * 60 * 24 * 365 * 10 * 1000)),
});
return variants[index].name;
}