diff --git a/src/app/api/pluviometer.js b/src/app/api/pluviometer.js new file mode 100644 index 0000000..c9d4e7b --- /dev/null +++ b/src/app/api/pluviometer.js @@ -0,0 +1,7 @@ +export default function requestPluviometerData() { + console.log(Math.floor(Math.random() * 10)); + return { + labels: ["1", "2", "3"], + values: [1, 2, 3], + }; +} diff --git a/src/app/components/MapModal.js b/src/app/components/MapModal.js index fe06bef..937ee5b 100644 --- a/src/app/components/MapModal.js +++ b/src/app/components/MapModal.js @@ -155,10 +155,14 @@ function reviews(props) { ); } -function moreInfo() { +function moreInfo(props) { return ( - + ); } diff --git a/src/app/components/PluviometerGraphics.js b/src/app/components/PluviometerGraphics.js index 229bee0..3a978a3 100644 --- a/src/app/components/PluviometerGraphics.js +++ b/src/app/components/PluviometerGraphics.js @@ -1,29 +1,29 @@ import React from "react"; import { StyleSheet, Text, View } from "react-native"; -import Screen from "../components/Screen"; -import { dimensions, scaleDimsFromWidth } from "../config/dimensions"; import colors from "../config/colors/"; import { LineChart } from "react-native-chart-kit"; - +import requestPluviometerData from "../api/pluviometer"; import { Dimensions } from "react-native"; const screenWidth = Dimensions.get("window").width * 0.95; const screenHeight = Dimensions.get("window").height * 0.3; -const data = { - //substituir por dados da API - labels: ["01/01", "01/02", "01/03", "01/04", "01/05"], - datasets: [ - { - data: [0, 10, 20, 25, 5], - color: () => colors.gold, - strokeWidth: 2, - }, - ], +function figure_config(labels, values) { + return { + labels: labels, + datasets: [ + { + data: values, + color: () => colors.gold, + strokeWidth: 2, + }, + ], + + legend: ["Registros pluviométricos"], + }; +} - legend: ["Registros pluviométricos"], -}; const chartConfig = { backgroundGradientFrom: 0, backgroundGradientFromOpacity: 0, @@ -37,7 +37,7 @@ const chartConfig = { }, }; -function PluviometerGraphics({ chartHeight = screenHeight }) { +function PluviometerGraphics({ chartHeight, labels, values }) { return ( { console.log("requesting data"); if (isAvailable(global.userDataBase)) { - queriesToParsersMapper.forEach(([query, parser]) => { + queriesToParsersMapper.forEach(([query, parser, cleanParse]) => { global.userDataBase.transaction((tx) => { tx.executeSql(query, [], (tx, results) => { - dispatch({ increment: parseResult(results, parser) }); + dispatch({ increment: parseResult(results, parser, cleanParse) }); }); }); }); @@ -188,6 +166,13 @@ function genericSelect(queriesToParsersMapper, dispatch, isFocused) { const initialState = { markers: new Set() }; function reducer(state = initialState, action) { + // NOTE: removing old pluviometer value to new data can be displayed + state.markers.forEach((m) => { + if (m.name === "pluviometer") { + state.markers.delete(m); + } + }); + action.increment.map((val) => { state.markers.add(val); }); @@ -200,11 +185,55 @@ function reducer(state = initialState, action) { function useMarkers(isFocused) { const [state, dispatch] = useReducer(reducer, initialState); + const context = useContext(CurrentLocationContext); + const location = context.currentCoordinates; + const addr = context.currentLocation; + + const parsePluviometer = (db_result) => { + if (db_result.rows.length <= 0) return []; + + const values = { + pictures: null, + data: { + labels: [], + values: [], + }, + description: "", + date: "", + }; + const start = Math.max(0, db_result.rows.length - 7); + for (let i = start; i < db_result.rows.length; ++i) { + var row = db_result.rows.item(i); + + description = row["Description"] ? "\n\n" + row["Description"] : ""; + + values.image = custom_assets.pluviometer; + values.date = row["Date"]; + values.description = + row["Precipitation"] + "mm" + ", " + row["Date"] + description; + values.pictures = row["Images"]; + values.data.labels.push(row["Date"].slice(0, 5)); + values.data.values.push(parseInt(row["Precipitation"])); + } + + const result = { + ID: ++ID, + name: "pluviometer", + title: "Pluviometro 1", + coordinate: location, + address: addr, + ...values, + }; + + console.log(result); + return [result]; + }; + const queriesToParsersMapper = [ - ["SELECT * FROM FloodZones;", parseFloodZones], - ["SELECT * FROM Pluviometer;", partsePluviometer], - ["SELECT * FROM RiverLevel;", parseRiverLevel], - ["SELECT * FROM RainLevel;", parseRainLevel], + ["SELECT * FROM FloodZones;", parseFloodZones, false], + ["SELECT * FROM RiverLevel;", parseRiverLevel, false], + ["SELECT * FROM RainLevel;", parseRainLevel, false], + ["SELECT * FROM PluviometerData;", parsePluviometer, true], ]; genericSelect(queriesToParsersMapper, dispatch, isFocused); diff --git a/src/app/hooks/useFocus.js b/src/app/hooks/useFocus.js index 6a50764..1f6a752 100644 --- a/src/app/hooks/useFocus.js +++ b/src/app/hooks/useFocus.js @@ -1,6 +1,6 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState, useContext } from "react"; import { useIsFocused } from "@react-navigation/native"; - +import { CurrentLocationContext } from "../context/CurrentLocationContext"; /* NOTE: This hook is used this way because react-navigation/native @@ -13,13 +13,15 @@ import { useIsFocused } from "@react-navigation/native"; export default function attachFocusToQuery() { const isFocused = useIsFocused(); + const context = useContext(CurrentLocationContext); + const [hasToQuery, setHasToQuery] = useState(null); useEffect(() => { if (isFocused == true) { setHasToQuery(!hasToQuery); } - }, [isFocused]); + }, [isFocused, context.getCurrentLocation]); return hasToQuery; } diff --git a/src/app/screens/PluviometerSharingDataScreen.js b/src/app/screens/PluviometerSharingDataScreen.js index f953f9a..ebc74cb 100644 --- a/src/app/screens/PluviometerSharingDataScreen.js +++ b/src/app/screens/PluviometerSharingDataScreen.js @@ -53,11 +53,11 @@ function PluviometerSharingDataScreen(props) {
{ - insertPluviometerData({ ...values, dateTime, time, location, address }); + insertPluviometerData({ ...values, dateTime, time }); showMessage({ message: "Informação enviada!", duration: 3000, @@ -93,9 +93,7 @@ function PluviometerSharingDataScreen(props) { }} > {/*Data da coleta:*/} - +