diff --git a/src/App.js b/src/App.js index 3337e4f..de19d9b 100644 --- a/src/App.js +++ b/src/App.js @@ -33,7 +33,7 @@ export default function App() { const storageUser = await authStorage.getUser(); if (storageUser) setUser(storageUser); - global.location = { lat: -23.623, long: -46.5637 }; // await getLocation(); + global.location = { lat: -9.969802, long: -67.816956 }; // await getLocation(); }; if (!isReady && netInfo.isInternetReachable) { diff --git a/src/app/assets/floodZonesAssets/PinIntransitavel.js b/src/app/assets/floodZonesAssets/PinIntransitavel.js index f571b92..7b2f33d 100644 --- a/src/app/assets/floodZonesAssets/PinIntransitavel.js +++ b/src/app/assets/floodZonesAssets/PinIntransitavel.js @@ -1 +1 @@ -export default PinIntransitavel = `` \ No newline at end of file +export default PinIntransitavel = `` \ No newline at end of file diff --git a/src/app/assets/floodZonesAssets/PinTransitavel.js b/src/app/assets/floodZonesAssets/PinTransitavel.js index 68ddedd..3ee9d1f 100644 --- a/src/app/assets/floodZonesAssets/PinTransitavel.js +++ b/src/app/assets/floodZonesAssets/PinTransitavel.js @@ -1 +1 @@ -export default PinTransitavel = `` \ No newline at end of file +export default PinTransitavel = `` \ No newline at end of file diff --git a/src/app/assets/pluviometer/PinPluviometerOfficial.js b/src/app/assets/pluviometer/PinPluviometerOfficial.js new file mode 100644 index 0000000..df7602e --- /dev/null +++ b/src/app/assets/pluviometer/PinPluviometerOfficial.js @@ -0,0 +1 @@ +export default PinPluviometerOfficial = `` \ No newline at end of file diff --git a/src/app/assets/pluviometer/PinPluviometroArt.js b/src/app/assets/pluviometer/PinPluviometroArt.js index cd29e07..72c3bf6 100644 --- a/src/app/assets/pluviometer/PinPluviometroArt.js +++ b/src/app/assets/pluviometer/PinPluviometroArt.js @@ -1 +1 @@ -export default PinPluviometroArt = `` \ No newline at end of file +export default PinPluviometroArt = `` \ No newline at end of file diff --git a/src/app/assets/rain/PinChuvaForte.js b/src/app/assets/rain/PinChuvaForte.js index 10a7a38..3777c72 100644 --- a/src/app/assets/rain/PinChuvaForte.js +++ b/src/app/assets/rain/PinChuvaForte.js @@ -1 +1 @@ -export default PinChuvaForte = `` \ No newline at end of file +export default PinChuvaForte = `` \ No newline at end of file diff --git a/src/app/assets/rain/PinChuvaFraca.js b/src/app/assets/rain/PinChuvaFraca.js index 47c2cbb..7c121e5 100644 --- a/src/app/assets/rain/PinChuvaFraca.js +++ b/src/app/assets/rain/PinChuvaFraca.js @@ -1 +1 @@ -export default PinChuvaFraca = `` \ No newline at end of file +export default PinChuvaFraca = `` \ No newline at end of file diff --git a/src/app/assets/rain/PinChuvaModerada.js b/src/app/assets/rain/PinChuvaModerada.js index 445a34c..7ea219c 100644 --- a/src/app/assets/rain/PinChuvaModerada.js +++ b/src/app/assets/rain/PinChuvaModerada.js @@ -1 +1 @@ -export default PinChuvaModerada = `` \ No newline at end of file +export default PinChuvaModerada = `` \ No newline at end of file diff --git a/src/app/assets/rain/PinNublado.js b/src/app/assets/rain/PinNublado.js index 5f3aa97..dd3656f 100644 --- a/src/app/assets/rain/PinNublado.js +++ b/src/app/assets/rain/PinNublado.js @@ -1 +1 @@ -export default PinNublado = `` \ No newline at end of file +export default PinNublado = `` \ No newline at end of file diff --git a/src/app/assets/river/PinRioCheio.js b/src/app/assets/river/PinRioCheio.js index 6c038f9..724e1b8 100644 --- a/src/app/assets/river/PinRioCheio.js +++ b/src/app/assets/river/PinRioCheio.js @@ -1 +1 @@ -export default PinRioCheio = `` \ No newline at end of file +export default PinRioCheio = `` \ No newline at end of file diff --git a/src/app/assets/river/PinRioExtravasado.js b/src/app/assets/river/PinRioExtravasado.js index 9b9afcb..ca371b5 100644 --- a/src/app/assets/river/PinRioExtravasado.js +++ b/src/app/assets/river/PinRioExtravasado.js @@ -1 +1 @@ -export default PinRioExtravasado = `` \ No newline at end of file +export default PinRioExtravasado = `` \ No newline at end of file diff --git a/src/app/assets/river/PinRioNormal.js b/src/app/assets/river/PinRioNormal.js index a46c9d7..02feda8 100644 --- a/src/app/assets/river/PinRioNormal.js +++ b/src/app/assets/river/PinRioNormal.js @@ -1 +1 @@ -export default PinRioNormal = `` \ No newline at end of file +export default PinRioNormal = `` \ No newline at end of file diff --git a/src/app/components/AssembleModalObject.js b/src/app/components/AssembleModalObject.js index d07f117..e854c5f 100644 --- a/src/app/components/AssembleModalObject.js +++ b/src/app/components/AssembleModalObject.js @@ -25,13 +25,13 @@ function getLogo(name, situation) { } if (name == "rain") { - if (situation == "sem chuva") { + if (situation == "SEM CHUVA") { return custom_assets.rainLevel[0]; - } else if (situation == "chuva fraca") { + } else if (situation == "CHUVA FRACA") { return custom_assets.rainLevel[1]; - } else if (situation == "chuva moderada") { + } else if (situation == "CHUVA MODERADA") { return custom_assets.rainLevel[2]; - } else if (situation == "chuva forte") { + } else if (situation == "CHUVA FORTE") { return custom_assets.rainLevel[3]; } else { return custom_assets.rainLevel[3]; @@ -39,13 +39,13 @@ function getLogo(name, situation) { } if (name == "riverFlood") { - if (situation == "baixo") { + if (situation == "BAIXO") { return custom_assets.riverLevel[0]; - } else if (situation == "normal") { + } else if (situation == "NORMAL") { return custom_assets.riverLevel[1]; - } else if (situation == "alto") { + } else if (situation == "ALTO") { return custom_assets.riverLevel[2]; - } else if (situation == "inundar") { + } else if (situation == "INUNDAR") { return custom_assets.riverLevel[3]; } return custom_assets.riverLevel[0]; @@ -64,6 +64,7 @@ function verifyMeasureDates(labels, measureDate) { const AssembleModalObject = (response, name) => { var situation = null; var user = null; + var institution = null; var address = null; var date = null; var time = null; @@ -75,7 +76,9 @@ const AssembleModalObject = (response, name) => { }; if (JSON.parse(response)) { - const r = JSON.parse(response); + const r = JSON.parse(response).array_to_json; + + user = r[0].formsanswersuserinformer; if (name == "automaticPluviometer") { (situation = "PLUVIÔMETRO"), @@ -90,13 +93,12 @@ const AssembleModalObject = (response, name) => { ); } if (f.fieldname == "siglarede") { - user = f.fieldsanswersvalue; + institution = f.fieldsanswersvalue; } if (f.fieldname == "nome") { address = f.fieldsanswersvalue; } }); - } else { if (r[0].array_to_json) { r[0].array_to_json.forEach(function (f) { @@ -119,10 +121,12 @@ const AssembleModalObject = (response, name) => { } } } + return { name: name, title: situation, user: user, + institution: institution, address: address, date: date + " | " + time, description: comments, diff --git a/src/app/components/MapModal.js b/src/app/components/MapModal.js index 570f874..ab5a5aa 100644 --- a/src/app/components/MapModal.js +++ b/src/app/components/MapModal.js @@ -1,6 +1,7 @@ import React, { useState } from "react"; import { Text, TouchableOpacity, View, StyleSheet, Image } from "react-native"; import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { FontAwesome5 } from "@expo/vector-icons"; import SelfClosingModal from "../components/SelfClosingModal"; import colors from "../config/colors"; import { showMessage } from "react-native-flash-message"; @@ -26,12 +27,25 @@ function notImplemented() { }); } -function topBar(props, setShowModal) { +function loadingData() { + return ( + + Carregando dados... + + ); +} + +function onCloseModal(setShowModal, setCurrentMarker) { + setShowModal(null); + setCurrentMarker(undefined); +} + +function topBar(props, setShowModal, setCurrentMarker) { return ( - {props.title} + {props ? props.title : "Aguarde..."} @@ -62,7 +76,7 @@ function topBar(props, setShowModal) { setShowModal(null)} + onPress={() => onCloseModal(setShowModal, setCurrentMarker)} > @@ -92,6 +106,18 @@ function iconTextRow(props) { ); } +function iconInstitutionTextRow(props) { + return ( + + + + + + {props.description} + + ); +} + function iconImageRow(props) { return ( @@ -200,17 +226,25 @@ function componentBody(props) { const date = props.date ? props.date : "implementando..."; const address = props.address ? props.address : "Erro ao carregar endereço"; const user = props.user ? props.user : "Usuário ativo"; + const institution = props.institution + ? props.institution + : "Erro ao carregar instituição"; return ( + {!isOfficialPluviometer(props.name) && + iconTextRow({ name: "account", description: user })} + {props.institution && iconInstitutionTextRow({ + name: "university", + description: institution, + })} {iconTextRow({ name: "map-marker", description: address })} {!isPluviometer(props.name) && iconTextRow({ name: "calendar", description: date })} - {iconTextRow({ name: "account", description: user })} - {props.name != "automaticPluviometer" && + {!isOfficialPluviometer(props.name) && iconImageRow({ name: "camera", pic: pictures })} @@ -236,6 +270,10 @@ function isPluviometer(name) { return name === "pluviometer" || name === "automaticPluviometer"; } +function isOfficialPluviometer(name) { + return name === "automaticPluviometer"; +} + function MapModal({ showModal, setShowModal, markers }) { const [currentMarker, setCurrentMarker] = useState(undefined); var timeFilter = null; @@ -249,11 +287,10 @@ function MapModal({ showModal, setShowModal, markers }) { } const result = await getFieldsAnswers.fieldsAnswers(timeFilter, id); - if (result.data) { - console.log(timeFilter); + if (result.data && showModal && currentMarker == undefined) { setCurrentMarker( AssembleModalObject( - JSON.stringify(result.data.responseData.array_to_json), + JSON.stringify(result.data.responseData), name ) ); @@ -265,22 +302,44 @@ function MapModal({ showModal, setShowModal, markers }) { getAnswers(showModal, markers.get(showModal).name); } - if (currentMarker != undefined && showModal != null) { + if (showModal != null) { return ( onCloseModal(setShowModal, setCurrentMarker)} > - {topBar(currentMarker, setShowModal)} - - {componentBody(currentMarker)} - {isPluviometer(currentMarker.name) ? moreInfo(currentMarker) : null} - {/* {!isPluviometer(currentMarker.name) ? reviews(currentMarker) : null} */} - {userMessage(currentMarker)} - + {topBar(currentMarker, setShowModal, setCurrentMarker)} + + {currentMarker != undefined && ( + + {componentBody(currentMarker)} + {isPluviometer(currentMarker.name) ? moreInfo(currentMarker) : null} + {/* {!isPluviometer(currentMarker.name) ? reviews(currentMarker) : null} */} + {userMessage(currentMarker)} + + )} + {currentMarker == undefined && ( + + + + + Aguarde um momento enquanto os dados são carregados + + + + )} ); } else { @@ -338,6 +397,13 @@ const styles = StyleSheet.create({ fontWeight: "500", fontSize: dimensions.text.default, }, + textWait: { + fontSize: dimensions.text.secondary, + textAlign: "center", + color: colors.primary, + fontWeight: "bold", + paddingBottom: dimensions.spacing.big_padding, + }, }); export default MapModal; diff --git a/src/app/config/assets.js b/src/app/config/assets.js index 80b6363..e4f347b 100644 --- a/src/app/config/assets.js +++ b/src/app/config/assets.js @@ -35,6 +35,7 @@ import PinPluviometroArt from "../assets/pluviometer/PinPluviometroArt"; import FloodPassable from "../assets/floodZonesAssets/passable.svg"; import FloodNotPassable from "../assets/floodZonesAssets/not_passable.svg"; +import PinPluviometerOfficial from "../assets/pluviometer/PinPluviometerOfficial"; export default { floodZones: { @@ -91,7 +92,7 @@ export default { pluviometer: require("../assets/pluviometer/diario_pluviometrico.png"), pluviometer_pin: PinPluviometroArt, officialPluviometer: require("../assets/pluviometer/pluviometroOficial.png"), - officialPluviometer_pin: require("../assets/pluviometer/PinPluviometroOficial.png"), + officialPluviometer_pin: PinPluviometerOfficial, PluviometerIcon: Pluviometer, OfficialPluviometer: OfficialPluviometer, AppLogoTitle: AppLogoTitle, diff --git a/src/app/hooks/useFiltering.js b/src/app/hooks/useFiltering.js index 6bd0ef5..ad70367 100644 --- a/src/app/hooks/useFiltering.js +++ b/src/app/hooks/useFiltering.js @@ -1,49 +1,53 @@ import moment from "moment"; function useFiltering(location) { - const initialDate = moment().format("YYYY-MM-DDTHH:mm:ss"); + const endpoint = + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?"; + const initialDate = moment().add(1, "days").format("YYYY-MM-DDTHH:mm:ss"); const finalDate = moment().subtract(1, "days").format("YYYY-MM-DDTHH:mm:ss"); + // console.log(initialDate+"/"+finalDate); + const filters = [ { name: "floodZones", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=FLOODZONES_FORM&time=${finalDate}/${initialDate}&lat=${location.lat}&lon=${location.long}&buffer=5000&limit=5` ), }, { name: "rain", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=RAIN_FORM&time=${finalDate}/${initialDate}&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=30` ), }, { name: "riverFlood", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=RIVERFLOOD_FORM&time=${finalDate}/${initialDate}&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=5` ), }, { name: "pluviometer", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=PLUVIOMETER_REGISTRATION&time=${finalDate}/${initialDate}&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=5` ), }, { name: "susceptibilityAreas", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=FLOODZONES_OFFICIAL&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=15` ), }, { name: "automaticPluviometer", socketUrl: new WebSocket( - "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/formsanswers?" + + endpoint + `type=PLUVIOMETERS_OFFICIAL&lat=${location.lat}&lon=${location.long}&buffer=500000&limit=10` ), }, diff --git a/src/app/hooks/useSocketMarkers.js b/src/app/hooks/useSocketMarkers.js index 9b951bc..801cd33 100644 --- a/src/app/hooks/useSocketMarkers.js +++ b/src/app/hooks/useSocketMarkers.js @@ -5,7 +5,7 @@ import PinTransitavel from "../assets/floodZonesAssets/PinTransitavel"; const custom_assets = { pluviometer: assets.pluviometer, - officialPluviometer: assets.officialPluviometer, + officialPluviometer: assets.pluviometer, floodZones: assets.floodZones, riverLevel: ["low", "normal", "high", "flooding"].map((key) => { return assets.riverLevel[key]; @@ -17,7 +17,7 @@ const custom_assets = { const custom_assets_pin = { pluviometer: assets.pluviometer_pin, - officialPluviometer: assets.pluviometer_pin,//assets.officialPluviometer_pin, + officialPluviometer: assets.officialPluviometer_pin, floodZones: { passable: PinTransitavel, not_passable: PinIntransitavel, @@ -157,26 +157,22 @@ function buildMarkerObject(response, name) { const r = JSON.parse(response); const resposta = r.formsanswersgeom; const formsanswersgeom = JSON.parse(resposta).coordinates; - var situation = null; - if (r.fias) { - r.fias.forEach(function (f) { - if (f.fieldname == "situation") { - situation = f.fieldsanswersvalue; - } - }); + if (r.array_to_json) { + situation = r.array_to_json.find((field)=> field.fieldname == "situation"); } +// console.log(situation.fieldsanswersvalue); return { ID: r.formsanswersid, name: name, - title: situation, + title: situation ? situation.fieldsanswersvalue : null, coordinate: { latitude: formsanswersgeom[1], longitude: formsanswersgeom[0], }, - image: getImage(name, situation), + image: getImage(name, situation ? situation.fieldsanswersvalue : null), }; } diff --git a/src/app/screens/MapFeedScreen.js b/src/app/screens/MapFeedScreen.js index d21c1d8..3707d2f 100644 --- a/src/app/screens/MapFeedScreen.js +++ b/src/app/screens/MapFeedScreen.js @@ -13,14 +13,14 @@ export default function MapFeedScreen(props) { const [dataOptionsToShow, setDataOptionsToShow] = useState({ oficial: { - automaticPluviometer: false, + automaticPluviometer: true, susceptibilityAreas: false, }, citzen: { - floodRisk: false, - pluviometer: false, - rain: true, - floodZones: false, + floodRisk: true, + pluviometer: true, + rain: false, + floodZones: true, riverFlood: false, }, }); diff --git a/src/app/screens/SharingFloodZonesScreen.js b/src/app/screens/SharingFloodZonesScreen.js index 42b9648..9c0ce92 100644 --- a/src/app/screens/SharingFloodZonesScreen.js +++ b/src/app/screens/SharingFloodZonesScreen.js @@ -87,14 +87,14 @@ function SharingFloodZonesScreen(props) { SvgImage={assets.floodZones.passable} onPress={() => { setPassable(1); - setFloodSituation("TRANSITAVEL"); + setFloodSituation("TRANSITÁVEL"); }} /> { setPassable(0); - setFloodSituation("INTRANSITAVEL"); + setFloodSituation("INTRANSITÁVEL"); }} label={"INTRANSITÁVEL"} isToggle={passable == 0}