Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * filter operators
- */
- enum ApiRequestFilterOperator {
- Equals,
- NotEquals,
- GreaterThan,
- LessThan,
- GreaterThanOrEqualTo,
- LessThanOrEqualTo,
- Contains,
- StartsWith,
- CaseInsensitiveStringContains,
- CaseInsensitiveStringStartsWith,
- CaseInsensitiveStringEquals
- }
- /**
- * Sort directions
- */
- enum ApiRequestSortDirection {
- Asc,
- Desc
- }
- /**
- * One filter representation
- */
- interface IApiFilter {
- parameter: string;
- operator: ApiRequestFilterOperator;
- value: string;
- }
- /**
- * One sort representation
- */
- interface IApiSort {
- parameter: string;
- direction: ApiRequestSortDirection;
- }
- /**
- * Api request filter common interface
- */
- interface IApiRequestFilter {
- filters: IApiFilter[];
- sorts: IApiSort[];
- page: number;
- pageSize: number;
- /**
- * Build a filter object to string-filter like ?filter=&sorts=&page=&pageSize=
- */
- build(): string;
- }
- /**
- *
- */
- class ApiRequestSieveFilter implements IApiRequestFilter {
- filters: IApiFilter[];
- sorts: IApiSort[];
- page: number;
- pageSize: number;
- constructor() {
- this.filters = new Array<IApiFilter>();
- this.sorts = new Array<IApiSort>();
- this.page = 1;
- this.pageSize = 100;
- }
- /**
- * Build filter string
- */
- build(): string {
- let result = "?filters=";
- this.filters.forEach((f, i) => {
- let translatedOperator = "";
- switch (f.operator) {
- case ApiRequestFilterOperator.Equals:
- translatedOperator = "==";
- break;
- case ApiRequestFilterOperator.NotEquals:
- translatedOperator = "!=";
- break;
- case ApiRequestFilterOperator.GreaterThan:
- translatedOperator = ">";
- break;
- case ApiRequestFilterOperator.LessThan:
- translatedOperator = "<";
- break;
- case ApiRequestFilterOperator.GreaterThanOrEqualTo:
- translatedOperator = ">=";
- break;
- case ApiRequestFilterOperator.LessThanOrEqualTo:
- translatedOperator = "<=";
- break;
- case ApiRequestFilterOperator.Contains:
- translatedOperator = "@=";
- break;
- case ApiRequestFilterOperator.StartsWith:
- translatedOperator = "_=";
- break;
- case ApiRequestFilterOperator.CaseInsensitiveStringContains:
- translatedOperator = "@=*";
- break;
- case ApiRequestFilterOperator.CaseInsensitiveStringStartsWith:
- translatedOperator = "_=*";
- break;
- case ApiRequestFilterOperator.CaseInsensitiveStringEquals:
- translatedOperator = "==*";
- break;
- }
- result += (i === 0 ? "" : ",") + (f.parameter + translatedOperator + f.value);
- });
- result += "&sorts=";
- this.sorts.forEach((s, i) => {
- let translatedValue = "";
- switch (s.direction) {
- case ApiRequestSortDirection.Asc:
- translatedValue = s.parameter;
- break;
- case ApiRequestSortDirection.Desc:
- translatedValue = `-${s.parameter}`;
- break;
- }
- result += (i === 0 ? "" : ",") + translatedValue;
- });
- result += `&page=${this.page}&pageSize=${this.pageSize}`;
- return result;
- }
- }
Add Comment
Please, Sign In to add comment