-
Notifications
You must be signed in to change notification settings - Fork 0
/
MapScreen.js
94 lines (82 loc) · 2.81 KB
/
MapScreen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import React, { useState, useEffect, useRef } from 'react';
import { StyleSheet, Text, TextInput, View, Button, Animated } from 'react-native';
import{ initializeApp } from "firebase/app";
import{ getDatabase, push, ref, onValue } from "firebase/database";
import MapView, { Marker} from "react-native-maps";
import { getFirebaseConfig } from "./DatabaseHandler"
export default function MapScreen({ route, navigation }){
const [userMarker, setUserMarker] = useState({latlng:{latitude:0, longitude:0}})
const [quests, setQuests] = useState([]);
const dropdownAnim = useRef(new Animated.Value(0)).current;
const user = route.params.user;
const firebaseConfig = getFirebaseConfig();
const app = initializeApp(firebaseConfig);
const database = getDatabase(app);
const questsDb = ref(database, "questify/quests");
useEffect(()=>{
onValue(questsDb, (snapshot) => {
const data = snapshot.val();
setQuests(Object.values(data));
})
return ()=>{}
}, []);
return(
<View style={styles.mainContainer}>
<MapView
initialRegion={{latitude:60.200692, longitude:24.934302, latitudeDelta:0.0322, longitudeDelta:0.0221,}}
style={{ height:"100%", width:"100%" }}
onPress={(e)=>{
setUserMarker({latlng: e.nativeEvent.coordinate});
}}
>
{
quests.map((quest, index) => (
<Marker
key={index}
coordinate={{
latitude: quest.marker.latlng.latitude,
longitude: quest.marker.latlng.longitude,
}}
title={quest.questName}
description={quest.username}
pinColor={difficultyToColor(quest.difficulty)}
onPress={()=>{
navigation.navigate("Show quest", {quest:quest, user:user})
}}
/>)
)}
</MapView>
</View>
)
}
function difficultyToColor(difficulty){
switch(difficulty){
case "easy":
return "green"
case "medium":
return "orange"
case "hard":
return "red"
}
}
const styles = StyleSheet.create({
customHeader: {
height: "10%",
width: "100%"
},
mainContainer: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
textBox: {
marginTop: 20,
height: 40,
width: 200,
borderRadius: 10,
backgroundColor: "white"
},
loginButton: {
marginTop: 40
}
});