Here we are only making the model invalid, there is no logic to make it valid again.
If there are multiple model errors in the list, and if user changes any of them, it used to clear every other invalid models in the list. To avoid this to happen, only invalid models are highlighted, rest others are taken care of by the child valid events running in parallel.
What is the reason for adding delay setTimeout(<func>, 120)?
This is causing issues in automation testing and makes buttons enable/disable with slight delay.
Timeout was added for the reason that, even if the current changed model is valid, it should also check the rest of the invalid models in the list. Slight delay was added, so even if the current model becomes valid, it should highlight the invalid one iterating over the inner model list.