236 lines
7.4 KiB

import React, { useState } from "react";
import { StyleSheet, View, ScrollView } from "react-native";
import * as Yup from "yup";
import {
Form,
FormPicker as Picker,
SubmitButton,
FormField,
} from "../components/forms";
import Screen from "../components/Screen";
import FormImagePicker from "../components/forms/FormImagePicker";
import useLocation from "../hooks/useLocation";
import { Image, Text, TouchableOpacity } from "react-native";
import colors from "../config/colors";
import { TouchableNativeFeedback } from "react-native-gesture-handler";
import { insertRainData } from "../database/databaseLoader";
import { showMessage } from "react-native-flash-message";
import { scaleDimsFromWidth, dimensions } from "../config/dimensions";
import assets from "../config/assets";
import moment from "moment";
import FormDatePicker from "../components/forms/FormDatePicker";
import FormLocationPicker from "../components/forms/FormLocationPicker";
const validationSchema = Yup.object().shape({
images: Yup.array(),
description: Yup.string().label("Description"),
});
const borderWidth = 4;
function RainSharingDataScreen(props) {
const [rain, setRain] = useState(-1);
const [error, setError] = useState(false);
const location = useLocation();
const [date, setDate] = useState(moment());
const [time, setTime] = useState(moment());
return (
<Screen style={styles.container}>
<Text
style={{
fontSize: dimensions.text.header,
fontWeight: "bold",
color: colors.primary,
textAlign: "center",
marginBottom: 30,
}}
>
Chuva
</Text>
<ScrollView>
<Form
initialValues={{
images: [],
}}
onSubmit={(values) => {
if (rain == -1) {
setError(true);
return;
}
insertRainData({ ...values, rain, location, date, time });
showMessage({
message: "Informação enviada!",
duration: 1950,
icon: "success",
type: "success",
onPress: () => { },
});
props.navigation.navigate("Home");
}}
validationSchema={validationSchema}
>
<View>
<View style={styles.imgs_row}>
<TouchableNativeFeedback onPress={() => setRain(0)}>
<View
borderColor={rain == 0 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_0_5}
/>
<Text style={styles.text}>Sem chuva</Text>
</View>
</TouchableNativeFeedback>
<TouchableNativeFeedback onPress={() => setRain(1)}>
<View
borderColor={rain == 1 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_1_5}
/>
<Text style={styles.text}>Chuva fraca</Text>
</View>
</TouchableNativeFeedback>
<TouchableNativeFeedback onPress={() => setRain(2)}>
<View
borderColor={rain == 2 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_2_5}
/>
<Text style={styles.text}>Chuva moderada</Text>
</View>
</TouchableNativeFeedback>
</View>
<View style={styles.imgs_row}>
<TouchableNativeFeedback onPress={() => setRain(3)}>
<View
borderColor={rain == 3 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_3_5}
/>
<Text style={styles.text}>Chuva forte</Text>
</View>
</TouchableNativeFeedback>
<TouchableNativeFeedback onPress={() => setRain(4)}>
<View
borderColor={rain == 4 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_4_5}
/>
<Text style={styles.text}>Chuva muito forte</Text>
</View>
</TouchableNativeFeedback>
<TouchableNativeFeedback onPress={() => setRain(5)}>
<View
borderColor={rain == 5 ? colors.primary : colors.white}
style={styles.img_block}
>
<Image
style={styles.floodingLogo}
source={assets.rainLevel.rain_5_5}
/>
<Text style={styles.text}>Pancada de chuva</Text>
</View>
</TouchableNativeFeedback>
</View>
</View>
{error && rain == -1 && (
<Text style={styles.error_txt}>Selecione o nível da chuva </Text>
)}
<FormImagePicker backgroundColor={colors.primary} name="images" />
<View style={{ flex: 1, flexDirection: "row", justifyContent: "space-between" }}>
{/*Data da coleta:*/}
<View style={{ flex: 0.48, borderRightColor: colors.cerulean, borderRightWidth: 1 }}>
<FormDatePicker
textStyle={{
borderColor: colors.gray,
borderWidth: 3,
}}
defaultDate={new Date()}
onDateChange={(value) => setDate(value)}
onTimeChange={(value) => setTime(value)}
/>
</View>
{/*Local do evento:*/}
<View style={{ flex: 0.48 }}>
<TouchableOpacity onPress={() => props.navigation.navigate("FormMap")}>
<FormLocationPicker />
</TouchableOpacity>
</View>
</View>
<FormField
maxLength={255}
multiline
name="description"
numberOfLines={3}
placeholder="Descrição"
/>
<SubmitButton title="Enviar" backgroundColor={colors.primary} />
</Form>
</ScrollView>
</Screen>
);
}
const dims = scaleDimsFromWidth(85, 85, 27);
const styles = StyleSheet.create({
container: {
padding: 10,
backgroundColor: colors.white,
},
img_block: {
flex: 1,
borderRadius: 5,
padding: 10,
borderStyle: "dotted",
borderColor: colors.white,
borderWidth: borderWidth,
alignItems: "center",
width: dims.width,
},
floodingLogo: {
width: dims.width * 0.8,
height: dims.height * 0.8,
},
imgs_row: {
flexDirection: "row",
justifyContent: "space-between",
},
text: {
fontSize: dimensions.text.default,
textAlign: "center",
marginTop: 10,
},
error_txt: {
fontSize: dimensions.text.default,
color: colors.danger,
},
});
export default RainSharingDataScreen;