Просмотр исходного кода

fix(admin-ui): Fix edge case errors when facet value detail editing

Michael Bromley 3 лет назад
Родитель
Сommit
3e56f0670b

+ 8 - 8
packages/admin-ui/src/lib/catalog/src/components/facet-detail/facet-detail.component.ts

@@ -304,29 +304,29 @@ export class FacetDetailComponent
 
         const currentValuesFormArray = this.detailForm.get('values') as FormArray;
         this.values = [...facet.values];
-        facet.values.forEach((value, i) => {
+        facet.values.forEach(value => {
             const valueTranslation = findTranslation(value, languageCode);
             const group = {
                 id: value.id,
                 code: value.code,
                 name: valueTranslation ? valueTranslation.name : '',
             };
-            const valueControl = currentValuesFormArray.at(i);
+            let valueControl = currentValuesFormArray.controls.find(
+                control => control.value.id === value.id,
+            ) as FormGroup | undefined;
             if (valueControl) {
                 valueControl.get('id')?.setValue(group.id);
                 valueControl.get('code')?.setValue(group.code);
                 valueControl.get('name')?.setValue(group.name);
             } else {
-                currentValuesFormArray.insert(i, this.formBuilder.group(group));
+                valueControl = this.formBuilder.group(group);
+                currentValuesFormArray.push(valueControl);
             }
             if (this.customValueFields.length) {
-                let customValueFieldsGroup = this.detailForm.get(['values', i, 'customFields']) as FormGroup;
+                let customValueFieldsGroup = valueControl.get(['customFields']) as FormGroup | undefined;
                 if (!customValueFieldsGroup) {
                     customValueFieldsGroup = new FormGroup({});
-                    (this.detailForm.get(['values', i]) as FormGroup).addControl(
-                        'customFields',
-                        customValueFieldsGroup,
-                    );
+                    valueControl.addControl('customFields', customValueFieldsGroup);
                 }
 
                 if (customValueFieldsGroup) {