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:51
Parameters :
Name Type Optional
col ColumnMapping No
Returns : string
Async importMapFunction
importMapFunction(val: unknown, schemaField: EntitySchemaField, additional: DiscreteColumnMappingAdditional)
Inherited from DefaultDatatype
Defined in DefaultDatatype:29
Parameters :
Name Type Optional
val unknown No
schemaField EntitySchemaField No
additional DiscreteColumnMappingAdditional 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>
Static detectFieldInEntity
detectFieldInEntity(entityOrType: Entity | EntityConstructor, dataTypes: string | string[])
Inherited from DefaultDatatype
Defined in DefaultDatatype:57

Detect the first field of the given datatype(s) in an entity's schema.

Scans the schema for a field whose dataType matches one of the provided strings and returns its property name.

Subclasses typically override this without the extra dataTypes parameter, forwarding their own relevant datatype identifiers.

Parameters :
Name Type Optional Description
entityOrType Entity | EntityConstructor No

An entity instance or entity constructor to inspect.

dataTypes string | string[] No

One or more datatype identifiers to match against.

Returns : string | undefined

The field name of the first matching field, or undefined if none is found.

normalizeSchemaField
normalizeSchemaField(schemaField: EntitySchemaField)
Inherited from DefaultDatatype

Return the (potentially adjusted) schema field for this datatype.

Called when schema fields are set up (e.g. from config), allowing the datatype to normalize or fill in required settings.

Override this in a subclass to enforce constraints (e.g. always setting isArray: true).

Parameters :
Name Type Optional Description
schemaField EntitySchemaField No

The current schema field definition

Returns : EntitySchemaField

The schema field to use (default: unchanged)

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:80

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) => String(option.id) === String(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 ""