From 9ac1164440b70de6480d55a0814198aad5e6d779 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sun, 20 May 2018 09:47:20 +0200 Subject: Testing 'or' condition for advanced Filter --- client/lib/filter.js | 79 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 22 deletions(-) (limited to 'client') diff --git a/client/lib/filter.js b/client/lib/filter.js index 790e4f49..84b10648 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -147,7 +147,7 @@ class AdvancedFilter { _fieldNameToId(field) { - console.log("searching: "+field); + console.log(`searching: ${field}`); const found = CustomFields.findOne({'name':field}); console.log(found); return found._id; @@ -158,32 +158,67 @@ class AdvancedFilter { console.log(commands); try { //let changed = false; - for (let i = 0; i < commands.length; i++) + this._processConditions(commands); + this._processLogicalOperators(commands); + } + catch (e){return { $in: [] };} + return {$or: commands}; + } + + _processConditions(commands) + { + for (let i = 0; i < commands.length; i++) + { + if (!commands[i].string && commands[i].cmd) { - if (!commands[i].string && commands[i].cmd) + switch (commands[i].cmd) + { + case '=': + case '==': + case '===': { - switch (commands[i].cmd) - { - 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); - //changed = true; - i--; - break; - } - - } + 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); + //changed = true; + i--; + break; + } + + } + } + } + } + + _processLogicalOperators(commands) + { + for (let i = 0; i < commands.length; i++) + { + if (!commands[i].string && commands[i].cmd) + { + switch (commands[i].cmd) + { + case 'or': + case 'Or': + case 'OR': + case '|': + case '||': + { + const op1 = commands[i-1].cmd; + const op2 = commands[i+1].cmd; + commands[i] = {$or: [op1, op2]}; + commands.splice(i-1, 1); + commands.splice(i, 1); + //changed = true; + i--; + break; + } + } } } - catch (e){return { $in: [] };} - return {$or: commands}; } _getMongoSelector() { -- cgit v1.2.3-1-g7c22