Merge branch 'dev' of https://git.willaspace.com/WillaEngine-Project/WillaEngine into dev
commit
4e1ade88cd
@ -0,0 +1,42 @@
|
|||||||
|
// Warn if overriding existing method
|
||||||
|
if(Array.prototype.equals)
|
||||||
|
console.warn("Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code.");
|
||||||
|
// attach the .equals method to Array's prototype to call it on any array
|
||||||
|
Array.prototype.equals = function (array) {
|
||||||
|
// if the other array is a falsy value, return
|
||||||
|
if (!array)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// compare lengths - can save a lot of time
|
||||||
|
if (this.length != array.length)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (var i = 0, l=this.length; i < l; i++) {
|
||||||
|
// Check if we have nested arrays
|
||||||
|
if (this[i] instanceof Array && array[i] instanceof Array) {
|
||||||
|
// recurse into the nested arrays
|
||||||
|
if (!this[i].equals(array[i]))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (this[i] != array[i]) {
|
||||||
|
// Warning - two different object instances will never be equal: {x:20} != {x:20}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Hide method from for-in loops
|
||||||
|
Object.defineProperty(Array.prototype, "equals", {enumerable: false});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Array.prototype.matchItems = function (array) {
|
||||||
|
// if the other array is a falsy value, return
|
||||||
|
if (!array)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
return this.filter(item => array.includes(item));
|
||||||
|
}
|
||||||
|
// Hide method from for-in loops
|
||||||
|
Object.defineProperty(Array.prototype, "matchItems", {enumerable: false});
|
@ -0,0 +1,114 @@
|
|||||||
|
import {filterByLevel} from '@Global/utils/common/ProcessTreeArray'
|
||||||
|
export default class DynamicFilter {
|
||||||
|
|
||||||
|
constructor(arrayData, filterObject) {
|
||||||
|
this.arrayData = arrayData;
|
||||||
|
this.filterObject = filterObject;
|
||||||
|
|
||||||
|
for (const name in filterObject) {
|
||||||
|
if (filterObject.hasOwnProperty(name)) {
|
||||||
|
if(filterObject[name] && typeof filterObject[name].type !== 'undefined'){
|
||||||
|
this[filterObject[name].type](name);
|
||||||
|
} else {
|
||||||
|
this[name](this.filterObject[name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.arrayData;
|
||||||
|
}
|
||||||
|
|
||||||
|
like(name) {
|
||||||
|
const value = this.filterObject[name].val;
|
||||||
|
if(value !== null) {
|
||||||
|
this.arrayData = this.arrayData.filter(data => data[name].indexOf(value) !== -1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
between(name) {
|
||||||
|
const value1 = this.filterObject[name].val1;
|
||||||
|
const value2 = this.filterObject[name].val2;
|
||||||
|
|
||||||
|
if (value1 && value2) {
|
||||||
|
if(typeof value1 === 'number' && typeof value2 === 'number') {
|
||||||
|
this.arrayData = this.arrayData.filter(data => value1 <= data[name] && data[name] <= value2);
|
||||||
|
} else {
|
||||||
|
let {from, to} = this.checkDateAndParse(value1, value2);
|
||||||
|
this.arrayData = this.arrayData.filter(data => {
|
||||||
|
const check = Date.parse(data[name]);
|
||||||
|
return check >= from && check <= to;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (value1) {
|
||||||
|
this.greater(name);
|
||||||
|
|
||||||
|
} else if(value2) {
|
||||||
|
this.less(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDateAndParse(value1, value2) {
|
||||||
|
let from, to = null;
|
||||||
|
if(value1 && value1.length <= 10) {
|
||||||
|
from = Date.parse(value1 + 'T00:00:00');
|
||||||
|
} else {
|
||||||
|
from = Date.parse(value1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(value2 && value2.length <= 10) {
|
||||||
|
to = Date.parse(value2 + 'T23:59:59');
|
||||||
|
} else {
|
||||||
|
to = Date.parse(value1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {from, to};
|
||||||
|
}
|
||||||
|
|
||||||
|
greater(name) {
|
||||||
|
const value1 = this.filterObject[name].val1;
|
||||||
|
|
||||||
|
if(typeof value1 === 'number') {
|
||||||
|
this.arrayData = this.arrayData.filter(data => value1 <= data[name]);
|
||||||
|
} else {
|
||||||
|
let {from} = this.checkDateAndParse(value1);
|
||||||
|
|
||||||
|
this.arrayData = this.arrayData.filter(data => {
|
||||||
|
const check = Date.parse(data[name]);
|
||||||
|
return check >= from;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
less(name) {
|
||||||
|
const value2 = this.filterObject[name].val2;
|
||||||
|
|
||||||
|
if(typeof value2 === 'number') {
|
||||||
|
this.arrayData = this.arrayData.filter(data => data[name] <= value2);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
let {to} = this.checkDateAndParse(value2);
|
||||||
|
|
||||||
|
this.arrayData = this.arrayData.filter(data => {
|
||||||
|
const check = Date.parse(data[name]);
|
||||||
|
return check <= to;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
in(name) {
|
||||||
|
const value = this.filterObject[name].val;
|
||||||
|
const key = this.filterObject[name].key ? this.filterObject[name].key : 'id';
|
||||||
|
this.arrayData = this.arrayData.filter(data => {
|
||||||
|
if (typeof data[name] === 'object') {
|
||||||
|
return data[name].map(item => item[key]).matchItems(value).length > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
level(value) {
|
||||||
|
if(value) {
|
||||||
|
this.arrayData = filterByLevel(this.arrayData, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue