Parcourir la source

fixing search for dropdown fields, and error on loading board

Ignatz il y a 7 ans
Parent
commit
571f55f904
2 fichiers modifiés avec 116 ajouts et 100 suppressions
  1. 111 95
      client/lib/filter.js
  2. 5 5
      models/cards.js

+ 111 - 95
client/lib/filter.js

@@ -145,6 +145,22 @@ class AdvancedFilter {
     return found._id;
   }
 
+  _fieldValueToId(field, value)
+  {
+    const found = CustomFields.findOne({ 'name': field });
+    if (found.settings.dropdownItems && found.settings.dropdownItems.length > 0)
+      {
+      for (let i = 0; i < found.settings.dropdownItems.length; i++)
+        {
+        if (found.settings.dropdownItems[i].name === value)
+          {
+          return found.settings.dropdownItems[i]._id;
+        }
+      }
+    }
+    return value;
+  }
+
   _arrayToSelector(commands) {
     try {
       //let changed = false;
@@ -163,27 +179,27 @@ class AdvancedFilter {
       if (commands[i].cmd) {
         switch (commands[i].cmd) {
         case '(':
-        {
-          level++;
-          if (start === -1) start = i;
-          continue;
-        }
+          {
+            level++;
+            if (start === -1) start = i;
+            continue;
+          }
         case ')':
-        {
-          level--;
-          commands.splice(i, 1);
-          i--;
-          continue;
-        }
-        default:
-        {
-          if (level > 0) {
-            subcommands.push(commands[i]);
+          {
+            level--;
             commands.splice(i, 1);
             i--;
             continue;
           }
-        }
+        default:
+          {
+            if (level > 0) {
+              subcommands.push(commands[i]);
+              commands.splice(i, 1);
+              i--;
+              continue;
+            }
+          }
         }
       }
     }
@@ -205,86 +221,86 @@ class AdvancedFilter {
         case '=':
         case '==':
         case '===':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': str };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': this._fieldValueToId(str) };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case '!=':
         case '!==':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $not: str } };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $not: this._fieldValueToId(str) } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case '>':
         case 'gt':
         case 'Gt':
         case 'GT':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gt: str } };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gt: str } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case '>=':
         case '>==':
         case 'gte':
         case 'Gte':
         case 'GTE':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gte: str } };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gte: str } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case '<':
         case 'lt':
         case 'Lt':
         case 'LT':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lt: str } };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lt: str } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case '<=':
         case '<==':
         case 'lte':
         case 'Lte':
         case 'LTE':
-        {
-          const field = commands[i - 1].cmd;
-          const str = commands[i + 1].cmd;
-          commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lte: str } };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lte: str } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
 
         }
       }
@@ -300,44 +316,44 @@ class AdvancedFilter {
         case 'OR':
         case '|':
         case '||':
-        {
-          const op1 = commands[i - 1];
-          const op2 = commands[i + 1];
-          commands[i] = { $or: [op1, op2] };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const op1 = commands[i - 1];
+            const op2 = commands[i + 1];
+            commands[i] = { $or: [op1, op2] };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
         case 'and':
         case 'And':
         case 'AND':
         case '&':
         case '&&':
-        {
-          const op1 = commands[i - 1];
-          const op2 = commands[i + 1];
-          commands[i] = { $and: [op1, op2] };
-          commands.splice(i - 1, 1);
-          commands.splice(i, 1);
+          {
+            const op1 = commands[i - 1];
+            const op2 = commands[i + 1];
+            commands[i] = { $and: [op1, op2] };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
 
         case 'not':
         case 'Not':
         case 'NOT':
         case '!':
-        {
-          const op1 = commands[i + 1];
-          commands[i] = { $not: op1 };
-          commands.splice(i + 1, 1);
+          {
+            const op1 = commands[i + 1];
+            commands[i] = { $not: op1 };
+            commands.splice(i + 1, 1);
           //changed = true;
-          i--;
-          break;
-        }
+            i--;
+            break;
+          }
 
         }
       }

+ 5 - 5
models/cards.js

@@ -230,16 +230,16 @@ Cards.helpers({
     // match right definition to each field
     if (!this.customFields) return [];
     return this.customFields.map((customField) => {
-      var definition = definitions.find((definition) => {
+      const definition = definitions.find((definition) => {
         return definition._id === customField._id;
       });
       //search for "True Value" which is for DropDowns other then the Value (which is the id)
-      var trueValue = customField.value;
-      if (definition.settings.dropdownItems.length > 0)
+      let trueValue = customField.value;
+      if (definition.settings.dropdownItems && definition.settings.dropdownItems.length > 0)
       {
-        for (var i = 0; i < definition.settings.dropdownItems.length;i++)
+        for (let i = 0; i < definition.settings.dropdownItems.length; i++)
         {
-          if (definition.settings.dropdownItems[i]._id == customField.value)
+          if (definition.settings.dropdownItems[i]._id === customField.value)
           {
             trueValue = definition.settings.dropdownItems[i].name;
           }