Skip to content

Commit b999480

Browse files
committed
[FEATURE] JavaScript validation: Show tab with error on morestep forms
As it was in the good old powermail with jQuery version, we now open the tab with the first input error if JS validation is failing. To make this happen, I just made the function MoreStepForm.showFieldset public. After that a new default submitErrorCallback definition was added before the existing "scrollToFirstError". Now we simply open the tab with the first input error in the definition "openTabWithError". After that a scrollToFirstError can do the scrolling. Resolves: #759
1 parent b651069 commit b999480

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

Resources/Private/Build/JavaScript/FormValidation.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Utility from './Utility';
2+
import MoreStepForm from './MoreStepForm';
23

34
export default class FormValidation {
45
#formValidationSelector = '[data-powermail-validate]';
@@ -113,6 +114,15 @@ class Form {
113114
* @type {{name: function(*=, *): boolean}}
114115
*/
115116
#submitErrorCallbacks = {
117+
'openTabWithError': () => {
118+
const firstFieldWithError = this.#form.querySelector('.powermail_field_error');
119+
if (firstFieldWithError !== null) {
120+
let fieldsetError = firstFieldWithError.closest('.powermail_fieldset');
121+
const fieldsetErrorIndex = [...this.#form.querySelectorAll('.powermail_fieldset')].indexOf(fieldsetError);
122+
let moreStepForm = new MoreStepForm();
123+
moreStepForm.showFieldset(fieldsetErrorIndex, this.#form);
124+
}
125+
},
116126
'scrollToFirstError': () => {
117127
try {
118128
const fieldsWithError = this.#form.querySelectorAll('.powermail_field_error');

Resources/Private/Build/JavaScript/MoreStepForm.js

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Utility from './Utility';
2+
13
export default function MoreStepForm() {
24
'use strict';
35

@@ -7,11 +9,22 @@ export default function MoreStepForm() {
79

810
let buttonActiveClass = 'btn-primary';
911

12+
let that = this;
13+
1014
this.initialize = function() {
1115
showListener();
1216
initializeForms();
1317
};
1418

19+
this.showFieldset = function(index, form) {
20+
if (form.classList.contains(formClass)) {
21+
hideAllFieldsets(form);
22+
let fieldsets = getAllFieldsetsOfForm(form);
23+
Utility.showElement(fieldsets[index]);
24+
updateButtonStatus(form);
25+
}
26+
};
27+
1528
let initializeForms = function() {
1629
let moreStepForms = document.querySelectorAll('form.' + formClass);
1730
for (let i = 0; i < moreStepForms.length; i++) {
@@ -20,7 +33,7 @@ export default function MoreStepForm() {
2033
};
2134

2235
let initializeForm = function(form) {
23-
showFieldset(0, form);
36+
that.showFieldset(0, form);
2437
};
2538

2639
let showListener = function() {
@@ -29,22 +42,15 @@ export default function MoreStepForm() {
2942
moreButtons[i].addEventListener('click', function(event) {
3043
let targetFieldset = event.target.getAttribute('data-powermail-morestep-show');
3144
let form = event.target.closest('form');
32-
showFieldset(targetFieldset, form);
45+
that.showFieldset(targetFieldset, form);
3346
});
3447
}
3548
}
3649

37-
let showFieldset = function(index, form) {
38-
hideAllFieldsets(form);
39-
let fieldsets = getAllFieldsetsOfForm(form);
40-
showElement(fieldsets[index]);
41-
updateButtonStatus(form);
42-
};
43-
4450
let hideAllFieldsets = function(form) {
4551
let fieldsets = getAllFieldsetsOfForm(form);
4652
for (let i = 0; i < fieldsets.length; i++) {
47-
hideElement(fieldsets[i]);
53+
Utility.hideElement(fieldsets[i]);
4854
}
4955
};
5056

@@ -77,12 +83,4 @@ export default function MoreStepForm() {
7783
let getAllFieldsetsOfForm = function(form) {
7884
return form.querySelectorAll('.' + fieldsetClass);
7985
};
80-
81-
let hideElement = function(element) {
82-
element.style.display = 'none';
83-
};
84-
85-
let showElement = function(element) {
86-
element.style.display = 'block';
87-
};
8886
}

Resources/Public/JavaScript/Powermail/Form.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)