@@ -5,55 +5,32 @@ export interface URISource {
5
5
uri : string
6
6
}
7
7
8
- type ImageDimensions = {
9
- width : number
10
- height : number
11
- } | null
12
- type FailureCallback = ( error : any ) => void
13
-
14
- /**
15
- * @param source local file resource.
16
- * @returns Original image width and height.
17
- */
18
- function useImageDimensions ( source : ImageRequireSource ) : ImageDimensions
19
8
/**
20
- * @param source remote URL
21
- * @param failure the function that will be called if there was an error, such as failing to retrieve the image (see https://reactnative.dev/docs/image#getsize).
22
- * @returns Original image width and height.
9
+ * @param source either a remote URL or a local file resource.
10
+ * @returns original image width and height.
23
11
*/
24
- function useImageDimensions (
25
- source : URISource ,
26
- failure ?: FailureCallback ,
27
- ) : ImageDimensions
28
- function useImageDimensions (
29
- source : ImageRequireSource | URISource ,
30
- failure ?: FailureCallback ,
31
- ) : ImageDimensions
32
- function useImageDimensions (
33
- source : ImageRequireSource | URISource ,
34
- failure ?: FailureCallback ,
35
- ) {
36
- const [ dimensions , setDimensions ] = useState < ImageDimensions > ( )
12
+ function useImageDimensions ( source : ImageRequireSource | URISource ) {
13
+ const [ state , setState ] = useState < {
14
+ width ?: number
15
+ height ?: number
16
+ loading ?: boolean
17
+ error ?: any
18
+ } > ( { } )
37
19
useEffect ( ( ) => {
38
- if ( typeof source === 'object' ) {
39
- const { uri } = source
20
+ if ( typeof source === 'object' && typeof source . uri === 'string' ) {
21
+ setState ( { loading : true } )
40
22
Image . getSize (
41
- uri ,
42
- ( width , height ) => setDimensions ( { width, height} ) ,
43
- error => {
44
- setDimensions ( null )
45
- if ( failure ) {
46
- failure ( error )
47
- } else {
48
- console . error ( error )
49
- }
50
- } ,
23
+ source . uri ,
24
+ ( width , height ) => setState ( { width, height} ) ,
25
+ error => setState ( { error} ) ,
51
26
)
27
+ } else if ( typeof source === 'number' ) {
28
+ setState ( Image . resolveAssetSource ( source ) )
52
29
} else {
53
- setDimensions ( Image . resolveAssetSource ( source ) )
30
+ setState ( { error : 'not implemented' } )
54
31
}
55
- } , [ source , failure ] )
56
- return dimensions
32
+ } , [ source ] )
33
+ return state
57
34
}
58
35
59
36
export default useImageDimensions
0 commit comments