Source: app/util/batchLoadFoodPlannerDays.js

import moment from 'moment';
import {
  getPlannerDayFood,
  getPlannerDayFoodStats,
} from '../actions/resources/plannerFoodSummaryActions';
import { getPlannerDayActivity } from '../actions/resources/plannerActivitySummaryActions';
import { apiDayDateFormat } from './dateUtils';

/**
 * Returns a promise to batch load a set of food planner days
 * Used when switch to a new day in the planner or on first load of the page
 *
 * @param {string} Date The at which you want the days to be fetched from
 * @returns {array} an array of promise which needs to be wrapped in a Promise.All
 * @example 2018-07-20 would return food planner days for
 * [2018-07-18, 2018-07-19, 2018-07-20, 2018-07-21, 2018-07-22]
 */
const batchLoadFoodPlannerDays = (date, dispatch) => {
  const defaultDates = [-2, -1, 0, 1, 2].map(day =>
    moment(date)
      .add(day, 'days')
      .format(apiDayDateFormat),
  );
  const promises = [];
  defaultDates.forEach(day => {
    promises.push(dispatch(getPlannerDayFood(day)));
    promises.push(dispatch(getPlannerDayFoodStats(day)));
  });

  const activityDateRange = {
    start: moment(date)
      .subtract(3, 'days')
      .format(apiDayDateFormat),
    end: moment(date)
      .add(3, 'days')
      .format(apiDayDateFormat),
  };

  promises.push(dispatch(getPlannerDayActivity(activityDateRange, true)));
  return promises;
};

export default batchLoadFoodPlannerDays;