diff --git a/src/app/api/Websockets/dataClient.js b/src/app/api/Websockets/dataClient.js new file mode 100644 index 0000000..47330f4 --- /dev/null +++ b/src/app/api/Websockets/dataClient.js @@ -0,0 +1,4 @@ +const dataClient = + "ws://wpd.brazilsouth.cloudapp.azure.com:9090/hot/data?"; + +export default dataClient; diff --git a/src/app/api/auth.js b/src/app/api/auth.js index 50a3ccb..5aaef88 100644 --- a/src/app/api/auth.js +++ b/src/app/api/auth.js @@ -59,8 +59,8 @@ async function userPersonalData() { async function userActivation(code) { const { username } = await authStorage.getUser(); const authToken = await authStorage.getToken() - console.log("TOKEN ACTIVATE: "+authToken); - console.log("USER NAME: " + username); + // console.log("TOKEN ACTIVATE: "+authToken); + // console.log("USER NAME: " + username); const localClient = create({ baseURL: "http://wpd.brazilsouth.cloudapp.azure.com:8080/users", diff --git a/src/app/components/AssembleModalObject.js b/src/app/components/AssembleModalObject.js index ab64cfd..13c58b1 100644 --- a/src/app/components/AssembleModalObject.js +++ b/src/app/components/AssembleModalObject.js @@ -1,8 +1,9 @@ import moment from "moment"; import React from "react"; import { View, Text } from "react-native"; +import getFieldsAnswers from "../api/RequestFieldsAnswers/getFieldsAnswers"; import assets from "../config/assets"; - +//---1/3: melhorar código const custom_assets = { pluviometer: assets.PluviometerIcon, officialPluviometer: assets.OfficialPluviometer, @@ -59,14 +60,72 @@ function getLogo(name, situation) { } } -function verifyMeasureDates(labels, measureDate) { +function verifymeasureDates(labels, measureDate, day) { + // console.log(measureDate); if (labels == null || !labels.find((f) => f == measureDate)) { labels.push(measureDate); + day.label = measureDate; + + return true; + } + return false; +} + +const getCurrentPluviometer = (pluvForm, userId, data, datapluv) => { + //console.log("\nuserid: "+ userId + "\n\n"); + //console.log(pluvForm); + var day = { label: null, values: [] }; + + var measureDate = null; + if (pluvForm.formsanswersuserinformer == userId) { + pluvForm.array_to_json.find((field) => { + if (field.fieldname == "date") { + measureDate = moment(field.fieldsanswersvalue, "DD-MM-YYYY").format( + "DD/MM" + ); + //data.labels.push(moment(f.fieldsanswersdtfilling).format("DD/MM/YYYY")); + } + }); + + pluvForm.array_to_json.find((field) => { + if (field.fieldname == "rainamount") { + if (verifymeasureDates(data.labels, measureDate, day)) { + day.values.push( + field.fieldsanswersvalue + ? parseFloat(field.fieldsanswersvalue) + : null + ); + + datapluv.push(day); + } else { + datapluv.forEach((d) => { + if (d.label === measureDate) { + d.values.push( + field.fieldsanswersvalue + ? parseFloat(field.fieldsanswersvalue) + : null + ); + } + }); + } + } + }); + + return pluvForm; + } +}; + +async function getPluviometerStatio_informations(id) { + const result = await getFieldsAnswers.fieldsAnswers(null, id); + + if (result.data) { + return result.data.responseData.array_to_json[0].array_to_json; } + + return null; } -const AssembleModalObject = (response, name) => { - //console.log(response); +const AssembleModalObject = async (response, name, userId, formId) => { var situation = null; var user = null; var institution = null; @@ -76,10 +135,11 @@ const AssembleModalObject = (response, name) => { var comments = null; var pictures = null; var data = { - values: [], labels: [], }; + var datapluv = []; + if (JSON.parse(response).array_to_json) { const r = JSON.parse(response).array_to_json; @@ -88,15 +148,32 @@ const AssembleModalObject = (response, name) => { if (name == "automaticPluviometer") { (situation = "PLUVIÔMETRO"), r[0].array_to_json.forEach(function (f) { + var day = { label: null, values: [] }; if (f.fieldname == "medicao") { - verifyMeasureDates( - data.labels, - moment(f.fieldsanswersdtfilling).format("DD/MM") - ); //data.labels.push(moment(f.fieldsanswersdtfilling).format("DD/MM/YYYY")); - data.values.push( - f.fieldsanswersvalue ? parseFloat(f.fieldsanswersvalue) : null - ); + var measureDate = moment( + f.fieldsanswersdtfilling, + "YYYY-MM-DDTHH:mm:ss" + ).format("DD/MM"); + + if (verifymeasureDates(data.labels, measureDate, day)) { + day.values.push( + f.fieldsanswersvalue ? parseFloat(f.fieldsanswersvalue) : null + ); + day.label = measureDate; + datapluv.push(day); + } else { + datapluv.forEach((d) => { + if (d.label == measureDate) { + d.values.push( + f.fieldsanswersvalue + ? parseFloat(f.fieldsanswersvalue) + : null + ); + } + }); + } } + if (f.fieldname == "siglarede") { institution = f.fieldsanswersvalue; } @@ -104,9 +181,44 @@ const AssembleModalObject = (response, name) => { address = f.fieldsanswersvalue; } }); + + if (datapluv) { + datapluv.sort(function (dataPluv, dataPluvB) { + return dataPluv.label.localeCompare(dataPluvB.label); + }); + } + + // console.log(datapluv); } else if (name == "pluviometer") { situation = "PLUVIÔMETRO"; - //buscar todos os PLUVIOMETERS_FORMS REPORTADOS PELO USUÁRIO DOS ULTIMOS 5 DIAS + r[r.length - 1].array_to_json.forEach(function (f) { + if (f.fieldname == "comments") { + comments = f.fieldsanswersvalue; + } + }); + + const pluv_sation = await getPluviometerStatio_informations(formId); + if (pluv_sation) { + pluv_sation.forEach((field) => { + if (field.fieldname == "institutename") { + institution = + field.fieldsanswersvalue != "None" + ? field.fieldsanswersvalue + : "Não há vínculo institucional"; + } else if (field.fieldname == "eventaddress") { + address = field.fieldsanswersvalue; + } + }); + } + + const currentPluv = JSON.parse(response).array_to_json.filter( + (pluvForm) => getCurrentPluviometer(pluvForm, userId, data, datapluv) + ); + if (datapluv) { + datapluv.sort(function (dataPluv, dataPluvB) { + return dataPluv.label.localeCompare(dataPluvB.label); + }); + } } else { if (r[0].array_to_json) { user = r[0].formsanswersuserinformer; @@ -141,7 +253,7 @@ const AssembleModalObject = (response, name) => { description: comments, logo: getLogo(name, situation), pictures: pictures, - data: data, + data: datapluv, }; }; diff --git a/src/app/components/MapModal.js b/src/app/components/MapModal.js index d8935de..4fb0355 100644 --- a/src/app/components/MapModal.js +++ b/src/app/components/MapModal.js @@ -16,6 +16,7 @@ import getFieldsAnswers from "../api/RequestFieldsAnswers/getFieldsAnswers"; import AssembleModalObject from "./AssembleModalObject"; import moment from "moment"; import SvgLabeledButton from "./SvgLabeledButton"; +import getPluviometerData from "../hooks/usePluviometerData"; const chartHeight = screen_height * 0.3; @@ -197,7 +198,8 @@ function reviews(props) { } function moreInfo(props) { - const hasData = props.data.values.length > 0; + const hasData = props.data.length > 0; + // console.log(props.data); return ( ) : ( - + )} ); @@ -278,9 +276,10 @@ function isOfficialPluviometer(name) { function MapModal({ showModal, setShowModal, markers }) { const [currentMarker, setCurrentMarker] = useState(undefined); + const [pluviometerData, setPluviometerData] = useState(undefined); var timeFilter = null; - const getAnswers = async (id, name) => { + const getAnswers = async (id, name, coordinates, user) => { if (isOfficialPluviometer(name)) { const initialDate = moment().format("YYYY-MM-DD"); const finalDate = moment().subtract(5, "days").format("YYYY-MM-DD"); @@ -288,18 +287,50 @@ function MapModal({ showModal, setShowModal, markers }) { timeFilter = finalDate + "/" + initialDate; // console.log(timeFilter); } - - const result = await getFieldsAnswers.fieldsAnswers(timeFilter, id); - if (result.data && showModal && currentMarker == undefined) { - setCurrentMarker( - AssembleModalObject(JSON.stringify(result.data.responseData), name) - ); + if (currentMarker == undefined) { + if (name == "pluviometer") { + getPluviometerData(coordinates, setPluviometerData); + const result = pluviometerData; + // console.log(result); + if (result && showModal && currentMarker == undefined) { + AssembleModalObject( + JSON.stringify(result.responseData), + name, + user, + id + ).then((marker) => { + setCurrentMarker(marker); + }); + // console.log(id); + } + } else { + const result = await getFieldsAnswers.fieldsAnswers( + timeFilter, + id, + user + ); + if (result.data && showModal && currentMarker == undefined) { + AssembleModalObject( + JSON.stringify(result.data.responseData), + name, + user, + id + ).then((marker) => { + setCurrentMarker(marker); + }); + } + } } }; if (markers && showModal != null && markers.has(showModal)) { //currentMarker = markers.get(showModal); - getAnswers(showModal, markers.get(showModal).name); + getAnswers( + showModal, + markers.get(showModal).name, + markers.get(showModal).coordinate, + markers.get(showModal).user + ); } if (showModal != null) { diff --git a/src/app/components/PluviometerGraphics.js b/src/app/components/PluviometerGraphics.js index fabb27a..665b6be 100644 --- a/src/app/components/PluviometerGraphics.js +++ b/src/app/components/PluviometerGraphics.js @@ -17,7 +17,6 @@ function figure_config(labels, values) { data: values, color: () => colors.gold, strokeWidth: 2, - }, ], @@ -51,7 +50,15 @@ const chartConfig = { }, }; -function PluviometerGraphics({ chartHeight, labels, values }) { +function PluviometerGraphics({ chartHeight, data }) { + var labels = []; + var values = []; + data.forEach((day) => { + labels.push(day.label); + day.values.forEach((value) => { + values.push(value); + }); + }); return ( { + if (data != undefined) { + const dataObject = JSON.parse(data); + // console.log(dataObject.responseData); + if (dataObject?.success) { + setPluviometerData(dataObject); + } + } else { + setPluviometerData(null); + } + + socketObject.close(); + }; +} + +export default getPluviometerData; diff --git a/src/app/hooks/useSocketMarkers.js b/src/app/hooks/useSocketMarkers.js index ca1f6ab..89f459a 100644 --- a/src/app/hooks/useSocketMarkers.js +++ b/src/app/hooks/useSocketMarkers.js @@ -133,6 +133,7 @@ function buildMarkerObject(response, name) { latitude: formsanswersgeom[1], longitude: formsanswersgeom[0], }, + user: r.formsanswersuserinformer, image: getImage(name, situation ? situation.fieldsanswersvalue : null), }; } diff --git a/src/app/screens/MapFeedScreen.js b/src/app/screens/MapFeedScreen.js index 4e2b053..f5b59e7 100644 --- a/src/app/screens/MapFeedScreen.js +++ b/src/app/screens/MapFeedScreen.js @@ -24,7 +24,7 @@ export default function MapFeedScreen(props) { }); const markers = useSocketMarkers(); - console.log("============= qtd markers " + markers.markers.size + " ================" ) + // console.log("============= qtd markers " + markers.markers.size + " ================" ) // console.log("location: " + JSON.stringify(global.location)) return ( diff --git a/src/app/screens/SharingDataScreen.js b/src/app/screens/SharingDataScreen.js index f45e21a..4d7f371 100644 --- a/src/app/screens/SharingDataScreen.js +++ b/src/app/screens/SharingDataScreen.js @@ -13,8 +13,12 @@ function SharingDataScreen({ navigation }) { const [showLog, setShowLog] = useState(false); const isRegistered = authContext.user?.username != null; + const pluviometer = authContext.user?.pluviometer; + console.log(pluviometer) const currentUser = authContext.user; + + return ( navigation.navigate("PluviometerSharingData", { user: currentUser })} SvgImage={assets.PluviometricDataIcon} - active={isRegistered} + active={isRegistered && pluviometer} inactiveOnPress={() => setShowLog(true)} />