Skip to content
Snippets Groups Projects
Commit df2d7de9 authored by S.Listl's avatar S.Listl
Browse files

JditoFilterUtils made ready for filter tree

parent 09cdce6e
No related branches found
No related tags found
No related merge requests found
......@@ -158,6 +158,7 @@
</entityField>
<entityField>
<name>ROLES</name>
<searchable v="false" />
</entityField>
<entityConsumer>
<name>EmployeeRoles</name>
......
......@@ -4,7 +4,7 @@ import("Sql_lib");
* object for filtering records
*
* @param {Array} pColumns the column names
* @param {String|Object} pFilter the filter object
* @param {Object} pFilter the filter object
*/
function JditoFilterHelper (pColumns, pFilter)
{
......@@ -15,12 +15,7 @@ function JditoFilterHelper (pColumns, pFilter)
columnMap[row] = i;
});
this._columnMap = columnMap;
if (pFilter.length) //check if pFilter is a string
pFilter = JSON.parse(pFilter);
this._operator = pFilter.operator;
this._filters = pFilter.childs;
this._filter = pFilter;
}
/**
......@@ -32,55 +27,64 @@ function JditoFilterHelper (pColumns, pFilter)
*/
JditoFilterHelper.prototype.checkRecord = function (pRow)
{
if (this._filters.length == 0)
if (this._filter.length == 0)
return true;
if (this._operator == "AND")
return this._filters.every(_testFn, this);
return _testRecord.call(this, this._filter);
return this._filters.some(_testFn, this);
function _testFn (pFilter)
function _testRecord (pCondition)
{
let value = pRow[this._columnMap[pFilter.name]];
return this._testValue(value, (pFilter.key || pFilter.value), pFilter.operator);
if (pCondition.type == "row")
{
let value = pRow[this._columnMap[pCondition.name]];
return _testValue(value, (pCondition.key || pCondition.value), pCondition.operator);
}
else if (pCondition.type == "group")
{
if (pCondition.operator == "AND")
return pCondition.childs.every(_testRecord, this);
return pCondition.childs.some(_testRecord, this);
}
return true;
}
}
/**
* compares two values with the given operator
*/
JditoFilterHelper.prototype._testValue = function (pRowValue, pFilterValue, pOperator)
{
switch (pOperator)
/**
* compares two values with the given operator
*/
function _testValue (pRowValue, pFilterValue, pOperator)
{
case "CONTAINS":
return (new RegExp(pFilterValue)).test(pRowValue);
case "CONTAINSNOT":
return !(new RegExp(pFilterValue)).test(pRowValue);
case "STARTSWITH":
return (new RegExp("^" + pFilterValue)).test(pRowValue);
case "ENDSWITH":
return (new RegExp(pFilterValue + "$")).test(pRowValue);
case "EQUAL":
return (new RegExp("^" + pFilterValue + "$")).test(pRowValue);
case "NOT_EQUAL":
return !(new RegExp("^" + pFilterValue + "$")).test(pRowValue);
case "LESS":
return pRowValue < pFilterValue;
case "LESS_OR_EQUAL":
return pRowValue <= pFilterValue;
case "GREATER":
return pRowValue > pFilterValue;
case "GREATER_OR_EQUAL":
return pRowValue >= pFilterValue;
case "ISNULL":
return pRowValue == "";
case "ISNOTNULL":
return pRowValue != "";
switch (pOperator)
{
case "CONTAINS":
return (new RegExp(pFilterValue)).test(pRowValue);
case "CONTAINSNOT":
return !(new RegExp(pFilterValue)).test(pRowValue);
case "STARTSWITH":
return (new RegExp("^" + pFilterValue)).test(pRowValue);
case "ENDSWITH":
return (new RegExp(pFilterValue + "$")).test(pRowValue);
case "EQUAL":
return (new RegExp("^" + pFilterValue + "$")).test(pRowValue);
case "NOT_EQUAL":
return !(new RegExp("^" + pFilterValue + "$")).test(pRowValue);
case "LESS":
return pRowValue < pFilterValue;
case "LESS_OR_EQUAL":
return pRowValue <= pFilterValue;
case "GREATER":
return pRowValue > pFilterValue;
case "GREATER_OR_EQUAL":
return pRowValue >= pFilterValue;
case "ISNULL":
return pRowValue == "";
case "ISNOTNULL":
return pRowValue != "";
}
}
}
/**
* Provides functions for using the filter with jdito recordcontainers
*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment