private buildFormGroup()

in src/app/customers/form/customFields/custom-fields.component.ts [63:123]


  private buildFormGroup(): FormGroup {
    const group: FormGroup = this.formBuilder.group({});

    if (!this._formData || !this.catalog) {
      return group;
    }

    for (const field of this.catalog.fields) {
      const value = this.findValue(field.identifier);

      const valueString: string = value && value.value ? value.value : '';

      const formControl: FormControl = new FormControl({value: valueString, disabled: false});

      const validators: ValidatorFn[] = [];

      switch (field.dataType) {
        case 'TEXT': {
          validators.push(...this.buildTextValidators(field));
          break;
        }

        case 'NUMBER': {
          formControl.setValue(valueString.length ? Number(valueString) : undefined);
          validators.push(...this.buildNumberValidators(field));
          break;
        }

        case 'DATE': {
          formControl.setValue(valueString.length ? valueString.substring(0, 10) : '');
          break;
        }

        case 'SINGLE_SELECTION': {
          formControl.setValue(valueString.length ? Number(valueString) : undefined);
          break;
        }

        case 'MULTI_SELECTION': {
          const optionValues = valueString.length ? valueString.split(',').map(optionValue => Number(optionValue)) : [];
          const foundOptions = field.options
            .filter((option: Option) => optionValues.indexOf(option.value) > -1);
          formControl.setValue(foundOptions);
          break;
        }

        default:
          break;
      }

      if (field.mandatory) {
        validators.push(Validators.required);
      }

      formControl.setValidators(validators);

      group.addControl(field.identifier, formControl);
    }

    return group;
  }