From 77f8b76d4e13c35ea3451622176bbb69a4d39a32 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Thu, 10 Oct 2019 22:57:40 -0400 Subject: Add Features: allowing lists to be sorted by modifiedAt when not in draggable mode --- client/components/cards/minicard.jade | 2 ++ client/components/lists/listHeader.jade | 1 + client/components/swimlanes/swimlanes.jade | 16 ++++++------- client/components/swimlanes/swimlanes.js | 36 +++++------------------------- models/boards.js | 15 +++++++++++++ models/cards.js | 17 ++++++++++++++ models/swimlanes.js | 15 +++++++++++++ 7 files changed, 63 insertions(+), 39 deletions(-) diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index a3f32304..ba0c5707 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -58,6 +58,8 @@ template(name="minicard") if getDue .date +minicardDueDate + if getEnd + +minicardEndDate if getSpentTime .date +cardSpentTime diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 6a61a66f..23ae6282 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -9,6 +9,7 @@ template(name="listHeader") if currentList a.list-header-left-icon.fa.fa-angle-left.js-unselect-list h2.list-header-name( + title="{{ moment updatedAt 'LLL' }}" class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}js-open-inlined-form is-editable{{/unless}}{{/if}}") +viewer = title diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 3ad43777..8f07a01c 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -12,13 +12,13 @@ template(name="swimlane") unless currentUser.isCommentOnly +addListForm else + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm each lists +list(this) if currentCardIsInThisList _id ../_id +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm template(name="listsGroup") .swimlane.list-group.js-lists @@ -26,20 +26,20 @@ template(name="listsGroup") if currentList +list(currentList) else - each lists - +miniList(this) if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm + each lists + +miniList(this) else + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm each lists if visible this +list(this) if currentCardIsInThisList _id null +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm template(name="addListForm") .list.list-composer.js-list-composer diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 33a7991e..1bfc0f79 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -163,37 +163,11 @@ BlazeComponent.extendComponent({ // the user will legitimately expect to be able to select some text with // his mouse. - if (Utils.isMiniScreen) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-handle', - '.js-swimlane-header-handle', - ]; - } - - if (!Utils.isMiniScreen && !showDesktopDragHandles) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-header', - ]; - } - - if (!Utils.isMiniScreen && showDesktopDragHandles) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-handle', - '.js-swimlane-header-handle', - ]; - } + const noDragInside = ['a', 'input', 'textarea', 'p'].concat( + Util.isMiniScreen || (!Util.isMiniScreen && showDesktopDragHandles) + ? ['.js-list-handle', '.js-swimlane-header-handle'] + : ['.js-list-header'], + ); if ( $(evt.target).closest(noDragInside.join(',')).length === 0 && diff --git a/models/boards.js b/models/boards.js index a9348478..c7f93022 100644 --- a/models/boards.js +++ b/models/boards.js @@ -409,6 +409,21 @@ Boards.helpers({ }, lists() { + const enabled = Meteor.user().hasShowDesktopDragHandles(); + return enabled ? this.draggableLists() : this.newestLists(); + }, + + newestLists() { + // sorted lists from newest to the oldest, by its creation date or its cards' last modification date + return Lists.find( + { + boardId: this._id, + archived: false, + }, + { sort: { updatedAt: -1 } }, + ); + }, + draggableLists() { return Lists.find({ boardId: this._id }, { sort: { sort: 1 } }); }, diff --git a/models/cards.js b/models/cards.js index 371ad185..35d596d6 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1695,6 +1695,23 @@ if (Meteor.isServer) { const oldvalue = doc[action] || ''; const activityType = `a-${action}`; const card = Cards.findOne(doc._id); + const list = card.list(); + if (list) { + // change list modifiedAt + const modifiedAt = new Date(); + const boardId = list.boardId; + Lists.direct.update( + { + _id: list._id, + }, + { + $set: { + modifiedAt, + boardId, + }, + }, + ); + } const username = Users.findOne(userId).username; const activity = { userId, diff --git a/models/swimlanes.js b/models/swimlanes.js index 46e410da..4cd35574 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -174,6 +174,21 @@ Swimlanes.helpers({ }, lists() { + const enabled = Meteor.user().hasShowDesktopDragHandles(); + return enabled ? this.draggableLists() : this.newestLists(); + }, + newestLists() { + // sorted lists from newest to the oldest, by its creation date or its cards' last modification date + return Lists.find( + { + boardId: this.boardId, + swimlaneId: { $in: [this._id, ''] }, + archived: false, + }, + { sort: { updatedAt: -1 } }, + ); + }, + draggableLists() { return Lists.find( { boardId: this.boardId, -- cgit v1.2.3-1-g7c22