BasicViewDateProfileGenerator.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import DateProfileGenerator from '../DateProfileGenerator'
  2. import { addWeeks, diffWeeks } from '../datelib/marker'
  3. import { DateRange } from '../datelib/date-range'
  4. export default class BasicViewDateProfileGenerator extends DateProfileGenerator {
  5. // Computes the date range that will be rendered.
  6. buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay): DateRange {
  7. let { dateEnv } = this
  8. let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay)
  9. let start = renderRange.start
  10. let end = renderRange.end
  11. let endOfWeek
  12. // year and month views should be aligned with weeks. this is already done for week
  13. if (/^(year|month)$/.test(currentRangeUnit)) {
  14. start = dateEnv.startOfWeek(start)
  15. // make end-of-week if not already
  16. endOfWeek = dateEnv.startOfWeek(end)
  17. if (endOfWeek.valueOf() !== end.valueOf()) {
  18. end = addWeeks(endOfWeek, 1)
  19. }
  20. }
  21. // ensure 6 weeks
  22. if (
  23. this.options.monthMode &&
  24. this.options.fixedWeekCount
  25. ) {
  26. let rowCnt = Math.ceil( // could be partial weeks due to hiddenDays
  27. diffWeeks(start, end)
  28. )
  29. end = addWeeks(end, 6 - rowCnt)
  30. }
  31. return { start, end }
  32. }
  33. }