stream-chat-react-native-core 5.11.3-beta.7 → 5.12.0-beta.2
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/lib/commonjs/components/Attachment/Gallery.js +38 -22
- package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
- package/lib/commonjs/components/Attachment/ImageReloadIndicator.js +40 -0
- package/lib/commonjs/components/Attachment/ImageReloadIndicator.js.map +1 -0
- package/lib/commonjs/components/Channel/Channel.js +20 -18
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/hooks/useLoadingImage.js +57 -16
- package/lib/commonjs/hooks/useLoadingImage.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/Gallery.js +38 -22
- package/lib/module/components/Attachment/Gallery.js.map +1 -1
- package/lib/module/components/Attachment/ImageReloadIndicator.js +40 -0
- package/lib/module/components/Attachment/ImageReloadIndicator.js.map +1 -0
- package/lib/module/components/Channel/Channel.js +20 -18
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/hooks/useLoadingImage.js +57 -16
- package/lib/module/hooks/useLoadingImage.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/ImageReloadIndicator.d.ts +6 -0
- package/lib/typescript/hooks/useLoadingImage.d.ts +3 -3
- package/package.json +1 -1
- package/src/components/Attachment/Gallery.tsx +22 -5
- package/src/components/Attachment/ImageReloadIndicator.tsx +27 -0
- package/src/components/Attachment/__tests__/Gallery.test.js +3 -1
- package/src/components/Channel/Channel.tsx +4 -1
- package/src/hooks/useLoadingImage.tsx +57 -9
- package/src/version.json +1 -1
|
@@ -4,29 +4,70 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.useLoadingImage = void 0;
|
|
6
6
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
8
|
var _react = require("react");
|
|
8
|
-
var
|
|
9
|
+
var _ChatContext = require("../contexts/chatContext/ChatContext");
|
|
10
|
+
function reducer(prevState, action) {
|
|
11
|
+
switch (action.type) {
|
|
12
|
+
case 'reloadImage':
|
|
13
|
+
return (0, _extends2["default"])({}, prevState, {
|
|
14
|
+
isLoadingImage: true,
|
|
15
|
+
isLoadingImageError: false
|
|
16
|
+
});
|
|
17
|
+
case 'setLoadingImage':
|
|
18
|
+
return (0, _extends2["default"])({}, prevState, {
|
|
19
|
+
isLoadingImage: action.isLoadingImage
|
|
20
|
+
});
|
|
21
|
+
case 'setLoadingImageError':
|
|
22
|
+
return (0, _extends2["default"])({}, prevState, {
|
|
23
|
+
isLoadingImageError: action.isLoadingImageError
|
|
24
|
+
});
|
|
25
|
+
default:
|
|
26
|
+
return prevState;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
9
29
|
var useLoadingImage = function useLoadingImage() {
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
var _useReducer = (0, _react.useReducer)(reducer, {
|
|
31
|
+
isLoadingImage: true,
|
|
32
|
+
isLoadingImageError: false
|
|
33
|
+
}),
|
|
34
|
+
_useReducer2 = (0, _slicedToArray2["default"])(_useReducer, 2),
|
|
35
|
+
imageState = _useReducer2[0],
|
|
36
|
+
dispatch = _useReducer2[1];
|
|
37
|
+
var isLoadingImage = imageState.isLoadingImage,
|
|
38
|
+
isLoadingImageError = imageState.isLoadingImageError;
|
|
39
|
+
var onReloadImageRef = (0, _react.useRef)(function () {
|
|
40
|
+
return dispatch({
|
|
41
|
+
type: 'reloadImage'
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
var setLoadingImageRef = (0, _react.useRef)(function (isLoadingImage) {
|
|
45
|
+
return dispatch({
|
|
46
|
+
isLoadingImage: isLoadingImage,
|
|
47
|
+
type: 'setLoadingImage'
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
var setLoadingImageErrorRef = (0, _react.useRef)(function (isLoadingImageError) {
|
|
51
|
+
return dispatch({
|
|
52
|
+
isLoadingImageError: isLoadingImageError,
|
|
53
|
+
type: 'setLoadingImageError'
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
var _useChatContext = (0, _ChatContext.useChatContext)(),
|
|
57
|
+
isOnline = _useChatContext.isOnline;
|
|
58
|
+
var hasImageLoadedErroredRef = (0, _react.useRef)(isLoadingImageError);
|
|
59
|
+
hasImageLoadedErroredRef.current = isLoadingImageError;
|
|
20
60
|
(0, _react.useEffect)(function () {
|
|
21
|
-
if (
|
|
22
|
-
|
|
61
|
+
if (isOnline && hasImageLoadedErroredRef.current) {
|
|
62
|
+
onReloadImageRef.current();
|
|
23
63
|
}
|
|
24
|
-
}, [
|
|
64
|
+
}, [isOnline]);
|
|
25
65
|
return {
|
|
26
66
|
isLoadingImage: isLoadingImage,
|
|
27
67
|
isLoadingImageError: isLoadingImageError,
|
|
28
|
-
|
|
29
|
-
|
|
68
|
+
onReloadImage: onReloadImageRef.current,
|
|
69
|
+
setLoadingImage: setLoadingImageRef.current,
|
|
70
|
+
setLoadingImageError: setLoadingImageErrorRef.current
|
|
30
71
|
};
|
|
31
72
|
};
|
|
32
73
|
exports.useLoadingImage = useLoadingImage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","
|
|
1
|
+
{"version":3,"names":["_react","require","_ChatContext","reducer","prevState","action","type","_extends2","isLoadingImage","isLoadingImageError","useLoadingImage","_useReducer","useReducer","_useReducer2","_slicedToArray2","imageState","dispatch","onReloadImageRef","useRef","setLoadingImageRef","setLoadingImageErrorRef","_useChatContext","useChatContext","isOnline","hasImageLoadedErroredRef","current","useEffect","onReloadImage","setLoadingImage","setLoadingImageError","exports"],"sources":["useLoadingImage.tsx"],"sourcesContent":["import { useEffect, useReducer, useRef } from 'react';\n\nimport { useChatContext } from '../contexts/chatContext/ChatContext';\n\ntype ImageState = {\n isLoadingImage: boolean;\n isLoadingImageError: boolean;\n};\n\ntype Action =\n | { type: 'reloadImage' }\n | { isLoadingImage: boolean; type: 'setLoadingImage' }\n | { isLoadingImageError: boolean; type: 'setLoadingImageError' };\n\nfunction reducer(prevState: ImageState, action: Action) {\n switch (action.type) {\n case 'reloadImage':\n return {\n ...prevState,\n isLoadingImage: true,\n isLoadingImageError: false,\n };\n case 'setLoadingImage':\n return { ...prevState, isLoadingImage: action.isLoadingImage };\n case 'setLoadingImageError':\n return { ...prevState, isLoadingImageError: action.isLoadingImageError };\n default:\n return prevState;\n }\n}\nexport const useLoadingImage = () => {\n const [imageState, dispatch] = useReducer(reducer, {\n isLoadingImage: true,\n isLoadingImageError: false,\n });\n const { isLoadingImage, isLoadingImageError } = imageState;\n const onReloadImageRef = useRef(() => dispatch({ type: 'reloadImage' }));\n const setLoadingImageRef = useRef((isLoadingImage: boolean) =>\n dispatch({ isLoadingImage, type: 'setLoadingImage' }),\n );\n const setLoadingImageErrorRef = useRef((isLoadingImageError: boolean) =>\n dispatch({ isLoadingImageError, type: 'setLoadingImageError' }),\n );\n const { isOnline } = useChatContext();\n\n // storing the value of isLoadingImageError in a ref to avoid passing as a dep to useEffect\n const hasImageLoadedErroredRef = useRef(isLoadingImageError);\n hasImageLoadedErroredRef.current = isLoadingImageError;\n\n useEffect(() => {\n if (isOnline && hasImageLoadedErroredRef.current) {\n // if there was an error previously, reload the image automatically when user comes back online\n onReloadImageRef.current();\n }\n }, [isOnline]);\n\n return {\n isLoadingImage,\n isLoadingImageError,\n onReloadImage: onReloadImageRef.current,\n setLoadingImage: setLoadingImageRef.current,\n setLoadingImageError: setLoadingImageErrorRef.current,\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AAYA,SAASE,OAAOA,CAACC,SAAqB,EAAEC,MAAc,EAAE;EACtD,QAAQA,MAAM,CAACC,IAAI;IACjB,KAAK,aAAa;MAChB,WAAAC,SAAA,iBACKH,SAAS;QACZI,cAAc,EAAE,IAAI;QACpBC,mBAAmB,EAAE;MAAK;IAE9B,KAAK,iBAAiB;MACpB,WAAAF,SAAA,iBAAYH,SAAS;QAAEI,cAAc,EAAEH,MAAM,CAACG;MAAc;IAC9D,KAAK,sBAAsB;MACzB,WAAAD,SAAA,iBAAYH,SAAS;QAAEK,mBAAmB,EAAEJ,MAAM,CAACI;MAAmB;IACxE;MACE,OAAOL,SAAS;EAAC;AAEvB;AACO,IAAMM,eAAe,GAAG,SAAlBA,eAAeA,CAAA,EAAS;EACnC,IAAAC,WAAA,GAA+B,IAAAC,iBAAU,EAACT,OAAO,EAAE;MACjDK,cAAc,EAAE,IAAI;MACpBC,mBAAmB,EAAE;IACvB,CAAC,CAAC;IAAAI,YAAA,OAAAC,eAAA,aAAAH,WAAA;IAHKI,UAAU,GAAAF,YAAA;IAAEG,QAAQ,GAAAH,YAAA;EAI3B,IAAQL,cAAc,GAA0BO,UAAU,CAAlDP,cAAc;IAAEC,mBAAmB,GAAKM,UAAU,CAAlCN,mBAAmB;EAC3C,IAAMQ,gBAAgB,GAAG,IAAAC,aAAM,EAAC;IAAA,OAAMF,QAAQ,CAAC;MAAEV,IAAI,EAAE;IAAc,CAAC,CAAC;EAAA,EAAC;EACxE,IAAMa,kBAAkB,GAAG,IAAAD,aAAM,EAAC,UAACV,cAAuB;IAAA,OACxDQ,QAAQ,CAAC;MAAER,cAAc,EAAdA,cAAc;MAAEF,IAAI,EAAE;IAAkB,CAAC,CAAC;EAAA,EACtD;EACD,IAAMc,uBAAuB,GAAG,IAAAF,aAAM,EAAC,UAACT,mBAA4B;IAAA,OAClEO,QAAQ,CAAC;MAAEP,mBAAmB,EAAnBA,mBAAmB;MAAEH,IAAI,EAAE;IAAuB,CAAC,CAAC;EAAA,EAChE;EACD,IAAAe,eAAA,GAAqB,IAAAC,2BAAc,GAAE;IAA7BC,QAAQ,GAAAF,eAAA,CAARE,QAAQ;EAGhB,IAAMC,wBAAwB,GAAG,IAAAN,aAAM,EAACT,mBAAmB,CAAC;EAC5De,wBAAwB,CAACC,OAAO,GAAGhB,mBAAmB;EAEtD,IAAAiB,gBAAS,EAAC,YAAM;IACd,IAAIH,QAAQ,IAAIC,wBAAwB,CAACC,OAAO,EAAE;MAEhDR,gBAAgB,CAACQ,OAAO,EAAE;IAC5B;EACF,CAAC,EAAE,CAACF,QAAQ,CAAC,CAAC;EAEd,OAAO;IACLf,cAAc,EAAdA,cAAc;IACdC,mBAAmB,EAAnBA,mBAAmB;IACnBkB,aAAa,EAAEV,gBAAgB,CAACQ,OAAO;IACvCG,eAAe,EAAET,kBAAkB,CAACM,OAAO;IAC3CI,oBAAoB,EAAET,uBAAuB,CAACK;EAChD,CAAC;AACH,CAAC;AAACK,OAAA,CAAApB,eAAA,GAAAA,eAAA"}
|
package/lib/module/version.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
export declare const useLoadingImage: () => {
|
|
3
2
|
isLoadingImage: boolean;
|
|
4
3
|
isLoadingImageError: boolean;
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
onReloadImage: () => void;
|
|
5
|
+
setLoadingImage: (isLoadingImage: boolean) => void;
|
|
6
|
+
setLoadingImageError: (isLoadingImageError: boolean) => void;
|
|
7
7
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stream-chat-react-native-core",
|
|
3
3
|
"description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.12.0-beta.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -4,6 +4,7 @@ import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
|
4
4
|
import type { Attachment } from 'stream-chat';
|
|
5
5
|
|
|
6
6
|
import { GalleryImage } from './GalleryImage';
|
|
7
|
+
import { ImageReloadIndicator } from './ImageReloadIndicator';
|
|
7
8
|
import { buildGallery } from './utils/buildGallery/buildGallery';
|
|
8
9
|
|
|
9
10
|
import type { Thumbnail } from './utils/buildGallery/types';
|
|
@@ -67,6 +68,11 @@ const styles = StyleSheet.create({
|
|
|
67
68
|
justifyContent: 'center',
|
|
68
69
|
position: 'absolute',
|
|
69
70
|
},
|
|
71
|
+
imageReloadContainerStyle: {
|
|
72
|
+
...StyleSheet.absoluteFillObject,
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
justifyContent: 'center',
|
|
75
|
+
},
|
|
70
76
|
moreImagesContainer: {
|
|
71
77
|
alignItems: 'center',
|
|
72
78
|
justifyContent: 'center',
|
|
@@ -452,8 +458,13 @@ const GalleryImageThumbnail = <
|
|
|
452
458
|
GalleryThumbnailProps<StreamChatGenerics>,
|
|
453
459
|
'ImageLoadingFailedIndicator' | 'ImageLoadingIndicator' | 'thumbnail' | 'borderRadius'
|
|
454
460
|
>) => {
|
|
455
|
-
const {
|
|
456
|
-
|
|
461
|
+
const {
|
|
462
|
+
isLoadingImage,
|
|
463
|
+
isLoadingImageError,
|
|
464
|
+
onReloadImage,
|
|
465
|
+
setLoadingImage,
|
|
466
|
+
setLoadingImageError,
|
|
467
|
+
} = useLoadingImage();
|
|
457
468
|
|
|
458
469
|
const {
|
|
459
470
|
theme: {
|
|
@@ -471,11 +482,17 @@ const GalleryImageThumbnail = <
|
|
|
471
482
|
}}
|
|
472
483
|
>
|
|
473
484
|
{isLoadingImageError ? (
|
|
474
|
-
|
|
485
|
+
<>
|
|
486
|
+
<ImageLoadingFailedIndicator style={styles.imageLoadingErrorIndicatorStyle} />
|
|
487
|
+
<ImageReloadIndicator
|
|
488
|
+
onReloadImage={onReloadImage}
|
|
489
|
+
style={styles.imageReloadContainerStyle}
|
|
490
|
+
/>
|
|
491
|
+
</>
|
|
475
492
|
) : (
|
|
476
493
|
<>
|
|
477
494
|
<GalleryImage
|
|
478
|
-
onError={(error) => {
|
|
495
|
+
onError={({ nativeEvent: { error } }) => {
|
|
479
496
|
console.warn(error);
|
|
480
497
|
setLoadingImage(false);
|
|
481
498
|
setLoadingImageError(true);
|
|
@@ -494,7 +511,7 @@ const GalleryImageThumbnail = <
|
|
|
494
511
|
uri={thumbnail.url}
|
|
495
512
|
/>
|
|
496
513
|
{isLoadingImage && (
|
|
497
|
-
<View style={
|
|
514
|
+
<View style={styles.imageLoadingIndicatorContainer}>
|
|
498
515
|
<ImageLoadingIndicator style={styles.imageLoadingIndicatorStyle} />
|
|
499
516
|
</View>
|
|
500
517
|
)}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Pressable } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { useTheme } from '../../contexts/themeContext/ThemeContext';
|
|
5
|
+
import { Refresh } from '../../icons';
|
|
6
|
+
|
|
7
|
+
const REFRESH_ICON_SIZE = 24;
|
|
8
|
+
|
|
9
|
+
export const ImageReloadIndicator = ({
|
|
10
|
+
onReloadImage,
|
|
11
|
+
style,
|
|
12
|
+
}: {
|
|
13
|
+
onReloadImage: () => void;
|
|
14
|
+
style: React.ComponentProps<typeof Pressable>['style'];
|
|
15
|
+
}) => {
|
|
16
|
+
const {
|
|
17
|
+
theme: {
|
|
18
|
+
colors: { grey_dark },
|
|
19
|
+
},
|
|
20
|
+
} = useTheme();
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<Pressable onPress={onReloadImage} style={style}>
|
|
24
|
+
<Refresh height={REFRESH_ICON_SIZE} pathFill={grey_dark} width={REFRESH_ICON_SIZE} />
|
|
25
|
+
</Pressable>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
@@ -270,7 +270,9 @@ describe('Gallery', () => {
|
|
|
270
270
|
expect(queryAllByTestId('gallery-container').length).toBe(1);
|
|
271
271
|
});
|
|
272
272
|
|
|
273
|
-
fireEvent(getByA11yLabel('Gallery Image'), 'error'
|
|
273
|
+
fireEvent(getByA11yLabel('Gallery Image'), 'error', {
|
|
274
|
+
nativeEvent: { error: 'error loading image' },
|
|
275
|
+
});
|
|
274
276
|
expect(getByAccessibilityHint('image-loading-error')).toBeTruthy();
|
|
275
277
|
});
|
|
276
278
|
|
|
@@ -640,7 +640,10 @@ const ChannelWithContext = <
|
|
|
640
640
|
}, [threadPropsExists]);
|
|
641
641
|
|
|
642
642
|
const handleAppBackground = useCallback(() => {
|
|
643
|
-
|
|
643
|
+
const channelData = channel.data as
|
|
644
|
+
| Extract<typeof channel.data, { own_capabilities: string[] }>
|
|
645
|
+
| undefined;
|
|
646
|
+
if (channelData?.own_capabilities?.includes('send-typing-events')) {
|
|
644
647
|
channel.sendEvent({
|
|
645
648
|
parent_id: thread?.id,
|
|
646
649
|
type: 'typing.stop',
|
|
@@ -1,16 +1,64 @@
|
|
|
1
|
-
import { useEffect,
|
|
1
|
+
import { useEffect, useReducer, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useChatContext } from '../contexts/chatContext/ChatContext';
|
|
4
4
|
|
|
5
|
+
type ImageState = {
|
|
6
|
+
isLoadingImage: boolean;
|
|
7
|
+
isLoadingImageError: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type Action =
|
|
11
|
+
| { type: 'reloadImage' }
|
|
12
|
+
| { isLoadingImage: boolean; type: 'setLoadingImage' }
|
|
13
|
+
| { isLoadingImageError: boolean; type: 'setLoadingImageError' };
|
|
14
|
+
|
|
15
|
+
function reducer(prevState: ImageState, action: Action) {
|
|
16
|
+
switch (action.type) {
|
|
17
|
+
case 'reloadImage':
|
|
18
|
+
return {
|
|
19
|
+
...prevState,
|
|
20
|
+
isLoadingImage: true,
|
|
21
|
+
isLoadingImageError: false,
|
|
22
|
+
};
|
|
23
|
+
case 'setLoadingImage':
|
|
24
|
+
return { ...prevState, isLoadingImage: action.isLoadingImage };
|
|
25
|
+
case 'setLoadingImageError':
|
|
26
|
+
return { ...prevState, isLoadingImageError: action.isLoadingImageError };
|
|
27
|
+
default:
|
|
28
|
+
return prevState;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
5
31
|
export const useLoadingImage = () => {
|
|
6
|
-
const [
|
|
7
|
-
|
|
8
|
-
|
|
32
|
+
const [imageState, dispatch] = useReducer(reducer, {
|
|
33
|
+
isLoadingImage: true,
|
|
34
|
+
isLoadingImageError: false,
|
|
35
|
+
});
|
|
36
|
+
const { isLoadingImage, isLoadingImageError } = imageState;
|
|
37
|
+
const onReloadImageRef = useRef(() => dispatch({ type: 'reloadImage' }));
|
|
38
|
+
const setLoadingImageRef = useRef((isLoadingImage: boolean) =>
|
|
39
|
+
dispatch({ isLoadingImage, type: 'setLoadingImage' }),
|
|
40
|
+
);
|
|
41
|
+
const setLoadingImageErrorRef = useRef((isLoadingImageError: boolean) =>
|
|
42
|
+
dispatch({ isLoadingImageError, type: 'setLoadingImageError' }),
|
|
43
|
+
);
|
|
44
|
+
const { isOnline } = useChatContext();
|
|
45
|
+
|
|
46
|
+
// storing the value of isLoadingImageError in a ref to avoid passing as a dep to useEffect
|
|
47
|
+
const hasImageLoadedErroredRef = useRef(isLoadingImageError);
|
|
48
|
+
hasImageLoadedErroredRef.current = isLoadingImageError;
|
|
49
|
+
|
|
9
50
|
useEffect(() => {
|
|
10
|
-
if (
|
|
11
|
-
|
|
51
|
+
if (isOnline && hasImageLoadedErroredRef.current) {
|
|
52
|
+
// if there was an error previously, reload the image automatically when user comes back online
|
|
53
|
+
onReloadImageRef.current();
|
|
12
54
|
}
|
|
13
|
-
}, [
|
|
55
|
+
}, [isOnline]);
|
|
14
56
|
|
|
15
|
-
return {
|
|
57
|
+
return {
|
|
58
|
+
isLoadingImage,
|
|
59
|
+
isLoadingImageError,
|
|
60
|
+
onReloadImage: onReloadImageRef.current,
|
|
61
|
+
setLoadingImage: setLoadingImageRef.current,
|
|
62
|
+
setLoadingImageError: setLoadingImageErrorRef.current,
|
|
63
|
+
};
|
|
16
64
|
};
|
package/src/version.json
CHANGED