Skip to content

Commit 21fcdcc

Browse files
committed
fix(page-dynamic-table): ajusta o GET request com atributo range
Foi incluído o `$filter` para filtros complexos no GET Request quando o atributo `range` está com `true` Fixes po-ui#1211
1 parent 89e6881 commit 21fcdcc

File tree

2 files changed

+100
-2
lines changed

2 files changed

+100
-2
lines changed

projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts

+78-1
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,20 @@ describe('PoPageDynamicSearchComponent:', () => {
155155
expect(component.poAdvancedFilter.open).toHaveBeenCalled();
156156
});
157157

158-
it(`onAdvancedSearch: should call 'setDisclaimers', 'setFilters' and 'advancedSearch.emit'`, () => {
158+
it(`onAdvancedSearch: should call 'setDisclaimers', 'setFilters', 'addComplexFilter' and 'advancedSearch.emit'`, () => {
159159
const filter = { property: 'value1' };
160160
const optionsService = undefined;
161161

162162
spyOn(component, <any>'setDisclaimers');
163+
spyOn(component, <any>'addComplexFilter').and.returnValue(filter);
163164
spyOn(component.advancedSearch, 'emit');
164165
spyOn(component, <any>'setFilters');
165166

166167
component.onAdvancedSearch({ filter, optionsService });
167168

168169
expect(component['setDisclaimers']).toHaveBeenCalledWith(filter, optionsService);
169170
expect(component['setFilters']).toHaveBeenCalledBefore(component.advancedSearch.emit);
171+
expect(component['addComplexFilter']).toHaveBeenCalledWith(filter);
170172
expect(component.advancedSearch.emit).toHaveBeenCalledWith(filter);
171173
});
172174

@@ -339,6 +341,81 @@ describe('PoPageDynamicSearchComponent:', () => {
339341
expect(component['setDisclaimers'](filters)).toEqual(result);
340342
});
341343

344+
it(`addComplexFilter: should return {}`, () => {
345+
component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate' }];
346+
347+
const filters = {};
348+
349+
const result = {};
350+
351+
expect(component['addComplexFilter'](filters)).toEqual(result);
352+
});
353+
354+
it(`addComplexFilter: should return filter without attribute 'range'`, () => {
355+
component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate' }];
356+
357+
const filters = { name: 'Name1', genre: 'male', birthdate: '2020-01-15' };
358+
359+
const result = { name: 'Name1', genre: 'male', birthdate: '2020-01-15' };
360+
361+
expect(component['addComplexFilter'](filters)).toEqual(result);
362+
});
363+
364+
it(`addComplexFilter: should return filter with attribute 'range'`, () => {
365+
component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }];
366+
367+
const filters = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: '2020-01-31' } };
368+
369+
const result = { name: 'Name1', genre: 'male', $filter: 'birthdate ge 2020-01-01 and birthdate le 2020-01-31' };
370+
371+
expect(component['addComplexFilter'](filters)).toEqual(result);
372+
});
373+
374+
it(`addComplexFilter: should return filter with attribute 'range' and final date 'undefined'`, () => {
375+
component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }];
376+
377+
const filters = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: undefined } };
378+
379+
const result = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: undefined } };
380+
381+
expect(component['addComplexFilter'](filters)).toEqual(result);
382+
});
383+
384+
it(`addComplexFilter: should return filter with attribute 'range' and initial date 'undefined'`, () => {
385+
component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }];
386+
387+
const filters = { name: 'Name1', genre: 'male', birthdate: { start: undefined, end: '2020-01-31' } };
388+
389+
const result = { name: 'Name1', genre: 'male', birthdate: { start: undefined, end: '2020-01-31' } };
390+
391+
expect(component['addComplexFilter'](filters)).toEqual(result);
392+
});
393+
394+
it(`addComplexFilter: should return filter with two attribute 'range'`, () => {
395+
component.filters = [
396+
{ property: 'name' },
397+
{ property: 'genre' },
398+
{ property: 'birthdate', range: true },
399+
{ property: 'deathdate', range: true }
400+
];
401+
402+
const filters = {
403+
name: 'Name1',
404+
genre: 'male',
405+
birthdate: { start: '2020-01-01', end: '2020-01-31' },
406+
deathdate: { start: '2021-01-01', end: '2021-01-31' }
407+
};
408+
409+
const result = {
410+
name: 'Name1',
411+
genre: 'male',
412+
$filter:
413+
'birthdate ge 2020-01-01 and birthdate le 2020-01-31 and deathdate ge 2021-01-01 and deathdate le 2021-01-31'
414+
};
415+
416+
expect(component['addComplexFilter'](filters)).toEqual(result);
417+
});
418+
342419
it('getFilterValueToDisclaimer: should return formated date if field type is PoDynamicFieldType.Date', () => {
343420
const field = { type: PoDynamicFieldType.Date, property: '1', label: 'date' };
344421
const value = '2020-08-12';

projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,15 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone
137137
}
138138

139139
onAdvancedSearch(filteredItems) {
140-
const { filter, optionsService } = filteredItems;
140+
const { optionsService } = filteredItems;
141+
let { filter } = filteredItems;
141142

142143
this._disclaimerGroup.disclaimers = this.setDisclaimers(filter, optionsService);
143144

144145
this.setFilters(filter);
145146

147+
filter = this.addComplexFilter(filter);
148+
146149
this.advancedSearch.emit(filter);
147150
}
148151

@@ -321,4 +324,22 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone
321324

322325
return this.poPageCustomizationService.getCustomOptions(onLoad, originalOption, pageOptionSchema);
323326
}
327+
328+
private addComplexFilter(filter: object): object {
329+
let complexFilter;
330+
331+
Object.keys(filter).forEach(property => {
332+
if (filter[property].start && filter[property].end) {
333+
complexFilter = !complexFilter ? '' : (complexFilter += ' and ');
334+
complexFilter += `${property} ge ${filter[property].start} and ${property} le ${filter[property].end}`;
335+
delete filter[property];
336+
}
337+
});
338+
339+
if (complexFilter) {
340+
filter = Object.assign(filter, { $filter: complexFilter });
341+
}
342+
343+
return filter;
344+
}
324345
}

0 commit comments

Comments
 (0)