@contiva/sap-integration-suite-client
Version:
SAP Cloud Platform Integration API Client
67 lines (66 loc) • 2.79 kB
JavaScript
;
/**
* OData Filter Builder Utilities
*
* Utilities for building OData filter expressions
*
* @module sap-integration-suite-client/utils/odata-filter-builder
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildODataFilter = buildODataFilter;
const date_formatter_1 = require("./date-formatter");
/**
* Builds an OData filter string from a filter object
*
* @param filterObj Object containing filter criteria
* @returns Formatted OData filter string
*/
function buildODataFilter(filterObj) {
const filterParts = [];
Object.entries(filterObj).forEach(([key, value]) => {
if (value === undefined || value === null)
return;
// Handle date fields
if (key === 'LogStart' || key === 'LogEnd') {
if (typeof value === 'object') {
// Handle date filter object with comparison operators
const dateFilter = value;
if (dateFilter.gt instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'gt', dateFilter.gt));
}
if (dateFilter.ge instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'ge', dateFilter.ge));
}
if (dateFilter.lt instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'lt', dateFilter.lt));
}
if (dateFilter.le instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'le', dateFilter.le));
}
if (dateFilter.eq instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'eq', dateFilter.eq));
}
if (dateFilter.ne instanceof Date) {
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'ne', dateFilter.ne));
}
}
else if (value instanceof Date) {
// Handle direct Date object (defaults to equals)
filterParts.push(date_formatter_1.SapDateUtils.createDateTimeFilter(key, 'eq', value));
}
}
// Handle string fields
else if (typeof value === 'string') {
filterParts.push(`${key} eq '${value}'`);
}
// Handle boolean fields
else if (typeof value === 'boolean') {
filterParts.push(`${key} eq ${value}`);
}
// Handle numeric fields
else if (typeof value === 'number') {
filterParts.push(`${key} eq ${value}`);
}
});
return filterParts.join(' and ');
}