index.js
2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import React, {useEffect} from 'react';
import {SafeAreaView} from 'react-native-safe-area-context';
import {Divider, Icon, ListItem, Text} from '@rneui/themed';
import {useDispatch, useSelector} from 'react-redux';
import {fetchCameras, selectAllCameras} from '../cameraSlice';
import {FlatList} from 'react-native';
import {StyleSheet} from 'react-native';
const List = ({navigation}) => {
const dispatch = useDispatch();
const cameras = useSelector(selectAllCameras);
const cameraStatus = useSelector(state => state.cameras.status);
const error = useSelector(state => state.cameras.error);
useEffect(() => {
if (cameraStatus === 'idle') {
dispatch(fetchCameras());
}
}, [cameraStatus, dispatch]);
let content;
if (cameraStatus === 'loading') {
content = <Text>loading</Text>;
} else if (cameraStatus === 'succeeded') {
content = (
<FlatList
data={cameras}
keyExtractor={item => item.id}
renderItem={({item}) => {
return (
<ListItem
bottomDivider
onPress={() => {
if (item?.onlineStatus === 1) {
navigation.navigate('Camera', {
deviceId: item.deviceId,
id: item.id,
});
}
}}>
<Icon
name="circle"
color={item?.onlineStatus === 1 ? '#52c41a' : '#ff4d4f'}
/>
<ListItem.Content>
<ListItem.Title>{item?.name}</ListItem.Title>
</ListItem.Content>
<ListItem.Chevron />
</ListItem>
);
}}
/>
);
} else if (cameraStatus === 'failed') {
content = <Text>{error}</Text>;
}
return (
<SafeAreaView>
{/*<Text style={styles.title}>设备列表</Text>*/}
<Divider />
{content}
</SafeAreaView>
);
};
const styles = StyleSheet.create({
title: {
backgroundColor: '#fff',
padding: 10,
fontSize: 20,
paddingLeft: 26,
},
});
export default List;