summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam X. Chen <sam.xi.chen@gmail.com>2019-10-10 22:57:40 -0400
committerSam X. Chen <sam.xi.chen@gmail.com>2019-10-10 22:57:40 -0400
commit77f8b76d4e13c35ea3451622176bbb69a4d39a32 (patch)
tree259728686df72cd8747d112cb1907f7ab102899e
parente60926f8471c05f50877f46568554e7b2f24815a (diff)
downloadwekan-77f8b76d4e13c35ea3451622176bbb69a4d39a32.tar.gz
wekan-77f8b76d4e13c35ea3451622176bbb69a4d39a32.tar.bz2
wekan-77f8b76d4e13c35ea3451622176bbb69a4d39a32.zip
Add Features: allowing lists to be sorted by modifiedAt when not in draggable mode
-rw-r--r--client/components/cards/minicard.jade2
-rw-r--r--client/components/lists/listHeader.jade1
-rw-r--r--client/components/swimlanes/swimlanes.jade16
-rw-r--r--client/components/swimlanes/swimlanes.js36
-rw-r--r--models/boards.js15
-rw-r--r--models/cards.js17
-rw-r--r--models/swimlanes.js15
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,