FIO-9299: ensure eachComponent does not mutate a component's path #184
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Link to Jira Ticket
https://formio.atlassian.net/browse/FIO-9299
Description
The
eachComponent
andeachComponentAsync
functions previously mutated a component'spath
property by adding a non-enumerable property. This is necessary for the processors to track a component's path throughout a process' lifetime. However, many other systems utilizeeachComponent
as a utility function, and presumably none of these requirepath
to be tracked at theeachComponent
level. For instance, Edit Grid callseachComponent
in its default template (and a couple other places), and the fact thateachComponent
contained thepath
mutation side-effect meant that certain operations on the client would have incorrect paths. Imagine, for example, calling eachComponent within the Edit Grid - suddenly, paths that were onceeditGrid[0].textField
are suddenly mutated totextField
and removed from thecomponentsMap
, as in the bug presented in FIO-9299.This PR moves the definition of the
path
non-enumerable property to the subroutine that needs it,processOne
, thereby leavingeachComponent
without the side-effect and reducing the potential for bugs involving pathing.Breaking Changes / Backwards Compatibility
n/a
Dependencies
n/a
How has this PR been tested?
I've added an automated test to ensure that
eachComponent
does not mutate the path directly. Since this PR also effectively reverts #180 I've gone ahead and manually ensured that that issue is still resolved.Checklist: