App.js 5.79 KB
Newer Older
Choi Ga Young's avatar
Choi Ga Young committed
1
import * as React from 'react';
YoonDongMin's avatar
모달    
YoonDongMin committed
2
3
import { useState } from 'react';
import { StyleSheet, View, Text, TextInput, Button, Keyboard, TouchableWithoutFeedback, Modal } from 'react-native';
Choi Ga Young's avatar
Choi Ga Young committed
4
5
6
7
8
9
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import Ionicons from 'react-native-vector-icons/Ionicons';
import Monthly from './Monthly';
import Analy from './Analy';
import MoneyDB from './MoneyDB';
YoonDongMin's avatar
부채    
YoonDongMin committed
10
import DeptPage from './DeptPage';
YoonDongMin's avatar
YdM    
YoonDongMin committed
11
import InfoForm from './screens/InfoForm';
YoonDongMin's avatar
부채    
YoonDongMin committed
12
import { SpeedDial } from 'react-native-elements';
YoonDongMin's avatar
DongM    
YoonDongMin committed
13
14
import InfoDetails from './screens/InfoDetails';
import { createStackNavigator } from '@react-navigation/stack';
YoonDongMin's avatar
YdM    
YoonDongMin committed
15
16
import MemoPage from './MemoPage';
import MemoDetails from './screens/MemoDetails';
YoonDongMin's avatar
부채    
YoonDongMin committed
17

YoonDongMin's avatar
모달    
YoonDongMin committed
18

Test User's avatar
Test User committed
19

YoonDongMin's avatar
YoonDongMin committed
20

Choi Ga Young's avatar
Choi Ga Young committed
21
function MainScreen({ navigation }) {
YoonDongMin's avatar
부채    
YoonDongMin committed
22
  const [number, onChangeNumber] = useState(null);
YoonDongMin's avatar
모달    
YoonDongMin committed
23
  const [modalOpen, setModalOpen] = useState(false);
YoonDongMin's avatar
부채    
YoonDongMin committed
24
25
26
27
  // const [reviews, setReviews] = useState([
  //   { title: 'aa', rating: 5, body: 'bb', key: '1' },
  // ]);
  const [open, setOpen] = useState(false)
YoonDongMin's avatar
모달    
YoonDongMin committed
28
29


Choi Ga Young's avatar
Choi Ga Young committed
30
  return (
YoonDongMin's avatar
DongM    
YoonDongMin committed
31

Choi Ga Young's avatar
Choi Ga Young committed
32
    <>
YoonDongMin's avatar
YoonDongMin committed
33
34
      <TouchableWithoutFeedback onPress={() => {
        Keyboard.dismiss();
YoonDongMin's avatar
모달    
YoonDongMin committed
35

YoonDongMin's avatar
YoonDongMin committed
36
      }}>
YoonDongMin's avatar
모달    
YoonDongMin committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
        <View style={{ flex: 1 }}>


          <View >
            <Text style={style.Font}>여기는 메인 페이지 입니다.</Text>
            <Text style={style.Font}>아래는 input 테스트를 위한 것입니다.</Text>
            <TextInput
              style={style.TextInput}
              onChangeText={onChangeNumber}
              keyboardType="numeric"
            />
            <Text>입력한 숫자 보기: {number} </Text>
          </View>

          <Button
            title="월별 페이지로 이동"
            onPress={() => navigation.navigate('Monthly')}
          />
YoonDongMin's avatar
부채    
YoonDongMin committed
55
56
57
58
59
60
61
62
63
64
          <SpeedDial
            isOpen={open}
            icon={{ name: 'edit', color: '#fff' }} //연필모양
            openIcon={{ name: 'close', color: '#fff' }} //x모양
            onOpen={() => setOpen(!open)}
            onClose={() => setOpen(!open)}
          >
            <SpeedDial.Action
              icon={{ name: 'add', color: '#fff' }}
              title="부채"
YoonDongMin's avatar
DongM    
YoonDongMin committed
65
              onPress={() => navigation.navigate('DeptPage')}
YoonDongMin's avatar
부채    
YoonDongMin committed
66
67
            />
            <SpeedDial.Action
YoonDongMin's avatar
YdM    
YoonDongMin committed
68
69
70
              icon={{ name: 'add', color: '#fff' }}
              title="메모"
              onPress={() => navigation.navigate('MemoPage')}
YoonDongMin's avatar
부채    
YoonDongMin committed
71
72
73
            />

          </SpeedDial>
YoonDongMin's avatar
YdM    
YoonDongMin committed
74
75
76
77
78
79
80
81
82
83
84
85
          <Modal visible={modalOpen} animationType='slide'>
            <View style={style.modalContent}>
              <Ionicons
                name='close'
                color='red'
                size={24}
                style={{ ...style.modalToggle, ...style.modalClose }} //...은 중괄호를 풀어서 합치려고 이용함
                onPress={() => setModalOpen(false)}
              />
              <DeptPage />
            </View>
          </Modal>
YoonDongMin's avatar
부채    
YoonDongMin committed
86

YoonDongMin's avatar
YoonDongMin committed
87
        </View>
YoonDongMin's avatar
모달    
YoonDongMin committed
88

YoonDongMin's avatar
DongM    
YoonDongMin committed
89
90
91
92
        {/* <MoneyDB /> */}



YoonDongMin's avatar
부채    
YoonDongMin committed
93
      </TouchableWithoutFeedback>
YoonDongMin's avatar
YoonDongMin committed
94
    </>
Choi Ga Young's avatar
Choi Ga Young committed
95
96
  )
}
Test User's avatar
Test User committed
97

YoonDongMin's avatar
YdM    
YoonDongMin committed
98
//Tab과 Stack navigator2개 사용
Choi Ga Young's avatar
Choi Ga Young committed
99
const Tab = createBottomTabNavigator();
YoonDongMin's avatar
DongM    
YoonDongMin committed
100
101
102
const Stack = createStackNavigator();


YoonDongMin's avatar
YdM    
YoonDongMin committed
103
//Tab navigation에 부분을 먼저 Home이라는 함수로 만듦
YoonDongMin's avatar
DongM    
YoonDongMin committed
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
function Home() {
  return (
    <Tab.Navigator screenOptions={({ route }) => ({
      tabBarIcon: ({ focused, color, size }) => {
        let iconName;

        if (route.name === 'Main') {
          iconName = focused
            ? 'home'
            : 'home-outline';
        } else if (route.name === 'Monthly') {
          iconName = focused ? 'calendar' : 'calendar-outline';
        } else if (route.name === 'Analy') {
          iconName = focused ? 'bar-chart' : 'bar-chart-outline';
        }

        // You can return any component that you like here!
        return <Ionicons name={iconName} size={size} color={color} />;
      },
    })}
      tabBarOptions={{
        activeTintColor: 'tomato',
        inactiveTintColor: 'gray',
      }}>
      <Tab.Screen name="Main" component={MainScreen} />
      <Tab.Screen name="Monthly" component={Monthly} />
      <Tab.Screen name="Analy" component={Analy} />
    </Tab.Navigator>
  );
}
Test User's avatar
Test User committed
134

YoonDongMin's avatar
YdM    
YoonDongMin committed
135
136
//항상 App에서 NavigationContainer로 사용할 navigation을 감싸고 있어야함
//아까 만든 Home을 첫번째 component로 
Choi Ga Young's avatar
Choi Ga Young committed
137
function App() {
Test User's avatar
Test User committed
138
  return (
YoonDongMin's avatar
YoonDongMin committed
139
    <NavigationContainer>
YoonDongMin's avatar
YdM    
YoonDongMin committed
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
      <Stack.Navigator screenOptions={{
        headerStyle: {
          backgroundColor: '#eee'
        },
        headerTitleStyle: {
          fontWeight: 'bold',
        },
        headerTitleAlign: 'center'
      }} >
        <Stack.Screen
          name="Home"
          component={Home}
          options={{ headerShown: false }} />
        <Stack.Screen
          name="DeptPage"
          component={DeptPage}
          options={{ title: "부채", headerStyle: { backgroundColor: 'coral' } }} />
        <Stack.Screen
          name="InfoDetails"
          component={InfoDetails}
          options={{ title: "상세정보" }} />
        <Stack.Screen
          name="MemoPage"
          component={MemoPage}
          options={{ title: "메모", headerStyle: { backgroundColor: 'coral' } }} />
        <Stack.Screen
          name="MemoDetails"
          component={MemoDetails}
          options={{ title: "상세내용" }} />
YoonDongMin's avatar
DongM    
YoonDongMin committed
169
      </Stack.Navigator>
YoonDongMin's avatar
YoonDongMin committed
170
    </NavigationContainer>
Test User's avatar
Test User committed
171
  );
Choi Ga Young's avatar
Choi Ga Young committed
172
}
Test User's avatar
Test User committed
173

Choi Ga Young's avatar
Choi Ga Young committed
174
const style = StyleSheet.create({
YoonDongMin's avatar
YdM    
YoonDongMin committed
175

YoonDongMin's avatar
모달    
YoonDongMin committed
176
  modalToggle: {
YoonDongMin's avatar
DongM    
YoonDongMin committed
177

YoonDongMin's avatar
모달    
YoonDongMin committed
178
179
    padding: 10,
    borderRadius: 10,
YoonDongMin's avatar
DongM    
YoonDongMin committed
180
181
    alignSelf: 'flex-start',
    marginTop: -40, //위치를 center로
YoonDongMin's avatar
모달    
YoonDongMin committed
182
183
  },
  modalClose: {
YoonDongMin's avatar
DongM    
YoonDongMin committed
184
185
186
187
    alignSelf: 'center',
    alignItems: 'flex-start',
    marginTop: 150,
    marginBottom: 50,
YoonDongMin's avatar
모달    
YoonDongMin committed
188
189
  },
  modalContent: {
YoonDongMin's avatar
부채    
YoonDongMin committed
190
    flex: 1, //이후 유용한 키보드를 추가하려고 ex)dismissing keyboard
YoonDongMin's avatar
모달    
YoonDongMin committed
191
192
  },

Choi Ga Young's avatar
Choi Ga Young committed
193
194
195
196
197
  TextInput: {
    borderColor: 'skyblue',
    height: 40,
    margin: 12,
    borderWidth: 1
Test User's avatar
Test User committed
198
  },
Choi Ga Young's avatar
Choi Ga Young committed
199
200
201
  Font: {
    fontSize: 24
  }
Test User's avatar
Test User committed
202
203
});
export default App;