Skip to content

Commit f56bfed

Browse files
samir-ayoubjhosefmarks
authored andcommitted
fix(page-dynamic-search): corrige disclaimers da busca avançada
Quando aplicados filtros de campos relacionados à seleção de valor, aplicava-se o value do campo ao invés do label nos campos: - select - radio-group - checkbox-group Fixes DTHFUI-2540
1 parent 497fee0 commit f56bfed

File tree

4 files changed

+133
-31
lines changed

4 files changed

+133
-31
lines changed

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { TitleCasePipe } from '@angular/common';
66
import { NO_ERRORS_SCHEMA } from '@angular/core';
77

88
import { configureTestSuite, expectBrowserLanguageMethod } from './../../util-test/util-expect.spec';
9+
import { PoDynamicFieldType } from '@portinari/portinari-ui';
910

1011
import { PoPageDynamicSearchComponent } from './po-page-dynamic-search.component';
1112
import { PoAdvancedFilterComponent } from './po-advanced-filter/po-advanced-filter.component';
@@ -268,6 +269,75 @@ describe('PoPageDynamicSearchComponent:', () => {
268269
expect(component['setDisclaimers'](filters)).toEqual(result);
269270
});
270271

272+
it('getFilterValueToDisclaimer: should return formated date if field type is PoDynamicFieldType.Date', () => {
273+
const field = { type: PoDynamicFieldType.Date, property: '1', label: 'date' };
274+
const value = '2020-08-12';
275+
276+
spyOn(component, <any>'formatDate').and.returnValue('12/08/2020');
277+
278+
const result = component['getFilterValueToDisclaimer'](field, value);
279+
280+
expect(result).toBe('12/08/2020');
281+
});
282+
283+
it('getFilterValueToDisclaimer: should return label of option if options and label are defined', () => {
284+
const field = { property: '1', label: 'field label', options: [
285+
{ value: '1', label: 'test 1'}, {value: '2', label: 'test 2' }
286+
]};
287+
288+
const value = '2';
289+
290+
const result = component['getFilterValueToDisclaimer'](field, value);
291+
292+
expect(result).toBe('test 2');
293+
});
294+
295+
it('getFilterValueToDisclaimer: should return value of option if options is defined and label is undefined', () => {
296+
const field = { property: '1', label: 'field label', options: [
297+
{ value: '1' }, {value: '2' }
298+
]};
299+
300+
const value = '2';
301+
302+
const result = component['getFilterValueToDisclaimer'](field, value);
303+
304+
expect(result).toBe('2');
305+
});
306+
307+
it('getFilterValueToDisclaimer: should return option label if options and label are defined and optionsMulti is true', () => {
308+
const field = { property: '1', label: 'field label', optionsMulti: true, options: [
309+
{ value: '1', label: 'test 1'}, {value: '2', label: 'test 2' }, {value: '3', label: 'test 3' }
310+
]};
311+
312+
const value = ['2', '3'];
313+
314+
const result = component['getFilterValueToDisclaimer'](field, value);
315+
316+
expect(result).toBe('test 2, test 3');
317+
});
318+
319+
it('getFilterValueToDisclaimer: should return option value if options is defined, label is undefined and optionsMulti is true', () => {
320+
const field = { property: '1', label: 'field label', optionsMulti: true, options: [
321+
{ value: '1' }, { value: '2' }, { value: '3' }
322+
]};
323+
324+
const value = ['2', '3'];
325+
326+
const result = component['getFilterValueToDisclaimer'](field, value);
327+
328+
expect(result).toBe('2, 3');
329+
});
330+
331+
it('getFilterValueToDisclaimer: should return value if options is undefined and type isn`t PoDynamicFieldType.Date', () => {
332+
const field = { property: '1', label: 'field label'};
333+
334+
const value = 'test value 1';
335+
336+
const result = component['getFilterValueToDisclaimer'](field, value);
337+
338+
expect(result).toBe('test value 1');
339+
});
340+
271341
});
272342

273343
});

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

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone
8383
this.advancedSearch.emit(filters);
8484
}
8585

86+
private applyDisclaimerLabelValue(field: any, filterValue: any) {
87+
const values = Array.isArray(filterValue) ? filterValue : [ filterValue ];
88+
89+
const labels = values.map(value => {
90+
const filteredField = field.options.find(option => option.value === value);
91+
92+
return filteredField.label || filteredField.value;
93+
});
94+
95+
return labels.join(', ');
96+
}
97+
8698
private formatDate(date: string) {
8799
const year = parseInt(date.substr(0, 4), 10);
88100
const month = parseInt(date.substr(5, 2), 10);
@@ -95,22 +107,36 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone
95107
return fields.find((field: PoDynamicFormField) => field.property === fieldName);
96108
}
97109

110+
private getFilterValueToDisclaimer(field: any, value: any) {
111+
112+
if (field.type === PoDynamicFieldType.Date) {
113+
return this.formatDate(value);
114+
}
115+
116+
if (field.options) {
117+
return this.applyDisclaimerLabelValue(field, value);
118+
}
119+
120+
return value;
121+
}
122+
98123
private onChangeDisclaimerGroup(disclaimers) {
99124
this.changeDisclaimersEnabled ? this.changeDisclaimers.emit(disclaimers) : this.changeDisclaimersEnabled = true;
100125
}
101126

102127
private setDisclaimers(filters) {
103128
const disclaimers = [];
129+
const properties = Object.keys(filters);
104130

105-
Object.keys(filters).forEach(filter => {
106-
const field = this.getFieldByProperty(this.filters, filter);
131+
properties.forEach(property => {
132+
const field = this.getFieldByProperty(this.filters, property);
107133
const label = field.label || capitalizeFirstLetter(field.property);
108-
const value = field.type === PoDynamicFieldType.Date ? this.formatDate(filters[filter]) : filters[filter];
134+
const value = filters[property];
109135

110136
disclaimers.push({
111-
label: `${label}: ${value}`,
112-
property: filter,
113-
value: filters[filter]
137+
label: `${label}: ${this.getFilterValueToDisclaimer(field, value)}`,
138+
property,
139+
value
114140
});
115141
});
116142

projects/templates/src/lib/components/po-page-dynamic-search/samples/sample-po-page-dynamic-search-hiring-processes/sample-po-page-dynamic-search-hiring-processes.component.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class SamplePoPageDynamicSearchHiringProcessesComponent implements OnInit
3939
{ property: 'hireStatus', label: 'Hire Status', options: this.statusOptions, gridColumns: 6 },
4040
{ property: 'name', gridColumns: 6 },
4141
{ property: 'city', gridColumns: 6 },
42-
{ property: 'jobDescription', label: 'Job Description', options: this.jobDescriptionOptions, gridColumns: 6 },
42+
{ property: 'job', label: 'Job Description', options: this.jobDescriptionOptions, gridColumns: 6 },
4343
];
4444

4545
constructor(
@@ -90,18 +90,22 @@ export class SamplePoPageDynamicSearchHiringProcessesComponent implements OnInit
9090
}
9191

9292
private hireCandidate() {
93+
const hired = '1';
94+
const progress = '2';
95+
const canceled = '3';
96+
9397
const selectedCandidate = this.hiringProcesses.find(candidate => candidate['$selected']);
9498
switch (selectedCandidate['hireStatus']) {
95-
case 'progress':
99+
case progress:
96100
selectedCandidate['hireStatus'] = 'hired';
97101
this.poNotification.success('Hired candidate!');
98102
break;
99103

100-
case 'hired':
104+
case hired:
101105
this.poNotification.warning('This candidate has already been hired.');
102106
break;
103107

104-
case 'canceled':
108+
case canceled:
105109
this.poNotification.error('This candidate has already been disqualified.');
106110
break;
107111
}

projects/templates/src/lib/components/po-page-dynamic-search/samples/sample-po-page-dynamic-search-hiring-processes/sample-po-page-dynamic-search-hiring-processes.service.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ export class SamplePoPageDynamicSearchHiringProcessesService {
2020
getColumns(): Array<PoTableColumn> {
2121
return [
2222
{ property: 'hireStatus', label: 'Status', type: 'subtitle', subtitles: [
23-
{ value: 'hired', color: 'success', label: 'Hired', content: '1' },
24-
{ value: 'progress', color: 'warning', label: 'Progress', content: '2' },
25-
{ value: 'canceled', color: 'danger', label: 'Canceled', content: '3' }
23+
{ value: '1', color: 'success', label: 'Hired', content: '1' },
24+
{ value: '2', color: 'warning', label: 'Progress', content: '2' },
25+
{ value: '3', color: 'danger', label: 'Canceled', content: '3' }
2626
]},
2727
{ property: 'idCard', label: 'Identity card', type: 'string' },
2828
{ property: 'name', label: 'Name'},
@@ -34,34 +34,36 @@ export class SamplePoPageDynamicSearchHiringProcessesService {
3434

3535
getHireStatus() {
3636
return [
37-
{ value: 'hired', label: 'Hired' },
38-
{ value: 'progress', label: 'Progress' },
39-
{ value: 'canceled', label: 'Canceled'}
37+
{ value: '1', label: 'Hired' },
38+
{ value: '2', label: 'Progress' },
39+
{ value: '3', label: 'Canceled'}
4040
];
4141
}
4242

4343
getItems() {
4444
return [
45-
{ hireStatus: 'hired', name: 'James Johnson', city: 'Ontario', age: 24, idCard: 'AB34lxi90', jobDescription: 'Systems Analyst' },
46-
{ hireStatus: 'progress', name: 'Brian Brown', city: 'Buffalo', age: 23, idCard: 'HG56lds54', jobDescription: 'Trainee' },
47-
{ hireStatus: 'canceled', name: 'Mary Davis', city: 'Albany', age: 31, idCard: 'DF23cfr65', jobDescription: 'Programmer' },
48-
{ hireStatus: 'hired', name: 'Margaret Garcia', city: 'New York', age: 29, idCard: 'GF45fgh34', jobDescription: 'Web developer' },
49-
{ hireStatus: 'hired', name: 'Emma Hall', city: 'Ontario', age: 34, idCard: 'RF76jut21', jobDescription: 'Recruiter' },
50-
{ hireStatus: 'progress', name: 'Lucas Clark', city: 'Utica', age: 32, idCard: 'HY21kgu65', jobDescription: 'Consultant' },
51-
{ hireStatus: 'hired', name: 'Ella Scott', city: 'Ontario', age: 24, idCard: 'UL78flg68', jobDescription: 'DBA' },
52-
{ hireStatus: 'progress', name: 'Chloe Walker', city: 'Albany', age: 29, idCard: 'JH12oli98', jobDescription: 'Programmer' },
45+
{ hireStatus: '1', name: 'James Johnson', city: 'Ontario', age: 24, idCard: 'AB34lxi90', job: 'abc',
46+
jobDescription: 'Systems Analyst' },
47+
{ hireStatus: '2', name: 'Brian Brown', city: 'Buffalo', age: 23, idCard: 'HG56lds54', job: 'def', jobDescription: 'Trainee' },
48+
{ hireStatus: '3', name: 'Mary Davis', city: 'Albany', age: 31, idCard: 'DF23cfr65', job: 'ghi', jobDescription: 'Programmer' },
49+
{ hireStatus: '1', name: 'Margaret Garcia', city: 'New York', age: 29, idCard: 'GF45fgh34', job: 'jkl',
50+
jobDescription: 'Web developer' },
51+
{ hireStatus: '1', name: 'Emma Hall', city: 'Ontario', age: 34, idCard: 'RF76jut21', job: 'mno', jobDescription: 'Recruiter' },
52+
{ hireStatus: '2', name: 'Lucas Clark', city: 'Utica', age: 32, idCard: 'HY21kgu65', job: 'pqr', jobDescription: 'Consultant' },
53+
{ hireStatus: '1', name: 'Ella Scott', city: 'Ontario', age: 24, idCard: 'UL78flg68', job: 'stu', jobDescription: 'DBA' },
54+
{ hireStatus: '2', name: 'Chloe Walker', city: 'Albany', age: 29, idCard: 'JH12oli98', job: 'ghi', jobDescription: 'Programmer' }
5355
];
5456
}
5557

5658
getJobs() {
5759
return [
58-
{ value: 'Systems Analyst', label: 'Systems Analyst' },
59-
{ value: 'Trainee', label: 'Trainee' },
60-
{ value: 'Programmer', label: 'Programmer'},
61-
{ value: 'Web Developer', label: 'Web developer'},
62-
{ value: 'Recruiter', label: 'Recruiter'},
63-
{ value: 'Consultant', label: 'Consultant'},
64-
{ value: 'DBA', label: 'DBA'}
60+
{ value: 'abc', label: 'Systems Analyst' },
61+
{ value: 'def', label: 'Trainee' },
62+
{ value: 'ghi', label: 'Programmer'},
63+
{ value: 'jkl', label: 'Web developer'},
64+
{ value: 'mno', label: 'Recruiter'},
65+
{ value: 'pqr', label: 'Consultant'},
66+
{ value: 'stu', label: 'DBA'}
6567
];
6668
}
6769

0 commit comments

Comments
 (0)