File

src/app/features/location/location.datatype.ts

Extends

DefaultDatatype

Index

Properties
Methods

Methods

Async importMapFunction
importMapFunction(val: any)
Inherited from DefaultDatatype
Defined in DefaultDatatype:37
Parameters :
Name Type Optional
val any No
transformToObjectFormat
transformToObjectFormat(value: GeoLocation)
Inherited from DefaultDatatype
Defined in DefaultDatatype:20
Parameters :
Name Type Optional
value GeoLocation No
Returns : GeoLocation
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>
importIncompleteAdditionalConfigBadge
importIncompleteAdditionalConfigBadge(col: ColumnMapping)
Inherited from DefaultDatatype

Output a label indicating whether the given column mapping needs user configuration for the "additional" config or has a valid, complete "additional" config. returns "undefined" if no user action is required.

Parameters :
Name Type Optional
col ColumnMapping No
Returns : string
transformToDatabaseFormat
transformToDatabaseFormat(value: EntityType, schemaField?: EntitySchemaField, parent?: Entity)
Inherited from DefaultDatatype
Defined in DefaultDatatype:80

Transformation function taking a value in the format that is used in entity instances and returning the value in the format used in database objects.

Example :
     This can be set as a parameter to the `@DatabaseField()` annotation in Entity classes.
Parameters :
Name Type Optional Description
value EntityType No

The value (in Entity format) to be transformed

schemaField EntitySchemaField Yes

The EntitySchemaField configuration providing details of how the value should be transformed. This can be set as a parameter to the @DatabaseField() annotation in Entity classes.

parent Entity Yes

The full entity instance this value is part of (e.g. to allow cross-related transformations)

Returns : DBType

Properties

Static dataType
Type : string
Default value : "location"
Inherited from DefaultDatatype
Defined in DefaultDatatype:14
editComponent
Type : string
Default value : "EditLocation"
Inherited from DefaultDatatype
Defined in DefaultDatatype:17
Static label
Type : string
Default value : $localize`:datatype-label:location (address + map)`
Inherited from DefaultDatatype
Defined in DefaultDatatype:15
viewComponent
Type : string
Default value : "ViewLocation"
Inherited from DefaultDatatype
Defined in DefaultDatatype:18
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.

Optional importConfigComponent
Type : string
Inherited from DefaultDatatype

A component to be display as a dialog to configure the transformation function (e.g. defining a format or mapping)

import { DefaultDatatype } from "../../core/entity/default-datatype/default.datatype";
import { Injectable, inject } from "@angular/core";
import { GeoResult, GeoService } from "./geo.service";
import { lastValueFrom } from "rxjs";
import { GeoLocation } from "./geo-location";

@Injectable()
export class LocationDatatype extends DefaultDatatype<
  GeoLocation,
  GeoLocation
> {
  private geoService = inject(GeoService);

  static override dataType = "location";
  static override label: string = $localize`:datatype-label:location (address + map)`;

  override editComponent = "EditLocation";
  override viewComponent = "ViewLocation";

  override transformToObjectFormat(value: GeoLocation): GeoLocation {
    if (typeof value !== "object") {
      // until we have an extended location datatype that includes a custom address addition field, discard invalid values (e.g. in case datatype was changed)
      return undefined;
    }

    if (!value.hasOwnProperty("locationString")) {
      // migrate from legacy format
      return {
        locationString: value["display_name"],
        geoLookup: value as unknown as GeoResult,
      };
    }

    return value;
  }

  override async importMapFunction(val: any): Promise<GeoLocation> {
    if (!val) {
      return undefined;
    }

    const geoResults = await lastValueFrom(this.geoService.lookup(val));
    return { locationString: val, geoLookup: geoResults[0] };
  }
}

results matching ""

    No results matching ""