Repository URL to install this package:
|
Version:
3.7.0 ▾
|
export const ActionTypes = {
CHOOSE_EXPERIMENT: '@doodle/ab/CHOOSE_EXPERIMENT',
OPTIMIZE_ACTIVATE: '@doodle/ab/OPTIMIZE_ACTIVATE',
OPTIMIZE_STATUS_PENDING: '@doodle/ab/OPTIMIZE_STATUS_PENDING',
OPTIMIZE_STATUS_LOADED: '@doodle/ab/OPTIMIZE_STATUS_LOADED',
VARIANT_MOUNTED: '@doodle/ab/VARIANT_MOUNTED',
VARIANT_DISMOUNTED: '@doodle/ab/VARIANT_DISMOUNTED',
};
export const setOptimizeStatus = type => ({ type });
export const chooseExperiment = experiment => ({
type: ActionTypes.CHOOSE_EXPERIMENT,
payload: experiment,
});
export const optimizeActivate = () => ({
type: ActionTypes.OPTIMIZE_ACTIVATE,
});
/**
* Should be dispatched when a variation of an experiment is actually mounted.
*/
const variantMounted = (experimentName, experimentVariant) => ({
type: ActionTypes.VARIANT_MOUNTED,
payload: {
experimentName,
experimentVariant,
},
});
/**
* Should be dispatched when a variation of an experiment is actually dismounted.
*/
const variantDismounted = experimentName => ({
type: ActionTypes.VARIANT_DISMOUNTED,
payload: experimentName,
});
export function mountVariant(dispatch, experimentName) {
return variant => {
// Add experiment to the window, so Optimize itself might decide
// if a specific experiment should be run
const activeExperiments = (window.doodleABTest && window.doodleABTest.activeExperiments) || '';
// Don't use replace, since an experiment name might be a substring of another one
const newActiveExperiments = [
...activeExperiments.split('|').filter(e => e !== experimentName),
experimentName,
].join('|');
if (!window.doodleABTest) {
window.doodleABTest = {};
}
window.doodleABTest.activeExperiments = newActiveExperiments;
// Also store the mounted experiments to the store
dispatch(variantMounted(experimentName, variant));
};
}
export function unmountVariant(dispatch, experimentName) {
const activeExperiments = (window.doodleABTest && window.doodleABTest.activeExperiments) || '';
// Filter out the unmounted variant from active experiments
const newActiveExperiments = activeExperiments
.split('|')
.filter(e => e !== experimentName)
.join('|');
if (!window.doodleABTest) {
window.doodleABTest = {};
}
window.doodleABTest.activeExperiments = newActiveExperiments;
// Updated the mounted actions in the store
dispatch(variantDismounted(experimentName));
}