1
1
import React , { useMemo , useState } from 'react' ;
2
2
import { View } from 'react-native' ;
3
+ import type { StyleProp , ViewStyle } from 'react-native' ;
3
4
import SkeletonViewContentLoader from '@components/SkeletonViewContentLoader' ;
4
5
import useTheme from '@hooks/useTheme' ;
5
6
import useThemeStyles from '@hooks/useThemeStyles' ;
@@ -9,9 +10,11 @@ type ListItemSkeletonProps = {
9
10
shouldAnimate ?: boolean ;
10
11
renderSkeletonItem : ( args : { itemIndex : number } ) => React . ReactNode ;
11
12
fixedNumItems ?: number ;
13
+ itemViewStyle ?: StyleProp < ViewStyle > ;
14
+ itemViewHeight ?: number ;
12
15
} ;
13
16
14
- function ItemListSkeletonView ( { shouldAnimate = true , renderSkeletonItem, fixedNumItems} : ListItemSkeletonProps ) {
17
+ function ItemListSkeletonView ( { shouldAnimate = true , renderSkeletonItem, fixedNumItems, itemViewStyle = { } , itemViewHeight = CONST . LHN_SKELETON_VIEW_ITEM_HEIGHT } : ListItemSkeletonProps ) {
15
18
const theme = useTheme ( ) ;
16
19
const themeStyles = useThemeStyles ( ) ;
17
20
@@ -20,20 +23,23 @@ function ItemListSkeletonView({shouldAnimate = true, renderSkeletonItem, fixedNu
20
23
const items = [ ] ;
21
24
for ( let i = 0 ; i < numItems ; i ++ ) {
22
25
items . push (
23
- < SkeletonViewContentLoader
26
+ < View
24
27
key = { `skeletonViewItems${ i } ` }
25
- animate = { shouldAnimate }
26
- height = { CONST . LHN_SKELETON_VIEW_ITEM_HEIGHT }
27
- backgroundColor = { theme . skeletonLHNIn }
28
- foregroundColor = { theme . skeletonLHNOut }
29
- style = { themeStyles . mr5 }
28
+ style = { [ themeStyles . mr5 , itemViewStyle ] }
30
29
>
31
- { renderSkeletonItem ( { itemIndex : i } ) }
32
- </ SkeletonViewContentLoader > ,
30
+ < SkeletonViewContentLoader
31
+ animate = { shouldAnimate }
32
+ height = { itemViewHeight }
33
+ backgroundColor = { theme . skeletonLHNIn }
34
+ foregroundColor = { theme . skeletonLHNOut }
35
+ >
36
+ { renderSkeletonItem ( { itemIndex : i } ) }
37
+ </ SkeletonViewContentLoader >
38
+ </ View > ,
33
39
) ;
34
40
}
35
41
return items ;
36
- } , [ numItems , shouldAnimate , theme , themeStyles , renderSkeletonItem ] ) ;
42
+ } , [ numItems , shouldAnimate , theme , themeStyles , renderSkeletonItem , itemViewHeight , itemViewStyle ] ) ;
37
43
38
44
return (
39
45
< View
@@ -43,7 +49,7 @@ function ItemListSkeletonView({shouldAnimate = true, renderSkeletonItem, fixedNu
43
49
return ;
44
50
}
45
51
46
- const newNumItems = Math . ceil ( event . nativeEvent . layout . height / CONST . LHN_SKELETON_VIEW_ITEM_HEIGHT ) ;
52
+ const newNumItems = Math . ceil ( event . nativeEvent . layout . height / itemViewHeight ) ;
47
53
if ( newNumItems === numItems ) {
48
54
return ;
49
55
}
0 commit comments