src/app/features/location/location.datatype.ts
Properties |
|
Methods |
| Async importMapFunction | ||||||||||||
importMapFunction(val: any, schemaField?: any, additional?: LocationImportConfig)
|
||||||||||||
|
Inherited from
DefaultDatatype
|
||||||||||||
|
Defined in
DefaultDatatype:50
|
||||||||||||
|
Parameters :
Returns :
Promise<GeoLocation>
|
| transformToObjectFormat | ||||||
transformToObjectFormat(value: GeoLocation)
|
||||||
|
Inherited from
DefaultDatatype
|
||||||
|
Defined in
DefaultDatatype:22
|
||||||
|
Parameters :
Returns :
GeoLocation
|
| Async anonymize | ||||||||||||||||
anonymize(value: EntityType, schemaField: EntitySchemaField, parent: any)
|
||||||||||||||||
|
Inherited from
DefaultDatatype
|
||||||||||||||||
|
Defined in
DefaultDatatype:190
|
||||||||||||||||
|
(Partially) anonymize to "retain-anonymized" for reporting purposes without personal identifiable information.
Parameters :
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 Subclasses typically override this without the extra
Parameters :
Returns :
string | undefined
The field name of the first matching field, or |
| importIncompleteAdditionalConfigBadge | ||||||
importIncompleteAdditionalConfigBadge(col: ColumnMapping)
|
||||||
|
Inherited from
DefaultDatatype
|
||||||
|
Defined in
DefaultDatatype:166
|
||||||
|
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 :
Returns :
string
|
| normalizeSchemaField | ||||||||
normalizeSchemaField(schemaField: EntitySchemaField)
|
||||||||
|
Inherited from
DefaultDatatype
|
||||||||
|
Defined in
DefaultDatatype:182
|
||||||||
|
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
Parameters :
Returns :
EntitySchemaField
The schema field to use (default: unchanged) |
| transformToDatabaseFormat | ||||||||||||||||
transformToDatabaseFormat(value: EntityType, schemaField?: EntitySchemaField, parent?: Entity)
|
||||||||||||||||
|
Inherited from
DefaultDatatype
|
||||||||||||||||
|
Defined in
DefaultDatatype:112
|
||||||||||||||||
|
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 :
Parameters :
Returns :
DBType
|
| Static dataType |
Type : string
|
Default value : "location"
|
|
Inherited from
DefaultDatatype
|
|
Defined in
DefaultDatatype:15
|
| editComponent |
Type : string
|
Default value : "EditLocation"
|
|
Inherited from
DefaultDatatype
|
|
Defined in
DefaultDatatype:18
|
| importConfigComponent |
Type : string
|
Default value : "LocationImportConfig"
|
|
Inherited from
DefaultDatatype
|
|
Defined in
DefaultDatatype:20
|
| Static label |
Type : string
|
Default value : $localize`:datatype-label:location (address + map)`
|
|
Inherited from
DefaultDatatype
|
|
Defined in
DefaultDatatype:16
|
| viewComponent |
Type : string
|
Default value : "ViewLocation"
|
|
Inherited from
DefaultDatatype
|
|
Defined in
DefaultDatatype:19
|
| 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 { Injectable, inject } from "@angular/core";
import { lastValueFrom } from "rxjs";
import { DefaultDatatype } from "../../core/entity/default-datatype/default.datatype";
import { GeoLocation } from "./geo-location";
import { GeoResult, GeoService } from "./geo.service";
import { LocationImportConfig } from "./location-import-config/location-import-config.component";
@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 importConfigComponent = "LocationImportConfig";
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;
}
// migrate from legacy format
if (
!value.hasOwnProperty("locationString") &&
!value.hasOwnProperty("geoLookup")
) {
value = {
geoLookup: value as unknown as GeoResult,
};
}
// fix errors from broken migrations
while (value?.geoLookup && "geoLookup" in value.geoLookup) {
value.geoLookup = (value.geoLookup as { geoLookup: GeoResult }).geoLookup;
}
if (!value.locationString) {
value.locationString = value.geoLookup?.display_name ?? "";
}
return value;
}
override async importMapFunction(
val: any,
schemaField?: any,
additional?: LocationImportConfig,
): Promise<GeoLocation> {
if (!val) {
return undefined;
}
let geoResults: GeoResult[];
if (!additional?.skipAddressLookup) {
geoResults = await lastValueFrom(this.geoService.lookup(val));
}
return {
locationString: val,
geoLookup: geoResults ? geoResults[0] : undefined,
};
}
}