forked from cemaden-educacao/WPD-MobileApp
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.
168 lines
4.8 KiB
168 lines
4.8 KiB
import React, { useState, useContext, useEffect } from "react";
|
|
import { StyleSheet, Text, View, ScrollView } from "react-native";
|
|
import * as Yup from "yup";
|
|
import { Form, FormField, SubmitButton } from "../components/forms";
|
|
import Screen from "../components/Screen";
|
|
import FormImagePicker from "../components/forms/FormImagePicker";
|
|
import { insertPluviometerData } from "../database/databaseLoader";
|
|
import { showMessage } from "react-native-flash-message";
|
|
import { dimensions, scaleDimsFromWidth } from "../config/dimensions";
|
|
import colors from "../config/colors/";
|
|
import moment from "moment";
|
|
import PickEventDateLocation from "../components/PickEventDateLocation";
|
|
import { EventLocationContext } from "../context/EventLocationContext";
|
|
import { formcode } from "../components/forms/FormsCode";
|
|
import { AssembleIngestionPluviometer } from "../components/forms/AssembleIngestionObject";
|
|
import OnSubmitAwaitModal from "../components/forms/OnSubmitAwaitModal";
|
|
import OnSubmitMessageModal from "../components/forms/OnSubmitMessageModal";
|
|
import { useNetInfo } from "@react-native-community/netinfo";
|
|
|
|
const dims = scaleDimsFromWidth(85, 85, 25);
|
|
|
|
const validationSchema = Yup.object().shape({
|
|
pluviometer: Yup.number()
|
|
.required("Campo obrigatório")
|
|
.min(0, "O valor deve ser maior ou igual a 0.")
|
|
.max(999)
|
|
.label("pluviometer"),
|
|
//data: Yup.string().required("Campo obrigatório. Por favor, selecione a data"),
|
|
images: Yup.array(),
|
|
description: Yup.string().label("Description"),
|
|
});
|
|
|
|
function PluviometerSharingDataScreen(props) {
|
|
const user = props.route.params.user;
|
|
const context = useContext(EventLocationContext);
|
|
const [date, setDate] = useState(moment());
|
|
const [time, setTime] = useState(moment());
|
|
|
|
const code = formcode.pluviometer;
|
|
|
|
useEffect(() => {
|
|
context.defaultLocation();
|
|
}, []);
|
|
|
|
const [showAwaitModal, setShowAwaitModal] = useState(false);
|
|
const [showMessageModal, setShowMessageModal] = useState(false);
|
|
const [apiMessage, setApiMessage] = useState(null);
|
|
|
|
const connection = useNetInfo().isInternetReachable;
|
|
const formName = "pluviometer";
|
|
|
|
const sendForm = async ({
|
|
pluviometer,
|
|
description,
|
|
images,
|
|
user,
|
|
date,
|
|
time,
|
|
connection,
|
|
formName,
|
|
}) => {
|
|
const isSent = await AssembleIngestionPluviometer({
|
|
pluviometer,
|
|
description,
|
|
images,
|
|
user,
|
|
date,
|
|
time,
|
|
connection,
|
|
formName,
|
|
});
|
|
if (isSent) {
|
|
setApiMessage(isSent.ok);
|
|
}
|
|
|
|
return apiMessage;
|
|
};
|
|
|
|
return (
|
|
<Screen style={styles.container}>
|
|
<OnSubmitAwaitModal show={showAwaitModal} />
|
|
<OnSubmitMessageModal
|
|
show={showMessageModal}
|
|
setShow={setShowMessageModal}
|
|
sucess={apiMessage}
|
|
navigation={props.navigation}
|
|
/>
|
|
<ScrollView>
|
|
<Form
|
|
initialValues={{
|
|
pluviometer: 0,
|
|
description: "",
|
|
images: [],
|
|
}}
|
|
onSubmit={(values) => {
|
|
setShowAwaitModal(true);
|
|
sendForm({ ...values, user, date, time, connection, formName }).then((isSent) => {
|
|
setShowAwaitModal(false);
|
|
setShowMessageModal(true);
|
|
});
|
|
}}
|
|
validationSchema={validationSchema}
|
|
>
|
|
<Text style={{ ...styles.labelStyle, paddingTop: 24 }}>
|
|
Quantidade de chuva (mm):
|
|
</Text>
|
|
|
|
<FormField
|
|
keyboardType="number-pad"
|
|
maxLength={200}
|
|
numberOfLines={1}
|
|
name="pluviometer"
|
|
placeholder="Quantidade de chuva"
|
|
increaseDecreaseButtons={true}
|
|
/>
|
|
|
|
{/* <FormImagePicker backgroundColor={colors.primary} name="images" /> */}
|
|
|
|
<PickEventDateLocation
|
|
date={date}
|
|
time={time}
|
|
setDate={setDate}
|
|
setTime={setTime}
|
|
navigation={props.navigation}
|
|
location={false}
|
|
subtitle={"Defina a data da coleta"}
|
|
/>
|
|
|
|
<Text style={styles.labelStyle}>Comentário:</Text>
|
|
|
|
<FormField
|
|
maxLength={255}
|
|
multiline
|
|
name="description"
|
|
numberOfLines={3}
|
|
placeholder="Escreva um comentário (Opcional)..."
|
|
/>
|
|
|
|
<View paddingVertical={24}>
|
|
<SubmitButton title="Enviar" backgroundColor={colors.primary} />
|
|
</View>
|
|
</Form>
|
|
</ScrollView>
|
|
</Screen>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
},
|
|
image: {
|
|
width: dims.width * 0.8,
|
|
height: dims.height * 0.8,
|
|
justifyContent: "center",
|
|
alignItems: "center",
|
|
},
|
|
labelStyle: {
|
|
paddingHorizontal: 16,
|
|
paddingBottom: 12,
|
|
fontSize: dimensions.text.secondary,
|
|
fontWeight: "bold",
|
|
textAlign: "left",
|
|
color: colors.lightBlue,
|
|
},
|
|
});
|
|
|
|
export default PluviometerSharingDataScreen;
|