typeorm-dynamic-filters
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published

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 typeorm-dynamic-filters@0.0.2

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

If you need to filter by NULL values, just use the the 'eq' filterType and 'null' as filterValue.
The project includes a Joy Schema for validation libs such celebrate:
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

The MIT License

Package Sidebar

Install

npm i typeorm-dynamic-filters

Weekly Downloads

134

Version

0.1.1

License

MIT

Unpacked Size

18.7 kB

Total Files

17

Last publish

Collaborators

  • kortkamp