If source is null , source uri is null or source is not an array should respect style

Summary: If source is null , source uri is null or source is not an array should respect style like in iOS

Reviewed By: yungsters

Differential Revision: D9018005

fbshipit-source-id: 5f695e8e3007c96e6004973e7fcbc6b57cc15249
This commit is contained in:
Himabindu Gadupudi 2018-07-31 11:49:07 -07:00 коммит произвёл Facebook Github Bot
Родитель a6e27c3f55
Коммит 9f8b5a9ed5
2 изменённых файлов: 15 добавлений и 12 удалений

Просмотреть файл

@ -184,15 +184,12 @@ let Image = (
props: ImagePropsType, props: ImagePropsType,
forwardedRef: ?React.Ref<'RCTTextInlineImage' | 'RKImage'>, forwardedRef: ?React.Ref<'RCTTextInlineImage' | 'RKImage'>,
) => { ) => {
const source = resolveAssetSource(props.source); let source = resolveAssetSource(props.source);
const defaultSource = resolveAssetSource(props.defaultSource); const defaultSource = resolveAssetSource(props.defaultSource);
const loadingIndicatorSource = resolveAssetSource( const loadingIndicatorSource = resolveAssetSource(
props.loadingIndicatorSource, props.loadingIndicatorSource,
); );
// As opposed to the ios version, here we render `null` when there is no source, source.uri
// or source array.
if (source && source.uri === '') { if (source && source.uri === '') {
console.warn('source.uri should not be an empty string'); console.warn('source.uri should not be an empty string');
} }
@ -215,13 +212,13 @@ let Image = (
); );
} }
if (!source || (!source.uri && !Array.isArray(source))) { if (source && !source.uri && !Array.isArray(source)) {
return null; source = null;
} }
let style; let style;
let sources; let sources;
if (source.uri) { if (source?.uri != null) {
const {width, height} = source; const {width, height} = source;
style = flattenStyle([{width, height}, styles.base, props.style]); style = flattenStyle([{width, height}, styles.base, props.style]);
sources = [{uri: source.uri}]; sources = [{uri: source.uri}];
@ -235,7 +232,7 @@ let Image = (
style, style,
shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError), shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError),
src: sources, src: sources,
headers: source.headers, headers: source?.headers,
defaultSrc: defaultSource ? defaultSource.uri : null, defaultSrc: defaultSource ? defaultSource.uri : null,
loadingIndicatorSrc: loadingIndicatorSource loadingIndicatorSrc: loadingIndicatorSource
? loadingIndicatorSource.uri ? loadingIndicatorSource.uri

Просмотреть файл

@ -71,6 +71,9 @@ public class ReactImageView extends GenericDraweeView {
public static final int REMOTE_IMAGE_FADE_DURATION_MS = 300; public static final int REMOTE_IMAGE_FADE_DURATION_MS = 300;
public static final String REMOTE_TRANSPARENT_BITMAP_URI =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
private static float[] sComputedCornerRadii = new float[4]; private static float[] sComputedCornerRadii = new float[4];
/* /*
@ -339,7 +342,10 @@ public class ReactImageView extends GenericDraweeView {
public void setSource(@Nullable ReadableArray sources) { public void setSource(@Nullable ReadableArray sources) {
mSources.clear(); mSources.clear();
if (sources != null && sources.size() != 0) { if (sources == null || sources.size() == 0) {
ImageSource imageSource = new ImageSource(getContext(), REMOTE_TRANSPARENT_BITMAP_URI);
mSources.add(imageSource);
} else {
// Optimize for the case where we have just one uri, case in which we don't need the sizes // Optimize for the case where we have just one uri, case in which we don't need the sizes
if (sources.size() == 1) { if (sources.size() == 1) {
ReadableMap source = sources.getMap(0); ReadableMap source = sources.getMap(0);
@ -573,9 +579,9 @@ public class ReactImageView extends GenericDraweeView {
private void setSourceImage() { private void setSourceImage() {
mImageSource = null; mImageSource = null;
if (mSources.isEmpty()) { if (mSources.isEmpty()) {
return; ImageSource imageSource = new ImageSource(getContext(), REMOTE_TRANSPARENT_BITMAP_URI);
} mSources.add(imageSource);
if (hasMultipleSources()) { } else if (hasMultipleSources()) {
MultiSourceResult multiSource = MultiSourceResult multiSource =
MultiSourceHelper.getBestSourceForSize(getWidth(), getHeight(), mSources); MultiSourceHelper.getBestSourceForSize(getWidth(), getHeight(), mSources);
mImageSource = multiSource.getBestResult(); mImageSource = multiSource.getBestResult();