File

src/app/core/basic-datatypes/configurable-enum/configurable-enum-datatype/configurable-enum.datatype.ts

Extends

DiscreteDatatype

Index

Properties
Methods

Methods

Public transformToDatabaseFormat
transformToDatabaseFormat(value: ConfigurableEnumValue)
Inherited from DefaultDatatype
Defined in DefaultDatatype:24

transforms Objects of InteractionType to strings to save in DB

Parameters :
Name Type Optional Description
value ConfigurableEnumValue No

Object to be saved as specified in config file; e.g. {id: 'CALL', label:'Phone Call', color:'#FFFFFF'}

Returns : string
Public transformToObjectFormat
transformToObjectFormat(value: string, schemaField: EntitySchemaField)
Inherited from DefaultDatatype
Defined in DefaultDatatype:33

transforms saved strings from the DB to Objects of InteractionType

Parameters :
Name Type Optional Description
value string No

string from database as specified in config file; e.g. 'PHONE_CALL'

schemaField EntitySchemaField No
importIncompleteAdditionalConfigBadge
importIncompleteAdditionalConfigBadge(col: ColumnMapping)
Inherited from DefaultDatatype
Defined in DefaultDatatype:37
Parameters :
Name Type Optional
col ColumnMapping No
Returns : string
Async importMapFunction
importMapFunction(val, schemaField: EntitySchemaField, additional: literal type)
Inherited from DefaultDatatype
Defined in DefaultDatatype:29
Parameters :
Name Type Optional
val No
schemaField EntitySchemaField No
additional literal type No
Returns : unknown
Async anonymize
anonymize(value: EntityType, schemaField: EntitySchemaField, parent: any)
Inherited from DefaultDatatype

(Partially) anonymize to "retain-anonymized" for reporting purposes without personal identifiable information.

Parameters :
Name Type Optional Description
value EntityType No

The original value to be anonymized

schemaField EntitySchemaField No
parent any No
Returns : Promise<any>

Properties

Static dataType
Type : string
Default value : "configurable-enum"
Inherited from DefaultDatatype
Defined in DefaultDatatype:14
Public Readonly editComponent
Type : string
Default value : "EditConfigurableEnum"
Inherited from DefaultDatatype
Defined in DefaultDatatype:18
Static label
Type : string
Default value : $localize`:datatype-label:dropdown option`
Inherited from DefaultDatatype
Defined in DefaultDatatype:15
Public Readonly viewComponent
Type : string
Default value : "DisplayConfigurableEnum"
Inherited from DefaultDatatype
Defined in DefaultDatatype:17
importConfigComponent
Type : string
Default value : "DiscreteImportConfig"
Inherited from DefaultDatatype
Defined in DefaultDatatype:15
Readonly importAllowsMultiMapping
Type : boolean
Default value : false
Inherited from DefaultDatatype
Defined in DefaultDatatype:48

Whether this datatype allows multiple values to be mapped to the same entity field during import.

import { EntitySchemaField } from "../../../entity/schema/entity-schema-field";
import { ConfigurableEnumService } from "../configurable-enum.service";
import { Injectable, inject } from "@angular/core";
import { DiscreteDatatype } from "../../discrete/discrete.datatype";
import { ConfigurableEnumValue } from "../configurable-enum.types";

@Injectable()
export class ConfigurableEnumDatatype extends DiscreteDatatype<
  ConfigurableEnumValue,
  string
> {
  private enumService = inject(ConfigurableEnumService);

  static override dataType = "configurable-enum";
  static override label: string = $localize`:datatype-label:dropdown option`;

  public override readonly viewComponent = "DisplayConfigurableEnum";
  public override readonly editComponent = "EditConfigurableEnum";

  /**
   * transforms Objects of InteractionType to strings to save in DB
   * @param value Object to be saved as specified in config file; e.g. `{id: 'CALL', label:'Phone Call', color:'#FFFFFF'}`
   */
  public transformToDatabaseFormat(value: ConfigurableEnumValue): string {
    return value?.id;
  }

  /**
   * transforms saved strings from the DB to Objects of InteractionType
   * @param value string from database as specified in config file; e.g. 'PHONE_CALL'
   * @param schemaField
   */
  public transformToObjectFormat(
    value: string,
    schemaField: EntitySchemaField,
  ): ConfigurableEnumValue {
    if (value === undefined) {
      return undefined;
    }

    let enumId = schemaField.additional;
    let enumOption = this.enumService
      .getEnumValues(enumId)
      ?.find((option) => option.id === value);
    if (!enumOption) {
      enumOption = this.generateOptionForInvalid(value);
    }

    return enumOption;
  }

  /**
   * Build a dummy option so that invalid values are not lost on the next save and users can manually correct issues.
   * @param optionValue
   * @private
   */
  private generateOptionForInvalid(optionValue: string) {
    return {
      id: optionValue,
      isInvalidOption: true,
      label:
        $localize`:enum option label prefix for invalid id dummy:[invalid option]` +
        " " +
        optionValue,
    };
  }
}

results matching ""

    No results matching ""