Skip to content

Commit f0e6cc8

Browse files
committed
Address flow type issues
1 parent fe3a953 commit f0e6cc8

File tree

4 files changed

+27
-30
lines changed

4 files changed

+27
-30
lines changed

packages/react-native-web/src/exports/Image/index.js

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @flow
99
*/
1010

11-
import type { ImageResult } from '../../modules/ImageLoader';
11+
import type { ImageResult, ImageSource } from '../../modules/ImageLoader';
1212
import type { ImageProps, Source, ImageLoadingProps } from './types';
1313

1414
import * as React from 'react';
@@ -100,7 +100,7 @@ function resolveAssetDimensions(source: ImageSource) {
100100
return { height, width };
101101
}
102102

103-
function resolveSource(source: ?Source): Source {
103+
function resolveSource(source: ?Source): ImageSource {
104104
let resolvedSource = { uri: '' };
105105

106106
if (typeof source === 'number') {
@@ -117,7 +117,7 @@ function resolveSource(source: ?Source): Source {
117117

118118
return resolveSource(source[0]);
119119
} else if (source && typeof source.uri === 'string') {
120-
resolvedSource = resolveObjectSource((source: Source));
120+
resolvedSource = resolveObjectSource(source);
121121
}
122122

123123
if (resolvedSource.uri) {
@@ -153,25 +153,22 @@ function resolveNumericSource(source: number): ImageSource {
153153

154154
const scaleSuffix = scale !== 1 ? `@${scale}x` : '';
155155
const uri = `${asset.httpServerLocation}/${asset.name}${scaleSuffix}.${asset.type}`;
156+
const { height, width } = asset;
156157

157-
return {
158-
uri,
159-
width: asset.width,
160-
height: asset.height
161-
};
158+
return { uri, height, width };
162159
}
163160

164161
function resolveStringSource(source: string): ImageSource {
165162
return { uri: source };
166163
}
167164

168-
function resolveObjectSource(source: Source): ImageSource {
169-
return source;
165+
function resolveObjectSource(source: Object): ImageSource {
166+
return (source: ImageSource);
170167
}
171168

172169
function resolveSvgDataUriSource(
173-
source: Source,
174-
match: RegExpMatchArray
170+
source: Object,
171+
match: Array<string>
175172
): ImageSource {
176173
const [, prefix, svg] = match;
177174
// inline SVG markup may contain characters (e.g., #, ") that need to be escaped
@@ -194,10 +191,10 @@ function resolveBlobUri(source: ImageSource): ImageSource {
194191
function getSourceToDisplay(main, fallback) {
195192
if (main.status === LOADED) return main.source;
196193

197-
if (main.satus === LOADING && !fallback.source.uri) {
194+
if (main.status === LOADING && !fallback.source.uri) {
198195
// Most of the time it's safe to use the main URI as img.src before loading
199196
// But it should not be used when the image would be loaded using `fetch` with headers
200-
if (!main.headers) return main.source;
197+
if (!main.source.headers) return main.source;
201198
}
202199

203200
return fallback.source;
@@ -353,27 +350,25 @@ ImageWithStatics.queryCache = function (uris) {
353350
return ImageLoader.queryCache(uris);
354351
};
355352

356-
// Todo: see if we can just use `result` as `source` (width|height might cause problems)
357-
358353
/**
359354
* Image loading/state management hook
360355
* @param callbacks
361356
* @param source
362-
* @returns {{state: string, uri: string}}
357+
* @returns {{status: string, source: ImageSource}}
363358
*/
364359
const useSource = (
365360
callbacks: ImageLoadingProps,
366361
source: ?Source
367-
): { status: IDLE | LOADING | LOADED | ERRORED, source: ImageSource } => {
368-
const [resolvedSource, setResolvedSource] = React.useState(() =>
362+
): { status: string, source: ImageSource } => {
363+
const [resolvedSource, setResolvedSource] = React.useState<ImageSource>(() =>
369364
resolveSource(source)
370365
);
371366

372367
const [status, setStatus] = React.useState(() =>
373368
ImageLoader.has(resolveSource.uri) ? LOADED : IDLE
374369
);
375370

376-
const [result, setResult] = React.useState(resolvedSource);
371+
const [result, setResult] = React.useState<ImageSource>(resolvedSource);
377372

378373
// Trigger a resolved source change when necessary
379374
React.useEffect(() => {
@@ -406,7 +401,7 @@ const useSource = (
406401
if (onLoadEnd) onLoadEnd();
407402

408403
setStatus(LOADED);
409-
setResult(result.source);
404+
setResult({ ...resolvedSource, ...result.source });
410405
}
411406

412407
function handleError() {

packages/react-native-web/src/exports/Image/types.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export type ImageStyle = {
104104
};
105105

106106
export type ImageLoadingProps = {|
107-
onLoad?: (e: ImageResult) => void,
107+
onLoad?: (e: { nativeEvent: ImageResult }) => void,
108108
onLoadStart?: () => void,
109109
onLoadEnd?: () => void,
110110
onError?: ({ nativeEvent: { error: string } }) => void,

packages/react-native-web/src/modules/ImageLoader/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,11 @@ const ImageLoader = {
209209
return Promise.resolve(result);
210210
},
211211
resolveBlobUri(uri: string): string {
212-
const request = Object.values(requests).find(
213-
({ source }) => source.uri === uri
214-
);
215-
if (request) {
216-
return request.image.src;
212+
for (const key in requests) {
213+
const request = requests[key];
214+
if (request.source.uri === uri) {
215+
return request.image.src;
216+
}
217217
}
218218

219219
return uri;

packages/react-native-web/src/modules/ImageLoader/types.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010

1111
export type ImageSource = {|
1212
uri: string,
13-
headers?: { [key: string]: string }
13+
headers?: { [key: string]: string },
14+
width?: ?number,
15+
height?: ?number
1416
|};
1517

1618
export type ImageResult = {|
17-
source: {
19+
source: {|
1820
uri: string,
1921
width: number,
2022
height: number
21-
}
23+
|}
2224
|};

0 commit comments

Comments
 (0)