sieve-ts-test
v1.0.0
Published
Node.js /Typescript types and services for [Biarity/Sieve](https://github.com/Biarity/Sieve).
Downloads
1
Readme
Sieve
Node.js /Typescript types and services for Biarity/Sieve.
HttpParam or Sieve
If you use the Sieve package for filtering in your (.NET) back-end then you probably only have to look at the SieveFilterService
.
If however, you use this package for multiple back-ends you can use the HttpParamFilterService
as the fall-back to use "regular" http-params
Usage
construct a filter using the models:
const filter = new Filter({ pageIndex: 2, pageSize: 45, sorts: [ { field: "testField", direction: SortDirection.Ascending, }, ], filters: [ { fields: ["firstField", "secondField"], values: ["singleValue"], operator: Operators.CONTAINS, }, ], })
create a service and use it:
// user either one, both will return a string const service = new SieveFilterService(); const service = new HttpParamService();
use the service to create a usable value:
console.log(service.toValue(filter));
Observe the output:
// The Sieve service will have combined the fields together into a single filter: page=3&pageSize=45&Filters=(firstField|secondField)@=singleValue&Sorts=testField // the HTTP service will simply pass both variables: page=3&pageSize=45&firstField=singleValue&secondField=singleValue&testField=+
Retrieving filter objects from the URL
You can also give the FilterService the URL query parameter string and have it figure out the filter structure.
Let's try it with a rather complicated query param string: page=3&pageSize=45&Filters=(firstField|secondField)@=singleValue&Sorts=testField
// create service
const sieveService = new SieveFilterService();
// parse filter
const filters = sieveService.parse(
"page=3&pageSize=45&Filters=(firstField|secondField)@=singleValue&Sorts=testField",
);
// output
console.log(JSON.stringify(filters, null, 2));
Customized Sieve instances
If you have customized parts of your back-end Sieve you can also pass along the custom options to the SieveService.
Let's say we've customized the word "page" to someOtherWordForPage
and the character to split filter keys from |
to ~
, our config would look like this:
const sieveService = new SieveFilterService({
...SIEVE_CONSTANTS,
page: "someOtherWordForPage",
keySplitChar: "~",
});
Which would result in the following result instead:
someOtherWordForPage=3&pagesize=45&Filters=(firstField~secondField)@=singleValue&Sorts=testField