@omnia/fx-models
Version:
Provide Omnia Fx Models Stuffs.
78 lines (77 loc) • 3.19 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilterBuilder = void 0;
const QueryFilter_1 = require("../QueryFilter");
const FilterComponent_1 = require("./FilterComponent");
const FilterOperatorBuilder_1 = require("./FilterOperatorBuilder");
class FilterBuilder {
constructor(filters) {
this.filters = [];
this.filterLogicalOperator = QueryFilter_1.FilterLogicalOperator.And;
if (filters) {
this.filters = filters;
}
}
addFilter(filterComponent) {
this.filters.push(filterComponent);
this.propertyName = undefined;
this.filterLogicalOperator = QueryFilter_1.FilterLogicalOperator.And;
}
and() {
this.filterLogicalOperator = QueryFilter_1.FilterLogicalOperator.And;
return this;
}
or() {
this.filterLogicalOperator = QueryFilter_1.FilterLogicalOperator.Or;
return this;
}
build() {
return this.filters;
}
int(propertyName) {
this.propertyName = propertyName;
this.intFilterOperatorBuilder =
this.intFilterOperatorBuilder || new FilterOperatorBuilder_1.IntFilterOperatorBuilder(this);
return this.intFilterOperatorBuilder;
}
float(propertyName) {
this.propertyName = propertyName;
this.floatFilterOperatorBuilder =
this.floatFilterOperatorBuilder || new FilterOperatorBuilder_1.FloatFilterOperatorBuilder(this);
return this.floatFilterOperatorBuilder;
}
dateTime(propertyName) {
this.propertyName = propertyName;
this.dateTimeFilterOperatorBuilder =
this.dateTimeFilterOperatorBuilder || new FilterOperatorBuilder_1.DateTimeFilterOperatorBuilder(this);
return this.dateTimeFilterOperatorBuilder;
}
dateTimeOffset(propertyName) {
this.propertyName = propertyName;
this.dateTimeOffsetFilterOperatorBuilder =
this.dateTimeOffsetFilterOperatorBuilder || new FilterOperatorBuilder_1.DateTimeOffsetFilterOperatorBuilder(this);
return this.dateTimeOffsetFilterOperatorBuilder;
}
string(propertyName) {
this.propertyName = propertyName;
this.stringFilterOperatorBuilder =
this.stringFilterOperatorBuilder || new FilterOperatorBuilder_1.StringFilterOperatorBuilder(this);
return this.stringFilterOperatorBuilder;
}
boolean(propertyName) {
this.propertyName = propertyName;
this.booleanFilterOperatorBuilder =
this.booleanFilterOperatorBuilder || new FilterOperatorBuilder_1.BooleanFilterOperatorBuilder(this);
return this.booleanFilterOperatorBuilder;
}
expression(buildInnerExpression) {
const innerFilterBuilder = new FilterBuilder([]);
const innerFilters = buildInnerExpression(innerFilterBuilder).build();
if (innerFilters.length === 0) {
throw new Error("There must be at least 1 filter in the expression.");
}
this.filters.push(new FilterComponent_1.FilterExpressionComponent(innerFilters, this.filterLogicalOperator));
return this;
}
}
exports.FilterBuilder = FilterBuilder;