You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
4.3 KiB
164 lines
4.3 KiB
import React, { useEffect, useState } from 'react';
|
|
import { View, Text, Image, StyleSheet, Dimensions, ImageBackground, TouchableOpacity, Modal } from 'react-native';
|
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
import { useDispatch, useSelector } from 'react-redux';
|
|
import { getWeathersIconList } from '../thunk/thunkListWeatherIcon';
|
|
import { City, Weather } from '../data/stub';
|
|
|
|
type MeteoProps = {
|
|
city : City,
|
|
weather : Weather
|
|
}
|
|
|
|
export function WeatherCard(props: MeteoProps) {
|
|
const dispatch = useDispatch();
|
|
const data = useSelector(state => state.IconsReducer.weathersIcons);
|
|
useEffect(() => {
|
|
const loadWeathersIcons = async () => {
|
|
dispatch(getWeathersIconList());
|
|
};
|
|
loadWeathersIcons();
|
|
}, [dispatch]);
|
|
|
|
//console.log(hh[0]._imageUri);
|
|
|
|
return (
|
|
|
|
<View style={styles.container}>
|
|
|
|
<View style={styles.titleContainer}>
|
|
<Text style={styles.title}>{props.city.name}</Text>
|
|
</View>
|
|
<View style={styles.contentContainer}>
|
|
<View style={styles.imageContainer}>
|
|
<Image
|
|
source= {{ uri: data.filter(() =>
|
|
props.weather.weatherType
|
|
)[0]._imageUri }}
|
|
style={styles.image}
|
|
/>
|
|
<Text style={styles.title} > {props.weather.weatherType} </Text>
|
|
</View>
|
|
<View style={styles.iconContainer}>
|
|
|
|
<View style={styles.row}>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="thermometer" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.temperature} °C</Text>
|
|
</View>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="eye" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.visibility}</Text>
|
|
</View>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="weather-windy" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.windSpeed}</Text>
|
|
</View>
|
|
</View>
|
|
<View style={styles.row}>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="gauge" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.pressure}</Text>
|
|
</View>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="water" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.humidity}</Text>
|
|
</View>
|
|
<View style={styles.iconWithText}>
|
|
<Icon name="heart" style={styles.icon} />
|
|
<Text style={styles.iconText}>{props.weather.temperatureFeelsLike}</Text>
|
|
</View>
|
|
|
|
</View>
|
|
</View>
|
|
|
|
</View>
|
|
|
|
</View>
|
|
);
|
|
};
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
backgroundColor: 'rgba(255, 255, 255, 0.5)',
|
|
borderRadius: 8,
|
|
borderWidth: 2,
|
|
borderColor:'rgba(200, 200, 200, 0.5)',
|
|
marginBottom: 16,
|
|
marginTop: 5,
|
|
alignSelf: 'center',
|
|
width: '75%', // 3/4 de la largeur de l'écran
|
|
},
|
|
titleContainer: {
|
|
padding: 8,
|
|
},
|
|
title: {
|
|
fontSize: 16,
|
|
fontWeight: 'bold',
|
|
textAlign: 'center',
|
|
},
|
|
contentContainer: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
padding: 16,
|
|
},
|
|
imageContainer: {
|
|
marginRight: 16,
|
|
},
|
|
image: {
|
|
width: 80,
|
|
backgroundColor: 'blue',
|
|
height: 80,
|
|
borderRadius: 15,
|
|
},
|
|
iconContainer: {
|
|
flex: 1,
|
|
flexDirection: 'column',
|
|
},
|
|
row: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
marginBottom: 8,
|
|
},
|
|
iconWithText: {
|
|
alignItems: 'center',
|
|
},
|
|
icon: {
|
|
fontSize: 20,
|
|
color: '#aba0e5',
|
|
borderWidth: 1,
|
|
borderColor: '#333333',
|
|
borderRadius: 8,
|
|
padding: 8,
|
|
marginBottom: 8,
|
|
},
|
|
iconText: {
|
|
marginTop: 4,
|
|
fontSize: 12,
|
|
textAlign: 'center',
|
|
},
|
|
popupContainer: {
|
|
flex: 1,
|
|
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
},
|
|
popupText: {
|
|
fontSize: 24,
|
|
color: '#FFFFFF',
|
|
marginBottom: 16,
|
|
},
|
|
closeButton: {
|
|
position: 'absolute',
|
|
top: 16,
|
|
right: 16,
|
|
backgroundColor: '#FFFFFF',
|
|
borderRadius: 20,
|
|
padding: 8,
|
|
},
|
|
closeIcon: {
|
|
fontSize: 20,
|
|
color: '#333333',
|
|
},
|
|
});
|