fix: Apply StateCasts to child components in Repeater for JSON columns #18727
+12
−1
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.
Summary
Fixes #18726
When
Repeater'safterStateHydratedrestructures items with UUID keys, it callsrawState()which triggersclearCachedDefaultChildSchemas(). Subsequent calls togetItems()create new child schemas that haven't been throughhydrateState(), soStateCasts(likeFileUploadStateCast) are never applied.This causes FileUpload components inside non-relationship Repeaters (JSON columns) to fail with:
The error occurs because
FileUpload::getUploadedFiles()expects UUID-keyed arrays but receives raw strings.Solution
Apply
StateCaststo child components after creating schemas ingetItems()for non-relationship repeaters. The existingcastStateAfterLoadingFromRelationships()method handles this perfectly - it recursively processes child schemas and is idempotent.For relationship-based repeaters, this is already handled via
loadStateFromRelationships(shouldHydrate: true).Test Plan