-
Notifications
You must be signed in to change notification settings - Fork 0
/
Weather.js
127 lines (125 loc) · 4.05 KB
/
Weather.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import React from 'react';
import PropTypes from 'prop-types';
import { StyleSheet, Text, View, StatusBar } from 'react-native';
import { MaterialCommunityIcons } from '@expo/vector-icons';
import { LinearGradient } from 'expo-linear-gradient';
const weatherOptions = {
Thunderstorm: {
iconName: 'weather-lightning',
gradient: ['#141E30', '#243B55'],
title: 'Сиди дома',
subtitle: 'Ты видишь что на улице?'
},
Drizzle: {
iconName: 'weather-rainy',
gradient: ['#3a7bd5', '#3a6073'],
title: 'Возьми зонтик',
subtitle: 'Возможно скоро дождь усилится '
},
Rain: {
iconName: 'weather-pouring',
gradient: ['#000046','#1CB5E0'],
title: 'На улице дождь',
subtitle: 'А значит скоро будет радуга!'
},
Snow: {
iconName: 'snowflake',
gradient: ['#83a4d4', '#b6fbff'],
title: 'На улице снежок!',
subtitle: 'Одевайтесь потеплее, лепите снеговиков'
},
Dust: {
iconName: 'weather-windy-variant',
gradient: ['#B79891', '#94716B'],
title: 'Пыльно',
subtitle: 'Лучше закройте окна'
},
Smoke: {
iconName: 'weather-windy',
gradient: ['#56CCF2', '#2F80ED'],
title: 'На улице смог :(',
subtitle: 'Не советую выходить без необходимости'
},
Haze: {
iconName: 'weather-hazy',
gradient: ['#3E5151', '#DECBA4'],
title: 'На улице снежок!',
subtitle: 'Одевайтесь потеплее, лепите снеговиков'
},
Mist: {
iconName: 'weather-fog',
gradient: ['#606c88', '#3f4c6b'],
title: 'Ни черта не видно в тумане',
subtitle: 'Зато как в Сайлент-Хилле :)'
},
Clear: {
iconName: 'weather-sunny',
gradient: ['#56CCF2', '#2F80ED'],
title: 'Погода супер :)',
subtitle: 'Иди гулять, хватит сидеть дома!'
},
Clouds: {
iconName: 'weather-cloudy',
gradient: ['#757F9A', '#D7DDE8'],
title: 'Облака',
subtitle: 'Белогривые лошадки'
},
}
export default function Weather({temp, condition}){
return (
<LinearGradient
colors={weatherOptions[condition].gradient}
style={styles.container}>
<StatusBar barStyle="light-content" />
<View style={styles.halfContainer}>
<MaterialCommunityIcons name={weatherOptions[condition].iconName} size={96} color="white"/>
<Text style={styles.temp}>{temp}°</Text>
</View>
<View style={{...styles.halfContainer, ...styles.textContainer}} >
<Text style={styles.title}>{weatherOptions[condition].title}</Text>
<Text style={styles.subtitle}>{weatherOptions[condition].subtitle}</Text>
</View>
</LinearGradient>
);
}
Weather.propTypes = {
temp: PropTypes.number.isRequired,
condition: PropTypes.oneOf(["Thunderstorm", "Drizzle", "Rain", "Snow", "Dust", "Smoke", "Haze", "Mist", "Clear", "Clouds"]).isRequired
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
halfContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center'
},
temp: {
fontSize: 42,
color: "white"
},
temp: {
fontSize: 42,
color: "white"
},
title: {
color: "white",
fontSize: 44,
fontWeight: "300",
marginBottom: 10,
textAlign: 'left'
},
subtitle: {
color: "white",
fontWeight: "600",
fontSize: 24,
textAlign: 'left'
},
textContainer: {
paddingHorizontal: 40,
flex: 1,
justifyContent: 'center',
alignItems: 'flex-start'
}
})