};
const operatorMap = {
+ "!=": "__not",
">": "__gte",
">=": "__gte",
"<=": "__lte",
"<": "__lte",
+ "startswith": "__starts",
+ "endswith": "__ends",
+ "like": "__fuzzy",
}
@Injectable()
generateAcqSearch(searchType, filters): any {
const baseSearch = JSON.parse(JSON.stringify(defaultSearch[searchType])); // deep copy
Object.keys(filters).forEach(filterField => {
+ const searchTerm: Object = {};
const coreRecType = Object.keys(defaultSearch[searchType])[0];
- const filterOp = Object.keys(filters[filterField][0][filterField])[0];
- const filterVal = filters[filterField][0][filterField][filterOp];
+ let filterOp = "=";
+ let filterVal = "";
+ if (Object.keys(filters[filterField][0]).some(x => x === "-not")) {
+ filterOp = Object.keys(filters[filterField][0]["-not"][filterField])[0];
+ filterVal = filters[filterField][0]["-not"][filterField][filterOp];
+ searchTerm["__not"] = true;
+ } else {
+ filterOp = Object.keys(filters[filterField][0][filterField])[0];
+ filterVal = filters[filterField][0][filterField][filterOp];
+ if (filterOp === "like" && filterVal.length > 1) {
+ if (filterVal[0] === "%" && filterVal[filterVal.length - 1] === "%") {
+ filterVal = filterVal.slice(1, filterVal.length - 1);
+ } else if (filterVal[filterVal.length - 1] === "%") {
+ filterVal = filterVal.slice(0, filterVal.length - 1);
+ filterOp = "startswith";
+ } else if (filterVal[0] === "%") {
+ filterVal = filterVal.slice(1);
+ filterOp = "endswith";
+ }
+ }
+ }
- const searchTerm: Object = {};
searchTerm[filterField] = filterVal;
if (filterOp in operatorMap) {
searchTerm[operatorMap[filterOp]] = true;