Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/ab-connector / src / state / actions / abActions.js
Size: Mime:
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));
}