Skip to content

Commit f79236f

Browse files
committed
Implement date validation
1 parent 74b90c7 commit f79236f

File tree

3 files changed

+47
-10
lines changed

3 files changed

+47
-10
lines changed

core/src/model/configuration/field.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import { isArray, isObject, isString } from 'tsfun';
22
import { I18N } from '../../tools/i18n';
33
import { validateFloat, validateInt, validateUnsignedFloat, validateUnsignedInt,
44
validateUrl } from '../../tools/validation-util';
5-
import { parseDate } from '../../tools/parse-date';
65
import { Dating } from '../input-types/dating';
76
import { Dimension } from '../input-types/dimension';
87
import { Literature } from '../input-types/literature';
98
import { OptionalRange } from '../input-types/optional-range';
109
import { Valuelist } from './valuelist';
1110
import { Composite } from '../input-types/composite';
1211
import { DateConfiguration } from './date-configuration';
12+
import { DateSpecification } from '../input-types/date-specification';
1313

1414

1515
/**
@@ -84,7 +84,7 @@ export module Field {
8484
export const COMMON = 'common';
8585
}
8686

87-
export function isValidFieldData(fieldData: any, field: BaseField): boolean {
87+
export function isValidFieldData(fieldData: any, field: BaseField, permissive: boolean = false): boolean {
8888

8989
if (fieldData === null || fieldData === undefined) return false;
9090

@@ -121,9 +121,7 @@ export module Field {
121121
case InputType.BOOLEAN:
122122
return fieldData === true || fieldData === false;
123123
case InputType.DATE:
124-
return isObject(fieldData)
125-
&& fieldData.value !== undefined
126-
&& !isNaN(parseDate(fieldData.value)?.getTime());
124+
return permissive ? isObject(fieldData) : DateSpecification.validate(fieldData, field);
127125
case InputType.DROPDOWNRANGE:
128126
return OptionalRange.buildIsOptionalRange(isString)(fieldData);
129127
case InputType.DATING:

core/src/model/input-types/date-specification.ts

+43-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import { isObject } from 'tsfun';
12
import { parseDate } from '../../tools/parse-date';
23
import { formatDate } from '../../tools/format-date';
4+
import { Field } from '../configuration/field';
5+
import { DateConfiguration } from '../configuration/date-configuration';
36

47

58
/**
@@ -14,13 +17,33 @@ export interface DateSpecification {
1417

1518
export module DateSpecification {
1619

20+
export function validate(date: DateSpecification, field: Field): boolean {
21+
22+
if (!isObject(date) || !validateDateValue(date.value, field)) return false;
23+
24+
if (field.dateConfiguration?.inputMode === DateConfiguration.InputMode.SINGLE && date.endValue !== undefined) {
25+
return false;
26+
}
27+
28+
if (field.dateConfiguration?.inputMode === DateConfiguration.InputMode.RANGE
29+
&& !validateDateValue(date.endValue, field)) {
30+
return false;
31+
}
32+
33+
return true;
34+
}
35+
36+
1737
export function generateLabel(date: DateSpecification, timezone: string, timeSuffix: string,
1838
locale: string): string {
1939

20-
let result: string = getValueLabel(date.value, timezone, timeSuffix, locale, !date.endValue);
21-
if (date.endValue) result += ' - ' + getValueLabel(date.endValue, timezone, timeSuffix, locale, true);
22-
23-
return result;
40+
try {
41+
let result: string = getValueLabel(date.value, timezone, timeSuffix, locale, !date.endValue);
42+
if (date.endValue) result += ' - ' + getValueLabel(date.endValue, timezone, timeSuffix, locale, true);
43+
return result;
44+
} catch (_) {
45+
return null;
46+
}
2447
}
2548

2649

@@ -37,4 +60,20 @@ export module DateSpecification {
3760

3861
return formattedDate;
3962
}
63+
64+
65+
function validateDateValue(dateValue: string, field: Field) {
66+
67+
if (!dateValue || isNaN(parseDate(dateValue)?.getTime())) return false;
68+
69+
if (field.dateConfiguration?.dataType === DateConfiguration.DataType.DATE_TIME && !dateValue.includes(':')) {
70+
return false;
71+
}
72+
73+
if (field.dateConfiguration?.dataType === DateConfiguration.DataType.DATE && dateValue.includes(':')) {
74+
return false;
75+
}
76+
77+
return true;
78+
}
4079
}

desktop/src/app/components/docedit/core/edit-form-group.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export class EditFormGroup implements OnChanges {
109109

110110
return fieldData === undefined
111111
? true
112-
: Field.isValidFieldData(fieldData, field);
112+
: Field.isValidFieldData(fieldData, field, true);
113113
}
114114

115115

0 commit comments

Comments
 (0)