diff --git a/src/app/assets/avatar/Avatar_1.svg b/src/app/assets/avatar/Avatar_1.svg new file mode 100644 index 0000000..4a643a6 --- /dev/null +++ b/src/app/assets/avatar/Avatar_1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/assets/avatar/Avatar_2.svg b/src/app/assets/avatar/Avatar_2.svg new file mode 100644 index 0000000..7d60515 --- /dev/null +++ b/src/app/assets/avatar/Avatar_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/assets/avatar/Avatar_3.svg b/src/app/assets/avatar/Avatar_3.svg new file mode 100644 index 0000000..db88544 --- /dev/null +++ b/src/app/assets/avatar/Avatar_3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/assets/avatar/Avatar_4.svg b/src/app/assets/avatar/Avatar_4.svg new file mode 100644 index 0000000..de630c6 --- /dev/null +++ b/src/app/assets/avatar/Avatar_4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/assets/avatar/Avatar_5.svg b/src/app/assets/avatar/Avatar_5.svg new file mode 100644 index 0000000..1b6ec53 --- /dev/null +++ b/src/app/assets/avatar/Avatar_5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/config/assets.js b/src/app/config/assets.js index 69676c0..90894a7 100644 --- a/src/app/config/assets.js +++ b/src/app/config/assets.js @@ -1,6 +1,6 @@ import Pluviometer from "../assets/pluviometer/pluviometer-logo.svg"; -import OfficialPluviometer from "../assets/pluviometer/PluviometroOficial.svg" -import SusceptibilityAreas from "../assets/dataMenu/suceptibilitiesAreas.svg" +import OfficialPluviometer from "../assets/pluviometer/PluviometroOficial.svg"; +import SusceptibilityAreas from "../assets/dataMenu/suceptibilitiesAreas.svg"; import RainIcon from "../assets/rain/rain-icon.svg"; import RiverIcon from "../assets/river/river-logo.svg"; import FloodZones from "../assets/floodZonesAssets/floodZones-logo.svg"; @@ -38,6 +38,12 @@ import FloodNotPassable from "../assets/floodZonesAssets/not_passable.svg"; import PinPluviometerOfficial from "../assets/pluviometer/PinPluviometerOfficial"; import AboutScreenLogos from "../assets/logos/AboutScreenLogos"; +import Avatar0 from "../assets/avatar/Avatar_1.svg"; +import Avatar1 from "../assets/avatar/Avatar_2.svg"; +import Avatar2 from "../assets/avatar/Avatar_3.svg"; +import Avatar3 from "../assets/avatar/Avatar_4.svg"; +import Avatar4 from "../assets/avatar/Avatar_5.svg"; + export default { floodZones: { FloodZonesIcon: FloodZones, @@ -93,6 +99,7 @@ export default { Weather_4_cloudy, Weather_5_clean, ], + avatar: [Avatar0, Avatar1, Avatar2, Avatar3, Avatar4], pluviometer: require("../assets/pluviometer/diario_pluviometrico.png"), pluviometer_pin: PinPluviometroArt, officialPluviometer: require("../assets/pluviometer/pluviometroOficial.png"), diff --git a/src/app/config/utils.js b/src/app/config/utils.js new file mode 100644 index 0000000..f49d02a --- /dev/null +++ b/src/app/config/utils.js @@ -0,0 +1,18 @@ +// https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript +function hashPhoneNumber(phone) { + if (!phone) return undefined + + var hash = 0, + i, + chr; + if (phone.length === 0) return hash; + + for (i = 0; i < phone.length; i++) { + chr = phone.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + return Math.abs(hash); +} + +export default { hashPhoneNumber }; diff --git a/src/app/screens/AccountScreen.js b/src/app/screens/AccountScreen.js index e6cfa66..3078d52 100644 --- a/src/app/screens/AccountScreen.js +++ b/src/app/screens/AccountScreen.js @@ -1,22 +1,23 @@ import React, { useContext, useState } from "react"; -import { Text, Image, View, StyleSheet, ScrollView } from "react-native"; +import { Text, View, StyleSheet, ScrollView } from "react-native"; import Screen from "../components/Screen"; import { AuthContext } from "../auth/context"; import authStorage from "../auth/storage"; import { TouchableOpacity } from "react-native-gesture-handler"; import assets from "../config/assets"; -import { MaterialCommunityIcons, FontAwesome } from "@expo/vector-icons"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; import colors from "../config/colors"; import ConfirmationModal from "../components/ConfirmationModal"; +import utils from "../config/utils"; function UserHeader({ name, fone }) { + const index = utils.hashPhoneNumber(fone) % assets.avatar.length || 2 + const Avatar = assets.avatar[index]; + return ( - - - + + + {name} {fone} @@ -73,6 +74,7 @@ function ProfileItensList({ icon, IconProvider, title, onPress }) { function AccountScreen(props) { const { user, setUser } = useContext(AuthContext); + const isRegistered = user?.username != null; const [showLog, setShowLog] = useState(false); console.log(user); @@ -90,7 +92,9 @@ function AccountScreen(props) { }; const showActivation = () => { - if (user.role === "ROLE_CLIENT") + if (!isRegistered) + return false + else if (user.role === "ROLE_CLIENT") return !user.active else return true @@ -99,13 +103,22 @@ function AccountScreen(props) { const profileItems = [ { icon: "account", - show: true, + show: isRegistered, IconProvider: MaterialCommunityIcons, title: "Cadastrar pluviômetro", onPress: () => { props.navigation.navigate("PluviometerRegister"); }, }, + { + icon: "account", + show: !isRegistered, + IconProvider: MaterialCommunityIcons, + title: "Cadastra-se", + onPress: () => { + setUser(false); + }, + }, { icon: "bank", show: showActivation(), @@ -126,7 +139,7 @@ function AccountScreen(props) { }, { icon: "logout", - show: true, + show: isRegistered, IconProvider: MaterialCommunityIcons, title: "sair", onPress: () => { @@ -151,7 +164,7 @@ function AccountScreen(props) { padding: 16, }} > - + {profileItems.map(