@depup/react-native-web 0.21.2-depup.0 → 0.21.3-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/changes.json +3 -3
- package/dist/cjs/exports/Image/index.js +27 -3
- package/dist/cjs/exports/useColorScheme/index.js +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/exports/Image/index.js +27 -3
- package/dist/exports/Image/index.js.flow +29 -1
- package/dist/exports/useColorScheme/index.js +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.flow +1 -0
- package/package.json +14 -12
- package/src/exports/Image/index.js +18 -1
- package/src/exports/useColorScheme/index.js +1 -1
- package/src/index.js +1 -0
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ npm install @depup/react-native-web
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [react-native-web](https://www.npmjs.com/package/react-native-web) @ 0.21.
|
|
17
|
-
| Processed | 2026-
|
|
16
|
+
| Original | [react-native-web](https://www.npmjs.com/package/react-native-web) @ 0.21.3 |
|
|
17
|
+
| Processed | 2026-09-27 |
|
|
18
18
|
| Smoke test | failed |
|
|
19
19
|
| Deps updated | 4 |
|
|
20
20
|
|
|
@@ -22,8 +22,8 @@ npm install @depup/react-native-web
|
|
|
22
22
|
|
|
23
23
|
| Dependency | From | To |
|
|
24
24
|
|------------|------|-----|
|
|
25
|
-
| @babel/runtime | ^7.18.6 | ^
|
|
26
|
-
| @react-native/normalize-colors | ^0.74.1 | ^0.
|
|
25
|
+
| @babel/runtime | ^7.18.6 | ^8.0.5 |
|
|
26
|
+
| @react-native/normalize-colors | ^0.74.1 | ^0.87.1 |
|
|
27
27
|
| fbjs | ^3.0.4 | ^3.0.5 |
|
|
28
28
|
| styleq | ^0.1.3 | ^0.2.1 |
|
|
29
29
|
|
package/changes.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"bumped": {
|
|
3
3
|
"@babel/runtime": {
|
|
4
4
|
"from": "^7.18.6",
|
|
5
|
-
"to": "^
|
|
5
|
+
"to": "^8.0.5"
|
|
6
6
|
},
|
|
7
7
|
"@react-native/normalize-colors": {
|
|
8
8
|
"from": "^0.74.1",
|
|
9
|
-
"to": "^0.
|
|
9
|
+
"to": "^0.87.1"
|
|
10
10
|
},
|
|
11
11
|
"fbjs": {
|
|
12
12
|
"from": "^3.0.4",
|
|
@@ -17,6 +17,6 @@
|
|
|
17
17
|
"to": "^0.2.1"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
|
-
"timestamp": "2026-
|
|
20
|
+
"timestamp": "2026-09-27T01:02:09.872Z",
|
|
21
21
|
"totalUpdated": 4
|
|
22
22
|
}
|
|
@@ -26,6 +26,7 @@ var _ImageLoader = _interopRequireDefault(require("../../modules/ImageLoader"));
|
|
|
26
26
|
var _PixelRatio = _interopRequireDefault(require("../PixelRatio"));
|
|
27
27
|
var _StyleSheet = _interopRequireDefault(require("../StyleSheet"));
|
|
28
28
|
var _TextAncestorContext = _interopRequireDefault(require("../Text/TextAncestorContext"));
|
|
29
|
+
var _useLayoutEffect = _interopRequireDefault(require("../../modules/useLayoutEffect"));
|
|
29
30
|
var _View = _interopRequireDefault(require("../View"));
|
|
30
31
|
var _warnOnce = require("../../modules/warnOnce");
|
|
31
32
|
var _excluded = ["aria-label", "accessibilityLabel", "blurRadius", "defaultSource", "draggable", "onError", "onLayout", "onLoad", "onLoadEnd", "onLoadStart", "pointerEvents", "source", "style"];
|
|
@@ -227,16 +228,36 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
227
228
|
}
|
|
228
229
|
|
|
229
230
|
// Image loading
|
|
231
|
+
// Read the load handlers through a ref, so that a new handler identity does
|
|
232
|
+
// not abort and restart the request for the same uri.
|
|
233
|
+
var loadEventHandlersRef = React.useRef({
|
|
234
|
+
onError,
|
|
235
|
+
onLoad,
|
|
236
|
+
onLoadEnd,
|
|
237
|
+
onLoadStart
|
|
238
|
+
});
|
|
239
|
+
(0, _useLayoutEffect.default)(() => {
|
|
240
|
+
loadEventHandlersRef.current = {
|
|
241
|
+
onError,
|
|
242
|
+
onLoad,
|
|
243
|
+
onLoadEnd,
|
|
244
|
+
onLoadStart
|
|
245
|
+
};
|
|
246
|
+
});
|
|
230
247
|
var uri = resolveAssetUri(source);
|
|
231
248
|
React.useEffect(() => {
|
|
232
249
|
abortPendingRequest();
|
|
233
250
|
if (uri != null) {
|
|
234
251
|
updateState(LOADING);
|
|
235
|
-
|
|
236
|
-
|
|
252
|
+
var _onLoadStart = loadEventHandlersRef.current.onLoadStart;
|
|
253
|
+
if (_onLoadStart) {
|
|
254
|
+
_onLoadStart();
|
|
237
255
|
}
|
|
238
256
|
requestRef.current = _ImageLoader.default.load(uri, function load(e) {
|
|
239
257
|
updateState(LOADED);
|
|
258
|
+
var _loadEventHandlersRef = loadEventHandlersRef.current,
|
|
259
|
+
onLoad = _loadEventHandlersRef.onLoad,
|
|
260
|
+
onLoadEnd = _loadEventHandlersRef.onLoadEnd;
|
|
240
261
|
if (onLoad) {
|
|
241
262
|
onLoad(e);
|
|
242
263
|
}
|
|
@@ -245,6 +266,9 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
245
266
|
}
|
|
246
267
|
}, function error() {
|
|
247
268
|
updateState(ERRORED);
|
|
269
|
+
var _loadEventHandlersRef2 = loadEventHandlersRef.current,
|
|
270
|
+
onError = _loadEventHandlersRef2.onError,
|
|
271
|
+
onLoadEnd = _loadEventHandlersRef2.onLoadEnd;
|
|
248
272
|
if (onError) {
|
|
249
273
|
onError({
|
|
250
274
|
nativeEvent: {
|
|
@@ -264,7 +288,7 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
264
288
|
}
|
|
265
289
|
}
|
|
266
290
|
return abortPendingRequest;
|
|
267
|
-
}, [uri, requestRef, updateState
|
|
291
|
+
}, [uri, requestRef, updateState]);
|
|
268
292
|
return /*#__PURE__*/React.createElement(_View.default, (0, _extends2.default)({}, rest, {
|
|
269
293
|
"aria-label": ariaLabel,
|
|
270
294
|
onLayout: handleLayout,
|
package/dist/cjs/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
4
|
exports.__esModule = true;
|
|
5
|
-
exports.useWindowDimensions = exports.useLocaleContext = exports.useColorScheme = exports.unstable_createElement = exports.unmountComponentAtNode = exports.render = exports.processColor = exports.findNodeHandle = exports.YellowBox = exports.VirtualizedList = exports.View = exports.Vibration = exports.UIManager = exports.TouchableWithoutFeedback = exports.TouchableOpacity = exports.TouchableNativeFeedback = exports.TouchableHighlight = exports.Touchable = exports.TextInput = exports.Text = exports.Switch = exports.StyleSheet = exports.StatusBar = exports.Share = exports.SectionList = exports.ScrollView = exports.SafeAreaView = exports.RefreshControl = exports.ProgressBar = exports.Pressable = exports.Platform = exports.PixelRatio = exports.Picker = exports.PanResponder = exports.NativeModules = exports.NativeEventEmitter = exports.Modal = exports.LogBox = exports.Linking = exports.LayoutAnimation = exports.KeyboardAvoidingView = exports.Keyboard = exports.InteractionManager = exports.ImageBackground = exports.Image = exports.I18nManager = exports.FlatList = exports.Easing = exports.Dimensions = exports.DeviceEventEmitter = exports.Clipboard = exports.CheckBox = exports.Button = exports.BackHandler = exports.Appearance = exports.AppState = exports.AppRegistry = exports.Animated = exports.Alert = exports.ActivityIndicator = exports.AccessibilityInfo = void 0;
|
|
5
|
+
exports.useWindowDimensions = exports.useLocaleContext = exports.useColorScheme = exports.unstable_createElement = exports.unmountComponentAtNode = exports.render = exports.processColor = exports.findNodeHandle = exports.YellowBox = exports.VirtualizedList = exports.View = exports.Vibration = exports.UIManager = exports.TouchableWithoutFeedback = exports.TouchableOpacity = exports.TouchableNativeFeedback = exports.TouchableHighlight = exports.Touchable = exports.TextInput = exports.Text = exports.Switch = exports.StyleSheet = exports.StatusBar = exports.Share = exports.SectionList = exports.ScrollView = exports.SafeAreaView = exports.RefreshControl = exports.ProgressBar = exports.Pressable = exports.Platform = exports.PixelRatio = exports.Picker = exports.PanResponder = exports.NativeModules = exports.NativeEventEmitter = exports.Modal = exports.LogBox = exports.Linking = exports.LayoutAnimation = exports.KeyboardAvoidingView = exports.Keyboard = exports.InteractionManager = exports.InputAccessoryView = exports.ImageBackground = exports.Image = exports.I18nManager = exports.FlatList = exports.Easing = exports.Dimensions = exports.DeviceEventEmitter = exports.Clipboard = exports.CheckBox = exports.Button = exports.BackHandler = exports.Appearance = exports.AppState = exports.AppRegistry = exports.Animated = exports.Alert = exports.ActivityIndicator = exports.AccessibilityInfo = void 0;
|
|
6
6
|
var _createElement = _interopRequireDefault(require("./exports/createElement"));
|
|
7
7
|
exports.unstable_createElement = _createElement.default;
|
|
8
8
|
var _findNodeHandle = _interopRequireDefault(require("./exports/findNodeHandle"));
|
|
@@ -73,6 +73,8 @@ var _Image = _interopRequireDefault(require("./exports/Image"));
|
|
|
73
73
|
exports.Image = _Image.default;
|
|
74
74
|
var _ImageBackground = _interopRequireDefault(require("./exports/ImageBackground"));
|
|
75
75
|
exports.ImageBackground = _ImageBackground.default;
|
|
76
|
+
var _InputAccessoryView = _interopRequireDefault(require("./exports/InputAccessoryView"));
|
|
77
|
+
exports.InputAccessoryView = _InputAccessoryView.default;
|
|
76
78
|
var _KeyboardAvoidingView = _interopRequireDefault(require("./exports/KeyboardAvoidingView"));
|
|
77
79
|
exports.KeyboardAvoidingView = _KeyboardAvoidingView.default;
|
|
78
80
|
var _Modal = _interopRequireDefault(require("./exports/Modal"));
|
|
@@ -22,6 +22,7 @@ import ImageLoader from '../../modules/ImageLoader';
|
|
|
22
22
|
import PixelRatio from '../PixelRatio';
|
|
23
23
|
import StyleSheet from '../StyleSheet';
|
|
24
24
|
import TextAncestorContext from '../Text/TextAncestorContext';
|
|
25
|
+
import useLayoutEffect from '../../modules/useLayoutEffect';
|
|
25
26
|
import View from '../View';
|
|
26
27
|
import { warnOnce } from '../../modules/warnOnce';
|
|
27
28
|
var ERRORED = 'ERRORED';
|
|
@@ -222,16 +223,36 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
222
223
|
}
|
|
223
224
|
|
|
224
225
|
// Image loading
|
|
226
|
+
// Read the load handlers through a ref, so that a new handler identity does
|
|
227
|
+
// not abort and restart the request for the same uri.
|
|
228
|
+
var loadEventHandlersRef = React.useRef({
|
|
229
|
+
onError,
|
|
230
|
+
onLoad,
|
|
231
|
+
onLoadEnd,
|
|
232
|
+
onLoadStart
|
|
233
|
+
});
|
|
234
|
+
useLayoutEffect(() => {
|
|
235
|
+
loadEventHandlersRef.current = {
|
|
236
|
+
onError,
|
|
237
|
+
onLoad,
|
|
238
|
+
onLoadEnd,
|
|
239
|
+
onLoadStart
|
|
240
|
+
};
|
|
241
|
+
});
|
|
225
242
|
var uri = resolveAssetUri(source);
|
|
226
243
|
React.useEffect(() => {
|
|
227
244
|
abortPendingRequest();
|
|
228
245
|
if (uri != null) {
|
|
229
246
|
updateState(LOADING);
|
|
230
|
-
|
|
231
|
-
|
|
247
|
+
var _onLoadStart = loadEventHandlersRef.current.onLoadStart;
|
|
248
|
+
if (_onLoadStart) {
|
|
249
|
+
_onLoadStart();
|
|
232
250
|
}
|
|
233
251
|
requestRef.current = ImageLoader.load(uri, function load(e) {
|
|
234
252
|
updateState(LOADED);
|
|
253
|
+
var _loadEventHandlersRef = loadEventHandlersRef.current,
|
|
254
|
+
onLoad = _loadEventHandlersRef.onLoad,
|
|
255
|
+
onLoadEnd = _loadEventHandlersRef.onLoadEnd;
|
|
235
256
|
if (onLoad) {
|
|
236
257
|
onLoad(e);
|
|
237
258
|
}
|
|
@@ -240,6 +261,9 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
240
261
|
}
|
|
241
262
|
}, function error() {
|
|
242
263
|
updateState(ERRORED);
|
|
264
|
+
var _loadEventHandlersRef2 = loadEventHandlersRef.current,
|
|
265
|
+
onError = _loadEventHandlersRef2.onError,
|
|
266
|
+
onLoadEnd = _loadEventHandlersRef2.onLoadEnd;
|
|
243
267
|
if (onError) {
|
|
244
268
|
onError({
|
|
245
269
|
nativeEvent: {
|
|
@@ -259,7 +283,7 @@ var Image = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
259
283
|
}
|
|
260
284
|
}
|
|
261
285
|
return abortPendingRequest;
|
|
262
|
-
}, [uri, requestRef, updateState
|
|
286
|
+
}, [uri, requestRef, updateState]);
|
|
263
287
|
return /*#__PURE__*/React.createElement(View, _extends({}, rest, {
|
|
264
288
|
"aria-label": ariaLabel,
|
|
265
289
|
onLayout: handleLayout,
|
|
@@ -19,6 +19,7 @@ import ImageLoader from '../../modules/ImageLoader';
|
|
|
19
19
|
import PixelRatio from '../PixelRatio';
|
|
20
20
|
import StyleSheet from '../StyleSheet';
|
|
21
21
|
import TextAncestorContext from '../Text/TextAncestorContext';
|
|
22
|
+
import useLayoutEffect from '../../modules/useLayoutEffect';
|
|
22
23
|
import View from '../View';
|
|
23
24
|
import { warnOnce } from '../../modules/warnOnce';
|
|
24
25
|
export type { ImageProps };
|
|
@@ -97,16 +98,39 @@ const Image: React.AbstractComponent<ImageProps, React.ElementRef<typeof View>>
|
|
|
97
98
|
}) : null;
|
|
98
99
|
declare function getBackgroundSize(): ?string;
|
|
99
100
|
declare function handleLayout(e: any): any; // Image loading
|
|
101
|
+
// Read the load handlers through a ref, so that a new handler identity does
|
|
102
|
+
// not abort and restart the request for the same uri.
|
|
103
|
+
const loadEventHandlersRef = React.useRef({
|
|
104
|
+
onError,
|
|
105
|
+
onLoad,
|
|
106
|
+
onLoadEnd,
|
|
107
|
+
onLoadStart
|
|
108
|
+
});
|
|
109
|
+
useLayoutEffect(() => {
|
|
110
|
+
loadEventHandlersRef.current = {
|
|
111
|
+
onError,
|
|
112
|
+
onLoad,
|
|
113
|
+
onLoadEnd,
|
|
114
|
+
onLoadStart
|
|
115
|
+
};
|
|
116
|
+
});
|
|
100
117
|
const uri = resolveAssetUri(source);
|
|
101
118
|
React.useEffect(() => {
|
|
102
119
|
abortPendingRequest();
|
|
103
120
|
if (uri != null) {
|
|
104
121
|
updateState(LOADING);
|
|
122
|
+
const {
|
|
123
|
+
onLoadStart
|
|
124
|
+
} = loadEventHandlersRef.current;
|
|
105
125
|
if (onLoadStart) {
|
|
106
126
|
onLoadStart();
|
|
107
127
|
}
|
|
108
128
|
requestRef.current = ImageLoader.load(uri, function load(e) {
|
|
109
129
|
updateState(LOADED);
|
|
130
|
+
const {
|
|
131
|
+
onLoad,
|
|
132
|
+
onLoadEnd
|
|
133
|
+
} = loadEventHandlersRef.current;
|
|
110
134
|
if (onLoad) {
|
|
111
135
|
onLoad(e);
|
|
112
136
|
}
|
|
@@ -115,6 +139,10 @@ const Image: React.AbstractComponent<ImageProps, React.ElementRef<typeof View>>
|
|
|
115
139
|
}
|
|
116
140
|
}, function error() {
|
|
117
141
|
updateState(ERRORED);
|
|
142
|
+
const {
|
|
143
|
+
onError,
|
|
144
|
+
onLoadEnd
|
|
145
|
+
} = loadEventHandlersRef.current;
|
|
118
146
|
if (onError) {
|
|
119
147
|
onError({
|
|
120
148
|
nativeEvent: {
|
|
@@ -129,7 +157,7 @@ const Image: React.AbstractComponent<ImageProps, React.ElementRef<typeof View>>
|
|
|
129
157
|
}
|
|
130
158
|
declare function abortPendingRequest(): any;
|
|
131
159
|
return abortPendingRequest;
|
|
132
|
-
}, [uri, requestRef, updateState
|
|
160
|
+
}, [uri, requestRef, updateState]);
|
|
133
161
|
return <View {...rest} aria-label={ariaLabel} onLayout={handleLayout} pointerEvents={pointerEvents} ref={ref} style={[styles.root, hasTextAncestor && styles.inline, imageSizeStyle, style, styles.undo,
|
|
134
162
|
// TEMP: avoid deprecated shadow props regression
|
|
135
163
|
// until Image refactored to use createElement.
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,7 @@ export { default as CheckBox } from './exports/CheckBox';
|
|
|
37
37
|
export { default as FlatList } from './exports/FlatList';
|
|
38
38
|
export { default as Image } from './exports/Image';
|
|
39
39
|
export { default as ImageBackground } from './exports/ImageBackground';
|
|
40
|
+
export { default as InputAccessoryView } from './exports/InputAccessoryView';
|
|
40
41
|
export { default as KeyboardAvoidingView } from './exports/KeyboardAvoidingView';
|
|
41
42
|
export { default as Modal } from './exports/Modal';
|
|
42
43
|
export { default as Picker } from './exports/Picker';
|
package/dist/index.js.flow
CHANGED
|
@@ -38,6 +38,7 @@ export { default as CheckBox } from './exports/CheckBox';
|
|
|
38
38
|
export { default as FlatList } from './exports/FlatList';
|
|
39
39
|
export { default as Image } from './exports/Image';
|
|
40
40
|
export { default as ImageBackground } from './exports/ImageBackground';
|
|
41
|
+
export { default as InputAccessoryView } from './exports/InputAccessoryView';
|
|
41
42
|
export { default as KeyboardAvoidingView } from './exports/KeyboardAvoidingView';
|
|
42
43
|
export { default as Modal } from './exports/Modal';
|
|
43
44
|
export { default as Picker } from './exports/Picker';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@depup/react-native-web",
|
|
3
|
-
"version": "0.21.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.21.3-depup.0",
|
|
4
|
+
"description": "React Native for Web (with updated dependencies)",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"dev": "npm-run-all clean -p \"build:* {@} -- --watch\""
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@babel/runtime": "^
|
|
25
|
-
"@react-native/normalize-colors": "^0.
|
|
24
|
+
"@babel/runtime": "^8.0.5",
|
|
25
|
+
"@react-native/normalize-colors": "^0.87.1",
|
|
26
26
|
"fbjs": "^3.0.5",
|
|
27
27
|
"inline-style-prefixer": "^7.0.1",
|
|
28
28
|
"memoize-one": "^6.0.0",
|
|
@@ -38,16 +38,18 @@
|
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"repository": {
|
|
40
40
|
"type": "git",
|
|
41
|
-
"url": "git://github.com/necolas/react-native-web.git"
|
|
41
|
+
"url": "git+https://github.com/necolas/react-native-web.git"
|
|
42
42
|
},
|
|
43
43
|
"tags": [
|
|
44
44
|
"react"
|
|
45
45
|
],
|
|
46
46
|
"keywords": [
|
|
47
|
-
"depup",
|
|
48
|
-
"dependency-bumped",
|
|
49
|
-
"updated-deps",
|
|
50
47
|
"react-native-web",
|
|
48
|
+
"depup",
|
|
49
|
+
"updated-dependencies",
|
|
50
|
+
"security",
|
|
51
|
+
"latest",
|
|
52
|
+
"patched",
|
|
51
53
|
"react",
|
|
52
54
|
"react-component",
|
|
53
55
|
"react-native",
|
|
@@ -57,11 +59,11 @@
|
|
|
57
59
|
"changes": {
|
|
58
60
|
"@babel/runtime": {
|
|
59
61
|
"from": "^7.18.6",
|
|
60
|
-
"to": "^
|
|
62
|
+
"to": "^8.0.5"
|
|
61
63
|
},
|
|
62
64
|
"@react-native/normalize-colors": {
|
|
63
65
|
"from": "^0.74.1",
|
|
64
|
-
"to": "^0.
|
|
66
|
+
"to": "^0.87.1"
|
|
65
67
|
},
|
|
66
68
|
"fbjs": {
|
|
67
69
|
"from": "^3.0.4",
|
|
@@ -74,8 +76,8 @@
|
|
|
74
76
|
},
|
|
75
77
|
"depsUpdated": 4,
|
|
76
78
|
"originalPackage": "react-native-web",
|
|
77
|
-
"originalVersion": "0.21.
|
|
78
|
-
"processedAt": "2026-
|
|
79
|
+
"originalVersion": "0.21.3",
|
|
80
|
+
"processedAt": "2026-09-27T01:02:11.181Z",
|
|
79
81
|
"smokeTest": "failed"
|
|
80
82
|
}
|
|
81
83
|
}
|
|
@@ -20,6 +20,7 @@ import ImageLoader from '../../modules/ImageLoader';
|
|
|
20
20
|
import PixelRatio from '../PixelRatio';
|
|
21
21
|
import StyleSheet from '../StyleSheet';
|
|
22
22
|
import TextAncestorContext from '../Text/TextAncestorContext';
|
|
23
|
+
import useLayoutEffect from '../../modules/useLayoutEffect';
|
|
23
24
|
import View from '../View';
|
|
24
25
|
import { warnOnce } from '../../modules/warnOnce';
|
|
25
26
|
|
|
@@ -274,12 +275,26 @@ const Image: React.AbstractComponent<
|
|
|
274
275
|
}
|
|
275
276
|
|
|
276
277
|
// Image loading
|
|
278
|
+
// Read the load handlers through a ref, so that a new handler identity does
|
|
279
|
+
// not abort and restart the request for the same uri.
|
|
280
|
+
const loadEventHandlersRef = React.useRef({
|
|
281
|
+
onError,
|
|
282
|
+
onLoad,
|
|
283
|
+
onLoadEnd,
|
|
284
|
+
onLoadStart
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
useLayoutEffect(() => {
|
|
288
|
+
loadEventHandlersRef.current = { onError, onLoad, onLoadEnd, onLoadStart };
|
|
289
|
+
});
|
|
290
|
+
|
|
277
291
|
const uri = resolveAssetUri(source);
|
|
278
292
|
React.useEffect(() => {
|
|
279
293
|
abortPendingRequest();
|
|
280
294
|
|
|
281
295
|
if (uri != null) {
|
|
282
296
|
updateState(LOADING);
|
|
297
|
+
const { onLoadStart } = loadEventHandlersRef.current;
|
|
283
298
|
if (onLoadStart) {
|
|
284
299
|
onLoadStart();
|
|
285
300
|
}
|
|
@@ -288,6 +303,7 @@ const Image: React.AbstractComponent<
|
|
|
288
303
|
uri,
|
|
289
304
|
function load(e) {
|
|
290
305
|
updateState(LOADED);
|
|
306
|
+
const { onLoad, onLoadEnd } = loadEventHandlersRef.current;
|
|
291
307
|
if (onLoad) {
|
|
292
308
|
onLoad(e);
|
|
293
309
|
}
|
|
@@ -297,6 +313,7 @@ const Image: React.AbstractComponent<
|
|
|
297
313
|
},
|
|
298
314
|
function error() {
|
|
299
315
|
updateState(ERRORED);
|
|
316
|
+
const { onError, onLoadEnd } = loadEventHandlersRef.current;
|
|
300
317
|
if (onError) {
|
|
301
318
|
onError({
|
|
302
319
|
nativeEvent: {
|
|
@@ -319,7 +336,7 @@ const Image: React.AbstractComponent<
|
|
|
319
336
|
}
|
|
320
337
|
|
|
321
338
|
return abortPendingRequest;
|
|
322
|
-
}, [uri, requestRef, updateState
|
|
339
|
+
}, [uri, requestRef, updateState]);
|
|
323
340
|
|
|
324
341
|
return (
|
|
325
342
|
<View
|
package/src/index.js
CHANGED
|
@@ -38,6 +38,7 @@ export { default as CheckBox } from './exports/CheckBox';
|
|
|
38
38
|
export { default as FlatList } from './exports/FlatList';
|
|
39
39
|
export { default as Image } from './exports/Image';
|
|
40
40
|
export { default as ImageBackground } from './exports/ImageBackground';
|
|
41
|
+
export { default as InputAccessoryView } from './exports/InputAccessoryView';
|
|
41
42
|
export { default as KeyboardAvoidingView } from './exports/KeyboardAvoidingView';
|
|
42
43
|
export { default as Modal } from './exports/Modal';
|
|
43
44
|
export { default as Picker } from './exports/Picker';
|