forked from cemaden-educacao/WPD-MobileApp
analuizaff
4 years ago
4 changed files with 263 additions and 0 deletions
-
137src/app/components/DataMenu.js
-
111src/app/components/FloatButton.js
-
13src/package-lock.json
-
2src/package.json
@ -0,0 +1,137 @@ |
|||
import React, { Component, useRef, useState } from "react"; |
|||
import { StyleSheet, Text, TouchableOpacity, View, CheckBox } from "react-native"; |
|||
|
|||
import colors from "../config/colors"; |
|||
import { FlatList } from "react-native-gesture-handler"; |
|||
import { Fontisto } from '@expo/vector-icons'; |
|||
import { dimensions } from "../config/dimensions"; |
|||
|
|||
export default class DataMenu extends Component { |
|||
constructor(props) { |
|||
super(props); |
|||
this.state = { |
|||
timeSlots: [ |
|||
{ |
|||
id: 1, |
|||
name: 'Chuva', |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: 'Ponto de alagamento', |
|||
}, |
|||
{ |
|||
id: 3, |
|||
name: 'Pluviômetro artesanal', |
|||
}, |
|||
{ |
|||
id: 4, |
|||
name: 'Pluviômetro oficial', |
|||
}, |
|||
{ |
|||
id: 5, |
|||
name: 'Água no rio', |
|||
}, |
|||
{ |
|||
id: 6, |
|||
name: 'Área de inundação', |
|||
}, |
|||
], |
|||
selectedValue: {}, |
|||
} |
|||
} |
|||
toggleItem = (itemId) => { |
|||
const { selectedValue } = this.state; |
|||
const isSelected = selectedValue[itemId]; |
|||
selectedValue[itemId] = !isSelected; |
|||
|
|||
|
|||
this.setState({ |
|||
selectedValue: { ...selectedValue }, |
|||
}) |
|||
} |
|||
|
|||
render() { |
|||
const { timeSlots, selectedValue } = this.state; |
|||
return ( |
|||
|
|||
<View style={styles.container} > |
|||
|
|||
<View style={{ flex: 0.70, backgroundColor: colors.light }}> |
|||
<FlatList |
|||
data={timeSlots} |
|||
keyExtractor={(datas) => datas.id.toString()} |
|||
renderItem={({ item }) => { |
|||
const isSelected = selectedValue[item.id]; |
|||
return ( |
|||
<View style={{flexDirection:"row", flex: 1, marginTop: 15 }}> |
|||
<View style={{flexDirection:"row", flex: 0.85}}> |
|||
<Fontisto name="rain" color={colors.lightBlue} size={20}/> |
|||
<Text style={styles.item}> {item.name}</Text> |
|||
</View> |
|||
<View |
|||
style={{alignSelf:"flex-end", flexDirection:"row"}}> |
|||
<CheckBox |
|||
value={isSelected} |
|||
onChange={() => this.toggleItem(item.id)} |
|||
tintColors={{ true: colors.lightBlue, false: 'black' }} |
|||
/> |
|||
</View> |
|||
</View> |
|||
); |
|||
}} |
|||
extraData={[selectedValue]} |
|||
/> |
|||
|
|||
<View style={styles.submit_btn}> |
|||
<TouchableOpacity onPress={() => console.log("Aplicar camadas")}> |
|||
<View style={styles.button}> |
|||
<Text style={styles.text}>Confirmar</Text> |
|||
</View> |
|||
</TouchableOpacity> |
|||
</View> |
|||
</View> |
|||
</View> |
|||
) |
|||
}; |
|||
|
|||
|
|||
}; |
|||
const styles = StyleSheet.create({ |
|||
container: { |
|||
flex: 1, |
|||
flexDirection: "row", |
|||
alignSelf: "flex-end", |
|||
}, |
|||
submit_btn: { |
|||
// position: "absolute",
|
|||
bottom: 0, |
|||
width: "100%", |
|||
padding: 20, |
|||
}, |
|||
button: { |
|||
backgroundColor: "#1976D2", |
|||
borderRadius: 20, |
|||
justifyContent: "center", |
|||
alignItems: "center", |
|||
width: "100%", |
|||
height: 42, |
|||
// marginVertical: 10,
|
|||
textAlign: "center", |
|||
}, |
|||
text: { |
|||
color: colors.white, |
|||
fontSize: 16, |
|||
textTransform: "uppercase", |
|||
fontWeight: "bold", |
|||
}, |
|||
item: { |
|||
color: colors.lightBlue, |
|||
fontSize: dimensions.text.tertiary, |
|||
fontWeight: "bold", |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
}); |
|||
|
@ -0,0 +1,111 @@ |
|||
import React, { useRef, useState } from "react"; |
|||
import { StyleSheet, Text, TouchableOpacity, View, Animated, TouchableWithoutFeedback } from "react-native"; |
|||
|
|||
import colors from "../config/colors"; |
|||
import ActionButton from 'react-native-action-button'; |
|||
import { AntDesign, Entypo } from "@expo/vector-icons"; |
|||
import { Colors } from "react-native/Libraries/NewAppScreen"; |
|||
import { FlatList } from "react-native-gesture-handler"; |
|||
import { Fontisto } from '@expo/vector-icons'; |
|||
import DataMenu from "./DataMenu"; |
|||
import { MaterialCommunityIcons } from '@expo/vector-icons'; |
|||
|
|||
import { Dimensions } from "react-native"; |
|||
|
|||
|
|||
const screenWidth = Dimensions.get("window").width; |
|||
const screenHeight = Dimensions.get('window').height; |
|||
|
|||
|
|||
|
|||
function FloatButton(props) { |
|||
const animation = useRef(new Animated.Value(0)).current; |
|||
const [open, setOpen] = useState(false); |
|||
|
|||
const toggleMenu = () => { |
|||
const value = open ? 0 : 1; |
|||
console.log(value); |
|||
|
|||
Animated.spring(animation, { |
|||
toValue: value, |
|||
friction: 6, |
|||
useNativeDriver: true |
|||
}).start(); |
|||
|
|||
setOpen(!open); |
|||
}; |
|||
const rotation = { |
|||
transform: [ |
|||
{ |
|||
rotate: animation.interpolate({ |
|||
inputRange: [0, 1], |
|||
outputRange: ["0deg", "0deg"], |
|||
|
|||
}) |
|||
} |
|||
] |
|||
}; |
|||
|
|||
const cameraStyle = { |
|||
transform: [ |
|||
{ scale: animation }, |
|||
{ |
|||
translateX: animation.interpolate({ |
|||
inputRange: [0, 1], |
|||
outputRange: [0, 20] |
|||
}) |
|||
} |
|||
] |
|||
} |
|||
return ( |
|||
<View style={[styles.container]}> |
|||
<TouchableWithoutFeedback> |
|||
<Animated.View style={[styles.submenu, cameraStyle]}> |
|||
<DataMenu /> |
|||
</Animated.View> |
|||
</TouchableWithoutFeedback> |
|||
<View style={{ margin:35, alignSelf:"flex-end"}}> |
|||
<TouchableWithoutFeedback> |
|||
<Animated.View style={[styles.button, styles.menu, rotation]}> |
|||
<MaterialCommunityIcons name="layers-plus" size={36} color={colors.white} /> |
|||
</Animated.View> |
|||
</TouchableWithoutFeedback> |
|||
</View> |
|||
</View> |
|||
); |
|||
} |
|||
|
|||
const styles = StyleSheet.create({ |
|||
container: { |
|||
alignItems: "center", |
|||
position: "absolute", |
|||
//flex: 1,
|
|||
zIndex: 3, |
|||
}, |
|||
button: { |
|||
position: "absolute", |
|||
width: 50, |
|||
height: 50, |
|||
borderRadius: 6, |
|||
alignItems: "center", |
|||
shadowColor: colors.primary, |
|||
shadowOpacity: 0.3, |
|||
shadowOffset: { |
|||
height: 10, |
|||
}, |
|||
padding: 3, |
|||
}, |
|||
menu: { |
|||
backgroundColor: colors.primary, |
|||
}, |
|||
submenu: { |
|||
// position:"relative",
|
|||
width: screenWidth, |
|||
height: screenHeight * 0.9, |
|||
flex: 1, |
|||
|
|||
} |
|||
|
|||
}); |
|||
|
|||
export default FloatButton; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue