Skip to content

Commit 1d0b1c3

Browse files
committed
IBX-10362: No validation of matrix field without columns when creating content type
1 parent d755041 commit 1d0b1c3

File tree

1 file changed

+40
-2
lines changed

1 file changed

+40
-2
lines changed

src/bundle/Resources/public/js/scripts/admin.contenttype.edit.js

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,8 @@
371371
const validateInput = (input) => {
372372
const isInputEmpty = !input.value;
373373
const field = input.closest('.form-group');
374-
const labelNode = field.querySelector('.ibexa-label');
375-
const errorNode = field.querySelector('.ibexa-form-error');
374+
const labelNode = field?.querySelector('.ibexa-label');
375+
const errorNode = field?.querySelector('.ibexa-form-error');
376376

377377
input.classList.toggle('is-invalid', isInputEmpty);
378378

@@ -390,8 +390,24 @@
390390

391391
isEditFormValid = isEditFormValid && !isInputEmpty;
392392
};
393+
const validateMatrixColumns = (columnSettingsNode) => {
394+
const columns = columnSettingsNode.querySelectorAll('.ibexa-matrix-settings__column');
395+
const hasAddedColumns = columns.length > 0;
396+
const hasEmptyInputs = [...columns].some((column) => {
397+
const columnInput = column.querySelector('.ibexa-input--matrix-column-identifier');
398+
399+
return !columnInput.value;
400+
});
401+
const isValid = hasAddedColumns && !hasEmptyInputs;
402+
const errorNode = columnSettingsNode.querySelector('.ibexa-form-error');
403+
404+
errorNode.toggleAttribute('hidden', hasAddedColumns);
405+
406+
return isValid;
407+
};
393408
const validateForm = () => {
394409
const fieldDefinitionsStatuses = {};
410+
const matrixColumnsSettingsNodes = doc.querySelectorAll('.ibexa-matrix-settings__columns');
395411

396412
isEditFormValid = true;
397413
inputsToValidate = editForm.querySelectorAll(SELECTOR_INPUTS_TO_VALIDATE);
@@ -413,6 +429,18 @@
413429
validateInput(input);
414430
});
415431

432+
matrixColumnsSettingsNodes.forEach((columnSettingsNode) => {
433+
const fieldDefinition = columnSettingsNode.closest('.ibexa-collapse--field-definition');
434+
const { fieldDefinitionIdentifier } = fieldDefinition.dataset;
435+
const hasError = !validateMatrixColumns(columnSettingsNode);
436+
437+
if (!fieldDefinitionsStatuses[fieldDefinitionIdentifier]) {
438+
fieldDefinitionsStatuses[fieldDefinitionIdentifier] = [];
439+
}
440+
441+
fieldDefinitionsStatuses[fieldDefinitionIdentifier].push(hasError);
442+
});
443+
416444
Object.entries(fieldDefinitionsStatuses).forEach(([fieldDefinitionIdentifier, inputsStatus]) => {
417445
const isFieldDefinitionValid = inputsStatus.every((hasError) => !hasError);
418446
const fieldDefinitionNode = doc.querySelector(`[data-field-definition-identifier="${fieldDefinitionIdentifier}"]`);
@@ -629,7 +657,17 @@
629657
draggableGroups.push(draggable);
630658
});
631659

660+
doc.body.addEventListener('ibexa-fieldtype-matrix:added-column', (event) => {
661+
const { columnNode } = event.detail;
662+
const inputs = columnNode.querySelectorAll('.ibexa-input[required]');
663+
664+
[...inputs].forEach((input) => {
665+
attachValidateEvents(input);
666+
});
667+
});
668+
632669
fieldDefinitionsGroups.forEach((group) => group.addEventListener('click', () => setActiveGroup(group), false));
670+
633671
inputsToValidate.forEach(attachValidateEvents);
634672

635673
editForm.addEventListener(

0 commit comments

Comments
 (0)