All files / src/date-range-picker/utils get-calendar-weeks.js

100% Statements 9/9
100% Branches 0/0
100% Functions 4/4
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                                                                          15x 6x 42x                 15x 1x 1x 1x   1x           6x                  
import {
  addDays,
  differenceInCalendarWeeks,
  endOfMonth,
  eachWeekOfInterval,
  getWeek,
  addWeeks,
  subMonths,
  startOfWeek
} from "date-fns"
import { dayOffset } from "./day-offset"
import { getDayMetaData } from "./get-day-meta-data"
/**
 *
 * @param {Object} getDayMetaDataParams
 * @prop {Date} date
 * @prop {Date} tempEnd
 * @prop {Date[]} events
 * @prop {Date} month
 * @prop {boolean} singlePicker
 * @prop {Date} tempStart
 * @prop {Date} today
 * @prop {Date} maxDate
 * @prop {Date} minDate
 * @prop {Date[]} disabledDates
 *
 * @returns {Day}
 */
 
/**
 *
 * @param {Date} start
 * @param {getDayMetaDataParams} getDayMetaDataParams
 *
 * @returns {Date[]}
 */
 
const buildWeek = (start, getDayMetaDataParams) =>
  [0, 1, 2, 3, 4, 5, 6].map((_, i) =>
    getDayMetaData({ ...getDayMetaDataParams, date: addDays(start, i) })
  )
 
/**
 *
 * @param {getDayMetaDataParams} getDayMetaDataParams
 *
 * @returns {Object[]}
 */
export const getCalendarWeeks = getDayMetaDataParams => {
  const { month, firstDayOfWeek, today } = getDayMetaDataParams
  const weekStartsOn = dayOffset(firstDayOfWeek)
  const start = startOfWeek(endOfMonth(subMonths(month, 1)))
 
  return eachWeekOfInterval(
    {
      start,
      end: addWeeks(start, 5)
    },
    { weekStartsOn, locale: window.__locale__ }
  ).map(date => ({
    weeksFromToday: differenceInCalendarWeeks(date, today, {
      weekStartsOn,
      locale: window.__locale__
    }),
    weekNumber: getWeek(date, { weekStartsOn }),
    daysInWeek: buildWeek(date, getDayMetaDataParams)
  }))
}