-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.tsx
61 lines (54 loc) · 1.52 KB
/
App.tsx
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
import { Ionicons } from '@expo/vector-icons';
import { randomUUID } from 'expo-crypto';
import { StatusBar } from 'expo-status-bar';
import { useState } from 'react';
import {
FlatList,
Keyboard,
KeyboardAvoidingView,
Pressable,
TextInput,
View,
} from 'react-native';
import { ListItem } from './src/components/ListItem';
import { useItems } from './src/hooks/useItems';
import { mainStyles } from './src/styles/styles';
const App = () => {
const [itemText, setItemText] = useState('');
const { itemsArray, addItemIntoArray } = useItems();
const addItem = (item: string) => {
if (item.trim() === '') return;
const id = randomUUID();
const newItem = { id, title: item.trim(), completed: false };
addItemIntoArray(newItem);
setItemText('');
Keyboard.dismiss();
};
return (
<KeyboardAvoidingView style={mainStyles.container}>
<FlatList
style={mainStyles.list}
data={itemsArray}
renderItem={({ item }) => <ListItem item={item} />}
keyExtractor={(item) => item.id}
showsVerticalScrollIndicator={false}
/>
<View style={mainStyles.inputContainer}>
<TextInput
style={mainStyles.input}
onChangeText={(value) => setItemText(value)}
defaultValue={itemText}
placeholder="Add a new item"
/>
<Pressable
style={mainStyles.addItemButton}
onPress={() => addItem(itemText)}
>
<Ionicons name="add" size={30} color="white" />
</Pressable>
</View>
<StatusBar style="light" backgroundColor="#282A36" />
</KeyboardAvoidingView>
);
};
export default App;