Loading src/app/p_product/admin/productCatalogManagement/edit-product-offerings/edit-product-offerings.component.ts +48 −46 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ export class EditProductOfferingsComponent implements OnInit { availableSpecCharacteristics: ProductSpecificationCharacteristicRes[] = []; selectedCharacteristics: Set<string> = new Set(); selectedCharValues: Map<string, Set<any>> = new Map(); selectedCharValues: Map<string, string[]> = new Map(); listItems = ["Main Properties", "Linked Product Specification Characteristics"] activeListItem = "Main Properties" Loading Loading @@ -139,14 +139,27 @@ export class EditProductOfferingsComponent implements OnInit { } if (isInitialLoad && this.offering.prodSpecCharValueUse) { this.offering.prodSpecCharValueUse.forEach(charUse => { this.selectedCharacteristics.add(charUse.name); this.offering.prodSpecCharValueUse.forEach(offeringChar => { this.selectedCharacteristics.add(offeringChar.name); const valueSet = new Set<any>(); if (charUse.productSpecCharacteristicValue) { charUse.productSpecCharacteristicValue.forEach(v => valueSet.add(v.value)); const specCharDef = this.availableSpecCharacteristics.find(c => c.name === offeringChar.name); const selectedUUIDs: string[] = []; if (offeringChar.productSpecCharacteristicValue && specCharDef) { offeringChar.productSpecCharacteristicValue.forEach(savedVal => { const matchingSpecVal = specCharDef.productSpecCharacteristicValue?.find(specVal => { const sameValue = specVal.value?.value === savedVal.value?.value; const sameAlias = specVal.value?.alias === savedVal.value?.alias; return sameValue && sameAlias; }); if (matchingSpecVal && matchingSpecVal.uuid) { selectedUUIDs.push(matchingSpecVal.uuid); } this.selectedCharValues.set(charUse.name, valueSet); }); } this.selectedCharValues.set(offeringChar.name, selectedUUIDs); }); } }, Loading Loading @@ -195,44 +208,37 @@ export class EditProductOfferingsComponent implements OnInit { } isValueSelected(char: ProductSpecificationCharacteristicRes, val: any): boolean { if (!val || !val.value) return false; // Get the Set of selected objects for this characteristic name const selectedSet = this.selectedCharValues.get(char.name); if (!selectedSet) return false; for (const storedObj of selectedSet) { if (storedObj.alias === val.value.alias && storedObj.value === val.value.value) { return true; } } if (!val || !val.uuid) return false; return false; const selectedUUIDs = this.selectedCharValues.get(char.name); return selectedUUIDs ? selectedUUIDs.includes(val.uuid) : false; } getSelectedValuesCount(char: ProductSpecificationCharacteristicRes): number { const selectedSet = this.selectedCharValues.get(char.name); return selectedSet ? selectedSet.size : 0; const selectedArray = this.selectedCharValues.get(char.name); return selectedArray ? selectedArray.length : 0; } onValueToggle(char: ProductSpecificationCharacteristicRes, val: any, event: MatCheckboxChange) { if (!val || !val.value) return; if (!val || !val.uuid) return; let selectedSet = this.selectedCharValues.get(char.name); if (!selectedSet) { selectedSet = new Set<any>(); this.selectedCharValues.set(char.name, selectedSet); let selectedUUIDs = this.selectedCharValues.get(char.name); if (!selectedUUIDs) { selectedUUIDs = []; this.selectedCharValues.set(char.name, selectedUUIDs); } console.log(selectedSet); const valueToStore = val.value; const uuid = val.uuid; if (event.checked) { selectedSet.add(valueToStore); if (!selectedUUIDs.includes(uuid)) { selectedUUIDs.push(uuid); } } else { selectedSet.delete(valueToStore); const index = selectedUUIDs.indexOf(uuid); if (index > -1) { selectedUUIDs.splice(index, 1); } } this.editForm.markAsDirty(); } Loading @@ -252,27 +258,24 @@ export class EditProductOfferingsComponent implements OnInit { } selectAllValues(char: ProductSpecificationCharacteristicRes) { const allValues = new Set<any>(); const allUUIDs: string[] = []; if (char.productSpecCharacteristicValue && Array.isArray(char.productSpecCharacteristicValue)) { if (char.productSpecCharacteristicValue) { char.productSpecCharacteristicValue.forEach(v => { if (v && v.value) { allValues.add(v.value); if (v.uuid) { allUUIDs.push(v.uuid); } }); } this.selectedCharValues.set(char.name, allValues); this.selectedCharValues.set(char.name, allUUIDs); this.editForm.markAsDirty(); } deselectAllValues(char: ProductSpecificationCharacteristicRes) { const selectedSet = this.selectedCharValues.get(char.name); if (selectedSet) { selectedSet.clear(); } else { this.selectedCharValues.set(char.name, new Set<any>()); } this.selectedCharValues.set(char.name, []); this.editForm.markAsDirty(); } // ------------------------------------------------------------------ Loading @@ -298,7 +301,6 @@ export class EditProductOfferingsComponent implements OnInit { statusReason: '', productSpecification: productSpecRef, // Auto-mappings isBundle: linkedSpec?.isBundle || false, attachment: linkedSpec?.attachment || [], Loading Loading @@ -407,11 +409,11 @@ export class EditProductOfferingsComponent implements OnInit { let mappedValues = []; if (char.productSpecCharacteristicValue && char.productSpecCharacteristicValue.length > 0) { const selectedSet = this.selectedCharValues.get(char.name); const selectedUUIDs = this.selectedCharValues.get(char.name); mappedValues = char.productSpecCharacteristicValue .filter(val => { return val.value && selectedSet && selectedSet.has(val.value); return val.uuid && selectedUUIDs && selectedUUIDs.includes(val.uuid); }) .map(val => { const { uuid, ...rest } = val as any; Loading Loading
src/app/p_product/admin/productCatalogManagement/edit-product-offerings/edit-product-offerings.component.ts +48 −46 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ export class EditProductOfferingsComponent implements OnInit { availableSpecCharacteristics: ProductSpecificationCharacteristicRes[] = []; selectedCharacteristics: Set<string> = new Set(); selectedCharValues: Map<string, Set<any>> = new Map(); selectedCharValues: Map<string, string[]> = new Map(); listItems = ["Main Properties", "Linked Product Specification Characteristics"] activeListItem = "Main Properties" Loading Loading @@ -139,14 +139,27 @@ export class EditProductOfferingsComponent implements OnInit { } if (isInitialLoad && this.offering.prodSpecCharValueUse) { this.offering.prodSpecCharValueUse.forEach(charUse => { this.selectedCharacteristics.add(charUse.name); this.offering.prodSpecCharValueUse.forEach(offeringChar => { this.selectedCharacteristics.add(offeringChar.name); const valueSet = new Set<any>(); if (charUse.productSpecCharacteristicValue) { charUse.productSpecCharacteristicValue.forEach(v => valueSet.add(v.value)); const specCharDef = this.availableSpecCharacteristics.find(c => c.name === offeringChar.name); const selectedUUIDs: string[] = []; if (offeringChar.productSpecCharacteristicValue && specCharDef) { offeringChar.productSpecCharacteristicValue.forEach(savedVal => { const matchingSpecVal = specCharDef.productSpecCharacteristicValue?.find(specVal => { const sameValue = specVal.value?.value === savedVal.value?.value; const sameAlias = specVal.value?.alias === savedVal.value?.alias; return sameValue && sameAlias; }); if (matchingSpecVal && matchingSpecVal.uuid) { selectedUUIDs.push(matchingSpecVal.uuid); } this.selectedCharValues.set(charUse.name, valueSet); }); } this.selectedCharValues.set(offeringChar.name, selectedUUIDs); }); } }, Loading Loading @@ -195,44 +208,37 @@ export class EditProductOfferingsComponent implements OnInit { } isValueSelected(char: ProductSpecificationCharacteristicRes, val: any): boolean { if (!val || !val.value) return false; // Get the Set of selected objects for this characteristic name const selectedSet = this.selectedCharValues.get(char.name); if (!selectedSet) return false; for (const storedObj of selectedSet) { if (storedObj.alias === val.value.alias && storedObj.value === val.value.value) { return true; } } if (!val || !val.uuid) return false; return false; const selectedUUIDs = this.selectedCharValues.get(char.name); return selectedUUIDs ? selectedUUIDs.includes(val.uuid) : false; } getSelectedValuesCount(char: ProductSpecificationCharacteristicRes): number { const selectedSet = this.selectedCharValues.get(char.name); return selectedSet ? selectedSet.size : 0; const selectedArray = this.selectedCharValues.get(char.name); return selectedArray ? selectedArray.length : 0; } onValueToggle(char: ProductSpecificationCharacteristicRes, val: any, event: MatCheckboxChange) { if (!val || !val.value) return; if (!val || !val.uuid) return; let selectedSet = this.selectedCharValues.get(char.name); if (!selectedSet) { selectedSet = new Set<any>(); this.selectedCharValues.set(char.name, selectedSet); let selectedUUIDs = this.selectedCharValues.get(char.name); if (!selectedUUIDs) { selectedUUIDs = []; this.selectedCharValues.set(char.name, selectedUUIDs); } console.log(selectedSet); const valueToStore = val.value; const uuid = val.uuid; if (event.checked) { selectedSet.add(valueToStore); if (!selectedUUIDs.includes(uuid)) { selectedUUIDs.push(uuid); } } else { selectedSet.delete(valueToStore); const index = selectedUUIDs.indexOf(uuid); if (index > -1) { selectedUUIDs.splice(index, 1); } } this.editForm.markAsDirty(); } Loading @@ -252,27 +258,24 @@ export class EditProductOfferingsComponent implements OnInit { } selectAllValues(char: ProductSpecificationCharacteristicRes) { const allValues = new Set<any>(); const allUUIDs: string[] = []; if (char.productSpecCharacteristicValue && Array.isArray(char.productSpecCharacteristicValue)) { if (char.productSpecCharacteristicValue) { char.productSpecCharacteristicValue.forEach(v => { if (v && v.value) { allValues.add(v.value); if (v.uuid) { allUUIDs.push(v.uuid); } }); } this.selectedCharValues.set(char.name, allValues); this.selectedCharValues.set(char.name, allUUIDs); this.editForm.markAsDirty(); } deselectAllValues(char: ProductSpecificationCharacteristicRes) { const selectedSet = this.selectedCharValues.get(char.name); if (selectedSet) { selectedSet.clear(); } else { this.selectedCharValues.set(char.name, new Set<any>()); } this.selectedCharValues.set(char.name, []); this.editForm.markAsDirty(); } // ------------------------------------------------------------------ Loading @@ -298,7 +301,6 @@ export class EditProductOfferingsComponent implements OnInit { statusReason: '', productSpecification: productSpecRef, // Auto-mappings isBundle: linkedSpec?.isBundle || false, attachment: linkedSpec?.attachment || [], Loading Loading @@ -407,11 +409,11 @@ export class EditProductOfferingsComponent implements OnInit { let mappedValues = []; if (char.productSpecCharacteristicValue && char.productSpecCharacteristicValue.length > 0) { const selectedSet = this.selectedCharValues.get(char.name); const selectedUUIDs = this.selectedCharValues.get(char.name); mappedValues = char.productSpecCharacteristicValue .filter(val => { return val.value && selectedSet && selectedSet.has(val.value); return val.uuid && selectedUUIDs && selectedUUIDs.includes(val.uuid); }) .map(val => { const { uuid, ...rest } = val as any; Loading