Commit f044509b authored by Michail Tzanatos's avatar Michail Tzanatos
Browse files

checkbox bug fix

parent 4606e4a0
Loading
Loading
Loading
Loading
+48 −46
Original line number Diff line number Diff line
@@ -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"
@@ -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);
          });
        }
      },
@@ -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();
  }
@@ -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();

  }

  // ------------------------------------------------------------------
@@ -298,7 +301,6 @@ export class EditProductOfferingsComponent implements OnInit {
        statusReason: '',
        productSpecification: productSpecRef,

        // Auto-mappings
        isBundle: linkedSpec?.isBundle || false,
        attachment: linkedSpec?.attachment || [],
        
@@ -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;