MemoPage.js 5.05 KB
Newer Older
YoonDongMin's avatar
YdM    
YoonDongMin committed
1
2
import React, { useState } from 'react';
import { StyleSheet, Text, View, FlatList, TouchableOpacity, Modal, TouchableWithoutFeedback, Keyboard } from 'react-native';
Choi Ga Young's avatar
Choi Ga Young committed
3
import TodoItem from './components/TodoItem';
YoonDongMin's avatar
YdM    
YoonDongMin committed
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import Ionicons from 'react-native-vector-icons/Ionicons';
import { NavigationContainer } from '@react-navigation/native';
import MemoDetails from './screens/MemoDetails';
import MemoForm from './screens/MemoForm';
import ButtonsForm from './components/ButtonsForm';
import { TabView } from 'react-native-elements';



function MemoPage({ navigation }) {
    const [selectedIndex, setSelectedIndex] = useState(0)
    const [modalOpen, setModalOpen] = useState(false);
    const [todo, setTodo] = useState([
        { date: '매달10일', person: '식비', money: '100만원', key: '1' },
        { date: '매달20일', person: '휴대폰요금', money: '100만원', key: '2' },
        { date: '매달24일', person: '생활비', money: '100만원', key: '3' }
    ]);

    const addInfo = (info) => {
        info.key = Math.random().toString(); //앞에 key를 받아올수있도록 생성
        setTodo((currentInfos) => {
            return [info, ...currentInfos]; //새로운 정보와 지금까지 정보를 합친다
        });
        setModalOpen(false); //modal이 보여지지 않게
    }

    const pressHandler = (key) => {
        setTodo((prevTodos) => {
            return prevTodos.filter(todo => todo.key != key);
        });
    }
    const [todos, setTodos] = useState([
        { date: '매달10일', person: '농협', money: '100만원', key: '1' },
        { date: '매달20일', person: '삼성전자', money: '100만원', key: '2' },
        { date: '매달30일', person: '비트코인', money: '100만원', key: '3' }
    ]);



    return (
        <TouchableWithoutFeedback onPress={() => {
            Keyboard.dismiss();
        }}>
            <View Style={style.container}>
                <ButtonsForm
                    onPress={(index) => setSelectedIndex(index)}
                    selectedIndex={selectedIndex}
                    group={["적금", "생활비"]} />

                <View>
                    <View style={{ width: '100%', height: '75%' }}>
                        <TabView value={selectedIndex} onChange={setSelectedIndex} >
                            <TabView.Item style={{ width: '100%', height: '100%' }}>
                                <FlatList
                                    data={todos}
                                    renderItem={({ item }) => (
                                        <TouchableOpacity onPress={() => navigation.navigate('MemoDetails', item)}>
                                            <TodoItem item={item} pressHandler={pressHandler} />
                                        </TouchableOpacity>
                                    )}
                                />
                            </TabView.Item>
                            <TabView.Item style={{ width: '100%', height: '100%' }}>
                                <FlatList
                                    data={todo}
                                    renderItem={({ item }) => (
                                        <TouchableOpacity onPress={() => navigation.navigate('MemoDetails', item)}>
                                            <TodoItem item={item} pressHandler={pressHandler} />
                                        </TouchableOpacity>
                                    )}
                                />
                            </TabView.Item>
                        </TabView>
                    </View>
                    <Ionicons
                        name='add'
                        size={24}
                        style={style.modalToggle} //...은 중괄호를 풀어서 합치려고 이용함
                        onPress={() => setModalOpen(true)}
                    />
                </View>
                <View>
                    <Modal visible={modalOpen} animationType='slide'>
                        <View style={style.modalContent}>
                            <Ionicons
                                name='close'
                                size={24}
                                style={style.modalToggle}
                                onPress={() => setModalOpen(false)}
                            />
                            <MemoForm addInfo={addInfo} />

                        </View>
                    </Modal>
                </View>
            </View>
        </TouchableWithoutFeedback >
    );
}






const style = StyleSheet.create({
    container: {
        flex: 1,
        width: '100%',
    },
    modalToggle: {
        borderWidth: 1,
        borderColor: 'gray', //gray
        padding: 5,
        borderRadius: 10,
        alignSelf: 'center', //위치를 center로
    },

    modalContent: {
        flex: 1, //이후 유용한 키보드를 추가하려고 ex)dismissing keyboard
    },


    TextInput: {
        borderColor: 'skyblue',
        height: 40,
        margin: 12,
        borderWidth: 1
    },
    Font: {
        fontSize: 24
    }
});

export default MemoPage;