summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.meteor/packages1
-rw-r--r--.meteor/versions2
-rw-r--r--client/components/boards/boardBody.jade2
-rw-r--r--client/components/boards/boardBody.js56
-rw-r--r--models/boards.js27
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({