Kaynağa Gözat

Add Features: allowing lists to be sorted by modifiedAt when not in draggable mode

Sam X. Chen 5 yıl önce
ebeveyn
işleme
77f8b76d4e

+ 2 - 0
client/components/cards/minicard.jade

@@ -58,6 +58,8 @@ template(name="minicard")
       if getDue
         .date
           +minicardDueDate
+      if getEnd
+         +minicardEndDate
       if getSpentTime
         .date
           +cardSpentTime

+ 1 - 0
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

+ 8 - 8
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

+ 5 - 31
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 &&

+ 15 - 0
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 } });
   },
 

+ 17 - 0
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,

+ 15 - 0
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,