|
@@ -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
|