From 6106c70cc6f4b8e00f47df98ab7ee882a004eab3 Mon Sep 17 00:00:00 2001 From: nebrot Date: Mon, 16 May 2022 11:05:06 +0200 Subject: [PATCH] [FEATURE] Add min and max validation for date fields Fixes #765 --- .../Build/JavaScript/FormValidation.js | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Resources/Private/Build/JavaScript/FormValidation.js b/Resources/Private/Build/JavaScript/FormValidation.js index 1c0fac90f..5cb3e0a97 100644 --- a/Resources/Private/Build/JavaScript/FormValidation.js +++ b/Resources/Private/Build/JavaScript/FormValidation.js @@ -1,4 +1,5 @@ import Utility from './Utility'; +import moment from 'moment'; export default class FormValidation { #formValidationSelector = '[data-powermail-validate]'; @@ -321,7 +322,12 @@ class Form { return true; } let minimum = field.getAttribute('min') || field.getAttribute('data-powermail-min'); - return parseInt(field.value) >= parseInt(minimum); + let value = field.value; + if (field.getAttribute('type') === 'date' || field.getAttribute('type') === 'datetime-local' || field.getAttribute('type') === 'time') { + value = this.#getUnixTimestamp(value, field.getAttribute('data-datepicker-format')); + minimum = this.#getUnixTimestamp(minimum, field.getAttribute('data-datepicker-format')); + } + return parseInt(value) >= parseInt(minimum); }; #isValidationMaximumConfirmed(field) { @@ -329,7 +335,12 @@ class Form { return true; } let maximum = field.getAttribute('max') || field.getAttribute('data-powermail-max'); - return parseInt(field.value) <= parseInt(maximum); + let value = field.value; + if (field.getAttribute('type') === 'date' || field.getAttribute('type') === 'datetime-local' || field.getAttribute('type') === 'time') { + value = this.#getUnixTimestamp(value, field.getAttribute('data-datepicker-format')); + maximum = this.#getUnixTimestamp(maximum, field.getAttribute('data-datepicker-format')); + } + return parseInt(value) <= parseInt(maximum); }; #isValidationLengthConfirmed(field) { @@ -455,6 +466,14 @@ class Form { } return value; }; + + #getUnixTimestamp(value, formatInput) { + let momentDate = moment(value, formatInput); + if (momentDate.isValid) { + value = momentDate.unix(); + } + return value; + }; #getFieldIdentifier(field) { let name = field.getAttribute('name');