浏览代码

added sort feature for viewing of cards

mae 4 年之前
父节点
当前提交
2226ece4b7

+ 19 - 0
client/components/boards/boardHeader.jade

@@ -31,6 +31,9 @@ template(name="boardHeaderBar")
             if $eq watchLevel "muted"
             if $eq watchLevel "muted"
               i.fa.fa-bell-slash
               i.fa.fa-bell-slash
             span {{_ watchLevel}}
             span {{_ watchLevel}}
+          a.board-header-btn.js-sort-cards(title="Sort Cards")
+            i.fa.fa-sort
+            | Sort By {{sortCardsBy.get}}
 
 
         else
         else
           a.board-header-btn.js-log-in(
           a.board-header-btn.js-log-in(
@@ -247,3 +250,19 @@ template(name="boardChangeTitlePopup")
 template(name="boardCreateRulePopup")
 template(name="boardCreateRulePopup")
   p {{_ 'close-board-pop'}}
   p {{_ 'close-board-pop'}}
   button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
   button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
+
+
+template(name="cardsSortPopup")
+  ul.pop-over-list
+    li
+      a.js-sort-due Due Date
+      hr
+    li
+      a.js-sort-title Title(Alphabetically)
+      hr
+    li
+      a.js-sort-created-desc Created At(Newest First)
+      hr
+    li
+      a.js-sort-created-asc Created At(Oldest First)
+

+ 52 - 0
client/components/boards/boardHeader.js

@@ -2,6 +2,7 @@
 const DOWNCLS = 'fa-sort-down';
 const DOWNCLS = 'fa-sort-down';
 const UPCLS = 'fa-sort-up';
 const UPCLS = 'fa-sort-up';
 */
 */
+const sortCardsBy = new ReactiveVar('')
 Template.boardMenuPopup.events({
 Template.boardMenuPopup.events({
   'click .js-rename-board': Popup.open('boardChangeTitle'),
   'click .js-rename-board': Popup.open('boardChangeTitle'),
   'click .js-custom-fields'() {
   'click .js-custom-fields'() {
@@ -110,6 +111,7 @@ BlazeComponent.extendComponent({
         'click .js-open-filter-view'() {
         'click .js-open-filter-view'() {
           Sidebar.setView('filter');
           Sidebar.setView('filter');
         },
         },
+        'click .js-sort-cards': Popup.open('cardsSort'),
         /*
         /*
         'click .js-open-sort-view'(evt) {
         'click .js-open-sort-view'(evt) {
           const target = evt.target;
           const target = evt.target;
@@ -368,3 +370,53 @@ BlazeComponent.extendComponent({
   },
   },
 }).register('listsortPopup');
 }).register('listsortPopup');
 */
 */
+
+
+BlazeComponent.extendComponent({
+  events() {
+    return [
+      {
+        'click .js-sort-due'() {
+          const sortBy = {
+            'dueAt': 1
+          }
+          Session.set('sortBy',sortBy)
+          sortCardsBy.set('Due Date')
+          Popup.close();
+        },
+        'click .js-sort-title'() {
+          const sortBy = {
+            'title': 1
+          }
+          Session.set('sortBy',sortBy)
+          sortCardsBy.set('Title')
+          Popup.close();
+        },
+        'click .js-sort-created-asc'() {
+          const sortBy = {
+            'createdAt': 1
+          }
+          Session.set('sortBy',sortBy)
+          sortCardsBy.set('Date Created (Newest First)')
+          Popup.close();
+        },
+        'click .js-sort-created-desc'() {
+          const sortBy = {
+            'createdAt': -1
+          }
+          Session.set('sortBy',sortBy)
+          sortCardsBy.set('Date Created (Oldest First)')
+          Popup.close();
+        },
+        'click .js-sort-default'() {
+          const sortBy = {
+            'sort': 1
+          }
+          Session.set('sortBy',sortBy)
+          sortCardsBy.set('Default')
+          Popup.close();
+        },
+      },
+    ];
+  },
+}).register('cardsSortPopup');

+ 4 - 1
client/components/lists/listBody.js

@@ -168,13 +168,16 @@ BlazeComponent.extendComponent({
 
 
   cardsWithLimit(swimlaneId) {
   cardsWithLimit(swimlaneId) {
     const limit = this.cardlimit.get();
     const limit = this.cardlimit.get();
+    const defaultSort = { sort: 1  };
+    const sortBy = Session.get('sortBy') ?  Session.get('sortBy') : defaultSort;
     const selector = {
     const selector = {
       listId: this.currentData()._id,
       listId: this.currentData()._id,
       archived: false,
       archived: false,
     };
     };
     if (swimlaneId) selector.swimlaneId = swimlaneId;
     if (swimlaneId) selector.swimlaneId = swimlaneId;
     return Cards.find(Filter.mongoSelector(selector), {
     return Cards.find(Filter.mongoSelector(selector), {
-      sort: ['sort'],
+      // sort: ['sort'],
+      sort:sortBy,
       limit,
       limit,
     });
     });
   },
   },