fix disable complete button on invalid datetime (#7134)

This commit is contained in:
Silviu Popa
2021-06-29 19:20:58 +03:00
committed by GitHub
parent 2ef7596620
commit 40e48d2444
2 changed files with 62 additions and 1 deletions

View File

@@ -30,7 +30,8 @@ import {
MaxDateTimeFieldValidator,
MinDateTimeFieldValidator,
MaxDateFieldValidator,
MinDateFieldValidator
MinDateFieldValidator,
DateTimeFieldValidator
} from './form-field-validator';
import { FormFieldModel } from './form-field.model';
import { FormModel } from './form.model';
@@ -1047,4 +1048,31 @@ describe('FormFieldValidator', () => {
expect(field.validationSummary).not.toBeNull();
});
});
describe('DateTimeFieldValidator', () => {
let validator: DateTimeFieldValidator;
beforeEach(() => {
validator = new DateTimeFieldValidator();
});
it('should validate dateTime format with dateDisplayFormat', () => {
const field = new FormFieldModel(new FormModel(), {
type: FormFieldTypes.DATETIME,
value: '2021-06-09 14:10',
dateDisplayFormay: 'YYYY-MM-DD HH:mm'
});
expect(validator.validate(field)).toBeTruthy();
});
it('should validate dateTime format with default format', () => {
const field = new FormFieldModel(new FormModel(), {
type: FormFieldTypes.DATETIME,
value: '2021-06-09 14:10',
});
expect(validator.validate(field)).toBeTruthy();
});
});
});

View File

@@ -165,6 +165,38 @@ export class DateFieldValidator implements FormFieldValidator {
}
}
export class DateTimeFieldValidator implements FormFieldValidator {
private supportedTypes = [
FormFieldTypes.DATETIME
];
// Validates that the input string is a valid date formatted as <dateFormat> (default D-M-YYYY)
static isValidDate(inputDate: string, dateFormat: string = 'YYYY-MM-DD HH:mm'): boolean {
if (inputDate) {
const d = moment(inputDate, dateFormat, true);
return d.isValid();
}
return false;
}
isSupported(field: FormFieldModel): boolean {
return field && this.supportedTypes.indexOf(field.type) > -1;
}
validate(field: FormFieldModel): boolean {
if (this.isSupported(field) && field.value && field.isVisible) {
if (DateFieldValidator.isValidDate(field.value, field.dateDisplayFormat)) {
return true;
}
field.validationSummary.message = field.dateDisplayFormat;
return false;
}
return true;
}
}
export abstract class BoundaryDateFieldValidator implements FormFieldValidator {
DATE_FORMAT_CLOUD = 'YYYY-MM-DD';
@@ -539,6 +571,7 @@ export const FORM_FIELD_VALIDATORS = [
new MaxValueFieldValidator(),
new RegExFieldValidator(),
new DateFieldValidator(),
new DateTimeFieldValidator(),
new MinDateFieldValidator(),
new MaxDateFieldValidator(),
new FixedValueFieldValidator(),