|
|
|
@ -55,7 +55,12 @@ class DateFilter { |
|
|
|
|
|
|
|
|
|
// thisWeek is a convenience method for calling relativeWeek with 1
|
|
|
|
|
thisWeek() { |
|
|
|
|
this.relativeWeek(1); |
|
|
|
|
this.relativeWeek(1, 'this') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// nextWeek is a convenience method for calling relativeWeek with 1
|
|
|
|
|
nextWeek() { |
|
|
|
|
this.relativeWeek(1, 'next') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// relativeDay builds a filter starting from now and including all
|
|
|
|
@ -83,11 +88,17 @@ class DateFilter { |
|
|
|
|
this._updateState('day'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// relativeWeek builds a filter starting from today and including all
|
|
|
|
|
// relativeWeek builds a filter starting from today (for this week)
|
|
|
|
|
// or 7 days after (for next week) and including all
|
|
|
|
|
// weeks up to today +/- offset. This considers the user's preferred
|
|
|
|
|
// start of week day (as defined by Meteor).
|
|
|
|
|
relativeWeek(offset) { |
|
|
|
|
if (this._filterState == 'week') { |
|
|
|
|
relativeWeek(offset, week) { |
|
|
|
|
if (this._filterState == 'thisweek') { |
|
|
|
|
this.reset(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this._filterState == 'nextweek') { |
|
|
|
|
this.reset(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -99,25 +110,40 @@ class DateFilter { |
|
|
|
|
const currentUser = Meteor.user(); |
|
|
|
|
const weekStartDay = currentUser ? currentUser.getStartDayOfWeek() : 1; |
|
|
|
|
|
|
|
|
|
// Moments are mutable so they must be cloned before modification
|
|
|
|
|
var thisWeekStart = moment() |
|
|
|
|
.startOf('day') |
|
|
|
|
.startOf('week') |
|
|
|
|
.add(weekStartDay, 'days'); |
|
|
|
|
var thisWeekEnd = thisWeekStart |
|
|
|
|
.clone() |
|
|
|
|
.add(offset, 'week') |
|
|
|
|
.endOf('day'); |
|
|
|
|
var startDate = thisWeekStart.toDate(); |
|
|
|
|
var endDate = thisWeekEnd.toDate(); |
|
|
|
|
if (week === 'this') { |
|
|
|
|
// Moments are mutable so they must be cloned before modification
|
|
|
|
|
var WeekStart = moment() |
|
|
|
|
.startOf('day') |
|
|
|
|
.startOf('week') |
|
|
|
|
.add(weekStartDay, 'days'); |
|
|
|
|
var WeekEnd = WeekStart |
|
|
|
|
.clone() |
|
|
|
|
.add(offset, 'week') |
|
|
|
|
.endOf('day'); |
|
|
|
|
|
|
|
|
|
this._updateState('thisweek'); |
|
|
|
|
} else if (week === 'next') { |
|
|
|
|
// Moments are mutable so they must be cloned before modification
|
|
|
|
|
var WeekStart = moment() |
|
|
|
|
.startOf('day') |
|
|
|
|
.startOf('week') |
|
|
|
|
.add(weekStartDay + 7, 'days'); |
|
|
|
|
var WeekEnd = WeekStart |
|
|
|
|
.clone() |
|
|
|
|
.add(offset, 'week') |
|
|
|
|
.endOf('day'); |
|
|
|
|
|
|
|
|
|
this._updateState('nextweek'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var startDate = WeekStart.toDate(); |
|
|
|
|
var endDate = WeekEnd.toDate(); |
|
|
|
|
|
|
|
|
|
if (offset >= 0) { |
|
|
|
|
this._filter = { $gte: startDate, $lte: endDate }; |
|
|
|
|
} else { |
|
|
|
|
this._filter = { $lte: startDate, $gte: endDate }; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this._updateState('week'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// noDate builds a filter for items where date is not set
|
|
|
|
|