Skip to content

Commit 45887f4

Browse files
committed
[useImageDimensions] refactoring
1 parent 7e40f17 commit 45887f4

File tree

2 files changed

+22
-53
lines changed

2 files changed

+22
-53
lines changed

README.md

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,11 @@ const screen = useDimensions().screen
110110
```js
111111
import {useImageDimensions} from '@react-native-community/hooks'
112112

113-
const imageDimensions = useImageDimensions(require('./assets/yourImage.png'))
113+
const source = require('./assets/yourImage.png')
114114
// or
115-
const imageDimensions = useImageDimensions({uri: 'https://your.image.URI'})
116-
// or
117-
const imageDimensions = useImageDimensions({uri: 'https://your.image.URI'}, error => {
118-
onImageFetchFailure(error)
119-
})
120-
121-
if (!imageDimensions) {
122-
return null
123-
}
115+
const source = {uri: 'https://your.image.URI'}
124116

125-
const {width, height} = imageDimensions
117+
const {width, height, loading, error} = useImageDimensions(source)
126118
```
127119

128120
### `useKeyboard`

src/useImageDimensions.ts

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,55 +5,32 @@ export interface URISource {
55
uri: string
66
}
77

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
198
/**
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.
2311
*/
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+
}>({})
3719
useEffect(() => {
38-
if (typeof source === 'object') {
39-
const {uri} = source
20+
if (typeof source === 'object' && typeof source.uri === 'string') {
21+
setState({loading: true})
4022
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}),
5126
)
27+
} else if (typeof source === 'number') {
28+
setState(Image.resolveAssetSource(source))
5229
} else {
53-
setDimensions(Image.resolveAssetSource(source))
30+
setState({error: 'not implemented'})
5431
}
55-
}, [source, failure])
56-
return dimensions
32+
}, [source])
33+
return state
5734
}
5835

5936
export default useImageDimensions

0 commit comments

Comments
 (0)