diff options
-rw-r--r-- | .meteor/packages | 1 | ||||
-rw-r--r-- | .meteor/versions | 2 | ||||
-rw-r--r-- | client/components/boards/boardBody.jade | 2 | ||||
-rw-r--r-- | client/components/boards/boardBody.js | 56 | ||||
-rw-r--r-- | models/boards.js | 27 |
5 files changed, 87 insertions, 1 deletions
diff --git a/.meteor/packages b/.meteor/packages index c2b0aff7..15d3aa59 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -85,3 +85,4 @@ cfs:gridfs browser-policy eluck:accounts-lockout rzymek:fullcalendar +momentjs:moment@2.22.2 diff --git a/.meteor/versions b/.meteor/versions index 5dd1f2ce..caad25fa 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -103,7 +103,7 @@ mixmax:smart-disconnect@0.0.4 mobile-status-bar@1.0.14 modules@0.11.0 modules-runtime@0.9.1 -momentjs:moment@2.8.4 +momentjs:moment@2.22.2 mongo@1.3.1 mongo-dev-server@1.1.0 mongo-id@1.0.6 diff --git a/client/components/boards/boardBody.jade b/client/components/boards/boardBody.jade index 29a613b9..b480bc0f 100644 --- a/client/components/boards/boardBody.jade +++ b/client/components/boards/boardBody.jade @@ -25,3 +25,5 @@ template(name="boardBody") +swimlane(this) if isViewLists +listsGroup + if isViewCalendar + +fullcalendar(calendarOptions) diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index a377dd73..935c550f 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -114,6 +114,62 @@ BlazeComponent.extendComponent({ } }, + calendarOptions() { + return { + id: 'calendar-view', + defaultView: 'basicWeek', + header: { + left: 'title', + center: 'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,timelineMonth timelineYear', + right: 'today prev,next', + }, + views: { + basic: { + // options apply to basicWeek and basicDay views + }, + agenda: { + // options apply to agendaWeek and agendaDay views + }, + week: { + // options apply to basicWeek and agendaWeek views + }, + day: { + // options apply to basicDay and agendaDay views + }, + }, + themeSystem: 'jquery-ui', + height: 'parent', + /* TODO: lists as resources: https://fullcalendar.io/docs/vertical-resource-view */ + navLinks: true, + nowIndicator: true, + businessHours: { + // days of week. an array of zero-based day of week integers (0=Sunday) + dow: [ 1, 2, 3, 4, 5 ], // Monday - Thursday + start: '8:00', + end: '18:00', + }, + locale: TAPi18n.getLanguage(), + events(start, end, timezone, callback) { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + const events = []; + currentBoard.cardsInInterval(start.toDate(), end.toDate()).forEach(function(card){ + events.push({ + id: card.id, + title: card.title, + start: card.startAt, + end: card.endAt, + url: FlowRouter.url('card', { + boardId: currentBoard._id, + slug: currentBoard.slug, + cardId: card._id, + }), + }); + }); + callback(events); + }, + }; + }, + events() { return [{ // XXX The board-overlay div should probably be moved to the parent diff --git a/models/boards.js b/models/boards.js index 911d82a1..3b6c280b 100644 --- a/models/boards.js +++ b/models/boards.js @@ -284,6 +284,33 @@ Boards.helpers({ return Cards.find(query, projection); }, + + cardsInInterval(start, end) { + return Cards.find({ + $or: [ + { + startAt: { + $lte: start, + }, endAt: { + $gte: start, + }, + }, { + startAt: { + $lte: end, + }, endAt: { + $gte: end, + }, + }, { + startAt: { + $gte: start, + }, endAt: { + $lte: end, + }, + }, + ], + }); + }, + }); Boards.mutations({ |