UNPKG

@omnia/fx-models

Version:
117 lines (116 loc) 5.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OmniaSearchFilterTransformer = void 0; const QueryFilter_1 = require("../../QueryFilter"); const FilterComponent_1 = require("../FilterComponent"); class OmniaSearchFilterTransformer { transform(filters) { let result = ""; filters.forEach((filter, index) => { if (index !== 0) { result += this.transformFilterLogicalOperator(filter.filterLogicalOperator); } if (filter instanceof FilterComponent_1.FilterConditionComponent) { result += this.transformFilterCondition(filter); } else if (filter instanceof FilterComponent_1.FilterExpressionComponent) { result += this.transformFilterExpressionOperator(filter); } }); return result; } transformFilterCondition(filterCondition) { let operatorString = ""; let valueString = ""; let firstValue = null; if (!filterCondition.values) { valueString = "NULL"; if (filterCondition.filterOperator === QueryFilter_1.FilterOperator.Equal) { operatorString = " IS "; } else if (filterCondition.filterOperator === QueryFilter_1.FilterOperator.NotEqual) { operatorString = " IS NOT "; } else { throw new Error("Invalid operator for NULL value."); } } else { firstValue = filterCondition.values[0]; if (firstValue == null) { if (filterCondition.filterOperator === QueryFilter_1.FilterOperator.Equal) { return `(${filterCondition.propertyName} IS NULL OR ${filterCondition.propertyName} IS EMPTY OR ${filterCondition.propertyName} NOT EXISTS)`; } else if (filterCondition.filterOperator === QueryFilter_1.FilterOperator.NotEqual) { return `(${filterCondition.propertyName} IS NOT NULL AND ${filterCondition.propertyName} IS NOT EMPTY)`; } else { throw new Error("Invalid operator for NULL value."); } } valueString = this.getQueryStringValue(firstValue); switch (filterCondition.filterOperator) { case QueryFilter_1.FilterOperator.Equal: operatorString = "="; break; case QueryFilter_1.FilterOperator.NotEqual: operatorString = "!="; break; case QueryFilter_1.FilterOperator.GreaterThan: operatorString = ">"; break; case QueryFilter_1.FilterOperator.LessThan: operatorString = "<"; break; case QueryFilter_1.FilterOperator.GreaterThanOrEqual: operatorString = ">="; break; case QueryFilter_1.FilterOperator.LessThanOrEqual: operatorString = "<="; break; case QueryFilter_1.FilterOperator.In: operatorString = " IN "; valueString = `[${filterCondition.values.map((x) => this.getQueryStringValue(x)).join(", ")}]`; break; case QueryFilter_1.FilterOperator.NotIn: operatorString = " IN "; valueString = `[${filterCondition.values.map((x) => this.getQueryStringValue(x)).join(", ")}]`; return `NOT ${filterCondition.propertyName}${operatorString}${valueString}`; default: operatorString = " = "; break; } } if (!operatorString) { throw new Error(`Invalid operator ${filterCondition.filterOperator}`); } return `${filterCondition.propertyName}${operatorString}${valueString}`; } transformFilterLogicalOperator(filterLogicalOperator) { switch (filterLogicalOperator) { case QueryFilter_1.FilterLogicalOperator.And: return " AND "; case QueryFilter_1.FilterLogicalOperator.Or: return " OR "; default: throw new Error(`Invalid logical operator: ${filterLogicalOperator}`); } } transformFilterExpressionOperator(filterExpressionComponent) { const innerExpressionString = this.transform(filterExpressionComponent.filters); return `(${innerExpressionString})`; } getQueryStringValue(value) { if (value == null) { return ""; } else if (typeof value === "number") { return value.toString(); } else if (typeof value === "boolean") { return `${value}`; } return `"${value.toString()}"`; } } exports.OmniaSearchFilterTransformer = OmniaSearchFilterTransformer;