UNPKG

@omnia/fx-models

Version:
78 lines (77 loc) 3.19 kB
"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;