Skip to content

Commit

Permalink
fix(dynamic-view): correção campos duplicados
Browse files Browse the repository at this point in the history
Alterado local para adição do order para ignorar campos sem
valores ou sem visibilidade.

fixes DTHFUI-8512
  • Loading branch information
bruno-severino authored and pedrodominguesp committed Mar 21, 2024
1 parent e5f46a2 commit b4ee54a
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,129 @@ describe('PoDynamicViewBaseComponent:', () => {
})
));

it('should return ordering field if have duplicated order', () => {
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 1 },
{ property: 'test 2', order: 2 },
{ property: 'test 3' },
{ property: 'test 4' },
{ property: 'test 5' }
];

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 1 },
{ property: 'test 2', order: 2 },
{ property: 'test 3', order: 3 },
{ property: 'test 4', order: 4 },
{ property: 'test 5', order: 5 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();

expectArraysSameOrdering(newFields, expectedFields);
});

it('should return ordering field with the order', () => {
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{ property: 'test 0' },
{ property: 'test 2' },
{ property: 'test 3' },
{ property: 'test 4' },
{ property: 'test 5' }
];

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();

expectArraysSameOrdering(newFields, expectedFields);
});

it('should return ordering fields with property searchService using service type with delay', fakeAsync(
inject([DynamicViewService], (dynamicService: DynamicViewService) => {
component.service = dynamicService;
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{ property: 'test 0', searchService: new TestServiceWithDelay(), fieldLabel: 'name', fieldValue: 'id' },
{ property: 'test 2', searchService: 'url.com' },
{ property: 'test 3', searchService: 'url.com' },
{ property: 'test 4' },
{ property: 'test 5' }
];
component.value[fields[1].property] = '123';
component.value[fields[2].property] = [{ test: 123 }];
component.value[fields[3].property] = { test: 123 };

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();
tick(2000);

expectArraysSameOrdering(newFields, expectedFields);
})
));

it('should return ordering fields with property optionsService using service type with delay', fakeAsync(
inject([DynamicViewService], (dynamicService: DynamicViewService) => {
component.service = dynamicService;
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{
property: 'test 0',
optionsService: new TestComboServiceWithDelay(),
fieldLabel: 'name',
fieldValue: 'id'
},
{ property: 'test 2', searchService: 'url.com' },
{ property: 'test 3', searchService: 'url.com' },
{ property: 'test 4' },
{ property: 'test 5' }
];
component.value[fields[1].property] = '123';
component.value[fields[2].property] = [{ test: 123 }];
component.value[fields[3].property] = { test: 123 };

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();
tick(2000);

expectArraysSameOrdering(newFields, expectedFields);
})
));

it('should process fields with optionsService', () => {
component.fields = [{ property: 'category', optionsService: 'url.optionsService.com' }];
component.value = { 'category': '123' };
Expand Down Expand Up @@ -456,98 +579,6 @@ describe('PoDynamicViewBaseComponent:', () => {
});
});

it('should return ordering field with the order', () => {
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{ property: 'test 0' },
{ property: 'test 2' },
{ property: 'test 3' },
{ property: 'test 4' },
{ property: 'test 5' }
];

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();

expectArraysSameOrdering(newFields, expectedFields);
});

it('should return ordering fields with property searchService using service type with delay', fakeAsync(
inject([DynamicViewService], (dynamicService: DynamicViewService) => {
component.service = dynamicService;
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{ property: 'test 0', searchService: new TestServiceWithDelay(), fieldLabel: 'name', fieldValue: 'id' },
{ property: 'test 2', searchService: 'url.com' },
{ property: 'test 3', searchService: 'url.com' },
{ property: 'test 4' },
{ property: 'test 5' }
];
component.value[fields[1].property] = '123';
component.value[fields[2].property] = [{ test: 123 }];
component.value[fields[3].property] = { test: 123 };

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();
tick(2000);

expectArraysSameOrdering(newFields, expectedFields);
})
));

it('should return ordering fields with property optionsService using service type with delay', fakeAsync(
inject([DynamicViewService], (dynamicService: DynamicViewService) => {
component.service = dynamicService;
const fields: Array<PoDynamicViewField> = [
{ property: 'test 1' },
{ property: 'test 0', optionsService: new TestComboServiceWithDelay(), fieldLabel: 'name', fieldValue: 'id' },
{ property: 'test 2', searchService: 'url.com' },
{ property: 'test 3', searchService: 'url.com' },
{ property: 'test 4' },
{ property: 'test 5' }
];
component.value[fields[1].property] = '123';
component.value[fields[2].property] = [{ test: 123 }];
component.value[fields[3].property] = { test: 123 };

const expectedFields = [
{ property: 'test 1', order: 1 },
{ property: 'test 0', order: 2 },
{ property: 'test 2', order: 3 },
{ property: 'test 3', order: 4 },
{ property: 'test 4', order: 5 },
{ property: 'test 5', order: 6 }
];

component.fields = [...fields];

const newFields = component['getConfiguredFields']();
tick(2000);

expectArraysSameOrdering(newFields, expectedFields);
})
));

it('searchById: should return null if value is empty', done => {
const value = '';
const field: any = { property: 'test' };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,20 +138,16 @@ export class PoDynamicViewBaseComponent {
protected multiselectFilterService: PoMultiselectFilterService
) {}

/**
* Verifica se já existe algum outro campo com a order da posição dele no array,
* se houver ele adiciona +1 até achar uma proxima posição
*/
protected getOrdertoField(field: PoDynamicViewField, index: number) {
protected getFieldOrder(field: PoDynamicViewField, index: number) {
const position = index + 1;
return this.fields.findIndex(e => e.order === position) > -1 ? this.getOrdertoField(field, position) : position;
return this.fields.findIndex(e => e.order === position) > -1 ? this.getFieldOrder(field, position) : position;
}

protected getConfiguredFields(useSearchService = true) {
const newFields = [];

this.fields.forEach((field, index) => {
field.order = field.order || this.getOrdertoField(field, index);
field.order = field.order || this.getFieldOrder(field, index);

if (!isVisibleField(field)) {
return;
Expand All @@ -167,8 +163,8 @@ export class PoDynamicViewBaseComponent {
(!Array.isArray(this.value[field.property]) && this.value[field.property] && useSearchService);

if (hasValue) {
const tempField = this.returnValues({ ...field }, '');
newFields.push(this.createField(tempField));
const _field = this.returnValues({ ...field }, '');
newFields.push(_field);

if (field.searchService) {
if (typeof field.searchService === 'object') {
Expand All @@ -195,8 +191,7 @@ export class PoDynamicViewBaseComponent {
}
}

const indexUpdated = field.order;
this.createFieldWithService(field, newFields, indexUpdated);
this.createFieldWithService(field, newFields, _field);
}
});

Expand Down Expand Up @@ -240,13 +235,14 @@ export class PoDynamicViewBaseComponent {
return this.returnValues(field, value);
}

private createFieldWithService(field: PoDynamicViewField, newFields?, index?) {
private createFieldWithService(field: PoDynamicViewField, newFields?, oldField?) {
const property = field.property;

this.searchById(this.value[property], field).subscribe(response => {
const value = response;
const allValues = this.returnValues(field, value);
newFields.splice(index - 1, 1, allValues);
const oldFieldIndex = newFields.indexOf(newFields.find(field => field === oldField));
newFields.splice(oldFieldIndex, 1, allValues);
sortFields(newFields);
});
}
Expand Down

0 comments on commit b4ee54a

Please sign in to comment.