From d9cc82687e1cbfe4a593719c7ef6b80ce719fc02 Mon Sep 17 00:00:00 2001 From: zeeun <98653814+zeeun@users.noreply.github.com> Date: Thu, 15 Feb 2024 22:43:29 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=EC=95=BD=EB=AC=BC=EB=B6=84=EC=84=9D?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 + screens/Home.js | 53 ++++---- screens/NewStackScreen.js | 253 +++++++++++++++++++++++++++----------- 3 files changed, 206 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index bc4828a..803bf73 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,9 @@ }, "dependencies": { "@expo/webpack-config": "^19.0.0", + "@react-native-community/datetimepicker": "^7.6.2", "@react-native-masked-view/masked-view": "0.2.9", + "@react-native-picker/picker": "^2.6.1", "@react-native-seoul/kakao-login": "^5.3.1", "@react-navigation/bottom-tabs": "^6.5.11", "@react-navigation/compat": "^5.1.25", @@ -43,6 +45,7 @@ "react-native-image-crop-picker": "^0.40.2", "react-native-modal": "^13.0.1", "react-native-modal-dropdown": "1.0.2", + "react-native-radio-button": "^2.0.1", "react-native-reanimated": "~3.3.0", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", diff --git a/screens/Home.js b/screens/Home.js index c747e68..fee5b55 100644 --- a/screens/Home.js +++ b/screens/Home.js @@ -10,15 +10,12 @@ import { Image, } from "react-native"; import { Block, theme } from "galio-framework"; -import ImagePicker from "../components/ImagePickerComponent"; -import { Camera } from "expo-camera"; import { createStackNavigator } from "@react-navigation/stack"; -import NewStackScreen from "./NewStackScreen"; // 경로를 실제 파일 경로로 변경하세요. -import ImagePickerComponent from "../components/ImagePickerComponent"; -import Header from "../components/Header"; // Import the Header component - +import NewStackScreen from "./NewStackScreen"; import { Card } from "../components"; import articles from "../constants/articles"; +import { Camera } from "expo-camera"; +import ImagePickerComponent from "../components/ImagePickerComponent"; const Stack = createStackNavigator(); @@ -30,6 +27,7 @@ class Home extends React.Component { type: Camera.Constants.Type.back, photo: null, isCameraVisible: false, + selectedImage: null, }; componentDidMount() { @@ -68,11 +66,11 @@ class Home extends React.Component { savePhoto = async () => { if (!this.state.photo) { - console.error("저장할 사진이 없습니다."); + console.error("No photo to save."); return; } - console.log("사진 저장됨:", this.state.photo.base64); + console.log("Photo saved:", this.state.photo.base64); const formData = new FormData(); formData.append("imageFile", { @@ -91,19 +89,19 @@ class Home extends React.Component { }); if (response.ok) { - console.log("사진을 성공적으로 백엔드로 전송했습니다!", response); + console.log("Photo successfully sent to backend!", response); + const data = await response.json(); + this.props.navigation.push("NewStackScreen", { data }); } else { - console.error("사진을 백엔드로 전송하는 데 실패했습니다.", response); + console.error("Failed to send photo to backend.", response); + throw new Error("No response received from the backend."); } - - const data = await response.json(); - this.props.navigation.push("NewStackScreen", { data: data }); } catch (error) { - console.error("사진을 백엔드로 전송 중 오류 발생:", error); + console.error("Error while sending photo to backend:", error); - // 백엔드 제출이 실패하더라도 에러 메시지를 포함하여 NewStackScreen으로 이동합니다. + // Even if backend submission fails, move to NewStackScreen with error message. this.props.navigation.push("NewStackScreen", { - error: "백엔드 제출 실패", + error: "Backend submission failed", }); } @@ -114,6 +112,11 @@ class Home extends React.Component { this.setState({ photo: null }); }; + pickImageAndSend = async () => { + // Implementation of pickImageAndSend method + // You can implement this method as per your requirement to pick an image from gallery and send it to backend + }; + renderCameraModal = () => { return ( - 다시 찍기 + Retake - 저장 + Save @@ -183,6 +186,7 @@ class Home extends React.Component { ); }; + renderArticles = () => { return ( - 카메라로 - 분석하기 + Take Picture @@ -236,7 +239,7 @@ class Home extends React.Component { ]} onPress={this.openCamera} > - 이약먹어도될까? + Take Picture @@ -257,7 +260,7 @@ class Home extends React.Component { name="NewStackScreen" component={NewStackScreen} options={{ - title: "약물분석결과", + title: "약물 분석 결과", }} /> @@ -273,12 +276,6 @@ const styles = StyleSheet.create({ width: width - theme.SIZES.BASE * 2, paddingVertical: theme.SIZES.BASE, }, - cameraButton: { - backgroundColor: "purple", - padding: 20, - alignItems: "center", - marginVertical: 20, - }, bottomButtonsContainer: { flexDirection: "row", justifyContent: "space-around", diff --git a/screens/NewStackScreen.js b/screens/NewStackScreen.js index 91281cf..57ba466 100644 --- a/screens/NewStackScreen.js +++ b/screens/NewStackScreen.js @@ -1,63 +1,4 @@ -import React from 'react'; -import { StyleSheet, Dimensions, ScrollView } from 'react-native'; -import { Block, theme } from 'galio-framework'; - -import { Card } from '../components'; -import articles from '../constants/articles'; -const { width } = Dimensions.get('screen'); - -class NewStackScreen extends React.Component { - renderArticles = () => { - return ( - - - - - - - - ) - } - - render() { - return ( - - {this.renderArticles()} - - ); - } -} - -const styles = StyleSheet.create({ - home: { - width: width, - }, - articles: { - width: width - theme.SIZES.BASE * 2, - paddingVertical: theme.SIZES.BASE, - }, -}); - -export default NewStackScreen; - - -// const NewStackScreen = ({ route }) => { -// const { data } = route.params || {}; // 안전하게 접근 - -// return ( -// -// 약물분석 -// -// {/* 여기서 data를 사용하거나 출력할 수 있음 */} -// -// ); -// }; - - - // import React from 'react'; // import { StyleSheet, Dimensions, ScrollView } from 'react-native'; // import { Block, theme } from 'galio-framework'; @@ -74,12 +15,6 @@ export default NewStackScreen; // contentContainerStyle={styles.articles}> // // -// -// -// -// -// -// // // // ) @@ -106,17 +41,185 @@ export default NewStackScreen; // export default NewStackScreen; +import React, { useState } from "react"; +import { + StyleSheet, + Dimensions, + ScrollView, + Text, + Button, + Modal, + TextInput, + View, + TouchableOpacity, +} from "react-native"; +import { Block, theme } from "galio-framework"; +import { Card } from "../components"; +import DateTimePicker from "@react-native-community/datetimepicker"; +import RadioButton from "react-native-radio-button"; +import { Picker } from "@react-native-picker/picker"; + +const { width } = Dimensions.get("screen"); -// const NewStackScreen = ({ route }) => { -// const { data } = route.params || {}; // 안전하게 접근 +class NewStackScreen extends React.Component { + state = { + modalVisible: false, + drugName: "약물 이름", + startDate: new Date(), + endDate: new Date(), + isTaking: true, + timesPerDay: 1, + }; + + setModalVisible = (visible) => { + this.setState({ modalVisible: visible }); + }; + + componentDidMount() { + this.props.navigation.setOptions({ + headerRight: () => ( +