Fix ViewConfig validation error after merging defaultSrc into defaultSource for RCTImageView#47754
Closed
dmytrorykun wants to merge 3 commits into
Closed
Fix ViewConfig validation error after merging defaultSrc into defaultSource for RCTImageView#47754dmytrorykun wants to merge 3 commits into
dmytrorykun wants to merge 3 commits into
Conversation
Contributor
|
This pull request was exported from Phabricator. Differential Revision: D66228921 |
added 3 commits
November 20, 2024 02:37
Summary: `defaultSource` is defined as a single `ImageSource` in docs (https://reactnative.dev/docs/next/image#defaultsource) but its type is a vector of `ImageSource`s in `ImageProps.h`. This diff changes its C++ type to just `ImageSource`. Technically, this is a breaking change, however I don't think folks should directly access `ImageProps` outside of `RCTImageComponentView.mm` Moreover, this prop is actually not implemented in Fabric, so this change should have no practical effect. Changelog: [Internal] Facebook T208171435 - [RN][Fabric][iOS] Implement defaultSource support for Image Reviewed By: javache Differential Revision: D65821570
Summary: There is a subset of `ImageProps` that are used by Android but not used by iOS. They were missing in the `ImageProps.h`. It was fine when they were only consumed by the Android mounting layer. But it becomes a problem if we want to write some shared C++ code based on those props. This diff adds those props to the corresponding C++ type. This should have no practical effect for both platforms. Changelog: [Internal] Reviewed By: javache Differential Revision: D65426569
…Source for RCTImageView (react#47754) Summary: The `./resolveAssetSource` processor was added to the `defaultSource` prop in the `RCTImageView` static view config in D65819218. To match this in native view config, we're adding the `customType = "ImageSource"` hint to the view config infra, so it knows to assign correct processor to the native view config in runtime. Changelog: [Internal] Reviewed By: javache Differential Revision: D66228921
dmytrorykun
force-pushed
the
export-D66228921
branch
from
November 20, 2024 10:37
d9c9f82 to
51a7f90
Compare
Contributor
|
This pull request was exported from Phabricator. Differential Revision: D66228921 |
Contributor
|
This pull request has been merged in 105ad85. |
Collaborator
|
This pull request was successfully merged by @dmytrorykun in 105ad85 When will my fix make it into a release? | How to file a pick request? |
facebook-github-bot
pushed a commit
that referenced
this pull request
Feb 4, 2025
Summary: Fixes #49075 The Image `defaultSource` prop is causing a runtime error from 0.77 just by using it in the Image component (see error in the linked issue). This might be a regression from some changes in the prop processing logic from either #47710, #47713 or #47754. ## Changelog: [ANDROID] [FIXED] - Fix Image defaultSource runtime error Pull Request resolved: #49097 Test Plan: - Verify it doesn't throw any error on runtime anymore for Android. - iOS behaviour should not be impacted as changes are Android specific In the RNTester, you can use the following component: ```tsx import * as React from 'react'; import {Image, View} from 'react-native'; function Playground() { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Image defaultSource={require('../../assets/bandaged.png')} source={{ uri: 'https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_4x3.jpg', }} style={{width: 200, height: 200}} /> </View> ); } ``` Also, this `defaultSource` prop is ignored in debug builds for Android ([as per the docs](https://reactnative.dev/docs/image#defaultsource)) – but I've verified we get the defaultSource as a string, which is what we expect on the native side: <details> <summary>Screenshot of the Android logs</summary>  </details> Reviewed By: javache Differential Revision: D69052723 Pulled By: cortinico fbshipit-source-id: 2860dd4c18cefcfcbc4e39f94dfa6305f45773a3
fbp93
pushed a commit
to fbp93/react-native
that referenced
this pull request
Mar 7, 2025
Summary: Fixes react#49075 The Image `defaultSource` prop is causing a runtime error from 0.77 just by using it in the Image component (see error in the linked issue). This might be a regression from some changes in the prop processing logic from either react#47710, react#47713 or react#47754. ## Changelog: [ANDROID] [FIXED] - Fix Image defaultSource runtime error Pull Request resolved: react#49097 Test Plan: - Verify it doesn't throw any error on runtime anymore for Android. - iOS behaviour should not be impacted as changes are Android specific In the RNTester, you can use the following component: ```tsx import * as React from 'react'; import {Image, View} from 'react-native'; function Playground() { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Image defaultSource={require('../../assets/bandaged.png')} source={{ uri: 'https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_4x3.jpg', }} style={{width: 200, height: 200}} /> </View> ); } ``` Also, this `defaultSource` prop is ignored in debug builds for Android ([as per the docs](https://reactnative.dev/docs/image#defaultsource)) – but I've verified we get the defaultSource as a string, which is what we expect on the native side: <details> <summary>Screenshot of the Android logs</summary>  </details> Reviewed By: javache Differential Revision: D69052723 Pulled By: cortinico fbshipit-source-id: 2860dd4c18cefcfcbc4e39f94dfa6305f45773a3 # Conflicts: # packages/react-native/Libraries/Image/ImageViewNativeComponent.js
cortinico
pushed a commit
that referenced
this pull request
Mar 10, 2025
Summary: Fixes #49075 The Image `defaultSource` prop is causing a runtime error from 0.77 just by using it in the Image component (see error in the linked issue). This might be a regression from some changes in the prop processing logic from either #47710, #47713 or #47754. ## Changelog: [ANDROID] [FIXED] - Fix Image defaultSource runtime error Pull Request resolved: #49097 Test Plan: - Verify it doesn't throw any error on runtime anymore for Android. - iOS behaviour should not be impacted as changes are Android specific In the RNTester, you can use the following component: ```tsx import * as React from 'react'; import {Image, View} from 'react-native'; function Playground() { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Image defaultSource={require('../../assets/bandaged.png')} source={{ uri: 'https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_4x3.jpg', }} style={{width: 200, height: 200}} /> </View> ); } ``` Also, this `defaultSource` prop is ignored in debug builds for Android ([as per the docs](https://reactnative.dev/docs/image#defaultsource)) – but I've verified we get the defaultSource as a string, which is what we expect on the native side: <details> <summary>Screenshot of the Android logs</summary>  </details> Reviewed By: javache Differential Revision: D69052723 Pulled By: cortinico fbshipit-source-id: 2860dd4c18cefcfcbc4e39f94dfa6305f45773a3 # Conflicts: # packages/react-native/Libraries/Image/ImageViewNativeComponent.js Co-authored-by: Mateo Guzmán <info@mateoguzman.net>
cipolleschi
pushed a commit
that referenced
this pull request
Mar 18, 2025
Summary: Fixes #49075 The Image `defaultSource` prop is causing a runtime error from 0.77 just by using it in the Image component (see error in the linked issue). This might be a regression from some changes in the prop processing logic from either #47710, #47713 or #47754. [ANDROID] [FIXED] - Fix Image defaultSource runtime error Pull Request resolved: #49097 Test Plan: - Verify it doesn't throw any error on runtime anymore for Android. - iOS behaviour should not be impacted as changes are Android specific In the RNTester, you can use the following component: ```tsx import * as React from 'react'; import {Image, View} from 'react-native'; function Playground() { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Image defaultSource={require('../../assets/bandaged.png')} source={{ uri: 'https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_4x3.jpg', }} style={{width: 200, height: 200}} /> </View> ); } ``` Also, this `defaultSource` prop is ignored in debug builds for Android ([as per the docs](https://reactnative.dev/docs/image#defaultsource)) – but I've verified we get the defaultSource as a string, which is what we expect on the native side: <details> <summary>Screenshot of the Android logs</summary>  </details> Reviewed By: javache Differential Revision: D69052723 Pulled By: cortinico fbshipit-source-id: 2860dd4c18cefcfcbc4e39f94dfa6305f45773a3
Flewp
pushed a commit
to discord/react-native-archived
that referenced
this pull request
Apr 7, 2025
Summary: Fixes react#49075 The Image `defaultSource` prop is causing a runtime error from 0.77 just by using it in the Image component (see error in the linked issue). This might be a regression from some changes in the prop processing logic from either react#47710, react#47713 or react#47754. [ANDROID] [FIXED] - Fix Image defaultSource runtime error Pull Request resolved: react#49097 Test Plan: - Verify it doesn't throw any error on runtime anymore for Android. - iOS behaviour should not be impacted as changes are Android specific In the RNTester, you can use the following component: ```tsx import * as React from 'react'; import {Image, View} from 'react-native'; function Playground() { return ( <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}> <Image defaultSource={require('../../assets/bandaged.png')} source={{ uri: 'https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_4x3.jpg', }} style={{width: 200, height: 200}} /> </View> ); } ``` Also, this `defaultSource` prop is ignored in debug builds for Android ([as per the docs](https://reactnative.dev/docs/image#defaultsource)) – but I've verified we get the defaultSource as a string, which is what we expect on the native side: <details> <summary>Screenshot of the Android logs</summary>  </details> Reviewed By: javache Differential Revision: D69052723 Pulled By: cortinico fbshipit-source-id: 2860dd4c18cefcfcbc4e39f94dfa6305f45773a3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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:
The
./resolveAssetSourceprocessor was added to thedefaultSourceprop in theRCTImageViewstatic view config in D65819218.To match this in native view config, we're adding the
customType = "ImageSource"hint to the view config infra, so it knows to assign correct processor to the native view config in runtime.Changelog: [Internal]
Differential Revision: D66228921