src/app/core/basic-datatypes/date/date.datatype.ts
Datatype for the EntitySchemaService transforming values to Date instances.
This type is automatically used if you annotate a class's property that has the TypeScript type "Date" ensuring that even if values in the database might be some kind of date string they will be cast to Date instances.
For example:
@DatabaseField() myDate: Date; // will be a valid Date even if the database previously had "2020-01-15" as string
Properties |
|
Methods |
Async anonymize | ||||||
anonymize(value: Date)
|
||||||
Inherited from
DefaultDatatype
|
||||||
Defined in
DefaultDatatype:80
|
||||||
Parameters :
Returns :
Promise<Date>
|
Async importMapFunction | ||||||||||||
importMapFunction(val: any, schemaField: EntitySchemaField, additional?: any)
|
||||||||||||
Inherited from
DefaultDatatype
|
||||||||||||
Defined in
DefaultDatatype:67
|
||||||||||||
Parameters :
Returns :
unknown
|
transformToDatabaseFormat | ||||||
transformToDatabaseFormat(value: Date)
|
||||||
Inherited from
DefaultDatatype
|
||||||
Defined in
DefaultDatatype:46
|
||||||
Parameters :
Returns :
any
|
transformToObjectFormat | ||||||||||||
transformToObjectFormat(value, schemaField: EntitySchemaField, parent: any)
|
||||||||||||
Inherited from
DefaultDatatype
|
||||||||||||
Defined in
DefaultDatatype:50
|
||||||||||||
Parameters :
Returns :
any
|
importIncompleteAdditionalConfigBadge | ||||||
importIncompleteAdditionalConfigBadge(col: ColumnMapping)
|
||||||
Inherited from
DefaultDatatype
|
||||||
Defined in
DefaultDatatype:140
|
||||||
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
|
Static dataType |
Type : string
|
Default value : "date"
|
Inherited from
DefaultDatatype
|
Defined in
DefaultDatatype:39
|
editComponent |
Type : string
|
Default value : "EditDate"
|
Inherited from
DefaultDatatype
|
Defined in
DefaultDatatype:44
|
importConfigComponent |
Type : string
|
Default value : "DateImportConfig"
|
Inherited from
DefaultDatatype
|
Defined in
DefaultDatatype:65
|
viewComponent |
Type : string
|
Default value : "DisplayDate"
|
Inherited from
DefaultDatatype
|
Defined in
DefaultDatatype:43
|
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. |
Static label |
Type : string
|
Default value : $localize`:datatype-label:any`
|
Inherited from
DefaultDatatype
|
Defined in
DefaultDatatype:57
|
The human-readable name for this dataType, used in config UIs. |
import { DefaultDatatype } from "../../entity/default-datatype/default.datatype";
import { Injectable } from "@angular/core";
import { EntitySchemaField } from "../../entity/schema/entity-schema-field";
import moment from "moment";
import { Logging } from "../../logging/logging.service";
/**
* Datatype for the EntitySchemaService transforming values to Date instances.
*
* This type is automatically used if you annotate a class's property that has the TypeScript type "Date"
* ensuring that even if values in the database might be some kind of date string they will be cast to Date instances.
*
* For example:
*
* `@DatabaseField() myDate: Date; // will be a valid Date even if the database previously had "2020-01-15" as string`
*/
@Injectable()
export class DateDatatype<DBFormat = string> extends DefaultDatatype<
Date,
DBFormat
> {
static override dataType = "date";
// currently not shown to users in Admin UI, as this is not supported well with timezones and UI
// static override label: string = $localize`:datatype-label:date (with time)`;
override viewComponent = "DisplayDate";
override editComponent = "EditDate";
override transformToDatabaseFormat(value: Date) {
return value as any;
}
override transformToObjectFormat(
value,
schemaField: EntitySchemaField,
parent: any,
) {
const date = new Date(value);
if (Number.isNaN(date.getTime())) {
Logging.debug(
`failed to convert data '${value}' to Date object for ${parent?._id}`,
);
return undefined;
}
return date;
}
override importConfigComponent = "DateImportConfig";
override async importMapFunction(
val: any,
schemaField: EntitySchemaField,
additional?: any,
) {
const date = moment(val, additional, true);
if (date.isValid()) {
return date.toDate();
} else {
return undefined;
}
}
override async anonymize(value: Date): Promise<Date> {
// normalize to 01.06. of the year, which has less statistical distortion than 01.01.
// (roughly half the dates before anonymization will be earlier and half will be later)
return new Date(value.getFullYear(), 6, 1);
}
}