From ab8850514405d2e0eec6eaca0e3658c7162d4720 Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Fri, 3 May 2019 12:22:10 +0200 Subject: [PATCH] #135 [intUI/Filter] filtering non-/empty values possible with '--'/'++' --- .../webapp/app/shared/util/tablefilter.ts | 16 +++++++++----- .../spec/app/shared/util/tablefilter.spec.ts | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/webapp/app/shared/util/tablefilter.ts b/src/main/webapp/app/shared/util/tablefilter.ts index 19157c9e..f6ac701f 100644 --- a/src/main/webapp/app/shared/util/tablefilter.ts +++ b/src/main/webapp/app/shared/util/tablefilter.ts @@ -38,12 +38,18 @@ export class TableFilter { let queryCriteria: any = {} as any; Object.keys(this.criteria).forEach(name => { const value = this.criteria[name]; - const queryDef = this.query[name]; - if (typeof queryDef !== 'function') { - queryCriteria[queryDef] = value; + if (value === '--') { + queryCriteria[name + '.specified'] = false; + } else if (value === '++') { + queryCriteria[name + '.specified'] = true; } else { - const additionalQueryCriteria = queryDef(name, value); - queryCriteria = { ...queryCriteria, ...additionalQueryCriteria }; + const queryDef = this.query[name]; + if (typeof queryDef !== 'function') { + queryCriteria[queryDef] = value; + } else { + const additionalQueryCriteria = queryDef(name, value); + queryCriteria = { ...queryCriteria, ...additionalQueryCriteria }; + } } }); return queryCriteria; diff --git a/src/test/javascript/spec/app/shared/util/tablefilter.spec.ts b/src/test/javascript/spec/app/shared/util/tablefilter.spec.ts index da7b08c2..8f523776 100644 --- a/src/test/javascript/spec/app/shared/util/tablefilter.spec.ts +++ b/src/test/javascript/spec/app/shared/util/tablefilter.spec.ts @@ -73,6 +73,28 @@ describe('TableFilter Tests', () => { expect(filter.buildQueryCriteria()).toEqual({ 'name.contains': 'test value' }); }); + it('when filter "name" is set to "--", buildQueryCriteria() returns a name.specified=false query', () => { + // given + filter.criteria.name = '--'; + + // when + const actual = filter.buildQueryCriteria(); + + // then + expect(filter.buildQueryCriteria()).toEqual({ 'name.specified': false }); + }); + + it('when filter "name" is set to "++", buildQueryCriteria() returns a name.specified=true query', () => { + // given + filter.criteria.name = '++'; + + // when + const actual = filter.buildQueryCriteria(); + + // then + expect(filter.buildQueryCriteria()).toEqual({ 'name.specified': true }); + }); + it('when filter "number" is set, buildQueryCriteria() returns a number.equals query', () => { // given filter.criteria.number = '-42';