Bugfix/FOUR-32292-b: Validation of required fields does not work correctly in Record List controls with checkboxes - #1938
Bugfix/FOUR-32292-b: Validation of required fields does not work correctly in Record List controls with checkboxes#1938CarliPinell wants to merge 3 commits into
Conversation
screen-builder
|
||||||||||||||||||||||||||||||||||||||||
| Project |
screen-builder
|
| Branch Review |
bugfix/FOUR-32292-b
|
| Run status |
|
| Run duration | 42m 49s |
| Commit |
|
| Committer | CarliPinell |
| View all properties for this run ↗︎ | |
| Test results | |
|---|---|
|
|
2
|
|
|
0
|
|
|
19
|
|
|
0
|
|
|
391
|
| View all changes introduced in this branch ↗︎ | |
Tests for review

Loop.spec.js • 1 failed test • CI - Chrome
| Test | Artifacts | |
|---|---|---|
| Loop control > Verify validation on visible fields |
Test Replay
Screenshots
|
|

DefaultValues.spec.js • 1 failed test • CI - Chrome
| Test | Artifacts | |
|---|---|---|
| Default values > Javascript default value |
Test Replay
Screenshots
|
|
|
QA server K8S was successfully deployed https://ci-016a15d52c.engk8s.processmaker.net |
|
QA server K8S was successfully deployed https://ci-016a15d52c.engk8s.processmaker.net |
eiresendez
left a comment
There was a problem hiding this comment.
Manual testing confirms that the reported scenario is fixed 👍 I'm just leaving a few observations:
- Remove first-row-dependent conditional validation
- Clarify empty-list semantics
|
|
||
| const rowRules = {}; | ||
| const rows = get(this.data, listName); | ||
| const firstRow = (Array.isArray(rows) && rows.length > 0) ? rows[0] : {}; |
There was a problem hiding this comment.
🔴
src/ValidationsFactory.js:409— Record Form validation rules depend on the first row’s visibility state.- The rule tree is constructed using
firstRow.FormElementValidations.isVisible()can therefore omit a conditionally visible required field when it is hidden in the first row. - If that field is visible and invalid in a later row, no rule exists to validate it and the parent form can submit invalid data.
- Build the validation rules independently of one representative row, while evaluating conditional visibility separately for every row during validation.
- The rule tree is constructed using
Screen.Recording.2026-09-08.at.5.06.26.p.m.mov
| const data = props[1]; | ||
| const listRows = get(data, listName); | ||
| // No rows yet: treat as empty field values (required/accepted fail). | ||
| if (!Array.isArray(listRows) || listRows.length === 0) { |
There was a problem hiding this comment.
🔴 The PR makes an empty Record List fail once for every required field in its Record Form. This behavior is explicitly covered by the new unit test, but it is outside the expected behavior of FOUR-32292.
@CarliPinell Could you confirm whether required fields inside the Record Form are also intended to require at least one row? Otherwise, this changes the previous behavior and may make existing screens with an optional empty Record List invalid.
Solution
Problems addressed
Expected behavior after fix
How to Test
Follow steps detailed in ticket
Related Tickets & Packages
Code Review Checklist
ci:deploy