瀏覽代碼

Filtering logic by empty labels/members

Mario Orlicky 8 年之前
父節點
當前提交
5a23c962d2
共有 1 個文件被更改,包括 24 次插入3 次删除
  1. 24 3
      client/lib/filter.js

+ 24 - 3
client/lib/filter.js

@@ -61,7 +61,18 @@ class SetFilter {
 
   _getMongoSelector() {
     this._dep.depend();
-    return { $in: this._selectedElements };
+    return { $in: this._selectedElements }
+  }
+
+  _getEmptySelector() {
+    this._dep.depend();
+    let includeEmpty = false
+    this._selectedElements.forEach((el) => {
+      if (el == undefined) {
+        includeEmpty = true;
+      }
+    });
+    return includeEmpty ? { $eq: [] } : null;
   }
 }
 
@@ -95,16 +106,26 @@ Filter = {
       return {};
 
     const filterSelector = {};
+    const emptySelector = {};
+    let includeEmptySelectors = false;
     this._fields.forEach((fieldName) => {
       const filter = this[fieldName];
-      if (filter._isActive())
+      if (filter._isActive()) {
         filterSelector[fieldName] = filter._getMongoSelector();
+        emptySelector[fieldName] = filter._getEmptySelector();
+        if (emptySelector[fieldName] != null) {
+          includeEmptySelectors = true;
+        }
+      }
     });
 
     const exceptionsSelector = {_id: {$in: this._exceptions}};
     this._exceptionsDep.depend();
 
-    return {$or: [filterSelector, exceptionsSelector]};
+    if (includeEmptySelectors)
+      return {$or: [filterSelector, exceptionsSelector, emptySelector]};
+    else
+      return {$or: [filterSelector, exceptionsSelector]};
   },
 
   mongoSelector(additionalSelector) {