File

projects/cobbler-frontend/src/app/utils.ts

Index

Methods

Methods

Static deduplicateDirtyValues
deduplicateDirtyValues(formGroup: FormGroup, values: any)
Parameters :
Name Type Optional
formGroup FormGroup No
values any No
Returns : Map<string, any>
Static fillupItemFormGroup
fillupItemFormGroup(readonlyFormGroup: FormGroup, editableFormGroup: FormGroup, readonlyMetadata: Array<CobblerInputData>, editableMetadata: Array<CobblerInputData>)
Parameters :
Name Type Optional
readonlyFormGroup FormGroup No
editableFormGroup FormGroup No
readonlyMetadata Array<CobblerInputData> No
editableMetadata Array<CobblerInputData> No
Returns : void
Static fillupSingleFormGroup
fillupSingleFormGroup(formGroup: FormGroup, metadata: Array<CobblerInputData>)
Parameters :
Name Type Optional
formGroup FormGroup No
metadata Array<CobblerInputData> No
Returns : void
Static floatToDate
floatToDate(value: number)
Parameters :
Name Type Optional
value number No
Returns : Date
Static getDirtyValues
getDirtyValues(form: any)
Parameters :
Name Type Optional
form any No
Returns : any
Static patchFormGroupInherited
patchFormGroupInherited(formGroup: FormGroup, attribute: Type | string, attributeName: string, defaultValue: Type)
Type parameters :
  • Type
Parameters :
Name Type Optional
formGroup FormGroup No
attribute Type | string No
attributeName string No
defaultValue Type No
Returns : void
Static toHTML
toHTML(input: string)
Parameters :
Name Type Optional
input string No
Returns : any
import { FormControl, FormGroup } from '@angular/forms';

export enum CobblerInputChoices {
  TEXT = 'text',
  NUMBER = 'number',
  CHECKBOX = 'checkbox',
  MULTI_SELECT = 'multi-select',
  KEY_VALUE = 'key-value',
}

export interface CobblerInputData {
  formControlName: string;
  inputType: CobblerInputChoices;
  label: string;
  disabled: boolean;
  readonly: boolean;
  defaultValue: any;
  inherited: boolean;
}

export default class Utils {
  static toHTML(input: string): any {
    return new DOMParser().parseFromString(input, 'text/html').documentElement
      .textContent;
  }

  static getDirtyValues(form: any): any {
    // https://stackoverflow.com/a/53613855
    let dirtyValues = {};

    Object.keys(form.controls).forEach((key) => {
      let currentControl = form.controls[key];

      if (currentControl.dirty) {
        if (currentControl.controls)
          dirtyValues[key] = this.getDirtyValues(currentControl);
        else dirtyValues[key] = currentControl.value;
      }
    });

    return dirtyValues;
  }

  static deduplicateDirtyValues(
    formGroup: FormGroup,
    values: any,
  ): Map<string, any> {
    let result = new Map<string, any>();
    for (const [key, value] of Object.entries(values)) {
      if (key.endsWith('_inherited')) {
        const nonInheritKey = key.slice(0, key.length - 10);
        if (value) {
          result.set(nonInheritKey, '<<inherit>>');
        } else {
          // Key might or might not be in the dirty map
          result.set(nonInheritKey, formGroup.get(nonInheritKey).value);
        }
      } else {
        result.set(key, value);
      }
    }
    return result;
  }

  static floatToDate(value: number): Date {
    return new Date(value * 1000);
  }

  // Method to patch a FormGroup for an inherited attribute. This is used on the item details pages.
  static patchFormGroupInherited<Type>(
    formGroup: FormGroup,
    attribute: Type | string,
    attributeName: string,
    defaultValue: Type,
  ): void {
    if (typeof attribute === 'string') {
      formGroup.patchValue({
        [`${attributeName}`]: defaultValue,
        [`${attributeName}_inherited`]: true,
      });
    } else {
      formGroup.patchValue({
        [`${attributeName}`]: attribute,
        [`${attributeName}_inherited`]: false,
      });
    }
  }

  static fillupSingleFormGroup(
    formGroup: FormGroup,
    metadata: Array<CobblerInputData>,
  ): void {
    metadata.forEach((value) => {
      formGroup.addControl(
        value.formControlName,
        new FormControl({
          value: value.defaultValue,
          disabled: value.disabled,
        }),
      );
      if (value.inherited) {
        formGroup.addControl(
          value.formControlName + '_inherited',
          new FormControl({
            value: false,
            disabled: value.disabled,
          }),
        );
      }
    });
  }

  static fillupItemFormGroup(
    readonlyFormGroup: FormGroup,
    editableFormGroup: FormGroup,
    readonlyMetadata: Array<CobblerInputData>,
    editableMetadata: Array<CobblerInputData>,
  ): void {
    this.fillupSingleFormGroup(readonlyFormGroup, readonlyMetadata);
    this.fillupSingleFormGroup(editableFormGroup, editableMetadata);
  }
}

results matching ""

    No results matching ""