DeptPage.js 4.39 KB
Newer Older
YoonDongMin's avatar
YDm    
YoonDongMin committed
1
import React, { useState, useEffect } from 'react';
YoonDongMin's avatar
DongM    
YoonDongMin committed
2
import { StyleSheet, Text, View, FlatList, TouchableOpacity, Modal, Alert, TouchableWithoutFeedback, Keyboard } from 'react-native';
YoonDongMin's avatar
YDm    
YoonDongMin committed
3
4
import TodoItem from './components/TodoItem';
import DeptForm from './screens/DeptForm';
YoonDongMin's avatar
DongM    
YoonDongMin committed
5
import Ionicons from 'react-native-vector-icons/Ionicons';
YoonDongMin's avatar
YDm    
YoonDongMin committed
6
7
import DeptDetails from './screens/DeptDetails'
import ButtonsForm from './components/ButtonsForm';
YoonDongMin's avatar
YdM    
YoonDongMin committed
8
import { TabView } from 'react-native-elements';
YoonDongMin's avatar
YDm    
YoonDongMin committed
9
import deptApi from './db/deptPage.api';
YoonDongMin's avatar
부채    
YoonDongMin committed
10

YoonDongMin's avatar
YdM    
YoonDongMin committed
11
function DeptPage({ navigation }) {
YoonDongMin's avatar
YDm    
YoonDongMin committed
12
13
  const [lend, setLend] = useState([]) //빌려준
  const [dept, setDept] = useState([])  //빌린
YoonDongMin's avatar
DongM    
YoonDongMin committed
14
15
  const [selectedIndex, setSelectedIndex] = useState(0)
  const [modallOpen, setModallOpen] = useState(false);
YoonDongMin's avatar
YDm    
YoonDongMin committed
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

  const loadLend = async () => { //빌려준
    try {
      const deptArray = await deptApi.selectLoan("빌려준금액")

      setLend(deptArray);
    } catch (error) {
      console.log('error in load lend ( DeptPage.js )', error)
    }
  }

  const loadDept = async () => { //빌림
    try {
      const deptArray = await deptApi.selectLoan("빌린금액")
      setDept(deptArray);
    } catch (error) {
      console.log('error in load lend ( DeptPage.js )', error)
    }
  }

  const loadLoan = async () => {
    loadLend()
    loadDept()
  }

  const addInfo = async (info) => {
    if (selectedIndex) {
      info['loan'] = "빌린금액"
    } else {
      info['loan'] = "빌려준금액"
    }
    await deptApi.insertDept(info)
YoonDongMin's avatar
DongM    
YoonDongMin committed
48
    setModallOpen(false); //modal이 보여지지 않게
YoonDongMin's avatar
YDm    
YoonDongMin committed
49
    loadLoan()
YoonDongMin's avatar
DongM    
YoonDongMin committed
50
51
  }

YoonDongMin's avatar
YDm    
YoonDongMin committed
52
53
54
  const onDeleteHandle = async (id) => {
    await deptApi.deleteDept(id)
    loadLoan()
YoonDongMin's avatar
DongM    
YoonDongMin committed
55
  }
YoonDongMin's avatar
부채    
YoonDongMin committed
56

YoonDongMin's avatar
YDm    
YoonDongMin committed
57
58
59
60
61
62
  useEffect(() => { //처음 화면에 띄어지는거
    loadLoan()
  }, [])


  console.log(selectedIndex)
YoonDongMin's avatar
DongM    
YoonDongMin committed
63
64
65
66
  return (
    <TouchableWithoutFeedback onPress={() => {
      Keyboard.dismiss();
    }}>
YoonDongMin's avatar
YdM    
YoonDongMin committed
67
      <View Style={style.container}>
YoonDongMin's avatar
DongM    
YoonDongMin committed
68
        <ButtonsForm
YoonDongMin's avatar
YDm    
YoonDongMin committed
69
70
71
          onPress={(index) => {
            setSelectedIndex(index)
          }}
YoonDongMin's avatar
DongM    
YoonDongMin committed
72
73
74
          selectedIndex={selectedIndex}
          group={["빌려준금액", "빌린금액"]} />

YoonDongMin's avatar
YdM    
YoonDongMin committed
75
76
77
78
79
        <View>
          <View style={{ width: '100%', height: '75%' }}>
            <TabView value={selectedIndex} onChange={setSelectedIndex} >
              <TabView.Item style={{ width: '100%', height: '100%' }}>
                <FlatList
YoonDongMin's avatar
YDm    
YoonDongMin committed
80
                  data={lend}
YoonDongMin's avatar
YdM    
YoonDongMin committed
81
                  renderItem={({ item }) => (
YoonDongMin's avatar
YDm    
YoonDongMin committed
82
83
                    <TouchableOpacity onPress={() => navigation.navigate('DeptDetails', { item: item, loadLoan: loadLend })}>
                      <TodoItem item={item} onDeleteHandle={() => onDeleteHandle(item.id)} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
84
85
86
87
88
89
                    </TouchableOpacity>
                  )}
                />
              </TabView.Item>
              <TabView.Item style={{ width: '100%', height: '100%' }}>
                <FlatList
YoonDongMin's avatar
YDm    
YoonDongMin committed
90
                  data={dept}
YoonDongMin's avatar
YdM    
YoonDongMin committed
91
                  renderItem={({ item }) => (
YoonDongMin's avatar
YDm    
YoonDongMin committed
92
93
                    <TouchableOpacity onPress={() => navigation.navigate('DeptDetails', { item: item, loadLoan: loadDept })}>
                      <TodoItem item={item} onDeleteHandle={() => onDeleteHandle(item.id)} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
94
95
                    </TouchableOpacity>
                  )}
YoonDongMin's avatar
DongM    
YoonDongMin committed
96
                />
YoonDongMin's avatar
YdM    
YoonDongMin committed
97
98
              </TabView.Item>
            </TabView>
YoonDongMin's avatar
DongM    
YoonDongMin committed
99
          </View>
YoonDongMin's avatar
YdM    
YoonDongMin committed
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
          <Ionicons
            name='add'
            size={24}
            style={style.modalToggle} //...은 중괄호를 풀어서 합치려고 이용함
            onPress={() => setModallOpen(true)}
          />
        </View>
        <View>
          <Modal visible={modallOpen} animationType='slide'>
            <View style={style.modalContent}>
              <Ionicons
                name='close'
                size={24}
                style={style.modalToggle}
                onPress={() => setModallOpen(false)}
              />
YoonDongMin's avatar
YDm    
YoonDongMin committed
116
              <DeptForm addInfo={addInfo} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
117
118
119

            </View>
          </Modal>
YoonDongMin's avatar
DongM    
YoonDongMin committed
120
        </View>
YoonDongMin's avatar
YDm    
YoonDongMin committed
121
      </View>
YoonDongMin's avatar
YdM    
YoonDongMin committed
122
    </TouchableWithoutFeedback >
YoonDongMin's avatar
DongM    
YoonDongMin committed
123
  );
YoonDongMin's avatar
부채    
YoonDongMin committed
124
125


YoonDongMin's avatar
YDm    
YoonDongMin committed
126
}
YoonDongMin's avatar
DongM    
YoonDongMin committed
127

YoonDongMin's avatar
YdM    
YoonDongMin committed
128
129
130


const style = StyleSheet.create({
YoonDongMin's avatar
YDm    
YoonDongMin committed
131
132
133
134
  Font: {
    fontFamily: 'GowunDodum-Regular'
  },

YoonDongMin's avatar
DongM    
YoonDongMin committed
135
  container: {
YoonDongMin's avatar
YDm    
YoonDongMin committed
136
    fontFamily: 'GowunDodum-Regular',
YoonDongMin's avatar
DongM    
YoonDongMin committed
137
    flex: 1,
YoonDongMin's avatar
YdM    
YoonDongMin committed
138
    width: '100%',
YoonDongMin's avatar
DongM    
YoonDongMin committed
139
140
141
  },
  modalToggle: {
    borderWidth: 1,
YoonDongMin's avatar
YdM    
YoonDongMin committed
142
143
    borderColor: 'gray', //gray
    padding: 5,
YoonDongMin's avatar
DongM    
YoonDongMin committed
144
145
146
    borderRadius: 10,
    alignSelf: 'center', //위치를 center로
  },
YoonDongMin's avatar
YdM    
YoonDongMin committed
147

YoonDongMin's avatar
DongM    
YoonDongMin committed
148
149
150
  modalContent: {
    flex: 1, //이후 유용한 키보드를 추가하려고 ex)dismissing keyboard
  }
YoonDongMin's avatar
YDm    
YoonDongMin committed
151

YoonDongMin's avatar
YdM    
YoonDongMin committed
152
153
154
});

export default DeptPage;