ag-grid-mongo-query-builder
Advanced tools
Comparing version 0.2.4 to 0.2.5
{ | ||
"name": "ag-grid-mongo-query-builder", | ||
"version": "0.2.4", | ||
"version": "0.2.5", | ||
"description": "Utility to generate Mongo DB aggregation pipeline queries starting from AgGrid server side params", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
//const mongoose = require('mongoose'); | ||
// const ObjectID = require('mongodb').ObjectID; | ||
const moment = require('moment'); | ||
const momentFormats = ['MM-DD-YYYY','DD-MM-YYYY', 'YYYY-MM-DD']; | ||
const buildQuery = function (reqBody) { | ||
@@ -152,13 +152,42 @@ let { | ||
finalQuery = []; | ||
let searchCond = 'or'; | ||
if(searchVal && searchVal.toLowerCase().includes(' and ')) searchCond = 'and' | ||
if(searchVal && searchVal.toLowerCase().includes(' or ')) searchCond = 'or' | ||
const searchObj = splitSearchString(searchVal.toLowerCase(), searchCond); | ||
const searchValArr = searchObj && searchObj.searchValArr ? searchObj.searchValArr : []; | ||
columns.map(column => { | ||
if(column.filter && column.filter == "agTextColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$regex": searchVal, "$options": "i" } }); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'text'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$regex": searchVal, "$options": "i" } }); | ||
} | ||
} else if(column.filter && column.filter == "agSetColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$eq": searchVal}}); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'set'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$eq": searchVal}}); | ||
} | ||
} else if(column.filter && column.filter == "agNumberColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$eq": parseInt(searchVal)}}); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'number'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$eq": parseInt(searchVal)}}); | ||
} | ||
} else if(column.filter && column.filter == "agDateColumnFilter") { | ||
if(moment(searchVal).isValid()) { | ||
finalQuery.push({ "$and": [{ [column.field]: { "$gte": new Date(moment(searchVal).startOf('day')) } }, { [column.field]: { "$lte": new Date(moment(searchVal).endOf('day')) } }] }); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'date'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
if(moment(`'${searchVal}'`, momentFormats).isValid()) { | ||
finalQuery.push({ "$and": [{ [column.field]: { "$gte": new Date(moment(searchVal,momentFormats).startOf('day')) } }, { [column.field]: { "$lte": new Date(moment(searchVal, momentFormats).endOf('day')) } }] }); | ||
} | ||
} | ||
} | ||
@@ -169,15 +198,65 @@ }); | ||
function buildSearchObj(searchValArr, column, searchCond, type) { | ||
const conditions = []; | ||
const conObj = {}; | ||
searchValArr.map(Val => { | ||
if(type === 'text') conditions.push({[column]: { "$regex": Val, "$options": "i" }}); | ||
if(type === 'number') conditions.push({[column]: { "$eq": parseInt(Val) }}); | ||
if(type === 'set') conditions.push({[column]: { "$eq": Val}}); | ||
if(type === 'date') { | ||
if(moment(`'${Val}'`, momentFormats).isValid()) { | ||
conditions.push({ "$and": [{ [column]: { "$gte": new Date(moment(Val,momentFormats).startOf('day')) } }, { [column]: { "$lte": new Date(moment(Val, momentFormats).endOf('day')) } }] }); | ||
} | ||
} | ||
}); | ||
if(conditions.length> 0) conObj[searchCond] = [...conditions]; | ||
return conObj; | ||
} | ||
function splitSearchString(searchVal, sepraters) { | ||
searchVal = searchVal.split(sepraters).map(item => item.trim()); | ||
return {"searchValArr" : searchVal}; | ||
} | ||
function buildFlagQuery(flagColumns, flagFilters) { | ||
finalQuery = []; | ||
flagFilters.map(flagVal => { | ||
let searchCond = 'or'; | ||
if(flagVal && flagVal.toLowerCase().includes(' and ')) searchCond = 'and' | ||
if(flagVal && flagVal.toLowerCase().includes(' or ')) searchCond = 'or' | ||
const searchObj = splitSearchString(flagVal.toLowerCase(), searchCond); | ||
const searchValArr = searchObj && searchObj.searchValArr ? searchObj.searchValArr : []; | ||
flagColumns.map(column => { | ||
if(column.filter && column.filter == "agTextColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$regex": flagVal, "$options": "i" } }); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'text'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$regex": flagVal, "$options": "i" } }); | ||
} | ||
} else if(column.filter && column.filter == "agSetColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$eq": flagVal}}); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'set'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$eq": flagVal}}); | ||
} | ||
} else if(column.filter && column.filter == "agNumberColumnFilter") { | ||
finalQuery.push( { [column.field]: { "$eq": parseInt(flagVal)}}); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'number'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
finalQuery.push( { [column.field]: { "$eq": parseInt(flagVal)}}); | ||
} | ||
} else if(column.filter && column.filter == "agDateColumnFilter") { | ||
if(moment(flagVal).isValid()) { | ||
finalQuery.push({ "$and": [{ [column.field]: { "$gte": new Date(moment(flagVal).startOf('day')) } }, { [column.field]: { "$lte": new Date(moment(flagVal).endOf('day')) } }] }); | ||
if(searchValArr && searchValArr.length > 1) { | ||
const conditionObj = buildSearchObj(searchValArr, column.field, `$${searchCond}`, 'date'); | ||
finalQuery.push(conditionObj); | ||
} else { | ||
if(moment(`'${flagVal}'`, momentFormats).isValid()) { | ||
finalQuery.push({ "$and": [{ [column.field]: { "$gte": new Date(moment(flagVal,momentFormats).startOf('day')) } }, { [column.field]: { "$lte": new Date(moment(flagVal, momentFormats).endOf('day')) } }] }); | ||
} | ||
} | ||
@@ -184,0 +263,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
31226
675