@equantic/linq
Version:
eQuantic Linq for JavaScript
42 lines (41 loc) • 1.46 kB
JavaScript
import { CompositeFilteringParser } from './CompositeFilteringParser.js';
import { Filtering } from './Filtering.js';
import { parseExpression } from './base.js';
export class CompositeFiltering extends Filtering {
values;
compositeOperator;
constructor(...args) {
super();
this.compositeOperator = args.length > 0 ? args[0] : 'and';
this.values = [];
if (args?.length > 1 && Array.isArray(args[1])) {
args[1].forEach((value) => {
if (typeof value === 'string') {
if (!CompositeFilteringParser.parse(value, this.values)) {
const parsed = parseExpression(value);
const f = new Filtering(parsed.column, parsed.value, parsed.operator);
this.values.push(f);
}
}
else
this.values.push(value);
});
}
}
addValue(filtering) {
this.values.push(filtering);
}
toString() {
if (this.values.length == 0)
return super.toString();
const args = this.values.map((v) => v.toString());
return `${this.compositeOperator}(${args.join(',')})`;
}
static and(...values) {
return new CompositeFiltering('and', values);
}
static or(...values) {
return new CompositeFiltering('or', values);
}
}
export const CF = CompositeFiltering;