typeorm-dynamic-filters
v0.1.1
Published
Create a TypeORM query builder for listing entries with filters, pagination and ordination.
Downloads
233
Readme
Typeorm Dynamic Filters
Create a TypeORM query builder for listing entries with filters, pagination and ordination.
Installation
run:
npm install typeorm-dynamic-filters
or
yarn add typeorm-dynamic-filters
This package is compatible with TypeORM 0.3 !
For a TypeORM 0.2 compatible version you should use 0.0.2 version by running:
npm install [email protected]
Usage
You will need to import and instantiate the main class
import { getRepository } from 'typeorm';
import { FilterBuilder } from 'typeorm-dynamic-filters';
const myOrmRepository = getRepository<User>(User);
const filterQueryBuilder = new FilterBuilder(myOrmRepository, 'alias');
Then build the queryBuilder for our filters:
const queryFilter = {
filterBy: ['role'],
filterType: ['not'],
filterValue: ['admin'],
page: 1,
per_page: 12,
orderBy: 'id',
orderType: 'ASC',
};
const queryBuilder = filterQueryBuilder.build(queryFilter);
The queryFilter object must be an IFilterQuery object which may be parsed from an ExpressJS request query.
import { parseQueryFilters } from 'typeorm-dynamic-filters';
.
.
.
const filter = parseQueryFilters(request.query)
Example:
?filterBy=name&filterValue=Maria&filterType=like&page=1&per_page=15&orderBy=id&orderType=ASC
will return the object:
{
filterBy: ['name'],
filterType: ['like'],
filterValue: ['Maria'],
page: 1,
per_page: 15,
orderBy: 'id',
orderType: 'ASC',
}
You may use multiple filters in your query by splitting the fields by comma ','
?filterBy=name,role,active&filterValue=Maria,user,true&filterType=like,eq,eq
{
filterBy: ['name','role','active'],
filterType: ['like','eq','eq'],
filterValue: ['Maria','user','true'],
page: 1,
per_page: 15,
orderBy: 'id',
orderType: 'ASC',
}
The valid filter types are:
- eq - equal
- not - not equal
- in - included in a array ex: ?filterBy=name&filterType=in&filterValue=Maria|John|Marcelo
- like - sql default like
- ge - greater or equal
- le - lesser or equal
- btw - between two values ex: filterValue=30|40
import {listWithFilterSchema} from 'typeorm-dynamic-filters';
Issues
If you find any bugs in the project please create an issue.
License
Copyright (c) 2022 Marcelo Kortkamp kortkamp.dev