@omnia/fx-models
Version:
Provide Omnia Fx Models Stuffs.
117 lines (116 loc) • 5.06 kB
JavaScript
;
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;