DeptPage.js 4.29 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';
Choi Ga Young's avatar
Choi Ga Young committed
3
import TodoItem from './components/TodoItem';
YoonDongMin's avatar
DongM    
YoonDongMin committed
4
import Ionicons from 'react-native-vector-icons/Ionicons';
Choi Ga Young's avatar
Choi Ga Young committed
5
import ButtonsForm from './components/ButtonsForm'; 
6
import DeptForm from './screens/DeptForm';
YoonDongMin's avatar
YdM    
YoonDongMin committed
7
import { TabView } from 'react-native-elements';
YoonDongMin's avatar
YDm    
YoonDongMin committed
8
import deptApi from './db/deptPage.api';
YoonDongMin's avatar
부채    
YoonDongMin committed
9

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

  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
47
    setModallOpen(false); //modal이 보여지지 않게
YoonDongMin's avatar
YDm    
YoonDongMin committed
48
    loadLoan()
YoonDongMin's avatar
DongM    
YoonDongMin committed
49
50
  }

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

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


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

YoonDongMin's avatar
YdM    
YoonDongMin committed
74
75
76
77
78
        <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
79
                  data={lend}
YoonDongMin's avatar
YdM    
YoonDongMin committed
80
                  renderItem={({ item }) => (
YoonDongMin's avatar
YDm    
YoonDongMin committed
81
82
                    <TouchableOpacity onPress={() => navigation.navigate('DeptDetails', { item: item, loadLoan: loadLend })}>
                      <TodoItem item={item} onDeleteHandle={() => onDeleteHandle(item.id)} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
83
84
85
86
87
88
                    </TouchableOpacity>
                  )}
                />
              </TabView.Item>
              <TabView.Item style={{ width: '100%', height: '100%' }}>
                <FlatList
YoonDongMin's avatar
YDm    
YoonDongMin committed
89
                  data={dept}
YoonDongMin's avatar
YdM    
YoonDongMin committed
90
                  renderItem={({ item }) => (
YoonDongMin's avatar
YDm    
YoonDongMin committed
91
92
                    <TouchableOpacity onPress={() => navigation.navigate('DeptDetails', { item: item, loadLoan: loadDept })}>
                      <TodoItem item={item} onDeleteHandle={() => onDeleteHandle(item.id)} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
93
94
                    </TouchableOpacity>
                  )}
YoonDongMin's avatar
DongM    
YoonDongMin committed
95
                />
YoonDongMin's avatar
YdM    
YoonDongMin committed
96
97
              </TabView.Item>
            </TabView>
YoonDongMin's avatar
DongM    
YoonDongMin committed
98
          </View>
YoonDongMin's avatar
YdM    
YoonDongMin committed
99
100
101
          <Ionicons
            name='add'
            size={24}
102
            style={style.modalToggle} 
YoonDongMin's avatar
YdM    
YoonDongMin committed
103
104
105
106
107
108
109
110
111
112
113
114
            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
115
              <DeptForm addInfo={addInfo} />
YoonDongMin's avatar
YdM    
YoonDongMin committed
116
117
            </View>
          </Modal>
YoonDongMin's avatar
DongM    
YoonDongMin committed
118
        </View>
YoonDongMin's avatar
YDm    
YoonDongMin committed
119
      </View>
YoonDongMin's avatar
YdM    
YoonDongMin committed
120
    </TouchableWithoutFeedback >
YoonDongMin's avatar
DongM    
YoonDongMin committed
121
  );
YoonDongMin's avatar
부채    
YoonDongMin committed
122
123
}

YoonDongMin's avatar
YdM    
YoonDongMin committed
124
const style = StyleSheet.create({
YoonDongMin's avatar
YDm    
YoonDongMin committed
125
126
127
128
  Font: {
    fontFamily: 'GowunDodum-Regular'
  },

YoonDongMin's avatar
DongM    
YoonDongMin committed
129
  container: {
YoonDongMin's avatar
YDm    
YoonDongMin committed
130
    fontFamily: 'GowunDodum-Regular',
YoonDongMin's avatar
DongM    
YoonDongMin committed
131
    flex: 1,
YoonDongMin's avatar
YdM    
YoonDongMin committed
132
    width: '100%',
YoonDongMin's avatar
DongM    
YoonDongMin committed
133
134
135
  },
  modalToggle: {
    borderWidth: 1,
YoonDongMin's avatar
YdM    
YoonDongMin committed
136
137
    borderColor: 'gray', //gray
    padding: 5,
YoonDongMin's avatar
DongM    
YoonDongMin committed
138
139
140
    borderRadius: 10,
    alignSelf: 'center', //위치를 center로
  },
YoonDongMin's avatar
YdM    
YoonDongMin committed
141

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

YoonDongMin's avatar
YdM    
YoonDongMin committed
146
147
148
});

export default DeptPage;