import React, { useState, useEffect } from "react";
import {
StyleSheet,
Text,
View,
Image,
TouchableOpacity,
ScrollView,
} from "react-native";
const main =
"https://storage.googleapis.com/sparta-image.appspot.com/lecture/main.png";
import data from "../data.json";
import Card from "../components/Card";
import Loading from "../components/Loading";
import { StatusBar } from "expo-status-bar";
import * as Location from "expo-location";
import axios from "axios";
import { firebase_db } from "../firebaseConfig";
import * as Application from "expo-application";
const isIOS = Platform.OS === "ios";
export default function MainPage({ navigation, route, content }) {
const [state, setState] = useState([]);
const [cateState, setCateState] = useState([]);
const [like, setLike] = useState([]);
let userUniqueId;
const [weather, setWeather] = useState({
temp: 0,
condition: "",
});
const [ready, setReady] = useState(true);
useEffect(() => {
navigation.setOptions({
title: "나만의 꿀팁",
});
if (isIOS) {
let iosId = Application.getIosIdForVendorAsync();
userUniqueId = iosId;
} else {
userUniqueId = Application.androidId;
}
setTimeout(() => {
firebase_db
.ref("/tip")
.once("value")
.then((snapshot) => {
console.clear();
console.log("파이어베이스에서 데이터 가져왔습니다!!");
let tip = snapshot.val();
firebase_db
.ref("/like/")
.once("value")
.then((snapshot) => {
let like = snapshot.val();
setLike(like);
});
setState(tip);
setCateState(tip);
getLocation();
setReady(false);
});
}, 1000);
}, []);
const getLocation = async () => {
try {
await Location.requestForegroundPermissionsAsync();
const locationData = await Location.getCurrentPositionAsync();
const latitude = locationData["coords"]["latitude"];
const longitude = locationData["coords"]["longitude"];
const API_KEY = "cfc258c75e1da2149c33daffd07a911d";
const result = await axios.get(
`http://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${API_KEY}&units=metric`
);
const temp = result.data.main.temp;
const condition = result.data.weather[0].main;
setWeather({
temp,
condition,
});
} catch (error) {
Alert.alert("위치를 찾을 수가 없습니다.", "앱을 껏다 켜볼까요?");
}
};
const category = (cate) => {
if (cate == "전체보기") {
setCateState(state);
} else {
setCateState(
state.filter((d) => {
return d.category == cate;
})
);
}
};
let todayWeather = 10 + 17;
let todayCondition = "흐림";
return ready ? (
<Loading />
) : (
<ScrollView style={styles.container}>
<StatusBar style="light" />
{/* <Text style={styles.title}>나만의 꿀팁</Text> */}
<Text style={styles.weather}>
오늘의 날씨: {weather.temp + "°C " + weather.condition}{" "}
</Text>
<TouchableOpacity
style={styles.aboutButton}
onPress={() => {
navigation.navigate("AboutPage");
}}
>
<Text style={styles.aboutButtonText}>소개 페이지</Text>
</TouchableOpacity>
<Image style={styles.mainImage} source={{ uri: main }} />
<ScrollView
style={styles.middleContainer}
horizontal
indicatorStyle={"white"}
>
<TouchableOpacity
style={styles.middleButtonAll}
onPress={() => {
category("전체보기");
}}
>
<Text style={styles.middleButtonTextAll}>전체보기</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton01}
onPress={() => {
category("생활");
}}
>
<Text style={styles.middleButtonText}>생활</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton02}
onPress={() => {
category("재테크");
}}
>
<Text style={styles.middleButtonText}>재테크</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton03}
onPress={() => {
category("반려견");
}}
>
<Text style={styles.middleButtonText}>반려견</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton04}
onPress={() => {
navigation.navigate("LikePage", { like });
}}
>
<Text style={styles.middleButtonText}>꿀팁 찜</Text>
</TouchableOpacity>
</ScrollView>
<View style={styles.cardContainer}>
{/* 하나의 카드 영역을 나타내는 View */}
{cateState.map((content, i) => {
return <Card content={content} key={i} navigation={navigation} />;
})}
</View>
</ScrollView>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
},
title: {
fontSize: 20,
fontWeight: "700",
marginTop: 50,
marginLeft: 20,
},
weather: {
alignSelf: "flex-end",
paddingRight: 20,
},
mainImage: {
width: "90%",
height: 200,
borderRadius: 10,
marginTop: 20,
alignSelf: "center",
},
middleContainer: {
marginTop: 20,
marginLeft: 10,
height: 60,
},
middleButtonAll: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "#20b2aa",
borderColor: "deeppink",
borderRadius: 15,
margin: 7,
},
middleButton01: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "#fdc453",
borderColor: "deeppink",
borderRadius: 15,
margin: 7,
},
middleButton02: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "#fe8d6f",
borderRadius: 15,
margin: 7,
},
middleButton03: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "#9adbc5",
borderRadius: 15,
margin: 7,
},
middleButton04: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "#f886a8",
borderRadius: 15,
margin: 7,
},
middleButtonText: {
color: "#fff",
fontWeight: "700",
textAlign: "center",
},
middleButtonTextAll: {
color: "#fff",
fontWeight: "700",
textAlign: "center",
},
cardContainer: {
marginTop: 10,
marginLeft: 10,
},
aboutButton: {
backgroundColor: "pink",
width: 100,
height: 40,
borderRadius: 10,
alignSelf: "flex-end",
marginRight: 20,
marginTop: 10,
},
aboutButtonText: {
color: "#fff",
textAlign: "center",
marginTop: 10,
},
});
import React, { useState, useEffect } from "react";
import { ScrollView, Text, StyleSheet } from "react-native";
import LikeCard from "../components/LikeCard";
import { firebase_db } from "../firebaseConfig";
import * as Application from "expo-application";
const isIOS = Platform.OS === "ios";
export default function LikePage({ navigation, route, content,userUniqueId }) {
const [tip, setTip] = useState([]);
const [ready, setReady] = useState(true)
const deleteBtn = () => {
};
const getLike = async () => {
let userUniqueId;
if (isIOS) {
let iosId = await Application.getIosIdForVendorAsync();
userUniqueId = iosId;
} else {
userUniqueId = Application.androidId;
}
console.log("userUniqueId", userUniqueId);
console.log("tip", tip);
console.log("like", like);
};
useEffect(() => {
navigation.setOptions({
title: "꿀팁 찜",
});
getLike();
const { like } = route.params;
if(like!==null){
setTip(Object.values(Object.values(like)[0]));
setReady(false)
}
}, []);
return (
<ScrollView style={styles.container}>
{tip?.map((content, i) => {
return <LikeCard content={content} key={i} navigation={navigation} />;
})}
</ScrollView>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
},
});
import React from "react";
import {
ScrollView,
View,
Image,
Text,
StyleSheet,
TouchableOpacity,
} from "react-native";
import { firebase_db } from "../firebaseConfig";
//MainPage로 부터 navigation 속성을 전달받아 Card 컴포넌트 안에서 사용
export default function LikeCard({ content, navigation }) {
const deleteBtn = () => {
};
return (
<ScrollView>
<Image style={styles.cardImage} source={{ uri: content.image }} />
<View style={styles.cardText}>
<Text style={styles.cardTitle} numberOfLines={1}>
{content.title}
</Text>
<Text style={styles.cardDesc} numberOfLines={3}>
{content.desc}
</Text>
<Text style={styles.cardDate}>{content.date}</Text>
</View>
<View style={styles.Btn}>
<TouchableOpacity style={styles.inBtn} onPress={()=>{navigation.navigate('DetailPage',{idx:content.idx})}}><Text style={styles.buttonText}>자세히보기</Text></TouchableOpacity>
<TouchableOpacity style={styles.delBtn} onPress={()=>deleteBtn()}><Text style={styles.buttonText}>삭제</Text></TouchableOpacity>
</View>
</ScrollView>
);
}
const styles = StyleSheet.create({
card: {
flex: 1,
flexDirection: "row",
margin: 10,
borderBottomWidth: 0.5,
borderBottomColor: "#eee",
paddingBottom: 10,
},
cardImage: {
flex: 1,
width: 100,
height: 100,
borderRadius: 10,
alignSelf: "flex-start",
},
cardText: {
flex: 2,
flexDirection: "column",
marginLeft: 10,
alignSelf: "flex-end",
},
cardTitle: {
fontSize: 20,
fontWeight: "700",
},
cardDesc: {
fontSize: 15,
},
cardDate: {
fontSize: 10,
color: "#A6A6A6",
},
Btn:{
flexDirection:"row",
alignSelf:"center",
},
inBtn: {
width: 100,
height: 50,
padding: 15,
backgroundColor: "blue",
borderRadius: 15,
margin: 7,
flexDirection:"row",
},
delBtn:{
width: 100,
height: 50,
padding: 15,
backgroundColor: "green",
borderRadius: 15,
margin: 7,
},
buttonText: {
color: "white",
fontSize: 15,
textAlign:"center",
},
});