Pārlūkot izejas kodu

Merge pull request #4108 from Ben0it-T/master

Try to fix : Filter List by Title - Hide empty lists in Swimlane view
Lauri Ojansivu 3 gadi atpakaļ
vecāks
revīzija
21de4a2ca0

+ 3 - 1
client/components/sidebar/sidebarFilters.jade

@@ -4,7 +4,9 @@
   and #each x in y constructors to fix this.
 
 template(name="filterSidebar")
-  h3 {{_ 'list-filter-label'}}
+  h3
+    i.fa.fa-trello
+    | {{_ 'list-filter-label'}}
   ul.sidebar-list
     form.js-list-filter
       input(type="text")

+ 2 - 1
client/components/swimlanes/swimlanes.jade

@@ -14,7 +14,8 @@ template(name="swimlane")
               +addListForm
       else
         each lists
-          +list(this)
+          if visible this
+            +list(this)
           if currentCardIsInThisList _id ../_id
             +cardDetails(currentCard)
         if currentUser.isBoardMember

+ 23 - 4
client/components/swimlanes/swimlanes.js

@@ -137,19 +137,38 @@ BlazeComponent.extendComponent({
     this._isDragging = false;
     this._lastDragPositionX = 0;
   },
-
   id() {
     return this._id;
   },
-
   currentCardIsInThisList(listId, swimlaneId) {
     return currentCardIsInThisList(listId, swimlaneId);
   },
-
   currentListIsInThisSwimlane(swimlaneId) {
     return currentListIsInThisSwimlane(swimlaneId);
   },
-
+  visible(list) {
+    if (list.archived) {
+      // Show archived list only when filter archive is on or archive is selected
+      if (!(Filter.archive.isSelected() || archivedRequested)) {
+        return false;
+      }
+    }
+    if (Filter.lists._isActive()) {
+      if (!list.title.match(Filter.lists.getRegexSelector())) {
+        return false;
+      }
+    }
+    if (Filter.hideEmpty.isSelected()) {
+      const swimlaneId = this.parentComponent()
+        .parentComponent()
+        .data()._id;
+      const cards = list.cards(swimlaneId);
+      if (cards.count() === 0) {
+        return false;
+      }
+    }
+    return true;
+  },
   events() {
     return [
       {

+ 17 - 4
client/lib/filter.js

@@ -682,9 +682,11 @@ Filter = {
     const filterSelector = {};
     const emptySelector = {};
     let includeEmptySelectors = false;
+    let isFilterActive = false; // we don't want there is only Filter.lists
     this._fields.forEach(fieldName => {
       const filter = this[fieldName];
       if (filter._isActive()) {
+        isFilterActive = true;
         if (filter.subField !== '') {
           filterSelector[
             `${fieldName}.${filter.subField}`
@@ -715,12 +717,23 @@ Filter = {
     )
       selectors.push(filterSelector);
     if (includeEmptySelectors) selectors.push(emptySelector);
-    if (this.advanced._isActive())
+    if (this.advanced._isActive()) {
+      isFilterActive = true;
       selectors.push(this.advanced._getMongoSelector());
+    }
     
-    return {
-      $or: selectors,
-    };
+    if(isFilterActive) {
+      return {
+        $or: selectors,
+      };
+    }
+    else {
+      // we don't want there is only Filter.lists
+      // otherwise no card will be displayed ...
+      // selectors = [exceptionsSelector];
+      // will return [{"_id":{"$in":[]}}]
+      return {};
+    }
   },
 
   mongoSelector(additionalSelector) {

+ 1 - 1
models/swimlanes.js

@@ -220,7 +220,7 @@ Swimlanes.helpers({
       {
         boardId: this.boardId,
         swimlaneId: { $in: [this._id, ''] },
-        archived: false,
+        //archived: false,
       },
       { sort: ['sort'] },
     );