Merge remote-tracking branch 'origin/master' into zmiguel
|
@ -99,11 +99,11 @@ android {
|
|||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.app"
|
||||
applicationId "pt.enei"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
versionCode 3
|
||||
versionName "3"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
}
|
||||
|
@ -149,6 +149,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
compile project(':react-native-maps')
|
||||
compile project(':react-native-device-info')
|
||||
compile project(':react-native-material-shadows')
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.app;
|
|||
import android.app.Application;
|
||||
|
||||
import com.facebook.react.ReactApplication;
|
||||
|
||||
import com.airbnb.android.react.maps.MapsPackage;
|
||||
import com.learnium.RNDeviceInfo.RNDeviceInfo;
|
||||
import ui.materialshadows.RNMaterialShadowsPackage;
|
||||
|
@ -30,6 +31,7 @@ public class MainApplication extends Application implements ReactApplication {
|
|||
protected List<ReactPackage> getPackages() {
|
||||
return Arrays.<ReactPackage>asList(
|
||||
new MainReactPackage(),
|
||||
|
||||
new MapsPackage(),
|
||||
new RNDeviceInfo(),
|
||||
new RNMaterialShadowsPackage(),
|
||||
|
|
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 20 KiB |
|
@ -1,3 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">ENEI 2019</string>
|
||||
<string name="app_name">ENEI 19</string>
|
||||
</resources>
|
||||
|
|
Before Width: | Height: | Size: 42 KiB |
|
@ -21,5 +21,5 @@ android.enableAapt2=false
|
|||
|
||||
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
|
||||
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
|
||||
MYAPP_RELEASE_STORE_PASSWORD=aspire98H
|
||||
MYAPP_RELEASE_KEY_PASSWORD=aspire98H
|
||||
MYAPP_RELEASE_STORE_PASSWORD=9xbHZxMXjR
|
||||
MYAPP_RELEASE_KEY_PASSWORD=9xbHZxMXjR
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
rootProject.name = 'app'
|
||||
|
||||
include ':react-native-maps'
|
||||
project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
|
||||
include ':react-native-device-info'
|
||||
|
|
325
App/app/App.js
|
@ -16,7 +16,7 @@ import {
|
|||
TouchableOpacity,
|
||||
TextInput,
|
||||
NetInfo,
|
||||
Animated
|
||||
Animated, Linking,
|
||||
} from "react-native";
|
||||
|
||||
import { bindActionCreators } from "redux";
|
||||
|
@ -34,12 +34,12 @@ import Modal from "react-native-modal";
|
|||
import Router from "./Router";
|
||||
|
||||
import Icon from "react-native-vector-icons/Ionicons";
|
||||
|
||||
import IconFA from "react-native-vector-icons/FontAwesome5"
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
import Swiper from "react-native-swiper";
|
||||
import resetPassword from "./screens/resetPassword";
|
||||
//import resetPassword from "./screens/resetPassword";
|
||||
var TimerMixin = require("react-timer-mixin");
|
||||
|
||||
function handleConnectivityChange() {
|
||||
|
@ -48,7 +48,7 @@ function handleConnectivityChange() {
|
|||
|
||||
class App extends Component {
|
||||
|
||||
|
||||
|
||||
|
||||
handleConnectivityChange = isConnected => {
|
||||
this.setState({ isConnected });
|
||||
|
@ -81,15 +81,15 @@ class App extends Component {
|
|||
logged: false,
|
||||
isModalVisible: false,
|
||||
state: { text: "" },
|
||||
username: "QR code ou",
|
||||
username: "",
|
||||
failedAttempt: false,
|
||||
push: 4,
|
||||
UI_loginScannerActive: false,
|
||||
userDetails: { username: "", password: "" },
|
||||
isConnected: true,
|
||||
modalOpen: false,
|
||||
modalResetPassword:false,
|
||||
resetText:''
|
||||
modalResetPassword: false,
|
||||
resetText: ''
|
||||
};
|
||||
}
|
||||
_print = () => {
|
||||
|
@ -105,13 +105,13 @@ class App extends Component {
|
|||
|
||||
componentDidMount() {
|
||||
//this.props.hold();
|
||||
// this.props.loginInternal();
|
||||
|
||||
|
||||
|
||||
this.setState({ isModalVisible: false });
|
||||
//verifica se o utilizador tem token guardado
|
||||
this.props.checkUser(this.props.token);
|
||||
|
||||
|
||||
}
|
||||
componentWillUnmount() {
|
||||
NetInfo.isConnected.removeEventListener(
|
||||
|
@ -119,14 +119,14 @@ class App extends Component {
|
|||
this.handleConnectivityChange
|
||||
);
|
||||
}
|
||||
_toggle=()=>{
|
||||
this.setState({modalResetPassword:false})
|
||||
_toggle = () => {
|
||||
this.setState({ modalResetPassword: false })
|
||||
}
|
||||
//faz call
|
||||
_reset=()=>{
|
||||
_reset = () => {
|
||||
//fecha modal
|
||||
this.props.resetPassword(this.props.token,this.state.resetText),
|
||||
this.setState({modalResetPassword:false})
|
||||
this.props.resetPassword(this.props.token, this.state.resetText),
|
||||
this.setState({ modalResetPassword: false })
|
||||
//faz call
|
||||
}
|
||||
|
||||
|
@ -148,14 +148,14 @@ class App extends Component {
|
|||
};
|
||||
|
||||
render() {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!this.props.logged && this.props.onHold) {
|
||||
return (
|
||||
<View style={UtilStyles.containerLoading}>
|
||||
<ActivityIndicator size="large" color="red" />
|
||||
<ActivityIndicator size="large" color="#CC1A17" />
|
||||
</View>
|
||||
);
|
||||
} else {
|
||||
|
@ -167,22 +167,35 @@ class App extends Component {
|
|||
return <Router />;
|
||||
}
|
||||
return (
|
||||
|
||||
<View style={styles.slide2}>
|
||||
<Modal isVisible={this.props.UI_loginScannerActive}>
|
||||
<View style={{ flex: 1, backgroundColor: "white" }}>
|
||||
<Button
|
||||
onPress={this.props.closeLoginQRScan}
|
||||
title={"Fechar scanner"}
|
||||
>
|
||||
{" "}
|
||||
</Button>
|
||||
|
||||
<QRCodeScanner
|
||||
onRead={this.onSuccess}
|
||||
cameraStyle={styles.cameraContainer}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.slide2}>
|
||||
|
||||
<Modal
|
||||
isVisible={this.props.UI_loginScannerActive}
|
||||
onBackdropPress={this._toggle}
|
||||
onBackButtonPress={this._toggle}
|
||||
animationInTiming={1100}
|
||||
animationOutTiming={1100}
|
||||
style={{ marginTop: -20 }}
|
||||
>
|
||||
|
||||
<QRCodeScanner
|
||||
onRead={this.onSuccess}
|
||||
|
||||
cameraStyle={styles.cameraContainer}
|
||||
showMarker={true}
|
||||
/>
|
||||
<Button
|
||||
onPress={this.props.closeLoginQRScan}
|
||||
title={"Fechar Scan"}
|
||||
color={"#CC1A17"}
|
||||
></Button>
|
||||
<Text style={{ textAlign: 'center', fontSize: 12, margin: 10, marginBottom: 5, color: 'white' }}>
|
||||
Sim, o quadrado não está centrado. Era só para testar a tua atenção!
|
||||
</Text>
|
||||
|
||||
|
||||
|
||||
</Modal>
|
||||
<Modal
|
||||
isVisible={this.state.modalResetPassword}
|
||||
|
@ -190,32 +203,33 @@ class App extends Component {
|
|||
onBackButtonPress={this._toggle}
|
||||
animationInTiming={1100}
|
||||
animationOutTiming={1100}
|
||||
>
|
||||
<View style={{ backgroundColor: "white" , padding:20,paddingBottom:0, alignItems:'center'}}>
|
||||
<View>
|
||||
<Text style={{textAlign:'center',fontSize:23, fontWeight:'bold', color:'#CC1A17', margin:30}}>Reset Password</Text>
|
||||
<Text style={{textAlign:'center', }}>Deves introduzir o email com o qual efectuaste a compra do bilhete.</Text>
|
||||
<TextInput
|
||||
style={styles.resetPassword}
|
||||
onFocus={this._print}
|
||||
maxLength={50}
|
||||
blurOnSubmit={true}
|
||||
|
||||
onChangeText={r => this.setState({ resetText:r })}
|
||||
clearButtonMode="always"
|
||||
value={this.state.resetText}
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="Email ou Qr code"
|
||||
/>
|
||||
|
||||
<Button
|
||||
onPress={this._reset}
|
||||
title={"Enviar"}
|
||||
color={"#CC1A17"}
|
||||
></Button>
|
||||
<Text style={{textAlign:'center', fontSize:12, margin:10,marginBottom:5}}> Caso tenhas problemas com este processo deves contactar a comissão organizadora atravês do email geral.</Text>
|
||||
|
||||
>
|
||||
|
||||
<View style={{ backgroundColor: "white", padding: 20, paddingBottom: 0, alignItems: 'center' }}>
|
||||
<View>
|
||||
<Text style={{ textAlign: 'center', fontSize: 23, fontWeight: 'bold', color: '#CC1A17', margin: 30 }}>Reset Password</Text>
|
||||
<Text style={{ textAlign: 'center', }}>Deves introduzir o email com o qual efectuaste a compra do bilhete.</Text>
|
||||
<TextInput
|
||||
style={styles.resetPassword}
|
||||
onFocus={this._print}
|
||||
maxLength={50}
|
||||
blurOnSubmit={true}
|
||||
|
||||
onChangeText={r => this.setState({ resetText: r })}
|
||||
clearButtonMode="always"
|
||||
value={this.state.resetText}
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="Email ou Qr code"
|
||||
/>
|
||||
|
||||
<Button
|
||||
onPress={this._reset}
|
||||
title={"Enviar"}
|
||||
color={"#CC1A17"}
|
||||
></Button>
|
||||
<Text style={{ textAlign: 'center', fontSize: 12, margin: 10, marginBottom: 5 }}> Caso tenhas problemas com este processo deves contactar a comissão organizadora atravês do email geral.</Text>
|
||||
|
||||
</View>
|
||||
</View>
|
||||
</Modal>
|
||||
|
@ -225,7 +239,7 @@ class App extends Component {
|
|||
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
margin:20
|
||||
margin: 20
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
|
@ -233,79 +247,118 @@ class App extends Component {
|
|||
source={require("./assets/img/logo2.png")}
|
||||
/>
|
||||
</View>
|
||||
<View styles={styles.loginContainer}>
|
||||
<View style={styles.inputSection}>
|
||||
{!this.props.loadingLogin &&
|
||||
<View styles={styles.loginContainer}>
|
||||
<View style={styles.inputSection}>
|
||||
<TextInput
|
||||
style={styles.input}
|
||||
|
||||
underlineColorAndroid="transparent"
|
||||
|
||||
//onFocus={this._print}
|
||||
maxLength={15}
|
||||
blurOnSubmit={true}
|
||||
// secureTextEntry={true}
|
||||
onChangeText={user => {
|
||||
this.setState({ username:user });
|
||||
}}
|
||||
clearButtonMode="always"
|
||||
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
value={this.state.username}
|
||||
placeholder="QR code"
|
||||
|
||||
/>
|
||||
<TouchableOpacity onPress={this._scanQr}>
|
||||
<View style={styles.scanQR}>
|
||||
<Icon
|
||||
style={styles.searchIcon}
|
||||
name="ios-qr-scanner"
|
||||
size={40}
|
||||
color="#000"
|
||||
/>
|
||||
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
||||
<TextInput
|
||||
style={styles.input}
|
||||
placeholder={this.state.username}
|
||||
onChangeText={searchString => {
|
||||
this.setState({ username:searchString });
|
||||
}}
|
||||
maxLength={15}
|
||||
underlineColorAndroid="transparent"
|
||||
style={styles.passwordInput}
|
||||
onFocus={this._print}
|
||||
maxLength={10}
|
||||
blurOnSubmit={true}
|
||||
secureTextEntry={true}
|
||||
onChangeText={text => this.setState({ text })}
|
||||
clearButtonMode="always"
|
||||
value={this.state.text}
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="Password"
|
||||
/>
|
||||
<TouchableOpacity onPress={this._scanQr}>
|
||||
<View style={styles.scanQR}>
|
||||
<Icon
|
||||
style={styles.searchIcon}
|
||||
name="ios-qr-scanner"
|
||||
size={40}
|
||||
color="#000"
|
||||
/>
|
||||
|
||||
{!this.props.loadingLogin &&
|
||||
<View style={{ alignItems: 'center', margin: 20 }}>
|
||||
<TouchableOpacity onPress={this._tryLogin} style={{ backgroundColor: '#CC1A17', borderRadius: 3 }}>
|
||||
<Text style={{ color: 'white', fontSize: 20, margin: 10, width: 150, textAlign: 'center', }}>Login</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
}
|
||||
|
||||
</View>
|
||||
|
||||
<TextInput
|
||||
style={styles.passwordInput}
|
||||
onFocus={this._print}
|
||||
maxLength={10}
|
||||
blurOnSubmit={true}
|
||||
secureTextEntry={true}
|
||||
onChangeText={text => this.setState({ text })}
|
||||
clearButtonMode="always"
|
||||
value={this.state.text}
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="Password"
|
||||
/>
|
||||
{ !this.props.loadingLogin &&
|
||||
<View style={{alignItems:'center', margin:20}}>
|
||||
<TouchableOpacity onPress={this._tryLogin} style={{backgroundColor:'#CC1A17',borderRadius:3}}>
|
||||
<Text style={{color:'white', fontSize:20, margin:10, width:150,textAlign:'center',}}>Login</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
}
|
||||
{this.props.alignItems &&
|
||||
<ActivityIndicator size="large" color="#0000ff" />
|
||||
}
|
||||
</View>
|
||||
|
||||
}{
|
||||
this.props.loadingLogin &&
|
||||
<View style={{ margin: 100 }}>
|
||||
<ActivityIndicator size="large" color="#CC1A17" />
|
||||
</View>
|
||||
}
|
||||
<View style={styles.buttons}>
|
||||
<TouchableOpacity style={styles.button}>
|
||||
<TouchableOpacity style={styles.button} onPress={() => {
|
||||
Linking.canOpenURL("https://www.facebook.com/ENEIConf/").then(supported => {
|
||||
if (supported) {
|
||||
Linking.openURL("https://www.facebook.com/ENEIConf/");
|
||||
} else {
|
||||
|
||||
}
|
||||
});
|
||||
}}>
|
||||
<Icon name="logo-facebook" size={40} />
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity style={styles.button}>
|
||||
<Icon name="logo-instagram" size={40} />
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity style={styles.button}>
|
||||
<Icon name="md-heart" size={40} />
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<View style={styles.footer}>
|
||||
<View style={styles.textRow}>
|
||||
<RkText rkType="primary3">Não sabes a password?</RkText>
|
||||
<RkButton rkType="clear" onPress={this.onSignUpButtonPressed}>
|
||||
<TouchableOpacity onPress={() => {this.setState({modalResetPassword:true})}}>
|
||||
<RkText style={{ color: "#CC1A17", fontWeight:'bold' }} kType="header6">
|
||||
Reset Password
|
||||
<TouchableOpacity style={styles.button} onPress={() => {
|
||||
Linking.canOpenURL("https://www.instagram.com/eneiconf/").then(supported => {
|
||||
if (supported) {
|
||||
Linking.openURL("https://www.instagram.com/eneiconf/");
|
||||
} else {
|
||||
|
||||
}
|
||||
});
|
||||
}}>
|
||||
<Icon name="logo-instagram" size={40} />
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity style={styles.button} onPress={() => {
|
||||
Linking.canOpenURL("https://enei.pt").then(supported => {
|
||||
if (supported) {
|
||||
Linking.openURL("https://enei.pt");
|
||||
} else {
|
||||
|
||||
}
|
||||
});
|
||||
}}>
|
||||
<IconFA name="globe" size={35}/>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<View style={styles.footer}>
|
||||
<View style={styles.textRow}>
|
||||
<RkText rkType="primary3">Não sabes a password?</RkText>
|
||||
<RkButton rkType="clear" onPress={this.onSignUpButtonPressed}>
|
||||
<TouchableOpacity onPress={() => { this.setState({ modalResetPassword: true }) }}>
|
||||
<RkText style={{ color: "#CC1A17", fontWeight: 'bold' }} kType="header6">
|
||||
Reset Password
|
||||
</RkText>
|
||||
</TouchableOpacity>
|
||||
</RkButton>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</RkButton>
|
||||
</View>
|
||||
</View>
|
||||
</View >
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -326,15 +379,15 @@ const overlayColor = "rgba(0,0,0,0.30)";
|
|||
|
||||
const styles = {
|
||||
cameraContainer: {
|
||||
height: Dimensions.get('window').height ,
|
||||
height: Dimensions.get('window').height,
|
||||
},
|
||||
resetPassword:{
|
||||
|
||||
|
||||
resetPassword: {
|
||||
|
||||
|
||||
|
||||
borderColor: "#bfbdbd",
|
||||
borderWidth: 1,
|
||||
margin:20,
|
||||
margin: 20,
|
||||
marginTop: 60,
|
||||
marginBottom: 60,
|
||||
|
||||
|
@ -349,7 +402,7 @@ const styles = {
|
|||
paddingLeft: SCREEN_WIDTH * 0.05
|
||||
},
|
||||
passwordInput: {
|
||||
|
||||
|
||||
|
||||
borderColor: "#bfbdbd",
|
||||
borderWidth: 1,
|
||||
|
@ -371,19 +424,19 @@ const styles = {
|
|||
},
|
||||
scanQR: {
|
||||
//flexDirection: 'row',
|
||||
flex:1,
|
||||
//paddingTop: 5,
|
||||
flex: 1,
|
||||
//paddingTop: 5,
|
||||
backgroundColor: 10,
|
||||
alignItems:'center',
|
||||
padding:5,
|
||||
paddingRight:15,
|
||||
alignItems: 'center',
|
||||
padding: 5,
|
||||
paddingRight: 15,
|
||||
|
||||
//width: 80,
|
||||
// paddingLeft: 10,
|
||||
// paddingLeft: 10,
|
||||
backgroundColor: "#CC1A17",
|
||||
borderBottomRightRadius: 3,
|
||||
borderTopRightRadius: 3,
|
||||
// height: "100%"
|
||||
// height: "100%"
|
||||
},
|
||||
inputSection: {
|
||||
flexDirection: "row",
|
||||
|
@ -560,7 +613,7 @@ mapStateToProps = (state, props) => {
|
|||
modalOpen: state.apiReducer.modalOpen,
|
||||
modalInfo: state.apiReducer.modalInfo,
|
||||
type: state.apiReducer.type,
|
||||
loadingLogin:state.apiReducer.loadingLogin
|
||||
loadingLogin: state.apiReducer.loadingLogin
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -36,8 +36,14 @@ import Profile from "./screens/Profile";
|
|||
import editCalendar from './screens/editCalendar';
|
||||
import choosePath from './screens/choosePath';
|
||||
import calendarDetail from './screens/calendarDetail';
|
||||
import FebradaDetail from './screens/FebradaDetail';
|
||||
import resetPassword from './screens/resetPassword';
|
||||
|
||||
//import resetPassword from './screens/resetPassword';
|
||||
|
||||
import eventDetail from './screens/eventDetail';
|
||||
|
||||
import teamDetail from './screens/teamDetail';
|
||||
|
||||
import event from './screens/event';
|
||||
|
||||
const navigationOptions = ({navigation}) => ({
|
||||
headerLeft: <HeaderBackButton onPress={() => navigation.goBack(null)}/>,
|
||||
|
@ -45,6 +51,7 @@ const navigationOptions = ({navigation}) => ({
|
|||
|
||||
});
|
||||
|
||||
|
||||
const AppStack = createBottomTabNavigator(
|
||||
{
|
||||
Calendário: {
|
||||
|
@ -58,7 +65,7 @@ const AppStack = createBottomTabNavigator(
|
|||
},
|
||||
},
|
||||
|
||||
'Jogo do...': {
|
||||
'Jogo': {
|
||||
screen: Jogo,
|
||||
|
||||
navigationOptions: {
|
||||
|
@ -107,6 +114,7 @@ const AppStack = createBottomTabNavigator(
|
|||
{
|
||||
initialRouteName: 'Home',
|
||||
|
||||
|
||||
tabBarOptions: {
|
||||
showLabel: true, // hide labels
|
||||
activeTintColor: '#CC1A17', // active icon color
|
||||
|
@ -132,28 +140,36 @@ const Stack = createStackNavigator({
|
|||
<TouchableOpacity style={{marginRight: 20, flex: 1, flexDirection: 'row'}}
|
||||
onPress={() => navigation.navigate('Profile')}>
|
||||
|
||||
<Text>Editar dados</Text>
|
||||
<Text style={{marginRight:5}}>Editar dados</Text>
|
||||
<IconFA name="user-edit" size={22}/>
|
||||
|
||||
</TouchableOpacity>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (navigation.state.routes[index].routeName == 'Jogo') {
|
||||
return {
|
||||
header: (<View style={{backgroundColor:'#CC1A17', padding:15}}>
|
||||
<Text style={{textAlign:'center', alignSelf:'center', color:'white', fontSize:20, fontWeight:'bold'}}>Jogo do ENEI'19</Text>
|
||||
</View>)
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else if (navigation.state.routes[index].routeName == 'Calendário') {
|
||||
return {
|
||||
headerTitle: 'Calendário',
|
||||
headerRight: (
|
||||
<View style={{flex: 1, flexDirection: 'row'}}>
|
||||
<TouchableOpacity style={{marginRight: 20, flex: 1, flexDirection: 'row'}}
|
||||
onPress={() => navigation.navigate('Edit')}>
|
||||
<Text>FAQ</Text>
|
||||
|
||||
</TouchableOpacity>
|
||||
|
||||
|
||||
|
||||
<TouchableOpacity style={{marginRight: 20, flex: 1, flexDirection: 'row'}}
|
||||
onPress={() => navigation.navigate('choosePath')}>
|
||||
<Text>Inscrições</Text>
|
||||
<IconFA name="user-edit" size={22}/>
|
||||
<Text style={{color:'#CC1A17', marginRight:5}}>Inscrições</Text>
|
||||
<IconFA name="user-edit" size={22} color={'#CC1A17'}/>
|
||||
</TouchableOpacity></View>
|
||||
|
||||
)
|
||||
|
@ -204,12 +220,16 @@ const Stack = createStackNavigator({
|
|||
calendarDetail: {
|
||||
screen: calendarDetail,
|
||||
},
|
||||
FebradaDetail: {
|
||||
screen: FebradaDetail,
|
||||
eventDetail: {
|
||||
screen: eventDetail,
|
||||
},
|
||||
teamDetail:{
|
||||
screen: teamDetail,
|
||||
},
|
||||
|
||||
resetPassword:{
|
||||
screen:resetPassword
|
||||
|
||||
event:{
|
||||
screen: event
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -29,7 +29,8 @@ const formatObj = obj => {
|
|||
|
||||
return a;
|
||||
};
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
class Calendar extends React.Component {
|
||||
state = {
|
||||
index: 0,
|
||||
|
@ -45,9 +46,12 @@ class Calendar extends React.Component {
|
|||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.props.getEvents(this.props.user);
|
||||
|
||||
this.props.getSessions(this.props.token);
|
||||
|
||||
// this.props.getSessions(this.props.token);
|
||||
|
||||
// this.props.getEvents(this.props.user,this.props.careerPath);
|
||||
|
||||
}
|
||||
|
||||
_openDetails = () => {
|
||||
|
@ -64,22 +68,11 @@ class Calendar extends React.Component {
|
|||
<View style={styles.event}>
|
||||
<View style={styles.titleContainer}>
|
||||
<Text style={[styles.title]}>{item.name}</Text>
|
||||
<Text style={{ color: "black" }}>Local: 1</Text>
|
||||
<Text style={{ color: "black" }}>{item.place}</Text>
|
||||
</View>
|
||||
|
||||
<View>
|
||||
<Text style={styles.description}>{item.description}</Text>
|
||||
<View style={styles.details}>
|
||||
<Progress.Bar
|
||||
color={"#000000"}
|
||||
progress={0}
|
||||
unfilledColor={"white"}
|
||||
width={210}
|
||||
/>
|
||||
<Text>
|
||||
{item.Enrolled} / {item.MaxAttendees}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
|
@ -141,12 +134,14 @@ class Calendar extends React.Component {
|
|||
super();
|
||||
}
|
||||
_refresh=()=>{
|
||||
this.props.getEvents(this.props.user);
|
||||
this.props.getEvents(this.props.user,this.props.careerPath, this.props.token);
|
||||
|
||||
|
||||
}
|
||||
|
||||
render() {
|
||||
const ThirdRoute = () => (
|
||||
|
||||
<ScrollView contentContainerStyle={styles.contentContainer}>
|
||||
{this.props.events != undefined && (
|
||||
<Timeline
|
||||
|
@ -214,6 +209,7 @@ class Calendar extends React.Component {
|
|||
</ScrollView>
|
||||
);
|
||||
const FirstRoute = () => (
|
||||
|
||||
<ScrollView contentContainerStyle={styles.contentContainer}>
|
||||
{this.props.events != undefined && (
|
||||
<Timeline
|
||||
|
@ -242,6 +238,7 @@ class Calendar extends React.Component {
|
|||
/>
|
||||
)}
|
||||
</ScrollView>
|
||||
|
||||
);
|
||||
const SecondRoute = () => (
|
||||
<ScrollView contentContainerStyle={styles.contentContainer}>
|
||||
|
@ -315,12 +312,13 @@ class Calendar extends React.Component {
|
|||
height: Dimensions.get("window").height
|
||||
}}
|
||||
style={{ backgroundColor: "#F2F2F2" }}
|
||||
indicatorStyle={{ backgroundColor: "pink" }}
|
||||
/>
|
||||
<Button onPress={this._refresh} title="Refresh" color="#841584"
|
||||
/>
|
||||
indicatorStyle={{ backgroundColor: "pink"}}
|
||||
/><View style={{ alignContent:'center', alignItems:'center', backgroundColor:'transparent',position: 'absolute',marginTop:SCREEN_HEIGHT*0.75,marginLeft:10}}><Button onPress={this._refresh} title="Refresh" color="#CC1A17"
|
||||
/></View>
|
||||
|
||||
</View>
|
||||
|
||||
|
||||
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,146 +1,207 @@
|
|||
import * as React from "react";
|
||||
|
||||
import {View, StyleSheet, Dimensions, Text, Button, ScrollView, Image, TouchableOpacity} from "react-native";
|
||||
import {
|
||||
View,
|
||||
StyleSheet,
|
||||
Dimensions,
|
||||
Text,
|
||||
Button,
|
||||
ScrollView,
|
||||
Image,
|
||||
TouchableOpacity,
|
||||
FlatList,
|
||||
ActivityIndicator
|
||||
} from "react-native";
|
||||
import IconFA from "react-native-vector-icons/FontAwesome5";
|
||||
import { TabView, TabBar, SceneMap } from "react-native-tab-view";
|
||||
|
||||
import {TabView, TabBar, SceneMap} from "react-native-tab-view";
|
||||
import rallyImg from "../assets/rallyTascas.jpg";
|
||||
|
||||
import rallyImg from '../assets/rallyTascas.jpg';
|
||||
import { connect } from "react-redux";
|
||||
|
||||
import { bindActionCreators } from "redux";
|
||||
|
||||
import * as Actions from "../store/actions"; //Import your actionss
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
import PTRView from "react-native-pull-to-refresh";
|
||||
|
||||
const FirstRoute = () => (
|
||||
<View style={[styles.scene, {backgroundColor: "#ff4081"}]}/>
|
||||
);
|
||||
const SecondRoute = () => (
|
||||
<View style={[styles.scene, {backgroundColor: "#673ab7"}]}/>
|
||||
);
|
||||
class Eventos extends React.Component {
|
||||
_update = () => {
|
||||
this.props.getAllEvents(this.props.internalToken);
|
||||
this.props.getEventLocsVisited(
|
||||
this.props.team.id,
|
||||
this.props.internalToken
|
||||
);
|
||||
};
|
||||
state = {
|
||||
index: 0,
|
||||
routes: [
|
||||
{ key: "first", title: "Festarola" },
|
||||
{ key: "second", title: "Febrada" },
|
||||
{ key: "third", title: "Rally" },
|
||||
{ key: "fourth", title: "Peddy" }
|
||||
]
|
||||
};
|
||||
|
||||
const ThirdRoute = () => (
|
||||
<View style={[styles.scene, {backgroundColor: "#673ab7"}]}/>
|
||||
);
|
||||
componentDidMount() {
|
||||
this.props.getAllEvents(this.props.internalToken);
|
||||
this.props.getEventLocsVisited(
|
||||
this.props.team.id,
|
||||
this.props.internalToken
|
||||
);
|
||||
}
|
||||
|
||||
const FourthRoute = () => (
|
||||
<View style={[styles.scene, {backgroundColor: "#673ab7"}]}/>
|
||||
);
|
||||
render() {
|
||||
const { navigate } = this.props.navigation;
|
||||
return (
|
||||
<PTRView onRefresh={this._update}>
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignContent: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<Text
|
||||
style={{
|
||||
textAlign: "right",
|
||||
fontSize: 12,
|
||||
paddingTop: 10,
|
||||
marginRight: 5
|
||||
}}
|
||||
>
|
||||
Arrasta o ecrã para atualizar
|
||||
</Text>
|
||||
<IconFA name="chevron-circle-down" size={13} color={"#CC1A17"} />
|
||||
</View>
|
||||
<View style={styles.container}>
|
||||
{this.props.eventsInternal == undefined && (
|
||||
<View
|
||||
style={{
|
||||
height: SCREEN_HEIGHT,
|
||||
//marginTop: SCREEN_HEIGHT * 0.27,
|
||||
backgroundColor: "white"
|
||||
}}
|
||||
>
|
||||
<Text style={{ fontSize: 12, margin: 15, textAlign: "center" }}>
|
||||
Se estiver a demorar muito, arrasta para atualizar
|
||||
</Text>
|
||||
|
||||
|
||||
export default class Eventos extends React.Component {
|
||||
state = {
|
||||
index: 0,
|
||||
routes: [
|
||||
{key: "first", title: "Festarola"},
|
||||
{key: "second", title: "Febrada"},
|
||||
{key: "third", title: "Rally"},
|
||||
{key: "fourth", title: "Peddy"}
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
renderFebrada = (navigate) => {
|
||||
return (
|
||||
<View>
|
||||
<TouchableOpacity onPress={() => navigate('FebradaDetail')}>
|
||||
<View style={styles.cardContainer}>
|
||||
<Image
|
||||
<ActivityIndicator size="large" color="#CC1A17" />
|
||||
</View>
|
||||
)}
|
||||
<ScrollView styles={styles.scroll}>
|
||||
<FlatList
|
||||
data={this.props.eventsInternal}
|
||||
renderItem={({ item }) => (
|
||||
<View>
|
||||
<TouchableOpacity
|
||||
onPress={() => navigate("event", { info: item })}
|
||||
>
|
||||
<View style={styles.cardContainer}>
|
||||
<Image
|
||||
style={{
|
||||
flex: 1,
|
||||
width: undefined,
|
||||
height: undefined
|
||||
flex: 1,
|
||||
width: undefined,
|
||||
height: undefined
|
||||
}}
|
||||
resizeMode="contain"
|
||||
source={require('../assets/altice_logo.png')}
|
||||
>
|
||||
</Image>
|
||||
source={{ uri: item.imagem }}
|
||||
/>
|
||||
<View style={styles.cardDesc}>
|
||||
<Text style={styles.cardDescText}>{item.nome}</Text>
|
||||
<Text style={styles.cardHours}>{item.horas}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
renderRally = () => {
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.cardContainer}>
|
||||
<Image
|
||||
style={{
|
||||
flex: 1,
|
||||
width: undefined,
|
||||
height: undefined
|
||||
}}
|
||||
resizeMode="contain"
|
||||
source={require('../assets/altice_logo.png')}
|
||||
>
|
||||
</Image>
|
||||
</View>
|
||||
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
renderCaching = () => {
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.cardContainer}>
|
||||
<Image
|
||||
style={{
|
||||
flex: 1,
|
||||
width: undefined,
|
||||
height: undefined
|
||||
}}
|
||||
resizeMode="contain"
|
||||
source={require('../assets/altice_logo.png')}
|
||||
>
|
||||
</Image>
|
||||
</View>
|
||||
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const {navigate} = this.props.navigation;
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<ScrollView styles={styles.scroll}>
|
||||
{this.renderFebrada(navigate)}
|
||||
{this.renderRally()}
|
||||
{this.renderCaching()}
|
||||
</ScrollView>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
)}
|
||||
/>
|
||||
</ScrollView>
|
||||
</View>
|
||||
</PTRView>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
backgroundColor: '#eee',
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: 'column',
|
||||
},
|
||||
cardHours: {
|
||||
textAlign: "center",
|
||||
color: "white",
|
||||
margin: 10
|
||||
|
||||
// width:'20%'
|
||||
},
|
||||
|
||||
scroll: {
|
||||
flex: 1,
|
||||
},
|
||||
cardDesc: {
|
||||
//alignSelf:'center',
|
||||
backgroundColor: "#CC1A17",
|
||||
// flex:1,
|
||||
flexDirection: "row"
|
||||
},
|
||||
cardDescText: {
|
||||
fontWeight: "bold",
|
||||
color: "white",
|
||||
fontSize: 18,
|
||||
|
||||
cardContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
padding: 10,
|
||||
margin: 20,
|
||||
backgroundColor: '#fff',
|
||||
height: SCREEN_WIDTH * (1 / 2),
|
||||
borderRadius: 5,
|
||||
//borderWidth: 2,
|
||||
},
|
||||
width: "45%",
|
||||
margin: 10
|
||||
},
|
||||
container: {
|
||||
backgroundColor: "white",
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: "column",
|
||||
paddingBottom: 20
|
||||
},
|
||||
|
||||
scene: {
|
||||
flex: 1
|
||||
}
|
||||
scroll: {
|
||||
flex: 1
|
||||
},
|
||||
|
||||
cardContainer: {
|
||||
flex: 1,
|
||||
//flexDirection: 'row',
|
||||
//padding: 10,
|
||||
margin: 20,
|
||||
marginBottom: 0,
|
||||
backgroundColor: "#fff",
|
||||
height: SCREEN_WIDTH * 0.62,
|
||||
borderRadius: 5
|
||||
//borderWidth: 2,
|
||||
},
|
||||
|
||||
scene: {
|
||||
flex: 1
|
||||
}
|
||||
});
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
userDetails: state.apiReducer.userDetails,
|
||||
onHold: state.apiReducer.onHold,
|
||||
bilhete: state.apiReducer.bilhete,
|
||||
alimentacao: state.apiReducer.alimentacao,
|
||||
alojamento: state.apiReducer.alojamento,
|
||||
acesso: state.apiReducer.acesso,
|
||||
team: state.apiReducer.team,
|
||||
internalToken: state.apiReducer.internalToken,
|
||||
eventsInternal: state.apiReducer.eventsInternal
|
||||
};
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(Eventos);
|
||||
|
|
|
@ -1,246 +0,0 @@
|
|||
import * as React from 'react';
|
||||
import {
|
||||
View,
|
||||
StyleSheet,
|
||||
Dimensions,
|
||||
ScrollView,
|
||||
Text,
|
||||
ImageBackground
|
||||
} from 'react-native';
|
||||
|
||||
import {Divider} from 'react-native-elements'
|
||||
import AppIntroSlider from 'react-native-app-intro-slider';
|
||||
|
||||
import NavAbsolute from '../components/Nav';
|
||||
import * as Actions from "../store/actions";
|
||||
import {connect} from "react-redux";
|
||||
import {bindActionCreators} from "redux";
|
||||
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
class FebradaDetail extends React.Component {
|
||||
|
||||
|
||||
static navigationOptions = ({navigation}) => ({
|
||||
header: (
|
||||
<NavAbsolute
|
||||
navigation={navigation}
|
||||
// title={navigation.state.params.info.name}
|
||||
/>
|
||||
),
|
||||
});
|
||||
|
||||
|
||||
renderHeader = () => {
|
||||
return (
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.coverContainer}>
|
||||
<ImageBackground
|
||||
source={{
|
||||
uri: 'https://upload.wikimedia.org/wikipedia/commons/9/94/Logo_TvAAC_2014.png',
|
||||
}}
|
||||
style={styles.coverImage}
|
||||
>
|
||||
</ImageBackground>
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
};
|
||||
|
||||
renderDescription = () => {
|
||||
return (
|
||||
<View style={{height: SCREEN_HEIGHT * (1 / 3)}}>
|
||||
<View
|
||||
style={{flexDirection: "row"}}>
|
||||
<View style={styles.header}>
|
||||
<View style={styles.nameText}>
|
||||
<Text
|
||||
style={{color: '#CC1A17', fontSize: 20}}>Febrada</Text>
|
||||
</View>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{color: "#CC1A17", fontSize: 15}}>
|
||||
<Text style={{color: "#CC1A17", fontSize: 15}}>
|
||||
Sexta 12 -
|
||||
</Text>
|
||||
14h00{/*{info.time === info.timeEnd ? info.time : `${info.time} - ${info.timeEnd}`}*/}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.descContainer}>
|
||||
<Text style={{fontSize: 20, color: '#CC1A17'}}>Descrição</Text>
|
||||
<Divider style={{backgroundColor: '#000'}}/>
|
||||
<Text style={{paddingRight: 10, paddingTop: 10}}>g</Text>
|
||||
</View>
|
||||
|
||||
</View>
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
renderSlider = () => {
|
||||
const slides = [
|
||||
{
|
||||
key: 'somethun',
|
||||
title: 'Title 1',
|
||||
titleStyle: '',
|
||||
text: 'blblbalbalba',
|
||||
textStyle: '',
|
||||
backgroundColor: '#59b2ab',
|
||||
},
|
||||
{
|
||||
key: 'somethun-dos',
|
||||
title: 'Title 2',
|
||||
titleStyle: '',
|
||||
text: 'blblbalbalba',
|
||||
textStyle: '',
|
||||
backgroundColor: '#febe29',
|
||||
},
|
||||
{
|
||||
key: 'somethun1',
|
||||
title: 'Rocket guy',
|
||||
titleStyle: '',
|
||||
text: 'blblbalbalba',
|
||||
textStyle: '',
|
||||
backgroundColor: '#22bcb5',
|
||||
}
|
||||
];
|
||||
return (
|
||||
<AppIntroSlider
|
||||
slides={slides}
|
||||
style={{height: SCREEN_WIDTH * 0.54}}
|
||||
activeDotStyle={{backgroundColor:'#CC1A17'}}
|
||||
renderDoneButton={this._buyFinosOrBifanas()}
|
||||
renderNextButton={this._renderNextButton}
|
||||
/>
|
||||
)
|
||||
};
|
||||
|
||||
_buyFinosOrBifanas = () => {
|
||||
//Modal
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
|
||||
<View style={styles.mainViewStyle}>
|
||||
<ScrollView style={styles.scroll}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.headerContainer}>
|
||||
{this.renderHeader()}
|
||||
</View>
|
||||
<View style={{backgroundColor: "#fff"}}>
|
||||
{this.renderDescription()}
|
||||
{this.renderSlider()}
|
||||
</View>
|
||||
</View>
|
||||
</ScrollView>
|
||||
</View>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
||||
mainContent: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-around',
|
||||
},
|
||||
text: {
|
||||
//color: 'rgba(255, 255, 255, 0.8)',
|
||||
backgroundColor: 'transparent',
|
||||
textAlign: 'center',
|
||||
color:'#000',
|
||||
paddingHorizontal: 16,
|
||||
},
|
||||
title: {
|
||||
fontSize: 22,
|
||||
color: 'white',
|
||||
backgroundColor: 'transparent',
|
||||
textAlign: 'center',
|
||||
marginBottom: 16,
|
||||
},
|
||||
|
||||
|
||||
header: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
padding: 10,
|
||||
backgroundColor: 'white',
|
||||
//height: SCREEN_HEIGHT * (1 / 3),
|
||||
},
|
||||
|
||||
nameText: {
|
||||
alignSelf: 'flex-start',
|
||||
flex: 1,
|
||||
|
||||
},
|
||||
|
||||
timeText: {
|
||||
alignItems: 'flex-end',
|
||||
flex: 1,
|
||||
marginRight: 4,
|
||||
},
|
||||
|
||||
mainViewStyle: {
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: 'column',
|
||||
},
|
||||
|
||||
scroll: {
|
||||
backgroundColor: '#eee',
|
||||
flex: 1,
|
||||
//marginBottom: 55,
|
||||
},
|
||||
|
||||
|
||||
descContainer: {
|
||||
padding: 10,
|
||||
},
|
||||
|
||||
headerContainer: {
|
||||
flex: 1,
|
||||
},
|
||||
|
||||
container: {
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
},
|
||||
coverContainer: {
|
||||
position: 'relative',
|
||||
},
|
||||
coverImage: {
|
||||
height: Dimensions.get('window').width * (2 / 4),
|
||||
width: Dimensions.get('window').width,
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
|
||||
return {
|
||||
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
events: state.apiReducer.events,
|
||||
careerPath: state.apiReducer.careerPath,
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(FebradaDetail);
|
|
@ -12,9 +12,16 @@ import {
|
|||
Image,
|
||||
ImageBackground,
|
||||
NetInfo,
|
||||
AppState
|
||||
AppState,
|
||||
TextInput,
|
||||
Keyboard,
|
||||
Switch,
|
||||
Alert
|
||||
} from "react-native";
|
||||
|
||||
const axios = require("axios");
|
||||
import ToggleSwitch from "toggle-switch-react-native";
|
||||
import Modal from "react-native-modal";
|
||||
import QRCodeScanner from "react-native-qrcode-scanner";
|
||||
import { Shadow } from "react-native-shadow";
|
||||
import Icon from "react-native-vector-icons/Ionicons";
|
||||
import { RkButton, RkTheme } from "react-native-ui-kitten";
|
||||
|
@ -62,28 +69,39 @@ class Home extends Component {
|
|||
onHold: true,
|
||||
user: { Name: "" },
|
||||
userDetails: {},
|
||||
appState: AppState.currentState
|
||||
appState: AppState.currentState,
|
||||
addUser: false,
|
||||
switch: false,
|
||||
team: "",
|
||||
img:
|
||||
""
|
||||
};
|
||||
}
|
||||
handleConnectivityChange = () => {
|
||||
console.log("asdasdasdasdasd");
|
||||
};
|
||||
|
||||
_getImage = qr => {
|
||||
//enei.pt/api/Users/getProfileImage/ZV4ZWJXTVV
|
||||
https: axios
|
||||
.get(`https://enei.pt/api/Users/getProfileImage/${qr}`)
|
||||
.then(function(response) {
|
||||
// handle success
|
||||
return response.data;
|
||||
})
|
||||
.catch(function(error) {
|
||||
// handle error
|
||||
console.log(error);
|
||||
});
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
// NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
|
||||
|
||||
// this.props.hold();
|
||||
console.log("hold" + this.props.onHold);
|
||||
//this.props.logoutUser();
|
||||
|
||||
//console.log(this.props.token);
|
||||
|
||||
this.props.getUserInfo(this.props.token);
|
||||
|
||||
//console.log('logged:'+this.props.logged);
|
||||
|
||||
//console.log(th2is.props
|
||||
this.props.getEvents(this.props.user);
|
||||
this.props.getEvents(this.props.user, this.props.token);
|
||||
this._getImage();
|
||||
}
|
||||
componentWillUnmount() {}
|
||||
|
||||
|
@ -99,9 +117,64 @@ class Home extends Component {
|
|||
}
|
||||
_update = () => {
|
||||
this.props.getUserInfo(this.props.token);
|
||||
this.props.getEvents(this.props.user);
|
||||
this.props.getEvents(this.props.user, this.props.token);
|
||||
this.props.getUserTeam(this.props.user, this.props.internalToken);
|
||||
};
|
||||
onSuccess = e => {
|
||||
//fecha o scanner
|
||||
this.props.addUserTeam(
|
||||
{ id: this.props.team.id, newQr: e.data },
|
||||
this.props.internalToken,
|
||||
this.props.user
|
||||
);
|
||||
this.setState({ addUser: !this.state.addUser });
|
||||
};
|
||||
_rm = qr => {
|
||||
this.props.removeUserTeam(
|
||||
{
|
||||
TeamId: this.props.team.id,
|
||||
UserQR: this.props.team.cap.qRcode,
|
||||
UserToRemoveQR: qr
|
||||
},
|
||||
this.props.internalToken
|
||||
);
|
||||
};
|
||||
_toggle = () => {
|
||||
this.setState({ addUser: !this.state.addUser });
|
||||
};
|
||||
_delTeam = () => {
|
||||
Alert.alert(
|
||||
"Apagar equipa",
|
||||
"Tens a certeza que queres apagar a tua equipa?\n\nAo apagares a equipa, todos os dados serão perdidos... \n\nThere is no coming back..\n\n",
|
||||
[
|
||||
{ text: "No, bring my mommy", onPress: () => alert("pussy!!!!") },
|
||||
|
||||
{
|
||||
text: "YES",
|
||||
onPress: () =>
|
||||
this.props.deleteTeam(
|
||||
{ TeamId: this.props.team.id, UserQr: this.props.user.Code },
|
||||
this.props.internalToken
|
||||
)
|
||||
}
|
||||
],
|
||||
{ cancelable: false }
|
||||
);
|
||||
};
|
||||
_creatTeam = () => {
|
||||
var tipo;
|
||||
if (this.state.switch) tipo = 1;
|
||||
else {
|
||||
tipo = 3;
|
||||
}
|
||||
var o = {
|
||||
EventId: tipo,
|
||||
Nome: this.state.team,
|
||||
capQR: this.props.user.Code
|
||||
};
|
||||
|
||||
this.props.createTeam(o, this.props.internalToken, this.props.user);
|
||||
};
|
||||
render() {
|
||||
const { navigate } = this.props.navigation;
|
||||
|
||||
|
@ -116,8 +189,43 @@ class Home extends Component {
|
|||
if (this.props.logged) {
|
||||
return (
|
||||
<PTRView onRefresh={this._update}>
|
||||
<ScrollView style={{ backgroundColor: "#eeeeee" }}>
|
||||
<ScrollView
|
||||
style={{ backgroundColor: "#eeeeee", minHeight: SCREEN_HEIGHT }}
|
||||
>
|
||||
<View>
|
||||
<Modal
|
||||
isVisible={this.state.addUser}
|
||||
onBackdropPress={this._toggle}
|
||||
onBackButtonPress={this._toggle}
|
||||
animationInTiming={1100}
|
||||
animationOutTiming={1100}
|
||||
style={{ marginTop: -20 }}
|
||||
>
|
||||
<QRCodeScanner
|
||||
onRead={this.onSuccess}
|
||||
cameraStyle={styles.cameraContainer}
|
||||
showMarker={true}
|
||||
/>
|
||||
<Button
|
||||
onPress={this._toggle}
|
||||
title={"Fechar Scan"}
|
||||
color={"#CC1A17"}
|
||||
/>
|
||||
<Text
|
||||
style={{
|
||||
textAlign: "center",
|
||||
fontSize: 12,
|
||||
margin: 10,
|
||||
marginBottom: 5,
|
||||
color: "white"
|
||||
}}
|
||||
>
|
||||
{" "}
|
||||
Caso tenhas problemas com este processo deves contactar a
|
||||
comissão organizadora atravês do email geral.
|
||||
</Text>
|
||||
</Modal>
|
||||
|
||||
<ImageBackground
|
||||
opacity={0.9}
|
||||
source={require("../assets/img/bg_3.jpg")}
|
||||
|
@ -130,192 +238,361 @@ class Home extends Component {
|
|||
>
|
||||
<View style={styles.homeHeader}>
|
||||
<View style={styles.userImageContainer}>
|
||||
{this.props.user.Avatar != null && <Image
|
||||
style={styles.userImage}
|
||||
source={{
|
||||
uri: this.props.user.Avatar
|
||||
}}
|
||||
/>
|
||||
}{ this.props.user.Avatar==null &&
|
||||
<Image
|
||||
style={styles.userImage}
|
||||
source={{ uri: "https://i.imgur.com/XXJ7LxV.jpg" }}
|
||||
/>
|
||||
source={require('../assets/logo_black.jpg')}
|
||||
/>}
|
||||
</View>
|
||||
{this.props.user != undefined && (
|
||||
<Text style={styles.userText}>{this.props.user.Name}</Text>
|
||||
)}
|
||||
<Text style={styles.userTextSub}>
|
||||
{this.props.user.Company}
|
||||
</Text>
|
||||
{this.props.user != undefined && (
|
||||
<Text style={styles.userTextSub}>
|
||||
{this.props.user.Company}
|
||||
</Text>
|
||||
)}
|
||||
</View>
|
||||
</ImageBackground>
|
||||
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignContent: "center",
|
||||
alignSelf:'center'
|
||||
}}
|
||||
>
|
||||
<Text
|
||||
style={{ textAlign: "right", fontSize: 12, paddingTop:10 , marginRight:5}}
|
||||
>
|
||||
Arrasta o ecrã para atualizar
|
||||
</Text>
|
||||
<IconFA
|
||||
name="chevron-circle-down"
|
||||
size={13}
|
||||
color={"#CC1A17"}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.userStats}>
|
||||
<View style={{ backgroundColor: "orange" }}>
|
||||
<Text style={styles.userStatsTitle}>
|
||||
O que inclui o meu bilhete?
|
||||
</Text>
|
||||
</View>
|
||||
<View style={{ flex: 1, flexDirection: 'row', flexWrap: 'wrap' }}>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Acesso </Text>
|
||||
<FlatList
|
||||
data={this.props.acesso}
|
||||
renderItem={({item}) =>
|
||||
<View style={styles.boxStyle}>
|
||||
<Text><IconFA name="check" size={18} color={'#CC1A17'}/> {item}</Text>
|
||||
</View>}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Alojamento</Text>
|
||||
<FlatList
|
||||
data={this.props.alojamento}
|
||||
renderItem={({item}) =>
|
||||
<View style={styles.boxStyle}>
|
||||
<Text><IconFA name="check" size={18} color={'#CC1A17'}/> {item}</Text>
|
||||
</View>}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Alimentação</Text>
|
||||
<FlatList
|
||||
|
||||
data={this.props.alimentacao}
|
||||
renderItem={({item}) =>
|
||||
<View style={styles.boxStyle}>
|
||||
<Text><IconFA name="check" size={18} color={'#CC1A17'}/> {item}</Text>
|
||||
</View>}
|
||||
/>
|
||||
</View>
|
||||
|
||||
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View>
|
||||
<View
|
||||
style={{
|
||||
margin: 10,
|
||||
marginTop: 20,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 3
|
||||
}}
|
||||
style={{ flex: 1, flexDirection: "row", flexWrap: "wrap" }}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
backgroundColor: "#CC1A17",
|
||||
flex: 1,
|
||||
flexDirection: "row"
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "79%" }}>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 25,
|
||||
color: "white",
|
||||
margin: 10,
|
||||
fontWeight: "bold",
|
||||
marginBottom: 0
|
||||
}}
|
||||
>
|
||||
Os tones
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
color: "white",
|
||||
marginLeft: 10,
|
||||
marginBottom: 5
|
||||
}}
|
||||
>
|
||||
5/6 elementos
|
||||
</Text>
|
||||
</View>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Acesso </Text>
|
||||
<FlatList
|
||||
data={this.props.acesso}
|
||||
renderItem={({ item }) => (
|
||||
<View style={styles.boxStyle}>
|
||||
<Text>
|
||||
<IconFA name="check" size={18} color={"#CC1A17"} />{" "}
|
||||
{item}
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Alojamento</Text>
|
||||
<FlatList
|
||||
data={this.props.alojamento}
|
||||
renderItem={({ item }) => (
|
||||
<View style={styles.boxStyle}>
|
||||
<Text>
|
||||
<IconFA name="check" size={18} color={"#CC1A17"} />{" "}
|
||||
{item}
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.colBilhete}>
|
||||
<Text style={styles.titleBilhete}>Alimentação</Text>
|
||||
<FlatList
|
||||
data={this.props.alimentacao}
|
||||
renderItem={({ item }) => (
|
||||
<View style={styles.boxStyle}>
|
||||
<Text>
|
||||
<IconFA name="check" size={18} color={"#CC1A17"} />{" "}
|
||||
{item}
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
{this.props.team != undefined && this.props.team == "none" && (
|
||||
<View style={{ backgroundColor: "white", margin: 10 }}>
|
||||
<View style={{ backgroundColor: "#CC1A17" }}>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 18,
|
||||
color: "white",
|
||||
margin: 10,
|
||||
fontWeight: "bold",
|
||||
marginBottom: 10
|
||||
}}
|
||||
>
|
||||
Equipas Rally / Caching
|
||||
</Text>
|
||||
</View>
|
||||
<View style={{ margin: 10 }}>
|
||||
<Text style={{ fontSize: 12, textAlign: "center" }}>
|
||||
Para participares no ENEI caching ou no Rally Tascas deves
|
||||
formar uma equipa (4 a 6) elementos.
|
||||
</Text>
|
||||
<Text
|
||||
style={{ fontSize: 12, textAlign: "center", margin: 5 }}
|
||||
>
|
||||
Ao criares a equipa, ficas como capitão. Podes adicionar e
|
||||
remover outros elementos.
|
||||
</Text>
|
||||
<TextInput
|
||||
style={{
|
||||
borderColor: "#bfbdbd",
|
||||
borderWidth: 1,
|
||||
margin: 30,
|
||||
|
||||
width: SCREEN_WIDTH * 0.8,
|
||||
|
||||
backgroundColor: "white",
|
||||
|
||||
borderRadius: 3,
|
||||
height: SCREEN_HEIGHT * 0.08,
|
||||
borderColor: "#bfbdbd",
|
||||
borderWidth: 1,
|
||||
paddingLeft: SCREEN_WIDTH * 0.05
|
||||
}}
|
||||
onFocus={this._print}
|
||||
maxLength={50}
|
||||
blurOnSubmit={true}
|
||||
onChangeText={t => this.setState({ team: t })}
|
||||
clearButtonMode="always"
|
||||
value={this.state.team}
|
||||
clearTextOnFocus={true}
|
||||
onSubmitEditing={Keyboard.dismiss}
|
||||
placeholder="Nome da Equipa"
|
||||
/>
|
||||
<View
|
||||
style={{
|
||||
alignItems: "center",
|
||||
alignContent: "center",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
margin: 20,
|
||||
marginBottom: 40,
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<IconFA name="plus" color={"white"} size={30} />
|
||||
<Text style={{ color: "white" }}>Adicionar</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View>
|
||||
<View style={{ flex: 1 }}>
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>Henrique Dias</Text>
|
||||
<Text>AFFJASDXZ</Text>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity style={styles.userRemove}>
|
||||
<Text style={{ fontWeight: "bold" }}>rm equipa</Text>
|
||||
</TouchableOpacity>
|
||||
<View style={{ width: "33%", alignSelf: "center" }}>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
fontSize: 17,
|
||||
textAlign: "center"
|
||||
}}
|
||||
>
|
||||
ENEI Caching
|
||||
</Text>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>Henrique Dias</Text>
|
||||
<Text>AFFJASDXZ</Text>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity style={styles.userRemove}>
|
||||
<IconFA name="times" color={"#CC1A17"} size={30} />
|
||||
<Text>remover</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>Henrique Dias</Text>
|
||||
<Text>AFFJASDXZ</Text>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity style={styles.userRemove}>
|
||||
<IconFA name="times" color={"#CC1A17"} size={30} />
|
||||
<Text>remover</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>Henrique Dias</Text>
|
||||
<Text>AFFJASDXZ</Text>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity style={styles.userRemove}>
|
||||
<IconFA name="times" color={"#CC1A17"} size={30} />
|
||||
<Text>remover</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>Henrique Dias</Text>
|
||||
<Text>AFFJASDXZ</Text>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity style={styles.userRemove}>
|
||||
<IconFA name="times" color={"#CC1A17"} size={30} />
|
||||
<Text>remover</Text>
|
||||
</TouchableOpacity>
|
||||
<ToggleSwitch
|
||||
isOn={this.state.switch}
|
||||
onColor="#CC1A17"
|
||||
offColor="#eeeeee"
|
||||
labelStyle={{ color: "black", fontWeight: "900" }}
|
||||
size="large"
|
||||
onToggle={isOn =>
|
||||
this.setState({ switch: !this.state.switch })
|
||||
}
|
||||
/>
|
||||
<View style={{ width: "33%", alignSelf: "center" }}>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
fontSize: 17,
|
||||
textAlign: "center"
|
||||
}}
|
||||
>
|
||||
Rally Tascas
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<Text
|
||||
style={{ fontSize: 12, textAlign: "center", margin: 5 }}
|
||||
>
|
||||
A incrição no Rally tem custo de 5€ por elemento. A equipa
|
||||
apenas fica ativa quando efectuar o pagamento na banca no
|
||||
ENEI
|
||||
</Text>
|
||||
|
||||
<Button
|
||||
onPress={this._creatTeam}
|
||||
disabled={this.state.team == ""}
|
||||
title={"Criar Equipa"}
|
||||
color={"#CC1A17"}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
{this.props.team != undefined && this.props.team != "none" && (
|
||||
<View>
|
||||
<View
|
||||
style={{
|
||||
margin: 10,
|
||||
marginTop: 20,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 3
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
backgroundColor: "#CC1A17",
|
||||
flex: 1,
|
||||
flexDirection: "row"
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "60%" }}>
|
||||
<Text
|
||||
onPress={() => navigate("teamDetail")}
|
||||
style={{
|
||||
fontSize: 25,
|
||||
color: "white",
|
||||
margin: 10,
|
||||
fontWeight: "bold",
|
||||
marginBottom: 0
|
||||
}}
|
||||
>
|
||||
{this.props.team.nome}
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
color: "white",
|
||||
marginLeft: 10,
|
||||
marginBottom: 5
|
||||
}}
|
||||
>
|
||||
{this.props.team.nMembros}/6 elementos
|
||||
</Text>
|
||||
</View>
|
||||
{this.props.team != undefined &&
|
||||
this.props.team.cap.qRcode == this.props.user.Code && (
|
||||
<TouchableOpacity onPress={this._delTeam}>
|
||||
<View
|
||||
style={{
|
||||
alignItems: "center",
|
||||
alignContent: "center",
|
||||
alignSelf: "center",
|
||||
|
||||
margin: 10
|
||||
}}
|
||||
>
|
||||
<IconFA
|
||||
name="trash-alt"
|
||||
color={"white"}
|
||||
size={30}
|
||||
/>
|
||||
|
||||
<View>
|
||||
<Text style={{ color: "white" }}>rm Team </Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
{this.props.team.nMembros < 6 &&
|
||||
this.props.team.cap.qRcode == this.props.user.Code && (
|
||||
<TouchableOpacity onPress={this._toggle}>
|
||||
<View
|
||||
style={{
|
||||
alignItems: "center",
|
||||
alignContent: "center",
|
||||
alignSelf: "center",
|
||||
margin: 10
|
||||
}}
|
||||
>
|
||||
<IconFA name="plus" color={"white"} size={30} />
|
||||
|
||||
<View>
|
||||
<Text style={{ color: "white" }}> Add</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
</View>
|
||||
|
||||
<View>
|
||||
<View style={{ flex: 1 }}>
|
||||
<View>
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>
|
||||
{this.props.team.cap.fullName}
|
||||
</Text>
|
||||
<Text>{this.props.team.cap.qRcode}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.userRemove}>
|
||||
<Text
|
||||
style={{ fontWeight: "bold", color: "#CC1A17" }}
|
||||
>
|
||||
Capitão
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
</View>
|
||||
<FlatList
|
||||
data={this.props.team.membros}
|
||||
renderItem={({ item }) => (
|
||||
<View>
|
||||
{item.id != this.props.team.cap.id && (
|
||||
<View style={styles.user}>
|
||||
<View style={styles.userLogo}>
|
||||
<IconFA name="user" size={40} />
|
||||
</View>
|
||||
<View style={styles.userT}>
|
||||
<Text style={styles.userName}>
|
||||
{item.fullName}
|
||||
</Text>
|
||||
<Text>{item.qRcode}</Text>
|
||||
</View>
|
||||
|
||||
{this.props.user.Code ==
|
||||
this.props.team.cap.qRcode && (
|
||||
<TouchableOpacity
|
||||
style={styles.userRemove}
|
||||
onPress={() => this._rm(item.qRcode)}
|
||||
>
|
||||
<Text style={{ fontWeight: "bold" }}>
|
||||
remover
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
</View>
|
||||
)}
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<TouchableOpacity onPress={() => navigate("teamDetail")} style={{backgroundColor:'orange'}}><Text style={{color:'white', fontSize:17, fontWeight:'bold', margin:10, textAlign:'center'}}>Ver o progresso da equipa </Text></TouchableOpacity>
|
||||
</View>
|
||||
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
</ScrollView>
|
||||
</PTRView>
|
||||
|
@ -331,24 +608,29 @@ class Home extends Component {
|
|||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
titleBilhete:{
|
||||
textAlign:'center',
|
||||
fontSize:15,
|
||||
fontWeight:'bold',
|
||||
marginBottom:10
|
||||
cameraContainer: {
|
||||
height: Dimensions.get("window").height
|
||||
},
|
||||
colBilhete:{
|
||||
width:'33%',
|
||||
padding:10
|
||||
titleBilhete: {
|
||||
textAlign: "center",
|
||||
fontSize: 15,
|
||||
fontWeight: "bold",
|
||||
marginBottom: 10
|
||||
},
|
||||
colBilhete: {
|
||||
width: "33%",
|
||||
padding: 10,
|
||||
alignContent: "center",
|
||||
alignItems: "center"
|
||||
},
|
||||
boxStyle: {
|
||||
|
||||
|
||||
padding:10,
|
||||
borderWidth: 1,
|
||||
padding: 5,
|
||||
paddingTop: 10,
|
||||
paddingBottom: 10,
|
||||
borderWidth: 1,
|
||||
marginBottom: 5,
|
||||
borderColor:'#CC1A17'
|
||||
|
||||
width: "100%",
|
||||
borderColor: "#CC1A17"
|
||||
},
|
||||
userName: {
|
||||
fontSize: 16,
|
||||
|
@ -481,7 +763,9 @@ function mapStateToProps(state, props) {
|
|||
bilhete: state.apiReducer.bilhete,
|
||||
alimentacao: state.apiReducer.alimentacao,
|
||||
alojamento: state.apiReducer.alojamento,
|
||||
acesso: state.apiReducer.acesso
|
||||
acesso: state.apiReducer.acesso,
|
||||
team: state.apiReducer.team,
|
||||
internalToken: state.apiReducer.internalToken
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1,427 +1,455 @@
|
|||
import React, {Component} from 'react'
|
||||
import {Card, Divider,} from 'react-native-elements'
|
||||
import React, { Component } from "react";
|
||||
import { Card, Divider } from "react-native-elements";
|
||||
import {
|
||||
Image,
|
||||
ImageBackground,
|
||||
Linking,
|
||||
ListView,
|
||||
Platform,
|
||||
ScrollView,
|
||||
StyleSheet,
|
||||
Text,
|
||||
View,
|
||||
TouchableOpacity,
|
||||
Dimensions,
|
||||
TextInput,
|
||||
Button,
|
||||
} from 'react-native'
|
||||
import PropTypes from 'prop-types';
|
||||
Image,
|
||||
ImageBackground,
|
||||
Linking,
|
||||
ListView,
|
||||
Platform,
|
||||
ScrollView,
|
||||
StyleSheet,
|
||||
Text,
|
||||
View,
|
||||
TouchableOpacity,
|
||||
Dimensions,
|
||||
TextInput,
|
||||
Button,
|
||||
ActivityIndicator
|
||||
} from "react-native";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import {connect, Provider} from "react-redux";
|
||||
import {bindActionCreators} from "redux";
|
||||
import { connect, Provider } from "react-redux";
|
||||
import { bindActionCreators } from "redux";
|
||||
import * as Actions from "../store/actions";
|
||||
|
||||
import {Validate} from '../Helpers/Validation'
|
||||
import {RkTextInput} from 'react-native-ui-kitten';
|
||||
import { Validate } from "../Helpers/Validation";
|
||||
import { RkTextInput } from "react-native-ui-kitten";
|
||||
|
||||
import {createStore} from 'redux';
|
||||
import { createStore } from "redux";
|
||||
|
||||
import Email from "../components/Email";
|
||||
|
||||
import Email from '../components/Email';
|
||||
|
||||
import Separator from '../components/Separator';
|
||||
import Tel from '../components/Telephone';
|
||||
|
||||
import Separator from "../components/Separator";
|
||||
import Tel from "../components/Telephone";
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
import Icon from "react-native-vector-icons/Ionicons"
|
||||
import Icon from "react-native-vector-icons/Ionicons";
|
||||
|
||||
|
||||
var options = {
|
||||
title: "Selecionar foto de perfil",
|
||||
|
||||
storageOptions: {
|
||||
skipBackup: true,
|
||||
path: "images"
|
||||
}
|
||||
};
|
||||
|
||||
class Profile extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
name: this.props.user.Name,
|
||||
userDetails: {},
|
||||
token: false,
|
||||
tokenData: "",
|
||||
loggedIn: false,
|
||||
onHold: true,
|
||||
user: {},
|
||||
cenas: { Name: "as" },
|
||||
text: "",
|
||||
profileIcon: this.props.user.Avatar,
|
||||
|
||||
constructor(props) {
|
||||
formValid: true,
|
||||
|
||||
super(props);
|
||||
jobs: this.props.user.Company,
|
||||
jobsError: false,
|
||||
jobsErrorMessage: "",
|
||||
|
||||
this.state = {
|
||||
name: this.props.user.Name,
|
||||
userDetails: {},
|
||||
token: false,
|
||||
tokenData: '',
|
||||
loggedIn: false,
|
||||
onHold: true,
|
||||
user: {},
|
||||
cenas: {Name: 'as'},
|
||||
text: '',
|
||||
email: this.props.user.Email,
|
||||
emailError: false,
|
||||
emailErrorMessage: "",
|
||||
|
||||
phone: this.props.user.Mobile,
|
||||
phoneError: false,
|
||||
phoneErrorMessage: "",
|
||||
|
||||
formValid: true,
|
||||
address: this.props.user.Address,
|
||||
addressError: false,
|
||||
addressErrorMessage: "",
|
||||
|
||||
jobs: this.props.user.Company,
|
||||
jobsError: false,
|
||||
jobsErrorMessage: '',
|
||||
city: this.props.user.City,
|
||||
cityError: false,
|
||||
cityErrorMessage: "",
|
||||
|
||||
email: this.props.user.Email,
|
||||
emailError: false,
|
||||
emailErrorMessage: '',
|
||||
oldPass: "",
|
||||
new1: "",
|
||||
new2: "",
|
||||
|
||||
phone: this.props.user.Mobile,
|
||||
phoneError: false,
|
||||
phoneErrorMessage: '',
|
||||
|
||||
address: this.props.user.Address,
|
||||
addressError: false,
|
||||
addressErrorMessage: '',
|
||||
|
||||
city: this.props.user.City,
|
||||
cityError: false,
|
||||
cityErrorMessage: '',
|
||||
|
||||
oldPass:'',
|
||||
new1:'',
|
||||
new2:'',
|
||||
|
||||
url:this.props.user.Url,
|
||||
curso:this.props.user.LastName,
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
_press=()=>{
|
||||
this.props.changePassword(
|
||||
this.props.token,
|
||||
this.state.oldPass,
|
||||
this.state.new1,
|
||||
this.state.new2
|
||||
)
|
||||
}
|
||||
_logout = () => {
|
||||
|
||||
this.props.logoutUser();
|
||||
url: this.props.user.Url,
|
||||
curso: this.props.user.LastName
|
||||
};
|
||||
}
|
||||
|
||||
_press = () => {
|
||||
this.props.hold();
|
||||
this.props.changePassword(
|
||||
this.props.token,
|
||||
this.state.oldPass,
|
||||
this.state.new1,
|
||||
this.state.new2
|
||||
);
|
||||
};
|
||||
_logout = () => {
|
||||
this.props.logoutUser();
|
||||
};
|
||||
|
||||
_validateData = (name, jobs, email, phone, address, city) => {
|
||||
let valid = null;
|
||||
_validateData = (name, jobs, email, phone, address, city) => {
|
||||
let valid = null;
|
||||
|
||||
v = Validate('name', name);
|
||||
v = Validate("name", name);
|
||||
|
||||
let v = Validate("email", email);
|
||||
this.setState({ emailError: v[0], emailErrorMessage: v[1] });
|
||||
|
||||
let v = Validate('email', email);
|
||||
this.setState({emailError: v[0], emailErrorMessage: v[1]});
|
||||
v = Validate("jobs", jobs);
|
||||
|
||||
v = Validate('jobs', jobs);
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({ jobsError: v[0], jobsErrorMessage: v[1] }, () => {
|
||||
console.log(
|
||||
"email error: " +
|
||||
this.state.emailError +
|
||||
" job Error: " +
|
||||
this.state.jobsError
|
||||
);
|
||||
});
|
||||
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({jobsError: v[0], jobsErrorMessage: v[1]}, () => {
|
||||
v = Validate("city", city);
|
||||
|
||||
console.log('email error: ' + this.state.emailError + ' job Error: ' + this.state.jobsError);
|
||||
});
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({ cityError: v[0], cityErrorMessage: v[1] });
|
||||
|
||||
v = Validate("address", address);
|
||||
|
||||
v = Validate('city', city);
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({ addressError: v[0], addressErrorMessage: v[1] });
|
||||
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({cityError: v[0], cityErrorMessage: v[1]})
|
||||
v = Validate("city", city);
|
||||
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({ cityError: v[0], cityErrorMessage: v[1] }, () => {
|
||||
console.log(this.state.cityError + " Error: " + this.state.addressError);
|
||||
|
||||
v = Validate('address', address);
|
||||
if (
|
||||
this.state.emailError ||
|
||||
this.state.jobsError ||
|
||||
this.state.phoneError ||
|
||||
this.state.addressError ||
|
||||
this.state.cityError
|
||||
)
|
||||
this.setState({ formValid: false });
|
||||
});
|
||||
};
|
||||
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({addressError: v[0], addressErrorMessage: v[1]});
|
||||
saveData() {
|
||||
const {
|
||||
name,
|
||||
jobs,
|
||||
email,
|
||||
phone,
|
||||
address,
|
||||
city,
|
||||
formValid,
|
||||
url,
|
||||
curso,
|
||||
profileIcon
|
||||
} = this.state;
|
||||
|
||||
// this._validateData(name, jobs, email, phone, address, city,curso);
|
||||
|
||||
v = Validate('city', city);
|
||||
console.log(formValid);
|
||||
|
||||
// setState is asynchronous and so trying to work with state directly after a setState
|
||||
// call won't work as the update won't necessarily have run. Instead you can use the second argument to setState which is a callback
|
||||
this.setState({cityError: v[0], cityErrorMessage: v[1]}, () => {
|
||||
console.log(this.state.cityError + ' Error: ' + this.state.addressError);
|
||||
this.props.hold();
|
||||
if (formValid) {
|
||||
console.log("data valid");
|
||||
|
||||
if (this.state.emailError || this.state.jobsError || this.state.phoneError || this.state.addressError || this.state.cityError)
|
||||
this.setState({formValid: false});
|
||||
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
saveData() {
|
||||
|
||||
const {name, jobs, email, phone, address, city, formValid, url,curso} = this.state;
|
||||
|
||||
// this._validateData(name, jobs, email, phone, address, city,curso);
|
||||
|
||||
console.log(formValid);
|
||||
|
||||
if (formValid) {
|
||||
console.log("data valid");
|
||||
|
||||
this.props.updateUser(this.props.token, {
|
||||
Name: this.state.name,
|
||||
Company: jobs,
|
||||
LastName: curso,
|
||||
Address: address,
|
||||
City: city,
|
||||
Mobile: phone,
|
||||
Avatar: "base64",
|
||||
Url:url,
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
else
|
||||
console.log("data not valid");
|
||||
this.props.updateUser(this.props.token, {
|
||||
Name: this.state.name,
|
||||
Company: jobs,
|
||||
LastName: curso,
|
||||
Address: address,
|
||||
City: city,
|
||||
Mobile: phone,
|
||||
//Avatar: "aaa",
|
||||
Url: url
|
||||
});
|
||||
} else console.log("data not valid");
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
if (this.props.onHold) {
|
||||
return (
|
||||
<View style={{ marginTop: SCREEN_HEIGHT * 0.4 }}>
|
||||
<ActivityIndicator size="large" color="#CC1A17" />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
return (
|
||||
<View style={{flex: 1}}>
|
||||
<ScrollView style={{backgroundColor: '#eee'}}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.userBioRowHeader}>
|
||||
<View style={styles.userBioRowTitle}>
|
||||
<Text style={{color: '#CC1A17', fontWeight: 'bold', fontSize: 20}}>Informações Pessoais</Text>
|
||||
</View>
|
||||
|
||||
</View>
|
||||
<View style={styles.userBio}>
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >Nome</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(n) => {
|
||||
this.setState({name: n})
|
||||
}}
|
||||
value={this.state.name}/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >Curso</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(cu) => {
|
||||
this.setState({curso: cu})
|
||||
}}
|
||||
value={this.state.curso}/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >Faculdade</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(job) => {
|
||||
this.setState({jobs: job})
|
||||
}}
|
||||
value={this.state.jobs}/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >Telemóvel</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(phone) => {
|
||||
this.setState({phone: phone})
|
||||
}}
|
||||
value={this.state.phone}/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >Morada</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(add) => {
|
||||
this.setState({address: add})
|
||||
}}
|
||||
value={this.state.address}/>
|
||||
</View>
|
||||
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo} >LinkedIn</Text>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
onChangeText={(u) => {
|
||||
this.setState({url: u})
|
||||
}}
|
||||
value={this.state.url}/>
|
||||
</View>
|
||||
|
||||
|
||||
<Button onPress={() => this.saveData() } title="Guardar Alterações" color="#CC1A17"
|
||||
/>
|
||||
|
||||
</View>
|
||||
</View>
|
||||
|
||||
{/*PassWord Edit*/}
|
||||
<View style={styles.container}>
|
||||
<View style={styles.userBioRowHeader}>
|
||||
<View style={styles.userBioRowTitle}>
|
||||
<Text style={{color: '#CC1A17', fontWeight: 'bold', fontSize: 20}}>Alterar Password</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.userBio}>
|
||||
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
placeholder='Antiga Password'
|
||||
onChangeText={(old => {
|
||||
this.setState({oldPass: old})
|
||||
})}
|
||||
value={this.state.oldPass}
|
||||
maxLength = {20}
|
||||
|
||||
secureTextEntry={true}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
placeholder='Nova Password'
|
||||
secureTextEntry={true}
|
||||
onChangeText={(newz => {
|
||||
this.setState({new1: newz})
|
||||
})}
|
||||
value={this.state.new1}
|
||||
maxLength = {20}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{backgroundColor: 'black'}}/>
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
|
||||
|
||||
<TextInput style={styles.userBioText}
|
||||
placeholder='Repetir Password'
|
||||
secureTextEntry={true}
|
||||
onChangeText={(newzz => {
|
||||
this.setState({new2: newzz})
|
||||
})}
|
||||
value={this.state.new2}
|
||||
maxLength = {20}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<Button onPress={this._press} title="Alterar Password" color="#CC1A17"
|
||||
/>
|
||||
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity onPress={this._logout} style={{
|
||||
height: 50,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: 'black',
|
||||
marginTop:30
|
||||
}}>
|
||||
<Text style={{color: "#fff", fontWeight: 'bold'}}>Logout</Text>
|
||||
|
||||
</TouchableOpacity>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1 }}>
|
||||
<ScrollView style={{ backgroundColor: "#eee" }}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.userBioRowHeader}>
|
||||
<View style={styles.userBioRowTitle}>
|
||||
<Text
|
||||
style={{ color: "#CC1A17", fontWeight: "bold", fontSize: 20 }}
|
||||
>
|
||||
Informações Pessoais
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<Image source={this.state.avatarSource} />
|
||||
|
||||
)
|
||||
}
|
||||
<View style={styles.userBio}>
|
||||
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>Nome</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={n => {
|
||||
this.setState({ name: n });
|
||||
}}
|
||||
value={this.state.name}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>Curso</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={cu => {
|
||||
this.setState({ curso: cu });
|
||||
}}
|
||||
value={this.state.curso}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>Faculdade</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={job => {
|
||||
this.setState({ jobs: job });
|
||||
}}
|
||||
value={this.state.jobs}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>Telemóvel</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={phone => {
|
||||
this.setState({ phone: phone });
|
||||
}}
|
||||
value={this.state.phone}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>Morada</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={add => {
|
||||
this.setState({ address: add });
|
||||
}}
|
||||
value={this.state.address}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<Text style={styles.userBioLogo}>LinkedIn</Text>
|
||||
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
onChangeText={u => {
|
||||
this.setState({ url: u });
|
||||
}}
|
||||
value={this.state.url}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<Button
|
||||
onPress={() => this.saveData()}
|
||||
title="Guardar Alterações"
|
||||
color="#CC1A17"
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
{/*PassWord Edit*/}
|
||||
<View style={styles.container}>
|
||||
<View style={styles.userBioRowHeader}>
|
||||
<View style={styles.userBioRowTitle}>
|
||||
<Text
|
||||
style={{ color: "#CC1A17", fontWeight: "bold", fontSize: 20 }}
|
||||
>
|
||||
Alterar Password
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.userBio}>
|
||||
<View style={styles.userBioRow}>
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
placeholder="Antiga Password"
|
||||
onChangeText={old => {
|
||||
this.setState({ oldPass: old });
|
||||
}}
|
||||
value={this.state.oldPass}
|
||||
maxLength={20}
|
||||
secureTextEntry={true}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
placeholder="Nova Password"
|
||||
secureTextEntry={true}
|
||||
onChangeText={newz => {
|
||||
this.setState({ new1: newz });
|
||||
}}
|
||||
value={this.state.new1}
|
||||
maxLength={20}
|
||||
/>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
|
||||
<View style={styles.userBioRow}>
|
||||
<TextInput
|
||||
style={styles.userBioText}
|
||||
placeholder="Repetir Password"
|
||||
secureTextEntry={true}
|
||||
onChangeText={newzz => {
|
||||
this.setState({ new2: newzz });
|
||||
}}
|
||||
value={this.state.new2}
|
||||
maxLength={20}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<Button
|
||||
onPress={this._press}
|
||||
title="Alterar Password"
|
||||
color="#CC1A17"
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity
|
||||
onPress={this._logout}
|
||||
style={{
|
||||
height: 50,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
backgroundColor: "black",
|
||||
marginTop: 30
|
||||
}}
|
||||
>
|
||||
<Text style={{ color: "#fff", fontWeight: "bold" }}>Logout</Text>
|
||||
</TouchableOpacity>
|
||||
</ScrollView>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
margin: 10,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 5
|
||||
},
|
||||
|
||||
container: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
margin: 20,
|
||||
backgroundColor: 'white',
|
||||
borderRadius: 5,
|
||||
},
|
||||
userBioRowHeader: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignItems: "center"
|
||||
},
|
||||
|
||||
userBioRowHeader: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
userBioRowTitle: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-start",
|
||||
padding: 10
|
||||
},
|
||||
|
||||
userBioRowTitle: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'flex-start',
|
||||
padding: 10,
|
||||
},
|
||||
userBioRow: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-start",
|
||||
padding: 10,
|
||||
// borderWidth: 2,
|
||||
alignItems: "center"
|
||||
},
|
||||
userBioText: {
|
||||
width: SCREEN_WIDTH * 0.4,
|
||||
flex: 2
|
||||
// borderWidth: 2,
|
||||
},
|
||||
|
||||
userBioRow: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'flex-start',
|
||||
padding: 10,
|
||||
// borderWidth: 2,
|
||||
alignItems: 'center',
|
||||
|
||||
},
|
||||
userBioText: {
|
||||
width: SCREEN_WIDTH * 0.40,
|
||||
flex: 2,
|
||||
// borderWidth: 2,
|
||||
},
|
||||
|
||||
userPassText: {
|
||||
flex: 1,
|
||||
//alignSelf: 'flex-start',
|
||||
justifyContent: 'flex-end',
|
||||
borderWidth: 2,
|
||||
},
|
||||
|
||||
userBioLogo: {
|
||||
marginLeft: 10,
|
||||
width:80,
|
||||
},
|
||||
|
||||
bottomLogOut: {
|
||||
height: 20,
|
||||
},
|
||||
userPassText: {
|
||||
flex: 1,
|
||||
//alignSelf: 'flex-start',
|
||||
justifyContent: "flex-end",
|
||||
borderWidth: 2
|
||||
},
|
||||
|
||||
userBioLogo: {
|
||||
marginLeft: 10,
|
||||
width: 80
|
||||
},
|
||||
|
||||
bottomLogOut: {
|
||||
height: 20
|
||||
}
|
||||
});
|
||||
|
||||
mapStateToProps = (state, props) => {
|
||||
|
||||
return {
|
||||
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
userDetails: state.apiReducer.userDetails,
|
||||
}
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
userDetails: state.apiReducer.userDetails,
|
||||
onHold: state.apiReducer.onHold
|
||||
};
|
||||
};
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(Profile);
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(Profile);
|
||||
|
|
|
@ -1,174 +1,104 @@
|
|||
import React from 'react';
|
||||
import {View, Image, Vibration, Dimensions, Text, Button, TouchableOpacity, ActivityIndicator} from 'react-native';
|
||||
import { View, Image, Vibration, Dimensions,Text ,Button ,TouchableOpacity } from 'react-native';
|
||||
import QRCodeScanner from 'react-native-qrcode-scanner';
|
||||
import {UtilStyles} from '../assets/styles'
|
||||
import CodeInput from 'react-native-confirmation-code-input';
|
||||
|
||||
import Modal from "react-native-modal";
|
||||
import {TabView, TabBar, SceneMap} from 'react-native-tab-view';
|
||||
|
||||
import {
|
||||
RkButton,
|
||||
RkTheme, RkText
|
||||
} from 'react-native-ui-kitten';
|
||||
|
||||
|
||||
import IconMI from "react-native-vector-icons/MaterialIcons"
|
||||
import { bindActionCreators } from "redux";
|
||||
import PTRView from "react-native-pull-to-refresh";
|
||||
import * as Actions from "../store/actions";
|
||||
import { connect } from "react-redux";
|
||||
|
||||
import {RkButton,
|
||||
RkTheme , RkText} from 'react-native-ui-kitten';
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
|
||||
export default class Scan extends React.Component {
|
||||
class Scan extends React.Component {
|
||||
|
||||
_toggleModal = () =>
|
||||
this.setState({isModalVisible: !this.state.isModalVisible});
|
||||
this.setState({ isModalVisible: !this.state.isModalVisible });
|
||||
|
||||
_activate = () => {
|
||||
_activate=()=>{
|
||||
|
||||
this.setState({isModalVisible: !this.state.isModalVisible, reactivate: true});
|
||||
this.setState({ isModalVisible: !this.state.isModalVisible ,reactivate:true});
|
||||
this.scanner.reactivate();
|
||||
}
|
||||
|
||||
onSuccess = (e) => {
|
||||
|
||||
this.setState({isModalVisible: !this.state.isModalVisible, isActive: false});
|
||||
this.setState({code: e.data});
|
||||
};
|
||||
|
||||
this.setState({code:e.data});
|
||||
this.props.scanQrCode({UserQR:this.props.user.Code, ScanQR: e.data},this.props.internalToken);
|
||||
|
||||
|
||||
state = {
|
||||
isActive: true,
|
||||
isRender: true,
|
||||
reactivate: false,
|
||||
isModalVisible: false,
|
||||
code: '',
|
||||
};
|
||||
|
||||
index: 0,
|
||||
routes: [
|
||||
{key: 'scan', title: 'Scan', icon: ''},
|
||||
{key: 'history', title: 'Histórico', icon: 'history'},
|
||||
{key: 'fav', title: 'Favoritos', icon: 'favorite'},
|
||||
],
|
||||
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
state = {
|
||||
isActive:true,
|
||||
isRender: true,
|
||||
reactivate:false,
|
||||
isModalVisible: false,
|
||||
code:''
|
||||
|
||||
}
|
||||
componentDidMount() {
|
||||
this.props.navigation.addListener('willFocus', (route) => {
|
||||
this.setState({isRender: true})
|
||||
this.setState({ isRender: true })
|
||||
});
|
||||
this.props.navigation.addListener('willBlur', (route) => {
|
||||
this.setState({isRender: false})
|
||||
this.setState({ isRender: false })
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
/*Screen SCAN*/
|
||||
const scanScreen = () => (
|
||||
<QRCodeScanner
|
||||
showMarker
|
||||
ref={(node) => {
|
||||
this.scanner = node
|
||||
}}
|
||||
reactivate={false}
|
||||
cameraProps={{captureAudio: false}}
|
||||
onRead={this.onSuccess.bind(this)}
|
||||
showMarker={true}
|
||||
cameraStyle={{height: SCREEN_HEIGHT}}
|
||||
fadeIn={true}
|
||||
customMarker={
|
||||
<View style={{flex: 1}}>
|
||||
<Modal isVisible={this.state.isModalVisible}
|
||||
style={{backgroundColor: '#E8E8E8', borderRadius: 30, height: 100}}>
|
||||
<View style={{flex: 1}}>
|
||||
<Text></Text>
|
||||
<Text> Qr code data: {this.state.code}</Text>
|
||||
<Button onPress={this._activate} title="Close" color="#841584"
|
||||
accessibilityLabel="Learn more about this purple button"/>
|
||||
</View>
|
||||
</Modal>
|
||||
</View>
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
const historyScreen = () => (
|
||||
<View style={{backgroundColor: '#ff4081'}}>
|
||||
</View>
|
||||
);
|
||||
|
||||
const favScreen = () => (
|
||||
<View style={{backgroundColor: '#a95'}}>
|
||||
</View>
|
||||
|
||||
);
|
||||
|
||||
|
||||
_renderLazyPlaceholder = () => {
|
||||
return (
|
||||
<ActivityIndicator size="large" color="red" />
|
||||
);
|
||||
};
|
||||
|
||||
{
|
||||
|
||||
return (
|
||||
|
||||
<View style={{flex: 1}}>
|
||||
|
||||
{this.state.isRender &&
|
||||
<TabView
|
||||
lazy
|
||||
navigationState={this.state}
|
||||
renderScene={SceneMap({
|
||||
scan: scanScreen,
|
||||
history: historyScreen,
|
||||
fav: favScreen,
|
||||
})}
|
||||
renderLazyPlaceholder={this._renderLazyPlaceholder}
|
||||
onIndexChange={(index) => this.setState({index})}
|
||||
initialLayout={{width: SCREEN_WIDTH, height: SCREEN_HEIGHT}}
|
||||
renderIcon={({route}) => (
|
||||
<IconMI
|
||||
name={route.icon}
|
||||
size={15}
|
||||
color={'white'}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
}
|
||||
</View>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
{
|
||||
|
||||
return (
|
||||
<View style={{flex: 1}}>
|
||||
<TouchableOpacity onPress={this._toggleModal}>
|
||||
<Text>Show Modal</Text>
|
||||
</TouchableOpacity>
|
||||
<Modal isVisible={this.state.isModalVisible}>
|
||||
<View style={{flex: 1}}>
|
||||
<Text>Hello!</Text>
|
||||
<TouchableOpacity onPress={this._toggleModal}>
|
||||
<Text>Hide me!</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</Modal>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
<View style={{flex: 1}}>
|
||||
|
||||
|
||||
|
||||
|
||||
{ this.state.isRender &&
|
||||
|
||||
<QRCodeScanner
|
||||
showMarker
|
||||
ref={(node) => { this.scanner = node }}
|
||||
reactivate={false}
|
||||
|
||||
onRead={this.onSuccess.bind(this)}
|
||||
|
||||
showMarker={true}
|
||||
|
||||
cameraStyle={{ height: SCREEN_HEIGHT }}
|
||||
|
||||
fadeIn={true}
|
||||
|
||||
|
||||
/>
|
||||
}
|
||||
</View>
|
||||
)}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
RkTheme.setType('RkButton', 'dark', {
|
||||
container: {
|
||||
paddingTop: 10,
|
||||
backgroundColor: 'gray',
|
||||
|
||||
borderRadius: 90,
|
||||
paddingTop:10,
|
||||
backgroundColor: 'gray',
|
||||
|
||||
borderRadius: 90,
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
const rectDimensions = SCREEN_WIDTH * 0.85; // this is equivalent to 255 from a 393 device width
|
||||
|
@ -176,31 +106,35 @@ const rectDimensions = SCREEN_WIDTH * 0.85; // this is equivalent to 255 from a
|
|||
const overlayColor = 'rgba(0,0,0,0.30)';
|
||||
|
||||
const styles = {
|
||||
|
||||
recover: {
|
||||
paddingTop: 10,
|
||||
|
||||
recover:{
|
||||
paddingTop:10,
|
||||
color: "red",
|
||||
paddingBottom: 10
|
||||
paddingBottom:10
|
||||
},
|
||||
manual: {},
|
||||
manual:{
|
||||
|
||||
|
||||
|
||||
logo: {
|
||||
},
|
||||
|
||||
logo:{
|
||||
|
||||
height: SCREEN_HEIGHT * 0.35,
|
||||
width: SCREEN_WIDTH,
|
||||
height:SCREEN_HEIGHT*0.35,
|
||||
width:SCREEN_WIDTH,
|
||||
backgroundColor: overlayColor,
|
||||
},
|
||||
rectangleContainer: {
|
||||
|
||||
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
backgroundColor: "transparent",
|
||||
|
||||
|
||||
},
|
||||
|
||||
rectangle: {
|
||||
|
||||
|
||||
height: rectDimensions,
|
||||
width: rectDimensions,
|
||||
alignItems: "center",
|
||||
|
@ -228,4 +162,24 @@ const styles = {
|
|||
width: SCREEN_WIDTH,
|
||||
backgroundColor: overlayColor
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
|
||||
internalToken: state.apiReducer.internalToken,
|
||||
cromos: state.apiReducer.cromos
|
||||
};
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(Scan);
|
||||
|
|
@ -8,9 +8,15 @@ import {
|
|||
Text,
|
||||
Button,
|
||||
TouchableOpacity,
|
||||
ImageBackground
|
||||
ImageBackground,
|
||||
ListView,
|
||||
FlatList,
|
||||
ActivityIndicator,
|
||||
Linking,
|
||||
Platform
|
||||
} from "react-native";
|
||||
|
||||
import moment from "moment";
|
||||
import { Divider, Icon, Avatar } from "react-native-elements";
|
||||
import { TabView, TabBar, SceneMap } from "react-native-tab-view";
|
||||
import { RkButton, RkCard, RkText, RkTheme } from "react-native-ui-kitten";
|
||||
|
@ -47,7 +53,7 @@ class calendarDetail extends React.Component {
|
|||
header: (
|
||||
<NavAbsolute
|
||||
navigation={navigation}
|
||||
// title={navigation.state.params.info.name}
|
||||
// title={navigation.state.params.info.name}
|
||||
/>
|
||||
)
|
||||
});
|
||||
|
@ -55,13 +61,11 @@ class calendarDetail extends React.Component {
|
|||
state = {};
|
||||
|
||||
componentDidMount() {
|
||||
this.props.getEvents(this.props.user);
|
||||
console.log("didMount");
|
||||
console.log(this.props.events);
|
||||
this.props.getEvents(this.props.user, this.props.careerPath);
|
||||
|
||||
const { navigation } = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
console.log("putas");
|
||||
console.log(info);
|
||||
this.props.getSessionDetails(this.props.token, info.Id);
|
||||
}
|
||||
|
||||
_update = () => {
|
||||
|
@ -75,202 +79,187 @@ class calendarDetail extends React.Component {
|
|||
this.data = [];
|
||||
}
|
||||
|
||||
renderHeader = info => {
|
||||
return (
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.coverContainer}>
|
||||
<ImageBackground
|
||||
source={{
|
||||
uri: info.imageUrl
|
||||
}}
|
||||
style={styles.coverImage}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
renderDescription = info => {
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{ color: "#CC1A17", fontSize: 15 }}>
|
||||
{info.time === info.timeEnd
|
||||
? info.time
|
||||
: `${info.time}H - ${info.timeEnd}H`}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
margin: 10,
|
||||
marginBottom: 0,
|
||||
marginTop: 0,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17"
|
||||
}}
|
||||
>
|
||||
{info.name}
|
||||
</Text>
|
||||
<Text style={{ marginLeft: 10 }}>Workshop</Text>
|
||||
</View>
|
||||
|
||||
<View style={{ margin: 10 }}>
|
||||
<Progress.Bar
|
||||
color={"#000000"}
|
||||
progress={info.Enrolled / info.MaxAttendees}
|
||||
height={10}
|
||||
unfilledColor={"white"}
|
||||
width={210}
|
||||
/>
|
||||
<Text>
|
||||
{info.Enrolled} / {info.MaxAttendees}
|
||||
</Text>
|
||||
</View>
|
||||
<Divider style={{ backgroundColor: "#eeeeee" }} />
|
||||
<View style={{ flex: 1, flexDirection: "row", marginTop: 10 }}>
|
||||
<View style={{ width: 100, height: 100, padding: 5 }}>
|
||||
<FitImage
|
||||
source={{
|
||||
uri:
|
||||
"http://enei2019.uingress.com/adminpoint/Content/Images/Uploads/Speakers/ffb043cb-3073-421c-a070-5d273b50fc23.jpeg"
|
||||
}}
|
||||
style={{ padding: 5 }}
|
||||
/>
|
||||
</View>
|
||||
<View>
|
||||
<Text style={{ fontWeight: "bold", fontSize: 20, margin: 10 }}>
|
||||
André Duarte
|
||||
</Text>
|
||||
<Text style={{ marginLeft: 10 }}>
|
||||
Project manager at ubiwhere
|
||||
</Text>
|
||||
<TouchableOpacity>
|
||||
<Text style={{ color: "#CC1A17", marginLeft: 10 }}>
|
||||
website
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
color: "#CC1A17",
|
||||
margin: 10,
|
||||
marginBottom: 0,
|
||||
fontSize: 15
|
||||
}}
|
||||
>
|
||||
Descrição do orador:
|
||||
</Text>
|
||||
<Text style={{ margin: 10 }}>
|
||||
Existem muitas variações das passagens do Lorem Ipsum disponíveis,
|
||||
mas a maior parte sofreu alterações de alguma forma, pela injecção
|
||||
de humor, ou de palavras aleatórias que nem sequer parecem
|
||||
suficientemente credíveis.{" "}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View style={styles.block}>
|
||||
<Text style={{ fontSize: 15, color: "#CC1A17", fontWeight:'bold' }}>Descrição da palestra/workshop</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.description}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
/*
|
||||
|
||||
renderMap = () => {
|
||||
return (
|
||||
<MapView
|
||||
provider={PROVIDER_GOOGLE}
|
||||
style={{flex: 2}}
|
||||
region={{
|
||||
latitude: 40.19092111672049,
|
||||
latitudeDelta: 0.007664297080957283,
|
||||
longitude: -8.410662319511175,
|
||||
longitudeDelta: 0.007551424205303192
|
||||
}}
|
||||
onRegionChangeComplete={(region) => {
|
||||
|
||||
console.log(region);
|
||||
|
||||
}}
|
||||
|
||||
/>
|
||||
)
|
||||
};
|
||||
*/
|
||||
renderAttendee = () => {
|
||||
return (
|
||||
<View style={{ backgroundColor: "#fff", height: SCREEN_HEIGHT * 0.1 }}>
|
||||
<View style={styles.AttendeeContainer}>
|
||||
<View style={styles.leftRow}>
|
||||
<Avatar
|
||||
rounded
|
||||
size="medium"
|
||||
source={{
|
||||
uri:
|
||||
"https://cdn3.iconfinder.com/data/icons/vector-icons-6/96/256-512.png"
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.centerRow}>
|
||||
<Text style={styles.titleText} numberOfLines={1}>
|
||||
Nome do gajo
|
||||
</Text>
|
||||
</View>
|
||||
<View style={styles.rightRow}>
|
||||
<Icon
|
||||
size={24}
|
||||
name="visibility"
|
||||
type="material-icon"
|
||||
onPress={() => navigation.goBack(null)}
|
||||
color="#000"
|
||||
iconStyle={styles.icon}
|
||||
underlayColor="transparent"
|
||||
underlineColorAndroid="transparent"
|
||||
containerStyle={styles.iconContainer}
|
||||
hitSlop={{ top: 15, bottom: 15, left: 15, right: 15 }}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { navigation } = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
|
||||
if (this.props.sessionDetail == undefined) {
|
||||
return (<View style={{ flex: 1, alignSelf: 'center', margin: SCREEN_HEIGHT * 0.45 }}>
|
||||
<ActivityIndicator size="large" color="#CC1A17" />
|
||||
</View>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
info != undefined &&
|
||||
<View style={styles.mainViewStyle}>
|
||||
<ScrollView style={styles.scroll}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.headerContainer}>
|
||||
{this.renderHeader(info)}
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.coverContainer}>
|
||||
<ImageBackground
|
||||
source={{
|
||||
uri: `https://tickets.enei.pt/adminpoint/Content/Images/Uploads/Sessions/${this.props.sessionDetail.Image}`
|
||||
}}
|
||||
style={styles.coverImage}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{ color: "#CC1A17", fontSize: 15 }}>
|
||||
{`${moment(this.props.sessionDetail.SessionStart).format("HH:mm")}H - ${moment(this.props.sessionDetail.SessionEnd).format("HH:mm")}H`}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
margin: 10,
|
||||
marginBottom: 0,
|
||||
marginTop: 0,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17"
|
||||
}}
|
||||
>
|
||||
{this.props.sessionDetail.Name}
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
|
||||
<View style={{ margin: 10 }}>
|
||||
{this.props.sessionDetail.Enrolled != 0 && this.props.sessionDetail.MaxAttendees != 0 &&
|
||||
<Progress.Bar
|
||||
color={"#000000"}
|
||||
progress={this.props.sessionDetail.Enrolled / this.props.sessionDetail.MaxAttendees}
|
||||
height={10}
|
||||
unfilledColor={"white"}
|
||||
width={210}
|
||||
/>}
|
||||
<Text>
|
||||
{this.props.sessionDetail.Enrolled} / {this.props.sessionDetail.MaxAttendees}
|
||||
</Text>
|
||||
</View>
|
||||
{this.props.sessionDetail != undefined && (
|
||||
<FlatList
|
||||
data={this.props.sessionDetail.Speakers}
|
||||
renderItem={({ item }) => (
|
||||
<View>
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
marginTop: 10
|
||||
}}
|
||||
>
|
||||
<View style={{ width: 100, height: 100, padding: 5 }}>
|
||||
<FitImage
|
||||
source={{
|
||||
uri:
|
||||
"https://tickets.enei.pt/adminpoint/Content/Images/Uploads/Speakers/ffb043cb-3073-421c-a070-5d273b50fc23.jpeg"
|
||||
}}
|
||||
style={{ padding: 5 }}
|
||||
/>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
fontSize: 20,
|
||||
margin: 10
|
||||
}}
|
||||
>
|
||||
{item.Name}
|
||||
</Text>
|
||||
<Text style={{ marginLeft: 10 }}>
|
||||
{item.MoreInfo}
|
||||
</Text>
|
||||
<TouchableOpacity>
|
||||
<Text
|
||||
style={{ color: "#CC1A17", marginLeft: 10 }}
|
||||
>
|
||||
{item.Title}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
color: "#CC1A17",
|
||||
margin: 10,
|
||||
marginBottom: 0,
|
||||
fontSize: 15
|
||||
}}
|
||||
>
|
||||
Descrição do orador:
|
||||
</Text>
|
||||
<Text style={{ margin: 10 }}>{item.Description}</Text>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
|
||||
<View style={styles.block}>
|
||||
<Text
|
||||
style={{ fontSize: 15, color: "#CC1A17", fontWeight: "bold" }}
|
||||
>
|
||||
Descrição da palestra/workshop
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{this.props.sessionDetail.Description}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
{this.renderDescription(info)}
|
||||
</View>
|
||||
<View style={styles.block}>
|
||||
<Text style={{ fontSize: 15, color: "#CC1A17",fontWeight:'bold' }}>Localização</Text>
|
||||
<Divider style={{ backgroundColor: "#000", marginBottom: 10 }} />
|
||||
<Image source={require('../assets/img/campus.png')} style={{width:SCREEN_WIDTH*0.9}}></Image>
|
||||
</View>
|
||||
{
|
||||
this.props.sessionDetail.LocalRoom != undefined && this.props.sessionDetail.LocalCoordinates != undefined &&
|
||||
|
||||
<View style={styles.block}>
|
||||
<Text
|
||||
style={{ fontSize: 15, color: "#CC1A17", fontWeight: "bold" }}
|
||||
>
|
||||
Localização
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000", marginBottom: 10 }} />
|
||||
<Text style={{marginBottom:20}}>{this.props.sessionDetail.LocalRoom}</Text>
|
||||
<Button
|
||||
onPress={() => {
|
||||
|
||||
const scheme = Platform.select({
|
||||
ios: "maps:0,0?q=",
|
||||
android: "geo:0,0?q="
|
||||
});
|
||||
const latLng = this.props.sessionDetail.LocalCoordinates;
|
||||
const label = this.props.sessionDetail.LocalRoom;
|
||||
const url = Platform.select({
|
||||
ios: `${scheme}${label}@${latLng}`,
|
||||
android: `${scheme}${latLng}(${label})`
|
||||
});
|
||||
|
||||
Linking.openURL(url);
|
||||
}}
|
||||
title={"Abrir no Mapa"}
|
||||
color={"#CC1A17"}
|
||||
/>
|
||||
</View>
|
||||
}
|
||||
</ScrollView>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
</View>
|
||||
|
@ -481,7 +470,8 @@ function mapStateToProps(state, props) {
|
|||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
events: state.apiReducer.events,
|
||||
careerPath: state.apiReducer.careerPath
|
||||
careerPath: state.apiReducer.careerPath,
|
||||
sessionDetail: state.apiReducer.sessionDetail
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -28,23 +28,24 @@ import Email from '../components/Email';
|
|||
|
||||
import Separator from '../components/Separator';
|
||||
import Tel from '../components/Telephone';
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
import Icon from "react-native-vector-icons/Ionicons"
|
||||
|
||||
|
||||
|
||||
import Swiper from 'react-native-swiper';
|
||||
|
||||
class editCalendar extends Component {
|
||||
|
||||
static navigationOptions = ({ navigation }) => ({
|
||||
static navigationOptions = ({navigation}) => ({
|
||||
title: 'Editar Calendário',
|
||||
headerTitleStyle : {textAlign: 'center',alignSelf:'center'},
|
||||
headerStyle:{
|
||||
backgroundColor:'white',
|
||||
},
|
||||
});
|
||||
headerTitleStyle: {textAlign: 'center', alignSelf: 'center'},
|
||||
headerStyle: {
|
||||
backgroundColor: 'white',
|
||||
},
|
||||
});
|
||||
|
||||
constructor(props) {
|
||||
|
||||
super(props);
|
||||
|
@ -55,89 +56,88 @@ class editCalendar extends Component {
|
|||
loggedIn: false,
|
||||
onHold: true,
|
||||
user: {},
|
||||
cenas:{Name:'as'},
|
||||
text:'',
|
||||
cenas: {Name: 'as'},
|
||||
text: '',
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
return (
|
||||
<ScrollView>
|
||||
<View styles={styles.header}>
|
||||
<View style={styles.carreerPath}>
|
||||
<View style={styles.carreerPath}>
|
||||
<Text style={styles.carreerPathText}>Carreer Paths</Text>
|
||||
</View>
|
||||
<View style={styles.carreerPathDescription}>
|
||||
<Text >Nesta edição do enei vai ser possível aos participantes ecolherem uma área</Text>
|
||||
|
||||
<Text>Nesta edição do enei vai ser possível aos participantes ecolherem uma área</Text>
|
||||
|
||||
</View>
|
||||
<TouchableOpacity style={{marginRight: 20}} onPress={() => navigation.navigate('Profile')}>
|
||||
<Text>Escolher path</Text>
|
||||
</TouchableOpacity>
|
||||
<Text>Escolher path</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
|
||||
</View>
|
||||
<View>
|
||||
|
||||
</View>
|
||||
|
||||
</View>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
||||
header:{
|
||||
flex:1,
|
||||
height: SCREEN_HEIGHT*0.1,
|
||||
backgroundColor:'red'
|
||||
header: {
|
||||
flex: 1,
|
||||
height: SCREEN_HEIGHT * 0.1,
|
||||
backgroundColor: 'red'
|
||||
},
|
||||
carreerPath:{
|
||||
flex:1,
|
||||
carreerPath: {
|
||||
flex: 1,
|
||||
|
||||
backgroundColor:'#CC1A17',
|
||||
height:SCREEN_HEIGHT*0.1,
|
||||
backgroundColor: '#CC1A17',
|
||||
height: SCREEN_HEIGHT * 0.1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
|
||||
|
||||
},
|
||||
carreerPathText:{
|
||||
fontSize:20,
|
||||
carreerPathText: {
|
||||
fontSize: 20,
|
||||
fontWeight: 'bold',
|
||||
color:'white'
|
||||
|
||||
color: 'white'
|
||||
|
||||
},
|
||||
carreerPathDescription:{
|
||||
padding:10,
|
||||
marginBottom:100
|
||||
},
|
||||
wrapper: {
|
||||
carreerPathDescription: {
|
||||
padding: 10,
|
||||
marginBottom: 100
|
||||
},
|
||||
wrapper: {},
|
||||
slide1: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#9DD6EB',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#9DD6EB',
|
||||
},
|
||||
slide2: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#97CAE5',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#97CAE5',
|
||||
},
|
||||
slide3: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#92BBD9',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#92BBD9',
|
||||
},
|
||||
text: {
|
||||
color: '#fff',
|
||||
fontSize: 30,
|
||||
fontWeight: 'bold',
|
||||
color: '#fff',
|
||||
fontSize: 30,
|
||||
fontWeight: 'bold',
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,460 @@
|
|||
import * as React from "react";
|
||||
import {
|
||||
View,
|
||||
StyleSheet,
|
||||
Dimensions,
|
||||
Image,
|
||||
ScrollView,
|
||||
Text,
|
||||
Button,
|
||||
TouchableOpacity,
|
||||
ImageBackground,
|
||||
ListView,
|
||||
FlatList,
|
||||
ActivityIndicator
|
||||
} from "react-native";
|
||||
|
||||
import moment from "moment";
|
||||
import {Divider, Icon, Avatar} from "react-native-elements";
|
||||
import {TabView, TabBar, SceneMap} from "react-native-tab-view";
|
||||
import {RkButton, RkCard, RkText, RkTheme} from "react-native-ui-kitten";
|
||||
import Timeline from "react-native-timeline-feed";
|
||||
|
||||
import * as Progress from "react-native-progress";
|
||||
|
||||
import NavAbsolute from "../components/Nav";
|
||||
|
||||
import {connect} from "react-redux";
|
||||
|
||||
import {bindActionCreators} from "redux";
|
||||
|
||||
import * as Actions from "../store/actions"; //Import your actionss
|
||||
import Swiper from "react-native-swiper";
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
import FitImage from "react-native-fit-image";
|
||||
|
||||
import MapView, {PROVIDER_GOOGLE} from "react-native-maps";
|
||||
|
||||
const formatObj = obj => {
|
||||
let a = {};
|
||||
|
||||
a.push({});
|
||||
|
||||
return a;
|
||||
};
|
||||
|
||||
class event extends React.Component {
|
||||
static navigationOptions = ({navigation}) => ({
|
||||
header: (
|
||||
<NavAbsolute
|
||||
navigation={navigation}
|
||||
// title={navigation.state.params.info.name}
|
||||
/>
|
||||
)
|
||||
});
|
||||
|
||||
state = {};
|
||||
|
||||
componentDidMount() {
|
||||
|
||||
|
||||
const {navigation} = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
|
||||
|
||||
}
|
||||
|
||||
_update = () => {
|
||||
this.setState({user: this.props.user});
|
||||
|
||||
};
|
||||
|
||||
|
||||
_renderRally = (info) => {
|
||||
console.log(info)
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.leftRow}>
|
||||
<Text style={{
|
||||
margin: 10,
|
||||
marginTop: 0,
|
||||
marginBottom: 10,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17" }}>
|
||||
{info.location.nome}
|
||||
</Text>
|
||||
</View>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{color: "#CC1A17", fontSize: 15}}>
|
||||
{info.hora}
|
||||
</Text>
|
||||
<Text>{info.horas}</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<View style={{margin: 10}}>
|
||||
<Text
|
||||
style={{fontSize: 15, color: "#CC1A17", fontWeight: "bold"}}
|
||||
>
|
||||
Descrição:
|
||||
</Text>
|
||||
<Divider style={{backgroundColor: "#000"}}/>
|
||||
<View style={{marginTop: 10}}>
|
||||
<Text>{info.location.desc}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
_renderEventDetail = (info) => {
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{color: "#CC1A17", fontSize: 15}}>
|
||||
{info.hora}
|
||||
</Text>
|
||||
<Text>{info.horas}</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
margin: 10,
|
||||
marginTop: 0,
|
||||
marginBottom: 10,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17"
|
||||
}}
|
||||
>
|
||||
{info.nome}
|
||||
</Text>
|
||||
<View style={{margin: 10}}>
|
||||
<Text
|
||||
style={{fontSize: 15, color: "#CC1A17", fontWeight: "bold"}}
|
||||
>
|
||||
Descrição:
|
||||
</Text>
|
||||
<Divider style={{backgroundColor: "#000"}}/>
|
||||
<View style={{marginTop: 10}}>
|
||||
<Text>{info.desc}</Text>
|
||||
</View>
|
||||
<Text
|
||||
style={{fontSize: 15, color: "#CC1A17", fontWeight: "bold", marginTop: 10}}
|
||||
>
|
||||
Como posso participar?
|
||||
</Text>
|
||||
<Divider style={{backgroundColor: "#000"}}/>
|
||||
<View style={{marginTop: 10}}>
|
||||
<Text>{info.notas}</Text>
|
||||
</View>
|
||||
<Text
|
||||
style={{fontSize: 15, color: "#CC1A17", fontWeight: "bold", marginTop: 10}}
|
||||
>
|
||||
Qual é o custo de participação?
|
||||
</Text>
|
||||
<Divider style={{backgroundColor: "#000"}}/>
|
||||
<View style={{marginTop: 10}}>
|
||||
<Text>{info.custo}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
_renderContainer = (info, eventType) => {
|
||||
console.log("Estou aqui " + eventType)
|
||||
if (eventType === "rally") {
|
||||
return this._renderRally(info);
|
||||
}
|
||||
else if (eventType === undefined) {
|
||||
return this._renderEventDetail(info);
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.data = [];
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
const {navigation} = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
const eventType = navigation.getParam("type");
|
||||
|
||||
return (
|
||||
<View style={styles.mainViewStyle}>
|
||||
<ScrollView style={styles.scroll}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.coverContainer}>
|
||||
<ImageBackground
|
||||
source={{
|
||||
uri: info.imagem
|
||||
}}
|
||||
style={styles.coverImage}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
{this._renderContainer(info, eventType)}
|
||||
</View>
|
||||
<View style={styles.block}>
|
||||
<Text
|
||||
style={{fontSize: 15, color: "#CC1A17", fontWeight: "bold"}}
|
||||
>
|
||||
Localização
|
||||
</Text>
|
||||
<Divider style={{backgroundColor: "#000", marginBottom: 10}}/>
|
||||
<Text>{info.localizacao}</Text>
|
||||
</View>
|
||||
</ScrollView>
|
||||
<Divider style={{backgroundColor: "black"}}/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
block: {
|
||||
marginTop: 15,
|
||||
|
||||
backgroundColor: "white",
|
||||
padding: 20,
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 2
|
||||
},
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
|
||||
elevation: 3
|
||||
},
|
||||
AttendeeContainer: {
|
||||
flexDirection: "row",
|
||||
height: 55,
|
||||
justifyContent: "center",
|
||||
marginLeft: 10,
|
||||
marginRight: 10
|
||||
},
|
||||
|
||||
centerRow: {
|
||||
alignItems: "center",
|
||||
backgroundColor: "transparent",
|
||||
flex: 3,
|
||||
flexDirection: "column",
|
||||
justifyContent: "center"
|
||||
},
|
||||
|
||||
leftRow: {
|
||||
backgroundColor: "transparent",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-start",
|
||||
alignSelf: "center"
|
||||
},
|
||||
rightRow: {
|
||||
alignItems: "flex-end",
|
||||
backgroundColor: "transparent",
|
||||
flex: 2,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-end",
|
||||
marginRight: 4,
|
||||
alignSelf: "center"
|
||||
},
|
||||
|
||||
icon: {
|
||||
justifyContent: "flex-start",
|
||||
marginTop: 2.8
|
||||
},
|
||||
|
||||
nameAttendee: {
|
||||
alignSelf: "center",
|
||||
fontSize: 20,
|
||||
fontWeight: "400",
|
||||
color: "#000",
|
||||
marginBottom: 10
|
||||
},
|
||||
|
||||
details: {
|
||||
marginTop: 20,
|
||||
flex: 1,
|
||||
alignSelf: "center"
|
||||
},
|
||||
|
||||
infoRow: {
|
||||
margin: 25
|
||||
},
|
||||
|
||||
ramoText: {
|
||||
alignSelf: "flex-start",
|
||||
marginBottom: 5,
|
||||
color: "white",
|
||||
fontSize: 17,
|
||||
fontWeight: "400"
|
||||
},
|
||||
|
||||
timeText: {
|
||||
alignItems: "flex-end",
|
||||
flex: 2,
|
||||
lineHeight: 10,
|
||||
marginRight: 20
|
||||
},
|
||||
|
||||
mainViewStyle: {
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
|
||||
scroll: {
|
||||
backgroundColor: "#eee",
|
||||
flex: 1
|
||||
//marginBottom: 55,
|
||||
},
|
||||
|
||||
header: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 0,
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 2
|
||||
},
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
|
||||
elevation: 3
|
||||
},
|
||||
cardContainer: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
// margin: 20,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 5
|
||||
},
|
||||
|
||||
headerContainer: {
|
||||
flex: 1
|
||||
},
|
||||
|
||||
container: {
|
||||
flex: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
coverContainer: {
|
||||
position: "relative"
|
||||
},
|
||||
coverImage: {
|
||||
height: Dimensions.get("window").width * (2 / 4),
|
||||
width: Dimensions.get("window").width
|
||||
},
|
||||
/*headerContainer: {
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#FFF',
|
||||
},*/
|
||||
|
||||
carreerPathContainer: {
|
||||
backgroundColor: "#CC1A17",
|
||||
height: 50,
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
paddingTop: 15
|
||||
},
|
||||
carreerPathText: {
|
||||
height: 50,
|
||||
color: "white",
|
||||
fontWeight: "bold",
|
||||
fontSize: 20
|
||||
},
|
||||
companyHeader: {
|
||||
backgroundColor: "#dddddd",
|
||||
// height:150,
|
||||
borderRadius: 5,
|
||||
margin: 10,
|
||||
padding: 10
|
||||
},
|
||||
companyTitle: {
|
||||
paddingBottom: 5,
|
||||
fontWeight: "bold",
|
||||
color: "#777777",
|
||||
fontSize: 17
|
||||
|
||||
// padding:20
|
||||
},
|
||||
companyLogo: {
|
||||
borderRadius: 20
|
||||
},
|
||||
|
||||
wrapper: {},
|
||||
company: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
// backgroundColor:'red',
|
||||
color: "black"
|
||||
},
|
||||
|
||||
companyLogoContainer: {
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
width: "60%",
|
||||
// backgroundColor:'white',
|
||||
margin: 20
|
||||
},
|
||||
aboutCompany: {
|
||||
width: SCREEN_WIDTH,
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center"
|
||||
}
|
||||
});
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
careerPath: state.apiReducer.careerPath,
|
||||
sessionDetail: state.apiReducer.sessionDetail
|
||||
};
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(event);
|
|
@ -0,0 +1,497 @@
|
|||
import * as React from "react";
|
||||
import {
|
||||
View,
|
||||
StyleSheet,
|
||||
Dimensions,
|
||||
Image,
|
||||
ScrollView,
|
||||
Text,
|
||||
Button,
|
||||
TouchableOpacity,
|
||||
ImageBackground,
|
||||
ListView,
|
||||
FlatList,
|
||||
ActivityIndicator,
|
||||
Linking,
|
||||
Platform
|
||||
} from "react-native";
|
||||
|
||||
import moment from "moment";
|
||||
import { Divider, Icon, Avatar } from "react-native-elements";
|
||||
import { TabView, TabBar, SceneMap } from "react-native-tab-view";
|
||||
import { RkButton, RkCard, RkText, RkTheme } from "react-native-ui-kitten";
|
||||
import Timeline from "react-native-timeline-feed";
|
||||
|
||||
import * as Progress from "react-native-progress";
|
||||
|
||||
import NavAbsolute from "../components/Nav";
|
||||
|
||||
import { connect } from "react-redux";
|
||||
|
||||
import { bindActionCreators } from "redux";
|
||||
|
||||
import * as Actions from "../store/actions"; //Import your actionss
|
||||
import Swiper from "react-native-swiper";
|
||||
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
|
||||
import FitImage from "react-native-fit-image";
|
||||
|
||||
import MapView, { PROVIDER_GOOGLE } from "react-native-maps";
|
||||
|
||||
const formatObj = obj => {
|
||||
let a = {};
|
||||
|
||||
a.push({});
|
||||
|
||||
return a;
|
||||
};
|
||||
|
||||
class eventDetail extends React.Component {
|
||||
static navigationOptions = ({ navigation }) => ({
|
||||
header: (
|
||||
<NavAbsolute
|
||||
navigation={navigation}
|
||||
/>
|
||||
)
|
||||
});
|
||||
|
||||
state = {};
|
||||
|
||||
openMaps = () => {};
|
||||
componentDidMount() {
|
||||
const { navigation } = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
}
|
||||
|
||||
_update = () => {
|
||||
this.setState({ user: this.props.user });
|
||||
};
|
||||
|
||||
_renderRally = info => {
|
||||
console.log(info);
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.leftRow}>
|
||||
<Text
|
||||
style={{
|
||||
margin: 10,
|
||||
marginTop: 0,
|
||||
marginBottom: 10,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17"
|
||||
}}
|
||||
>
|
||||
{info.location.nome}
|
||||
</Text>
|
||||
</View>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{ color: "#CC1A17", fontSize: 15 }}>
|
||||
{info.hora}
|
||||
</Text>
|
||||
<Text>{info.horas}</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<View style={{ margin: 10 }}>
|
||||
<Text
|
||||
style={{ fontSize: 15, color: "#CC1A17", fontWeight: "bold" }}
|
||||
>
|
||||
Descrição:
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.location.desc}</Text>
|
||||
</View>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 15,
|
||||
color: "#CC1A17",
|
||||
fontWeight: "bold",
|
||||
marginTop: 20
|
||||
}}
|
||||
>
|
||||
Desafio:
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.location.desafio}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
_renderEventDetail = info => {
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
<View style={styles.timeText}>
|
||||
<Text style={{ color: "#CC1A17", fontSize: 15 }}>
|
||||
{info.hora}
|
||||
</Text>
|
||||
<Text>{info.horas}</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View>
|
||||
<Text
|
||||
style={{
|
||||
margin: 10,
|
||||
marginTop: 0,
|
||||
marginBottom: 10,
|
||||
fontSize: 20,
|
||||
color: "#CC1A17"
|
||||
}}
|
||||
>
|
||||
{info.nome}
|
||||
</Text>
|
||||
<View style={{ margin: 10 }}>
|
||||
<Text
|
||||
style={{ fontSize: 15, color: "#CC1A17", fontWeight: "bold" }}
|
||||
>
|
||||
Descrição:
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.desc}</Text>
|
||||
</View>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 15,
|
||||
color: "#CC1A17",
|
||||
fontWeight: "bold",
|
||||
marginTop: 10
|
||||
}}
|
||||
>
|
||||
Como posso participar?
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.notas}</Text>
|
||||
</View>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 15,
|
||||
color: "#CC1A17",
|
||||
fontWeight: "bold",
|
||||
marginTop: 10
|
||||
}}
|
||||
>
|
||||
Qual é o custo de participação?
|
||||
</Text>
|
||||
<Divider style={{ backgroundColor: "#000" }} />
|
||||
<View style={{ marginTop: 10 }}>
|
||||
<Text>{info.custo}</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
_renderContainer = (info, eventType) => {
|
||||
console.log("Estou aqui " + eventType);
|
||||
if (eventType === "rally") {
|
||||
return this._renderRally(info);
|
||||
} else if (eventType === undefined) {
|
||||
return this._renderEventDetail(info);
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.data = [];
|
||||
}
|
||||
|
||||
render() {
|
||||
const { navigation } = this.props;
|
||||
const info = navigation.getParam("info", "error");
|
||||
const eventType = navigation.getParam("type");
|
||||
console.log(info)
|
||||
if(info!= undefined)
|
||||
return (
|
||||
<View style={styles.mainViewStyle}>
|
||||
<ScrollView style={styles.scroll}>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.headerContainer}>
|
||||
<View style={styles.coverContainer}>
|
||||
<ImageBackground
|
||||
source={{
|
||||
uri: info.location.mainPhoto
|
||||
}}
|
||||
style={styles.coverImage}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
{this._renderContainer(info, eventType)}
|
||||
</View>
|
||||
<View>
|
||||
<TouchableOpacity
|
||||
onPress={() => {
|
||||
console.log(info.location.lat)
|
||||
console.log(info.location.long)
|
||||
const scheme = Platform.select({
|
||||
ios: "maps:0,0?q=",
|
||||
android: "geo:0,0?q="
|
||||
});
|
||||
const latLng = `${info.location.lat},${info.location.long}`;
|
||||
const label = info.location.nome;
|
||||
const url = Platform.select({
|
||||
ios: `${scheme}${label}@${latLng}`,
|
||||
android: `${scheme}${latLng}(${label})`
|
||||
});
|
||||
|
||||
Linking.openURL(url);
|
||||
}}
|
||||
>
|
||||
<FitImage
|
||||
source={{
|
||||
uri: info.location.localizacao
|
||||
}}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</ScrollView>
|
||||
<Divider style={{ backgroundColor: "black" }} />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
block: {
|
||||
marginTop: 15,
|
||||
|
||||
backgroundColor: "white",
|
||||
padding: 20,
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 2
|
||||
},
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
|
||||
elevation: 3
|
||||
},
|
||||
AttendeeContainer: {
|
||||
flexDirection: "row",
|
||||
height: 55,
|
||||
justifyContent: "center",
|
||||
marginLeft: 10,
|
||||
marginRight: 10
|
||||
},
|
||||
|
||||
centerRow: {
|
||||
alignItems: "center",
|
||||
backgroundColor: "transparent",
|
||||
flex: 3,
|
||||
flexDirection: "column",
|
||||
justifyContent: "center"
|
||||
},
|
||||
|
||||
leftRow: {
|
||||
backgroundColor: "transparent",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-start",
|
||||
alignSelf: "center"
|
||||
},
|
||||
rightRow: {
|
||||
alignItems: "flex-end",
|
||||
backgroundColor: "transparent",
|
||||
flex: 2,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-end",
|
||||
marginRight: 4,
|
||||
alignSelf: "center"
|
||||
},
|
||||
|
||||
icon: {
|
||||
justifyContent: "flex-start",
|
||||
marginTop: 2.8
|
||||
},
|
||||
|
||||
nameAttendee: {
|
||||
alignSelf: "center",
|
||||
fontSize: 20,
|
||||
fontWeight: "400",
|
||||
color: "#000",
|
||||
marginBottom: 10
|
||||
},
|
||||
|
||||
details: {
|
||||
marginTop: 20,
|
||||
flex: 1,
|
||||
alignSelf: "center"
|
||||
},
|
||||
|
||||
infoRow: {
|
||||
margin: 25
|
||||
},
|
||||
|
||||
ramoText: {
|
||||
alignSelf: "flex-start",
|
||||
marginBottom: 5,
|
||||
color: "white",
|
||||
fontSize: 17,
|
||||
fontWeight: "400"
|
||||
},
|
||||
|
||||
timeText: {
|
||||
alignItems: "flex-end",
|
||||
flex: 2,
|
||||
lineHeight: 10,
|
||||
marginRight: 20
|
||||
},
|
||||
|
||||
mainViewStyle: {
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
|
||||
scroll: {
|
||||
backgroundColor: "#eee",
|
||||
flex: 1
|
||||
//marginBottom: 55,
|
||||
},
|
||||
|
||||
header: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 0,
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 2
|
||||
},
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
|
||||
elevation: 3
|
||||
},
|
||||
cardContainer: {
|
||||
flex: 1,
|
||||
padding: 10,
|
||||
// margin: 20,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 5
|
||||
},
|
||||
|
||||
headerContainer: {
|
||||
flex: 1
|
||||
},
|
||||
|
||||
container: {
|
||||
flex: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
coverContainer: {
|
||||
position: "relative"
|
||||
},
|
||||
coverImage: {
|
||||
height: Dimensions.get("window").width * (2 / 4),
|
||||
width: Dimensions.get("window").width
|
||||
},
|
||||
/*headerContainer: {
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#FFF',
|
||||
},*/
|
||||
|
||||
carreerPathContainer: {
|
||||
backgroundColor: "#CC1A17",
|
||||
height: 50,
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
paddingTop: 15
|
||||
},
|
||||
carreerPathText: {
|
||||
height: 50,
|
||||
color: "white",
|
||||
fontWeight: "bold",
|
||||
fontSize: 20
|
||||
},
|
||||
companyHeader: {
|
||||
backgroundColor: "#dddddd",
|
||||
// height:150,
|
||||
borderRadius: 5,
|
||||
margin: 10,
|
||||
padding: 10
|
||||
},
|
||||
companyTitle: {
|
||||
paddingBottom: 5,
|
||||
fontWeight: "bold",
|
||||
color: "#777777",
|
||||
fontSize: 17
|
||||
|
||||
// padding:20
|
||||
},
|
||||
companyLogo: {
|
||||
borderRadius: 20
|
||||
},
|
||||
|
||||
wrapper: {},
|
||||
company: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
// backgroundColor:'red',
|
||||
color: "black"
|
||||
},
|
||||
|
||||
companyLogoContainer: {
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
width: "60%",
|
||||
// backgroundColor:'white',
|
||||
margin: 20
|
||||
},
|
||||
aboutCompany: {
|
||||
width: SCREEN_WIDTH,
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center"
|
||||
}
|
||||
});
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
careerPath: state.apiReducer.careerPath,
|
||||
sessionDetail: state.apiReducer.sessionDetail
|
||||
};
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(eventDetail);
|
|
@ -1,47 +0,0 @@
|
|||
/*
|
||||
/*
|
||||
/*
|
||||
/*Esta página só está disponivel a 1 hora do rally..
|
||||
*/
|
||||
|
||||
import * as React from "react";
|
||||
import {View, StyleSheet, Dimensions, Text, Button, ScrollView} from "react-native";
|
||||
import {TabView, TabBar, SceneMap} from "react-native-tab-view";
|
||||
|
||||
import * as Actions from "../store/actions";
|
||||
import {connect} from "react-redux";
|
||||
import {bindActionCreators} from "redux";
|
||||
|
||||
export default class rallyTascas extends React.Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<View>
|
||||
|
||||
</View>
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
|
||||
return {
|
||||
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
logged: state.apiReducer.logged,
|
||||
events: state.apiReducer.events
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(rallyTascas);
|
|
@ -1,29 +0,0 @@
|
|||
import React, {Component} from 'react';
|
||||
import {
|
||||
ActivityIndicator,
|
||||
AsyncStorage,
|
||||
Button,
|
||||
StatusBar,
|
||||
StyleSheet,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import {UtilStyles} from '../assets/styles'
|
||||
|
||||
export default class resetPassword extends Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this._bootstrapAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Render Loading
|
||||
render() {
|
||||
return (
|
||||
<View style={UtilStyles.containerLoading}>
|
||||
<Text>Reset Password</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,375 @@
|
|||
/*
|
||||
/*
|
||||
/*
|
||||
/*Esta página só está disponivel a 1 hora do rally..
|
||||
*/
|
||||
|
||||
import * as React from "react";
|
||||
|
||||
import {
|
||||
View,
|
||||
StyleSheet,
|
||||
Dimensions,
|
||||
Text,
|
||||
Button,
|
||||
ScrollView,
|
||||
FlatList,
|
||||
TouchableOpacity,
|
||||
Image,
|
||||
TextInput
|
||||
} from "react-native";
|
||||
import { TabView, TabBar, SceneMap } from "react-native-tab-view";
|
||||
import { Icon } from "react-native-elements";
|
||||
|
||||
import * as Actions from "../store/actions";
|
||||
import { connect } from "react-redux";
|
||||
import { bindActionCreators } from "redux";
|
||||
import FitImage from "react-native-fit-image";
|
||||
import PTRView from "react-native-pull-to-refresh";
|
||||
const SCREEN_WIDTH = Dimensions.get("window").width;
|
||||
const SCREEN_HEIGHT = Dimensions.get("window").height;
|
||||
import IconFA from "react-native-vector-icons/FontAwesome5";
|
||||
class teamDetail extends React.Component {
|
||||
componentDidMount() {
|
||||
/* this.props.getEventLocsVisited(
|
||||
this.props.team.id,
|
||||
this.props.internalToken
|
||||
);*/
|
||||
|
||||
console.log(this.props.locais);
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
nome: this.props.team.nome
|
||||
};
|
||||
}
|
||||
_update = () => {
|
||||
this.props.getEventLocsVisited(this.props.team.id, this.props.internalToken)
|
||||
};
|
||||
_alterTeamName = () => {};
|
||||
|
||||
render() {
|
||||
const { navigate } = this.props.navigation;
|
||||
|
||||
return (
|
||||
<PTRView onRefresh={this._update}>
|
||||
{this.props.team!= undefined &&
|
||||
<ScrollView style={{ backgroundColor: "#eeeeee" }}>
|
||||
<View>
|
||||
<View style={styles.header}>
|
||||
<View
|
||||
style={{
|
||||
backgroundColor: "#CC1A17",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignItems: "center",
|
||||
alignContent: "center"
|
||||
}}
|
||||
>
|
||||
{this.props.user.Code == this.props.team.cap.qRcode && (
|
||||
<View
|
||||
style={{
|
||||
alignItems: "center",
|
||||
alignSelf: "center",
|
||||
width: "100%",
|
||||
flex: 1,
|
||||
flexDirection: "row"
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "80%" }}>
|
||||
<TextInput
|
||||
style={{
|
||||
height: 40,
|
||||
borderColor: "white",
|
||||
borderWidth: 1,
|
||||
color: "white",
|
||||
margin: 10,
|
||||
padding: 10,
|
||||
borderRadius: 3,
|
||||
fontSize: 15,
|
||||
|
||||
}}
|
||||
onChangeText={n => this.setState({ nome: n })}
|
||||
value={this.state.nome}
|
||||
maxLength = {30}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<TouchableOpacity
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
width: "20%",
|
||||
alignContent: "center",
|
||||
alignItems: "center"
|
||||
}}
|
||||
onPress={()=>{
|
||||
this.props.changeTeamName(this.props.internalToken, {
|
||||
TeamID:this.props.team.id,
|
||||
nome:this.state.nome,
|
||||
UserQR:this.props.user.Code,
|
||||
})
|
||||
|
||||
}}
|
||||
>
|
||||
<Text>Guardar</Text>
|
||||
<IconFA name="user-edit" size={22} />
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
)}
|
||||
{this.props.user.Code != this.props.team.cap.qRcode && (
|
||||
<View style={{ width: "100%", padding: 10 }}>
|
||||
<Text
|
||||
style={{
|
||||
fontSize: 22,
|
||||
fontWeight: "bold",
|
||||
color: "white",
|
||||
textAlign: "center",
|
||||
alignSelf: "center"
|
||||
}}
|
||||
>
|
||||
{this.props.team.nome}
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
<View>
|
||||
<Icon
|
||||
name="md-trophy"
|
||||
type="ionicon"
|
||||
color="#CC1A17"
|
||||
style={{
|
||||
alignSelf: "center",
|
||||
alignContent: "center"
|
||||
}}
|
||||
/>
|
||||
<Text style={styles.headerText}>
|
||||
{this.props.team.pontos}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View style={{ paddingBottom: 10 }}>
|
||||
<View style={styles.row}>
|
||||
{this.props.team.membros && (
|
||||
<FlatList
|
||||
data={this.props.team.membros}
|
||||
numColumns={6} // Número de colunas
|
||||
renderItem={({ item }) => (
|
||||
<View style={styles.memberImage}>
|
||||
<Image
|
||||
style={{ width: 50, height: 50 }}
|
||||
source={require("../assets/logo_black.jpg")}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.container}>
|
||||
<View style={{ flex: 1, width: "100%" }}>
|
||||
{this.props.locais && (
|
||||
<FlatList
|
||||
data={this.props.locais}
|
||||
renderItem={({ item }) => (
|
||||
<TouchableOpacity
|
||||
onPress={() =>
|
||||
navigate("eventDetail", { info: item, type: "rally" })
|
||||
}
|
||||
>
|
||||
<View style={{ margin: 10 }}>
|
||||
<View
|
||||
style={{
|
||||
backgroundColor: "white",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
padding: 15
|
||||
}}
|
||||
>
|
||||
{/*Se bar estiver concluido, mostrar backgroundColor verde no container..*/}
|
||||
|
||||
<View style={{ height: 120, width: 120 }}>
|
||||
<FitImage
|
||||
source={{
|
||||
uri: item.location.squarePhoto
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
<View style={{ width: "65%" }}>
|
||||
<Text
|
||||
style={{
|
||||
color: "#CC1A17",
|
||||
fontWeight: "bold",
|
||||
fontSize: 20,
|
||||
marginLeft: 15
|
||||
}}
|
||||
>
|
||||
{item.location.nome}
|
||||
</Text>
|
||||
<Text style={{ fontSize: 12, padding: 15 }}>
|
||||
{item.location.desc}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
{item.complete && (
|
||||
<View
|
||||
style={{
|
||||
backgroundColor: "#CC1A17",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignContent: "center",
|
||||
alignItems: "center",
|
||||
alignSelf: "center",
|
||||
width: "100%",
|
||||
paddingLeft: 15
|
||||
}}
|
||||
>
|
||||
<Text
|
||||
style={{
|
||||
color: "white",
|
||||
margin: 3,
|
||||
textAlign: "center"
|
||||
}}
|
||||
>
|
||||
Done
|
||||
</Text>
|
||||
<IconFA name="check" size={12} color={"white"} />
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</ScrollView>
|
||||
}
|
||||
</PTRView>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
triangleLeft: {
|
||||
width: 0,
|
||||
height: 0,
|
||||
backgroundColor: "#CC1A17",
|
||||
borderStyle: "solid",
|
||||
borderLeftWidth: 25,
|
||||
borderRightWidth: 25,
|
||||
borderBottomWidth: 50,
|
||||
borderLeftColor: "transparent",
|
||||
borderRightColor: "transparent",
|
||||
borderBottomColor: "white",
|
||||
backgroundColor: "#CC1A17",
|
||||
transform: [{ rotate: "90deg" }]
|
||||
},
|
||||
triangleRight: {
|
||||
width: 0,
|
||||
height: 0,
|
||||
backgroundColor: "#CC1A17",
|
||||
borderStyle: "solid",
|
||||
borderLeftWidth: 25,
|
||||
borderRightWidth: 25,
|
||||
borderBottomWidth: 50,
|
||||
borderLeftColor: "transparent",
|
||||
borderRightColor: "transparent",
|
||||
borderBottomColor: "white",
|
||||
backgroundColor: "#CC1A17",
|
||||
transform: [{ rotate: "-90deg" }],
|
||||
alignSelf: "flex-end"
|
||||
},
|
||||
header: {
|
||||
margin: 0,
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
container: {
|
||||
margin: 10,
|
||||
flex: 1,
|
||||
flexGrow: 1,
|
||||
flexDirection: "column"
|
||||
},
|
||||
|
||||
row: {
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
padding: 10,
|
||||
backgroundColor: "white",
|
||||
borderRadius: 0,
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 2
|
||||
},
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 3.84,
|
||||
elevation: 3
|
||||
},
|
||||
|
||||
headerText: {
|
||||
fontSize: 18,
|
||||
color: "#CC1A17",
|
||||
fontWeight: "bold"
|
||||
},
|
||||
|
||||
centerRow: {
|
||||
alignItems: "center",
|
||||
backgroundColor: "transparent",
|
||||
flex: 3,
|
||||
flexDirection: "column",
|
||||
justifyContent: "center"
|
||||
},
|
||||
|
||||
leftRow: {
|
||||
backgroundColor: "transparent",
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-start",
|
||||
alignSelf: "center"
|
||||
},
|
||||
rightRow: {
|
||||
alignItems: "flex-end",
|
||||
backgroundColor: "transparent",
|
||||
flex: 2,
|
||||
flexDirection: "row",
|
||||
justifyContent: "flex-end",
|
||||
marginRight: 4,
|
||||
alignSelf: "center"
|
||||
},
|
||||
|
||||
memberImage: {
|
||||
flex: 1,
|
||||
marginRight: 4,
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
backgroundColor: "transparent"
|
||||
}
|
||||
});
|
||||
|
||||
function mapStateToProps(state, props) {
|
||||
return {
|
||||
token: state.apiReducer.token,
|
||||
user: state.apiReducer.user,
|
||||
team: state.apiReducer.team,
|
||||
internalToken: state.apiReducer.internalToken,
|
||||
eventsInternal: state.apiReducer.eventsInternal,
|
||||
locais: state.apiReducer.locais
|
||||
};
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return bindActionCreators(Actions, dispatch);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(teamDetail);
|
|
@ -1,3 +1,14 @@
|
|||
//MINHA API
|
||||
|
||||
export const GET_TEAM='GET_TEAM'
|
||||
export const GET_INTERNAL_EVENTS ='GET_INTERNAL_EVENTS'
|
||||
export const CREATE_TEAM='CREATE_TEAM'
|
||||
export const DELETE_TEAM='DELETE_TEAM'
|
||||
export const GET_CROMOS='GET_CROMOS'
|
||||
export const GET_LOCS_VISITED= 'GET_LOCS_VISITED'
|
||||
export const SCAN_QR = 'SCAN_QR'
|
||||
export const LOGIN_INTERNAL ='LOGIN_INTERNAL'
|
||||
export const CHANGE_PASSWORD='CHANGE_PASSWORD'
|
||||
|
||||
|
||||
//API BLUETREND
|
||||
|
@ -12,7 +23,7 @@ export const GET_EVENTS='GET_EVENTS'
|
|||
export const UPDATE_USER='UPDATE_USER'
|
||||
export const RESET_PASSWORD='RESET_PASSWORD'
|
||||
export const CHECK_AND_RENEW='CHECK_AND_RENEW'
|
||||
|
||||
export const SESSION_DETAIL='SESSION_DETAIL'
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,18 @@ export {checkUser,
|
|||
waitLogin,
|
||||
removeSession,
|
||||
changePassword,
|
||||
resetPassword
|
||||
resetPassword,
|
||||
getSessionDetails,
|
||||
getUserTeam,
|
||||
addUserTeam,
|
||||
removeUserTeam,
|
||||
getAllEvents,
|
||||
createTeam,
|
||||
deleteTeam,
|
||||
getCromos,
|
||||
getEventLocsVisited,
|
||||
scanQrCode,
|
||||
changeTeamName
|
||||
|
||||
} from "./api"
|
||||
|
||||
|
|
|
@ -18,7 +18,15 @@ import {
|
|||
LOADINGLOGIN,
|
||||
REMOVE_SESSION,
|
||||
UPDATE_USER,
|
||||
|
||||
SESSION_DETAIL,
|
||||
GET_TEAM,
|
||||
GET_INTERNAL_EVENTS,
|
||||
CREATE_TEAM,
|
||||
GET_CROMOS,
|
||||
GET_LOCS_VISITED,
|
||||
SCAN_QR,
|
||||
LOGIN_INTERNAL,
|
||||
CHANGE_PASSWORD
|
||||
} from "../actions/actionTypes"; //Import the actions types constant we defined in our actions
|
||||
|
||||
import { REHYDRATE } from "redux-persist";
|
||||
|
@ -26,18 +34,19 @@ import { REHYDRATE } from "redux-persist";
|
|||
let apiState = {
|
||||
isConnected: false,
|
||||
logged: false,
|
||||
onHold: true,
|
||||
onHold: false,
|
||||
user: {},
|
||||
events: [],
|
||||
showAlert: true,
|
||||
failedAttempt: false,
|
||||
token:'',
|
||||
userDetails: {
|
||||
username: "",
|
||||
password: "",
|
||||
token: {
|
||||
expirationDateToken: 0,
|
||||
access_token: "",
|
||||
refresh_token:""
|
||||
refresh_token: ""
|
||||
}
|
||||
},
|
||||
calendar: {},
|
||||
|
@ -45,15 +54,21 @@ let apiState = {
|
|||
sessions: {},
|
||||
Blocks: {},
|
||||
onHoldBlocks: true,
|
||||
careerPath: { name: "Sem Career Path", color: "#eeeeee" },
|
||||
careerPath: { name: "Sem Career Path", color: "#eeeeee" , code:''},
|
||||
a: {},
|
||||
b: {},
|
||||
c: {},
|
||||
d: {},
|
||||
loadingLogin: false,
|
||||
alimentacao:[],
|
||||
acesso:[],
|
||||
alojamento:[]
|
||||
alimentacao: [],
|
||||
acesso: [],
|
||||
alojamento: [],
|
||||
sessionDetail:{},
|
||||
team:undefined,
|
||||
internalToken:"",
|
||||
eventsInternal:[],
|
||||
cromos:[],
|
||||
locais:[],
|
||||
};
|
||||
|
||||
const apiReducer = (state = apiState, action) => {
|
||||
|
@ -65,31 +80,21 @@ const apiReducer = (state = apiState, action) => {
|
|||
|
||||
var expirationDateTokenA = 0;
|
||||
var access_tokenA = "";
|
||||
var refresh_tokenA= "puta";
|
||||
var refresh_tokenA = "puta";
|
||||
|
||||
if (action.payload.apiReducer.token != undefined) {
|
||||
if (
|
||||
action.payload.apiReducer.token.expirationDateToken !=
|
||||
undefined
|
||||
action.payload.apiReducer.token.expirationDateToken != undefined
|
||||
) {
|
||||
expirationDateTokenA =
|
||||
action.payload.apiReducer.token.expirationDateToken;
|
||||
}
|
||||
|
||||
if (
|
||||
action.payload.apiReducer.token.access_token !=
|
||||
undefined
|
||||
) {
|
||||
access_tokenA =
|
||||
action.payload.apiReducer.token.access_token;
|
||||
if (action.payload.apiReducer.token.access_token != undefined) {
|
||||
access_tokenA = action.payload.apiReducer.token.access_token;
|
||||
}
|
||||
if (
|
||||
action.payload.apiReducer.token.refresh_token !=
|
||||
undefined
|
||||
) {
|
||||
|
||||
refresh_tokenA =
|
||||
action.payload.apiReducer.token.refresh_token;
|
||||
if (action.payload.apiReducer.token.refresh_token != undefined) {
|
||||
refresh_tokenA = action.payload.apiReducer.token.refresh_token;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,26 +107,61 @@ const apiReducer = (state = apiState, action) => {
|
|||
token: {
|
||||
expirationDateToken: expirationDateTokenA,
|
||||
access_token: access_tokenA,
|
||||
refresh_token:refresh_tokenA,
|
||||
refresh_token: refresh_tokenA
|
||||
},
|
||||
username: action.payload.apiReducer.userDetails.username,
|
||||
password: action.payload.apiReducer.userDetails.password
|
||||
},
|
||||
token:action.payload.apiReducer.token
|
||||
token: action.payload.apiReducer.token,
|
||||
team: action.payload.apiReducer.team,
|
||||
eventsInternal: action.payload.apiReducer.eventsInternal,
|
||||
alimentacao: action.payload.apiReducer.alimentacao,
|
||||
acesso: action.payload.apiReducer.acesso,
|
||||
alojamento: action.payload.apiReducer.alojamento,
|
||||
internalToken:"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJjZW5hIiwicm9sZSI6IkFkbWluIiwibmJmIjoxNTUyODcwODcwLCJleHAiOjE1NTU0NTkyNzAsImlhdCI6MTU1Mjg3MDg3MH0.wkBk-CUDMCaU-K9jI0pTRJ794IGCl-C9md39dMfHqa5zTf-gNpD76xEYea3PhIbW2dnUVgo0m1fxR1sW7k9LMg",
|
||||
cromos: action.payload.apiReducer.cromos,
|
||||
careerPath: action.payload.apiReducer.careerPath,
|
||||
locais: action.payload.apiReducer.locais,
|
||||
Blocks: action.payload.apiReducer.Blocks
|
||||
};
|
||||
}
|
||||
|
||||
case GET_CROMOS:
|
||||
return Object.assign({}, state, {
|
||||
cromos: action.cromos
|
||||
});
|
||||
|
||||
case LOGIN_INTERNAL:
|
||||
return Object.assign({}, state, {
|
||||
internalToken: action.internalToken
|
||||
});
|
||||
case GET_LOCS_VISITED:
|
||||
return Object.assign({}, state, {
|
||||
locais: action.locais
|
||||
});
|
||||
|
||||
case CHANGE_PASSWORD:
|
||||
return Object.assign({}, state, {
|
||||
onHold: false
|
||||
});
|
||||
case "CHANGE_CONNECTION_STATUS":
|
||||
return Object.assign({}, state, {
|
||||
isConnected: action.isConnected
|
||||
});
|
||||
|
||||
case SESSION_DETAIL:
|
||||
state = Object.assign({}, state, {
|
||||
token: action.token,
|
||||
sessionDetail: action.sessionDetail
|
||||
});
|
||||
return state;
|
||||
|
||||
case UPDATE_USER:
|
||||
state = Object.assign({}, state, { user:action.user});
|
||||
return state
|
||||
state = Object.assign({}, state, { user: action.user , toke: action.token, onHold:false});
|
||||
return state;
|
||||
case LOADINGLOGIN:
|
||||
state = Object.assign({}, state, { loadingLogin: true });
|
||||
|
||||
return state;
|
||||
case HOLD:
|
||||
state = Object.assign({}, state, { onHold: true });
|
||||
return state;
|
||||
|
@ -132,25 +172,32 @@ const apiReducer = (state = apiState, action) => {
|
|||
//token:action.token,
|
||||
failedAttempt: action.failedAttempt,
|
||||
user: action.user,
|
||||
userDetails: {
|
||||
token: action.token,
|
||||
username: action.userDetails.username,
|
||||
password: action.userDetails.password
|
||||
},
|
||||
loadingLogin: false,
|
||||
onHold: action.onHold,
|
||||
token:action.token
|
||||
onHold: false,
|
||||
token: action.token
|
||||
});
|
||||
|
||||
return state;
|
||||
|
||||
case CHECK_USER:
|
||||
case GET_TEAM:
|
||||
state = Object.assign({}, state, {
|
||||
|
||||
|
||||
team: action.team
|
||||
});
|
||||
case GET_INTERNAL_EVENTS:
|
||||
return Object.assign({}, state, {
|
||||
eventsInternal: action.eventsInternal
|
||||
});
|
||||
|
||||
return state;
|
||||
|
||||
case CHECK_USER:
|
||||
state = Object.assign({}, state, {
|
||||
logged: action.logged,
|
||||
onHold: action.onHold,
|
||||
// userDetails: u,
|
||||
token:action.token
|
||||
onHold: false,
|
||||
// userDetails: u,
|
||||
token: action.token
|
||||
});
|
||||
|
||||
return state;
|
||||
|
@ -159,25 +206,25 @@ const apiReducer = (state = apiState, action) => {
|
|||
state = Object.assign({}, state, {
|
||||
user: {},
|
||||
userDetails: {},
|
||||
token:{},
|
||||
token: {},
|
||||
logged: false
|
||||
});
|
||||
|
||||
return state;
|
||||
|
||||
case USER_INFO:
|
||||
|
||||
state = Object.assign({}, state, {
|
||||
user: action.user,
|
||||
loggedIn: action.loggedIn,
|
||||
onHold: action.onHold,
|
||||
token: action.token
|
||||
|
||||
});
|
||||
|
||||
return state;
|
||||
|
||||
case GET_EVENTS:
|
||||
console.log("aaaaaaqqquii")
|
||||
console.log(action)
|
||||
state = Object.assign({}, state, {
|
||||
events: action.events,
|
||||
a: action.day1,
|
||||
|
@ -186,8 +233,7 @@ const apiReducer = (state = apiState, action) => {
|
|||
d: action.day4,
|
||||
alimentacao: action.alimentacao,
|
||||
alojamento: action.alojamento,
|
||||
acesso:action.acesso
|
||||
|
||||
acesso: action.acesso
|
||||
});
|
||||
|
||||
return state;
|
||||
|
@ -198,7 +244,8 @@ const apiReducer = (state = apiState, action) => {
|
|||
Blocks: action.Blocks,
|
||||
careerPath: action.careerPath,
|
||||
changingGuest: action.changingGuest,
|
||||
user: action.user
|
||||
user: action.user,
|
||||
token: action.token
|
||||
});
|
||||
return state;
|
||||
|
||||
|
@ -220,30 +267,29 @@ const apiReducer = (state = apiState, action) => {
|
|||
return state;
|
||||
|
||||
case SIGN_SESSION:
|
||||
|
||||
if(action.sessions==undefined || action.Blocks==undefined || action.user==undefined){
|
||||
if (
|
||||
action.sessions == undefined ||
|
||||
action.Blocks == undefined ||
|
||||
action.user == undefined
|
||||
) {
|
||||
state = Object.assign({}, state, {
|
||||
|
||||
changingGuest: false
|
||||
});
|
||||
} else {
|
||||
state = Object.assign({}, state, {
|
||||
sessions: action.sessions,
|
||||
Blocks: action.Blocks,
|
||||
careerPath: action.careerPath,
|
||||
changingGuest: false,
|
||||
|
||||
user: action.user,
|
||||
a: action.day1,
|
||||
b: action.day2,
|
||||
c: action.day3,
|
||||
d: action.day4,
|
||||
token: action.token
|
||||
});
|
||||
}
|
||||
else{
|
||||
|
||||
state = Object.assign({}, state, {
|
||||
sessions: action.sessions,
|
||||
Blocks: action.Blocks,
|
||||
careerPath: action.careerPath,
|
||||
changingGuest: false,
|
||||
user: action.user,
|
||||
a:action.day1,
|
||||
b:action.day2,
|
||||
c:action.day3,
|
||||
d:action.day4
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
return state;
|
||||
|
||||
case SESSION_BLOCKS:
|
||||
|
@ -258,7 +304,7 @@ const apiReducer = (state = apiState, action) => {
|
|||
var c = {
|
||||
guests: action.guests
|
||||
};
|
||||
state = Object.assign({}, state, { calendar: c });
|
||||
state = Object.assign({}, state, { calendar: c, token: action.token });
|
||||
|
||||
return state;
|
||||
|
||||
|
@ -267,7 +313,8 @@ const apiReducer = (state = apiState, action) => {
|
|||
changingGuest: false,
|
||||
sessions: action.sessions,
|
||||
Blocks: action.Blocks,
|
||||
careerPath: action.careerPath
|
||||
careerPath: action.careerPath,
|
||||
token: action.token
|
||||
});
|
||||
return state;
|
||||
|
||||
|
@ -278,15 +325,17 @@ const apiReducer = (state = apiState, action) => {
|
|||
case TIMERWAIT_CHANGE:
|
||||
state = Object.assign({}, state, { Blocks: true });
|
||||
return state;
|
||||
|
||||
case GET_SESSIONS:
|
||||
state = Object.assign({}, state, {
|
||||
sessions: action.sessions,
|
||||
Blocks: action.Blocks,
|
||||
careerPath: action.careerPath
|
||||
careerPath: action.careerPath,
|
||||
token: action.token
|
||||
});
|
||||
return state;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
||||
export default apiReducer;
|
||||
export default apiReducer;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
|
||||
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
|
||||
|
@ -35,9 +36,11 @@
|
|||
2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
|
||||
2DCD954D1E0B4F2C00145EB5 /* appTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* appTests.m */; };
|
||||
2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
|
||||
4EBB88037B054A508BF35245 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F42241E0235464C91B24049 /* libRNDeviceInfo.a */; };
|
||||
514DB1DF2E3B452F9EF272E3 /* libRNVectorIcons-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 95B0A42B6CD8441E904E6EB9 /* libRNVectorIcons-tvOS.a */; };
|
||||
69E1B84AE0DF486CB1B1D226 /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C00CE8A4E3B747F9816B91CF /* libBVLinearGradient.a */; };
|
||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
||||
A52E07192CD249F7B10FDA66 /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C0906CC582484A7393F9B1F6 /* libAirMaps.a */; };
|
||||
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
|
||||
BE104176D74E47E9A369B15A /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0A5A258CBE4EEFAD3C358E /* libRNVectorIcons.a */; };
|
||||
BE302B6D221B7875005626CF /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE302B6C221B7860005626CF /* libRNCamera.a */; };
|
||||
|
@ -58,9 +61,7 @@
|
|||
BE5EAB86221B7D5400E92E5B /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE5EAB77221B7D5400E92E5B /* Zocial.ttf */; };
|
||||
BE5EAC3A221B83CF00E92E5B /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE302B75221B7C3B005626CF /* Ionicons.ttf */; };
|
||||
BE5EAC41221B889900E92E5B /* libReactNativePermissions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE5EAC40221B888C00E92E5B /* libReactNativePermissions.a */; };
|
||||
4EBB88037B054A508BF35245 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F42241E0235464C91B24049 /* libRNDeviceInfo.a */; };
|
||||
E677346A94D54E90817979B0 /* libRNDeviceInfo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */; };
|
||||
A52E07192CD249F7B10FDA66 /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C0906CC582484A7393F9B1F6 /* libAirMaps.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
|
@ -386,6 +387,27 @@
|
|||
remoteGlobalIDString = 9D23B34F1C767B80008B4819;
|
||||
remoteInfo = ReactNativePermissions;
|
||||
};
|
||||
BE7C0E9A223D9A43009CAF95 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = DA5891D81BA9A9FC002B4DB2;
|
||||
remoteInfo = RNDeviceInfo;
|
||||
};
|
||||
BE7C0E9C223D9A43009CAF95 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E72EC1401F7ABB5A0001BC90;
|
||||
remoteInfo = "RNDeviceInfo-tvOS";
|
||||
};
|
||||
BE7C0EA1223D9A43009CAF95 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A97F1617782E42EC83467F41 /* AirMaps.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 11FA5C511C4A1296003AC2EE;
|
||||
remoteInfo = AirMaps;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
|
@ -398,6 +420,7 @@
|
|||
00E356EE1AD99517003FC87E /* appTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = appTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* appTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = appTests.m; sourceTree = "<group>"; };
|
||||
0F42241E0235464C91B24049 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDeviceInfo.a; sourceTree = "<group>"; };
|
||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
||||
13B07F961A680F5B00A75B9A /* app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = app.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
@ -412,11 +435,14 @@
|
|||
2D02E47B1E0B4A5D006451C7 /* app-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "app-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2D02E4901E0B4A5D006451C7 /* app-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "app-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNDeviceInfo-tvOS.a"; sourceTree = "<group>"; };
|
||||
5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNDeviceInfo.xcodeproj; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = "<group>"; };
|
||||
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
|
||||
664970B9D10A41A18B44727F /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
|
||||
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
|
||||
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
|
||||
95B0A42B6CD8441E904E6EB9 /* libRNVectorIcons-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNVectorIcons-tvOS.a"; sourceTree = "<group>"; };
|
||||
A97F1617782E42EC83467F41 /* AirMaps.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = AirMaps.xcodeproj; path = "../node_modules/react-native-maps/lib/ios/AirMaps.xcodeproj"; sourceTree = "<group>"; };
|
||||
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
|
||||
BE302B67221B7860005626CF /* RNCamera.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = "<group>"; };
|
||||
BE302B6E221B7AC7005626CF /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = "<group>"; };
|
||||
|
@ -437,12 +463,8 @@
|
|||
BE5EAB77221B7D5400E92E5B /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
|
||||
BE5EAC3B221B888C00E92E5B /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = "<group>"; };
|
||||
C00CE8A4E3B747F9816B91CF /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = "<group>"; };
|
||||
C0906CC582484A7393F9B1F6 /* libAirMaps.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libAirMaps.a; sourceTree = "<group>"; };
|
||||
EB0A5A258CBE4EEFAD3C358E /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
|
||||
5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; name = "RNDeviceInfo.xcodeproj"; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
|
||||
0F42241E0235464C91B24049 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; name = "libRNDeviceInfo.a"; path = "libRNDeviceInfo.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
|
||||
3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */ = {isa = PBXFileReference; name = "libRNDeviceInfo-tvOS.a"; path = "libRNDeviceInfo-tvOS.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
|
||||
A97F1617782E42EC83467F41 /* AirMaps.xcodeproj */ = {isa = PBXFileReference; name = "AirMaps.xcodeproj"; path = "../node_modules/react-native-maps/lib/ios/AirMaps.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
|
||||
C0906CC582484A7393F9B1F6 /* libAirMaps.a */ = {isa = PBXFileReference; name = "libAirMaps.a"; path = "libAirMaps.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
@ -765,6 +787,9 @@
|
|||
EB0A5A258CBE4EEFAD3C358E /* libRNVectorIcons.a */,
|
||||
95B0A42B6CD8441E904E6EB9 /* libRNVectorIcons-tvOS.a */,
|
||||
C00CE8A4E3B747F9816B91CF /* libBVLinearGradient.a */,
|
||||
0F42241E0235464C91B24049 /* libRNDeviceInfo.a */,
|
||||
C0906CC582484A7393F9B1F6 /* libAirMaps.a */,
|
||||
3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */,
|
||||
);
|
||||
name = "Recovered References";
|
||||
sourceTree = "<group>";
|
||||
|
@ -795,6 +820,23 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BE7C0E96223D9A42009CAF95 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BE7C0E9B223D9A43009CAF95 /* libRNDeviceInfo.a */,
|
||||
BE7C0E9D223D9A43009CAF95 /* libRNDeviceInfo-tvOS.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BE7C0E9E223D9A43009CAF95 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BE7C0EA2223D9A43009CAF95 /* libAirMaps.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
|
@ -881,6 +923,7 @@
|
|||
TargetAttributes = {
|
||||
00E356ED1AD99517003FC87E = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
DevelopmentTeam = HLA62A6826;
|
||||
TestTargetID = 13B07F861A680F5B00A75B9A;
|
||||
};
|
||||
13B07F861A680F5B00A75B9A = {
|
||||
|
@ -888,6 +931,7 @@
|
|||
};
|
||||
2D02E47A1E0B4A5D006451C7 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
DevelopmentTeam = HLA62A6826;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
2D02E48F1E0B4A5D006451C7 = {
|
||||
|
@ -902,6 +946,7 @@
|
|||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
|
@ -909,6 +954,10 @@
|
|||
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = BE7C0E9E223D9A43009CAF95 /* Products */;
|
||||
ProjectRef = A97F1617782E42EC83467F41 /* AirMaps.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = BE5EAC32221B835A00E92E5B /* Products */;
|
||||
ProjectRef = 1908F5E093844AC5A143E888 /* BVLinearGradient.xcodeproj */;
|
||||
|
@ -969,6 +1018,10 @@
|
|||
ProductGroup = BE302B68221B7860005626CF /* Products */;
|
||||
ProjectRef = BE302B67221B7860005626CF /* RNCamera.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = BE7C0E96223D9A42009CAF95 /* Products */;
|
||||
ProjectRef = 5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = BE302B6F221B7AC7005626CF /* Products */;
|
||||
ProjectRef = BE302B6E221B7AC7005626CF /* RNGestureHandler.xcodeproj */;
|
||||
|
@ -1297,6 +1350,27 @@
|
|||
remoteRef = BE5EAC3F221B888C00E92E5B /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
BE7C0E9B223D9A43009CAF95 /* libRNDeviceInfo.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNDeviceInfo.a;
|
||||
remoteRef = BE7C0E9A223D9A43009CAF95 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
BE7C0E9D223D9A43009CAF95 /* libRNDeviceInfo-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libRNDeviceInfo-tvOS.a";
|
||||
remoteRef = BE7C0E9C223D9A43009CAF95 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
BE7C0EA2223D9A43009CAF95 /* libAirMaps.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libAirMaps.a;
|
||||
remoteRef = BE7C0EA1223D9A43009CAF95 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
|
@ -1446,6 +1520,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
DEVELOPMENT_TEAM = HLA62A6826;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
|
@ -1455,7 +1530,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = appTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
|
@ -1484,12 +1559,13 @@
|
|||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEVELOPMENT_TEAM = HLA62A6826;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = appTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
|
@ -1525,7 +1601,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = app/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
|
@ -1551,7 +1627,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = app/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
|
@ -1576,6 +1652,7 @@
|
|||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = HLA62A6826;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
|
@ -1583,7 +1660,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = "app-tvOS/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
|
@ -1619,13 +1696,14 @@
|
|||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = HLA62A6826;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = "app-tvOS/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
|
@ -1666,7 +1744,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = "app-tvOSTests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
|
@ -1707,7 +1785,7 @@
|
|||
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
|
||||
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
|
||||
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
|
||||
"$(SRCROOT)\..\node_modules\react-native-maps\lib\ios/**",
|
||||
"$(SRCROOT)..\node_modules\neact-native-mapslibios/**",
|
||||
);
|
||||
INFOPLIST_FILE = "app-tvOSTests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina6_1" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
|
@ -12,20 +15,20 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Henrique Dias" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="app" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="ENEI 2019" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
|
||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
||||
|
|
|
@ -1,48 +1,57 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ios-marketing",
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "ItunesArtwork@2x.png",
|
||||
"scale" : "1x"
|
||||
}
|
||||
],
|
||||
|
|
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 40 KiB |
|
@ -2,20 +2,8 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string></string>
|
||||
<string>FontAwesome5_Solid.ttf</string>
|
||||
<string>FontAwesome5_Regular.ttf</string>
|
||||
<string>FontAwesome5_Brands.ttf</string>
|
||||
<string>FontAwesome.ttf</string>
|
||||
<string>Foundation.ttf</string>
|
||||
<string>Ionicons.ttf</string>
|
||||
</array>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string></string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>app</string>
|
||||
<string>ENEI 2019</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
@ -27,11 +15,13 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>1.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<string>12</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string></string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
|
@ -47,21 +37,47 @@
|
|||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSAppleMusicUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSBluetoothPeripheralUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSCalendarsUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>A camera é usada para ler os QR codes presentes no evento. Facilita o uso da aplicação.</string>
|
||||
<key>NSLocationAlwaysUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string></string>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSMotionUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>NSSpeechRecognitionUsageDescription</key>
|
||||
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>MaterialIcons.ttf</string>
|
||||
<string>FontAwesome5_Solid.ttf</string>
|
||||
<string>FontAwesome5_Regular.ttf</string>
|
||||
<string>FontAwesome5_Brands.ttf</string>
|
||||
<string>FontAwesome.ttf</string>
|
||||
<string>Foundation.ttf</string>
|
||||
<string>Ionicons.ttf</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>$(PRODUCT_NAME) camera use</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
|
|
|
@ -2958,7 +2958,7 @@
|
|||
"integrity": "sha512-xo8wZ9/4F3P1xN9nKFSJM3Gb2m0p05aRncjgFF+jxM5XfvKkUrzW0a6FYOY/h/r2r1wyQI7OTBPTiTH/GxuwgA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.1.2",
|
||||
"@expo/vector-icons": "github:expo/vector-icons#d0fb774a001b047d223cfa5e9537220b20591efd",
|
||||
"@expo/vector-icons": "github:expo/vector-icons#expo-font-fix",
|
||||
"@expo/websql": "^1.0.1",
|
||||
"@types/fbemitter": "^2.0.32",
|
||||
"@types/invariant": "^2.2.29",
|
||||
|
@ -3020,7 +3020,7 @@
|
|||
"qs": "^6.5.0",
|
||||
"react-native-branch": "2.2.5",
|
||||
"react-native-gesture-handler": "~1.0.14",
|
||||
"react-native-maps": "github:expo/react-native-maps#e6f98ff7272e5d0a7fe974a41f28593af2d77bb2",
|
||||
"react-native-maps": "github:expo/react-native-maps#v0.22.1-exp.0",
|
||||
"react-native-reanimated": "1.0.0-alpha.11",
|
||||
"react-native-screens": "1.0.0-alpha.22",
|
||||
"react-native-svg": "8.0.10",
|
||||
|
@ -3746,7 +3746,8 @@
|
|||
},
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
|
@ -3764,11 +3765,13 @@
|
|||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
|
@ -3781,15 +3784,18 @@
|
|||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
|
@ -3892,7 +3898,8 @@
|
|||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
|
@ -3902,6 +3909,7 @@
|
|||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
|
@ -3914,17 +3922,20 @@
|
|||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"minipass": {
|
||||
"version": "2.2.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.1",
|
||||
"yallist": "^3.0.0"
|
||||
|
@ -3941,6 +3952,7 @@
|
|||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
|
@ -4013,7 +4025,8 @@
|
|||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
|
@ -4023,6 +4036,7 @@
|
|||
"once": {
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
|
@ -4098,7 +4112,8 @@
|
|||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.1",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
|
@ -4128,6 +4143,7 @@
|
|||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
|
@ -4145,6 +4161,7 @@
|
|||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
|
@ -4183,11 +4200,13 @@
|
|||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.2",
|
||||
"bundled": true
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -7942,6 +7961,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
|
||||
"react-native-image-overlay": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-image-overlay/-/react-native-image-overlay-0.1.2.tgz",
|
||||
|
@ -7950,6 +7970,7 @@
|
|||
"prop-types": "^15.6.1"
|
||||
}
|
||||
},
|
||||
|
||||
"react-native-ionicons": {
|
||||
"version": "4.5.5",
|
||||
"resolved": "https://registry.npmjs.org/react-native-ionicons/-/react-native-ionicons-4.5.5.tgz",
|
||||
|
@ -8170,6 +8191,14 @@
|
|||
"prop-types": "^15.5.10"
|
||||
}
|
||||
},
|
||||
"react-native-switch": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-switch/-/react-native-switch-1.5.0.tgz",
|
||||
"integrity": "sha1-pcjnL4fe9knRyd4CfFrifiA36kA=",
|
||||
"requires": {
|
||||
"prop-types": "^15.6.0"
|
||||
}
|
||||
},
|
||||
"react-native-tab-view": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-1.3.1.tgz",
|
||||
|
@ -9825,6 +9854,14 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"toggle-switch-react-native": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/toggle-switch-react-native/-/toggle-switch-react-native-2.0.2.tgz",
|
||||
"integrity": "sha512-Q7bGEkcPgFsLIa9Io/ZSXA4LIvIxBqothaiUU6b9ay8XXQoKqsgvoPehLVYBvfpnQOmyfZ5NHOdOKiV8ewI6fQ==",
|
||||
"requires": {
|
||||
"prop-types": "^15.5.7"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
|
|
|
@ -27,7 +27,9 @@
|
|||
"react-native-elements": "^1.0.0",
|
||||
"react-native-fit-image": "^1.5.4",
|
||||
"react-native-gesture-handler": "^1.0.15",
|
||||
|
||||
"react-native-image-overlay": "^0.1.2",
|
||||
|
||||
"react-native-ionicons": "^4.5.5",
|
||||
"react-native-linear-gradient": "^2.5.3",
|
||||
"react-native-loader": "^1.2.1",
|
||||
|
@ -44,6 +46,7 @@
|
|||
"react-native-qrcode-scanner": "^1.1.2",
|
||||
"react-native-shadow": "^1.2.2",
|
||||
"react-native-swiper": "^1.5.14",
|
||||
"react-native-switch": "^1.5.0",
|
||||
"react-native-timeline-feed": "^1.0.1",
|
||||
"react-native-timeline-listview": "^0.2.3",
|
||||
"react-native-ui-kitten": "^3.1.2",
|
||||
|
@ -54,7 +57,8 @@
|
|||
"redux": "^4.0.1",
|
||||
"redux-logger": "^3.0.6",
|
||||
"redux-persist": "^5.10.0",
|
||||
"redux-thunk": "^2.3.0"
|
||||
"redux-thunk": "^2.3.0",
|
||||
"toggle-switch-react-native": "^2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-jest": "23.6.0",
|
||||
|
|
227
App/yarn.lock
|
@ -1032,6 +1032,11 @@ async-limiter@~1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
|
||||
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
|
||||
|
||||
async@0.2.x, async@~0.2.9:
|
||||
version "0.2.10"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
|
||||
integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
|
||||
|
||||
async@^2.1.4, async@^2.4.0, async@^2.5.0:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
|
||||
|
@ -1622,6 +1627,11 @@ color@^3.1.0:
|
|||
color-convert "^1.9.1"
|
||||
color-string "^1.5.2"
|
||||
|
||||
colors@0.6.x:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
|
||||
integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=
|
||||
|
||||
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
|
||||
|
@ -1791,6 +1801,11 @@ cssstyle@^1.0.0:
|
|||
dependencies:
|
||||
cssom "0.3.x"
|
||||
|
||||
cycle@1.0.x:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
|
||||
integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI=
|
||||
|
||||
dashdash@^1.12.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||
|
@ -1848,6 +1863,11 @@ deep-diff@^0.3.5:
|
|||
resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
|
||||
integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=
|
||||
|
||||
deep-equal@*:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
|
||||
integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
|
||||
|
||||
deep-extend@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||
|
@ -1966,6 +1986,11 @@ ee-first@1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
email-validator@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed"
|
||||
integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==
|
||||
|
||||
emojis-list@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
||||
|
@ -2589,6 +2614,11 @@ extsprintf@^1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||
|
||||
eyes@0.1.x:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
|
||||
integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=
|
||||
|
||||
fancy-log@^1.3.2:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
|
||||
|
@ -3093,6 +3123,11 @@ http-signature@~1.2.0:
|
|||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
i@0.3.x:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d"
|
||||
integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=
|
||||
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
|
@ -3446,7 +3481,7 @@ isomorphic-fetch@^2.1.1:
|
|||
node-fetch "^1.0.1"
|
||||
whatwg-fetch ">=0.10.0"
|
||||
|
||||
isstream@~0.1.2:
|
||||
isstream@0.1.x, isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||
|
@ -4679,7 +4714,7 @@ mixin-deep@^1.2.0:
|
|||
for-in "^1.0.2"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
mkdirp@^0.5.0, mkdirp@^0.5.1:
|
||||
mkdirp@0.x.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||
|
@ -4724,6 +4759,11 @@ mute-stream@0.0.7:
|
|||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
||||
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
|
||||
|
||||
mute-stream@~0.0.4:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
nan@^2.9.2:
|
||||
version "2.12.1"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
|
||||
|
@ -4751,6 +4791,11 @@ natural-compare@^1.4.0:
|
|||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
ncp@0.4.x:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574"
|
||||
integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=
|
||||
|
||||
needle@^2.2.1:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
|
||||
|
@ -5220,6 +5265,16 @@ pkg-up@^2.0.0:
|
|||
dependencies:
|
||||
find-up "^2.1.0"
|
||||
|
||||
pkginfo@0.3.x:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21"
|
||||
integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=
|
||||
|
||||
pkginfo@0.x.x:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
|
||||
integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
|
||||
|
||||
plist@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b"
|
||||
|
@ -5309,6 +5364,17 @@ promise@^7.1.1:
|
|||
dependencies:
|
||||
asap "~2.0.3"
|
||||
|
||||
prompt@^0.2.14:
|
||||
version "0.2.14"
|
||||
resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc"
|
||||
integrity sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=
|
||||
dependencies:
|
||||
pkginfo "0.x.x"
|
||||
read "1.0.x"
|
||||
revalidator "0.1.x"
|
||||
utile "0.2.x"
|
||||
winston "0.8.x"
|
||||
|
||||
prompts@^0.1.9:
|
||||
version "0.1.14"
|
||||
resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
|
||||
|
@ -5317,7 +5383,7 @@ prompts@^0.1.9:
|
|||
kleur "^2.0.1"
|
||||
sisteransi "^0.1.1"
|
||||
|
||||
prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||
|
@ -5445,6 +5511,13 @@ react-native-app-intro-slider@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/react-native-app-intro-slider/-/react-native-app-intro-slider-1.0.1.tgz#712bf3dc1d66b3432bf4092971db4dfc01b916bd"
|
||||
integrity sha512-5Gzg5FG2uP/RHkSDFB5+2df4vQ2FpyUJ5PGYd23lLEISsEOJe0Zredh1hHMJj+fB5D9B7ZoL0IlR+SNn8iFxHg==
|
||||
|
||||
react-native-awesome-alerts@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-awesome-alerts/-/react-native-awesome-alerts-1.2.0.tgz#a19b105d5133e92712d865795d532cd3f1e4de2d"
|
||||
integrity sha512-ouxDGJ/porNkuaeqpgxIJA4jAPqHC9bJIsxLA21NA6eZhnEhbqWOprjsNqwI0/7bJxXm9baTzXESCMzwAy3eZw==
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-native-branch@2.2.5:
|
||||
version "2.2.5"
|
||||
resolved "https://registry.yarnpkg.com/react-native-branch/-/react-native-branch-2.2.5.tgz#4074dd63b4973e6397d9ce50e97b57c77a518e9d"
|
||||
|
@ -5457,6 +5530,23 @@ react-native-camera@^1.9.2:
|
|||
dependencies:
|
||||
prop-types "^15.6.2"
|
||||
|
||||
react-native-check-box@^2.1.7:
|
||||
version "2.1.7"
|
||||
resolved "https://registry.yarnpkg.com/react-native-check-box/-/react-native-check-box-2.1.7.tgz#f349d3505a13c15d19949ec4cec40c7adc4f3626"
|
||||
integrity sha512-dPVOoz4jKs2je2HSHp7+XJXNyZFq8Kij7IHutigrQKzB550Dko6ZAQu/1mG1FzdUMFxxkZ2nX59KmbR0Co0T8Q==
|
||||
dependencies:
|
||||
prop-types "^15.5.7"
|
||||
|
||||
react-native-cli@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-cli/-/react-native-cli-2.0.1.tgz#f2cd3c7aa1b83828cdfba630e2dfd817df766d54"
|
||||
integrity sha1-8s08eqG4OCjN+6Yw4t/YF992bVQ=
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
minimist "^1.2.0"
|
||||
prompt "^0.2.14"
|
||||
semver "^5.0.3"
|
||||
|
||||
react-native-confirmation-code-input@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-native-confirmation-code-input/-/react-native-confirmation-code-input-1.0.4.tgz#f5c2cced66f26b61050fea8bfd17473af1ad5ff9"
|
||||
|
@ -5465,6 +5555,11 @@ react-native-confirmation-code-input@^1.0.4:
|
|||
lodash "^4.17.4"
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-native-device-info@^0.26.4:
|
||||
version "0.26.5"
|
||||
resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-0.26.5.tgz#7c63f047894e4cf2d4d9bfa1832444fb37e53569"
|
||||
integrity sha512-Z3/Ue8A0VPtchT/NLykA+sKuOSE6FPNGQMKFqLea+urvYimmzfs1hAVbJ3my+ijnJXpuebu5c4xbYEqaRhuV6w==
|
||||
|
||||
react-native-elements@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-elements/-/react-native-elements-1.0.0.tgz#95bc194f61ec4658d8dbd977524f8c4fd3ada136"
|
||||
|
@ -5501,6 +5596,7 @@ react-native-image-overlay@^0.1.2:
|
|||
dependencies:
|
||||
prop-types "^15.6.1"
|
||||
|
||||
|
||||
react-native-ionicons@^4.5.5:
|
||||
version "4.5.5"
|
||||
resolved "https://registry.yarnpkg.com/react-native-ionicons/-/react-native-ionicons-4.5.5.tgz#4657ce742e39f0443b0960f20b946269fa0b90b5"
|
||||
|
@ -5516,15 +5612,66 @@ react-native-loader@^1.2.1:
|
|||
resolved "https://registry.yarnpkg.com/react-native-loader/-/react-native-loader-1.2.1.tgz#e08589a89cfcd076595b9301c1d618f54da73329"
|
||||
integrity sha1-4IWJqJz80HZZW5MBwdYY9U2nMyk=
|
||||
|
||||
"react-native-maps@github:expo/react-native-maps#v0.22.1-exp.0":
|
||||
react-native-loading-spinner-overlay@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-loading-spinner-overlay/-/react-native-loading-spinner-overlay-1.0.1.tgz#07f85a072b6f7d05b8749668cd626df4cc330347"
|
||||
integrity sha512-njZZWs+cgyq6Ni7tkYEowMmuAuHVljuH4CqTWA0plNOfSzZhEcrW209y7WcgHjRWz0RvvEYF5oWGT8DWtTq8bA==
|
||||
dependencies:
|
||||
prop-types "^15.6.2"
|
||||
|
||||
react-native-maps@^0.23.0:
|
||||
version "0.23.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-0.23.0.tgz#edbfdcad0e42190627eb1c8067eaba5965c8f81e"
|
||||
integrity sha512-qxOIQGsDtQXQlSJdXMW1wg8pvLaVYdbiIolB7tZTTgTGgIA/hDxXwZbQZ08c4KDD6/VTk8krfd1APaHkqvh6og==
|
||||
|
||||
react-native-maps@expo/react-native-maps#v0.22.1-exp.0:
|
||||
version "0.22.1"
|
||||
resolved "https://codeload.github.com/expo/react-native-maps/tar.gz/e6f98ff7272e5d0a7fe974a41f28593af2d77bb2"
|
||||
|
||||
react-native-material-buttons@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-buttons/-/react-native-material-buttons-0.5.0.tgz#ab2b3e3fc3f500ca713f51e9d75978aff602152a"
|
||||
integrity sha1-qys+P8P1AMpxP1Hp11l4r/YCFSo=
|
||||
dependencies:
|
||||
prop-types "^15.5.9"
|
||||
react-native-material-ripple "^0.7.0"
|
||||
|
||||
react-native-material-dropdown@^0.11.1:
|
||||
version "0.11.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-dropdown/-/react-native-material-dropdown-0.11.1.tgz#c0fe434a8e617941ef910ba44d2f07c8f37584fe"
|
||||
integrity sha1-wP5DSo5heUHvkQukTS8HyPN1hP4=
|
||||
dependencies:
|
||||
prop-types "^15.5.9"
|
||||
react-native-material-buttons "^0.5.0"
|
||||
react-native-material-ripple "^0.8.0"
|
||||
react-native-material-textfield "^0.12.0"
|
||||
|
||||
react-native-material-ripple@^0.7.0:
|
||||
version "0.7.5"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-ripple/-/react-native-material-ripple-0.7.5.tgz#e2af5110680532f14aea3c3a438247be2ffef659"
|
||||
integrity sha1-4q9REGgFMvFK6jw6Q4JHvi/+9lk=
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-native-material-ripple@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-ripple/-/react-native-material-ripple-0.8.0.tgz#b8c24e6fdea2af2a21e8468b1f40b35483019e2f"
|
||||
integrity sha1-uMJOb96iryoh6EaLH0CzVIMBni8=
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-native-material-shadows@0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-shadows/-/react-native-material-shadows-0.0.2.tgz#024a50b097423325c6e51f93298c4ab1b226e7f5"
|
||||
integrity sha512-igZWUvc9qCHk6vN0sR4bktBixrSHMwmy8n/sNQC9EqxoOcp0ChWF82hujPp9XqbVii7ZX0E3FGiYCWFtGfPHVA==
|
||||
|
||||
react-native-material-textfield@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-material-textfield/-/react-native-material-textfield-0.12.0.tgz#3fba19d76ab89f67052c81e082152fc243d82a3f"
|
||||
integrity sha1-P7oZ12q4n2cFLIHgghUvwkPYKj8=
|
||||
dependencies:
|
||||
prop-types "^15.5.9"
|
||||
|
||||
react-native-modal@^7.0.2:
|
||||
version "7.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-7.0.2.tgz#6048217807e03cd585204dace2e1ca1726c0b647"
|
||||
|
@ -5533,6 +5680,11 @@ react-native-modal@^7.0.2:
|
|||
prop-types "^15.6.1"
|
||||
react-native-animatable "^1.2.4"
|
||||
|
||||
react-native-network-info@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-native-network-info/-/react-native-network-info-4.0.1.tgz#e0242cfec0d9c0e1c6c32b8df596bb4c3223a5a3"
|
||||
integrity sha512-ZeSkeBL/fHsFR6sAOVHMd4oMknCwsbEeL+Zewec1/3ielg8k9YcddK3wymXS7kvwV0mTB2ji4X5tI0b7XY0sDA==
|
||||
|
||||
react-native-offline@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-offline/-/react-native-offline-4.3.0.tgz#6877e4a4b961e230e0a198bce2d0611ca8af9d89"
|
||||
|
@ -5548,6 +5700,13 @@ react-native-permissions@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/react-native-permissions/-/react-native-permissions-1.1.1.tgz#4876004681ff8556454613d85249b01baff9b35b"
|
||||
integrity sha512-t0Ujm177bagjUOSzhpmkSz+LqFW04HnY9TeZFavDCmV521fQvFz82aD+POXqWsAdsJVOK3umJYBNNqCjC3g0hQ==
|
||||
|
||||
react-native-progress-bar-animated@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/react-native-progress-bar-animated/-/react-native-progress-bar-animated-1.0.6.tgz#18de003ababb8222c84299ef2f20d0eab549dc19"
|
||||
integrity sha512-UPAAwxtBVV+sPwhgVd78SA7QybPshV5CydaV0GJyM+eZ89ikkZQSasAUAgIQwVVCW1Tj6XNrgizimXM9JdczeA==
|
||||
dependencies:
|
||||
prop-types "^15.6.0"
|
||||
|
||||
react-native-progress@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-progress/-/react-native-progress-3.5.0.tgz#d1ccc7f96dc17c609aedb43b2e6695d67deae0ec"
|
||||
|
@ -5626,6 +5785,13 @@ react-native-swiper@^1.5.14:
|
|||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-native-switch@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-switch/-/react-native-switch-1.5.0.tgz#a5c8e72f87def649d1c9de027c5ae27e2037ea40"
|
||||
integrity sha1-pcjnL4fe9knRyd4CfFrifiA36kA=
|
||||
dependencies:
|
||||
prop-types "^15.6.0"
|
||||
|
||||
react-native-tab-view@^1.0.0, react-native-tab-view@^1.2.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-1.3.2.tgz#c4e43a538dcacce151938745cea09176beeccbc3"
|
||||
|
@ -5796,7 +5962,7 @@ react-test-renderer@16.6.3:
|
|||
react-is "^16.6.3"
|
||||
scheduler "^0.11.2"
|
||||
|
||||
react-timer-mixin@^0.13.2:
|
||||
react-timer-mixin@^0.13.2, react-timer-mixin@^0.13.4:
|
||||
version "0.13.4"
|
||||
resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3"
|
||||
integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==
|
||||
|
@ -5864,6 +6030,13 @@ read-pkg@^2.0.0:
|
|||
normalize-package-data "^2.3.2"
|
||||
path-type "^2.0.0"
|
||||
|
||||
read@1.0.x:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
|
||||
integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
|
||||
dependencies:
|
||||
mute-stream "~0.0.4"
|
||||
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
|
@ -6112,7 +6285,12 @@ ret@~0.1.10:
|
|||
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
|
||||
|
||||
rimraf@^2.5.4, rimraf@^2.6.1:
|
||||
revalidator@0.1.x:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b"
|
||||
integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs=
|
||||
|
||||
rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.1:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
||||
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
|
||||
|
@ -6474,6 +6652,11 @@ sshpk@^1.7.0:
|
|||
safer-buffer "^2.0.2"
|
||||
tweetnacl "~0.14.0"
|
||||
|
||||
stack-trace@0.0.x:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
|
||||
integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
|
||||
|
||||
stack-utils@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
|
||||
|
@ -6726,6 +6909,13 @@ to-regex@^3.0.1, to-regex@^3.0.2:
|
|||
regex-not "^1.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
toggle-switch-react-native@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/toggle-switch-react-native/-/toggle-switch-react-native-2.0.2.tgz#3979bb41343a8bbc45735246d138a93e3d0917a1"
|
||||
integrity sha512-Q7bGEkcPgFsLIa9Io/ZSXA4LIvIxBqothaiUU6b9ay8XXQoKqsgvoPehLVYBvfpnQOmyfZ5NHOdOKiV8ewI6fQ==
|
||||
dependencies:
|
||||
prop-types "^15.5.7"
|
||||
|
||||
tough-cookie@^2.3.3, tough-cookie@^2.3.4:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
||||
|
@ -6904,6 +7094,18 @@ util.promisify@^1.0.0:
|
|||
define-properties "^1.1.2"
|
||||
object.getownpropertydescriptors "^2.0.3"
|
||||
|
||||
utile@0.2.x:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7"
|
||||
integrity sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=
|
||||
dependencies:
|
||||
async "~0.2.9"
|
||||
deep-equal "*"
|
||||
i "0.3.x"
|
||||
mkdirp "0.x.x"
|
||||
ncp "0.4.x"
|
||||
rimraf "2.x.x"
|
||||
|
||||
utils-merge@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||
|
@ -7032,6 +7234,19 @@ wide-align@^1.1.0:
|
|||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
winston@0.8.x:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0"
|
||||
integrity sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=
|
||||
dependencies:
|
||||
async "0.2.x"
|
||||
colors "0.6.x"
|
||||
cycle "1.0.x"
|
||||
eyes "0.1.x"
|
||||
isstream "0.1.x"
|
||||
pkginfo "0.3.x"
|
||||
stack-trace "0.0.x"
|
||||
|
||||
wordwrap@^1.0.0, wordwrap@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace api.Controllers
|
|||
|
||||
public class AuthController : ControllerBase
|
||||
{
|
||||
|
||||
private readonly DataContext context;
|
||||
private readonly IConfiguration config;
|
||||
public UserManager<User> _userManager { get; }
|
||||
public SignInManager<User> _signInManager { get; }
|
||||
|
@ -34,7 +34,7 @@ namespace api.Controllers
|
|||
private readonly RoleManager<Role> _roleManager;
|
||||
private readonly System.Net.Http.IHttpClientFactory clientFactory;
|
||||
|
||||
public AuthController(IConfiguration config, UserManager<User> UserManager, SignInManager<User> SignInManager, IMapper mapper, RoleManager<Role> roleManager, IUsersRepository repo, System.Net.Http.IHttpClientFactory clientFactory)
|
||||
public AuthController(DataContext context,IConfiguration config, UserManager<User> UserManager, SignInManager<User> SignInManager, IMapper mapper, RoleManager<Role> roleManager, IUsersRepository repo, System.Net.Http.IHttpClientFactory clientFactory)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_roleManager = roleManager;
|
||||
|
@ -43,6 +43,7 @@ namespace api.Controllers
|
|||
this.config = config;
|
||||
_userManager = UserManager;
|
||||
_signInManager = SignInManager;
|
||||
this.context = context;
|
||||
|
||||
}
|
||||
|
||||
|
@ -86,25 +87,32 @@ namespace api.Controllers
|
|||
}
|
||||
|
||||
[HttpPost("loginQR")]
|
||||
public async Task<IActionResult> loginQr(UserForLoginDto userLoginDTO){
|
||||
|
||||
var token= "_A6q1cVGa12QutCrYCsYETfz9nPspnbcnPqjD-87kDaYPr99ArEfpdRTbkEzA4p-WEJzPFQhsMX7nG5BmUm0E6RTju8vQHnaTjGd80NIqUCr-jXefUtGwyl6I00fGD4sN6psW714JnCFuZRbtZbIXsdIRKmD3b8YUpPo2lvYP8SzjoEgACyabj13T3CLpHF43PI8Dvny6ylW6j0ka5qGNvw5MHVvYFURUPiTA7hlxoyQ35eOqHE8-eIiLNSTUJW7q-o8CxIGqGWSkltKPxbrY-Xo5iYagUucesqmj64VxYs";
|
||||
public async Task<IActionResult> loginQr(loginQr a){
|
||||
|
||||
var u = await _userManager.FindByNameAsync(a.QRcode);
|
||||
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
try{
|
||||
|
||||
var url = "http://enei2019.uingress.com/internal/api/Attendee/Detail";
|
||||
var url = "https://tickets.enei.pt/internal/api/Attendee/Detail";
|
||||
|
||||
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
|
||||
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + a.token);
|
||||
|
||||
|
||||
var response = await client.GetStringAsync(url);
|
||||
|
||||
Console.WriteLine(response);
|
||||
// Console.WriteLine(response);
|
||||
|
||||
//var resource = JObject.Parse(response);
|
||||
|
||||
return Ok(response);
|
||||
var appUser = await _userManager.Users.FirstOrDefaultAsync(SU => SU.NormalizedUserName == a.QRcode.ToUpper());
|
||||
|
||||
|
||||
return Ok(new
|
||||
{
|
||||
|
||||
token = GenerateJwtToken(appUser).Result
|
||||
});
|
||||
|
||||
}catch(Exception e){
|
||||
|
||||
|
@ -116,6 +124,7 @@ namespace api.Controllers
|
|||
|
||||
|
||||
}
|
||||
return Unauthorized();
|
||||
}
|
||||
|
||||
|
||||
|
@ -144,7 +153,7 @@ namespace api.Controllers
|
|||
{
|
||||
Subject = new ClaimsIdentity(claims),
|
||||
//data de expiração (atual + 24 horas)
|
||||
Expires = DateTime.Now.AddDays(1),
|
||||
Expires = DateTime.Now.AddDays(30),
|
||||
|
||||
//passa as signing credentials definidas em cima
|
||||
SigningCredentials = creds
|
||||
|
|
|
@ -26,31 +26,51 @@ namespace api.Controllers
|
|||
this.context = context;
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
|
||||
// GET api/cromos/QR
|
||||
// GET cromos do user QR
|
||||
[HttpGet("{QR}")]
|
||||
public async Task<List<Cromos>> GetCromos(string QR)
|
||||
public async Task<IActionResult> GetCromos(string QR)
|
||||
{
|
||||
var usr = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == QR);
|
||||
int soma = 0;
|
||||
var usr = await context.Users.FirstOrDefaultAsync(u => u.QRcode == QR);
|
||||
string[] usrCromos = usr.cromos.Substring(1).Split(",");
|
||||
Console.WriteLine(usrCromos[0]);
|
||||
var allCromos = await context.Cromos.ToListAsync();
|
||||
|
||||
List<Cromos> rList = new List<Cromos>();
|
||||
|
||||
allCromos.ForEach(delegate(Cromos c){
|
||||
for(int i=0;i<usrCromos.Length;i++){
|
||||
if(Int32.Parse(usrCromos[i])==c.Id){
|
||||
Cromos toAdd = new Cromos{Id = c.Id,Nome=c.Nome,DescMostrar=c.DescUnlocked,QRCode=c.QRCode,img=c.img};
|
||||
rList.Add(toAdd);
|
||||
}else{ //user NAO tem o cromo
|
||||
Cromos toAdd = new Cromos{Id = c.Id,Nome=c.Nome,DescMostrar=c.DescLocked,QRCode=c.QRCode,img=c.img};
|
||||
|
||||
allCromos.ForEach(delegate (Cromos c)
|
||||
{
|
||||
Boolean found = false;
|
||||
for (int i = 0; i < usrCromos.Length; i++)
|
||||
{
|
||||
|
||||
|
||||
if (Int32.Parse(usrCromos[i]) == c.Id)
|
||||
{
|
||||
soma += c.pontos;
|
||||
Cromos toAdd = new Cromos { Id = c.Id, Nome = c.Nome, DescMostrar = c.DescUnlocked, QRCode = c.QRCode, img = c.img, unlocked = true, websiteCromo = c.websiteCromo, pontos = c.pontos, logo = c.logo };
|
||||
rList.Add(toAdd);
|
||||
found = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
|
||||
|
||||
Cromos toAdd = new Cromos { Id = c.Id, Nome = c.Nome, DescMostrar = c.DescLocked, QRCode = c.QRCode, img = c.img, unlocked = false, websiteCromo = c.websiteCromo, pontos = c.pontos };
|
||||
rList.Add(toAdd);
|
||||
|
||||
}
|
||||
});
|
||||
return rList;
|
||||
|
||||
cromosToReturn a = new cromosToReturn();
|
||||
a.cromos = rList;
|
||||
a.pontuacao = soma;
|
||||
return Ok(a);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ namespace api.Controllers
|
|||
|
||||
// GET api/events
|
||||
// GET all events
|
||||
[AllowAnonymous]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetEvents()
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace api.Controllers
|
|||
// PSOT api/scan
|
||||
// POST scan de QR code
|
||||
[HttpPost]
|
||||
public async Task<ScanReturn> doScan(QRToScan ScanData)
|
||||
public async Task<IActionResult> doScan(QRToScan ScanData)
|
||||
{
|
||||
User usr = await context.Users.FirstOrDefaultAsync(b=>b.QRcode == ScanData.UserQR);
|
||||
var allUsers = await context.Users.ToListAsync();
|
||||
|
@ -45,7 +45,7 @@ namespace api.Controllers
|
|||
_mapper.Map(userAProcurar,ru);
|
||||
toReturn.user = ru;
|
||||
toReturn.tipo=1;
|
||||
return toReturn;
|
||||
return Ok(toReturn);
|
||||
}else{
|
||||
allCromos.ForEach(delegate(Cromos c){
|
||||
if(c.QRCode == ScanData.ScanQR){
|
||||
|
@ -58,7 +58,7 @@ namespace api.Controllers
|
|||
}
|
||||
});
|
||||
|
||||
return toReturn;
|
||||
return Ok(toReturn);
|
||||
}
|
||||
|
||||
//return toReturn;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using api.Data;
|
||||
using api.Dtos;
|
||||
|
@ -24,7 +25,7 @@ namespace api.Controllers
|
|||
private readonly IMapper _mapper;
|
||||
private readonly RoleManager<Role> _roleManager;
|
||||
private readonly UserManager<User> _userManager;
|
||||
public TeamsController(DataContext context,ITeamsRepository repo, IMapper mapper,RoleManager<Role> roleManager,UserManager<User> UserManager)
|
||||
public TeamsController(DataContext context, ITeamsRepository repo, IMapper mapper, RoleManager<Role> roleManager, UserManager<User> UserManager)
|
||||
{
|
||||
this.context = context;
|
||||
_mapper = mapper;
|
||||
|
@ -32,26 +33,27 @@ namespace api.Controllers
|
|||
_userManager = UserManager;
|
||||
_repo = repo;
|
||||
}
|
||||
|
||||
|
||||
// GET api/teams
|
||||
// GET all teams
|
||||
[HttpGet]
|
||||
public async Task<List<TeamToReturn>> GetTeams()
|
||||
{
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
List<TeamToReturn> rTeams = new List<TeamToReturn>();
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
List<TeamToReturn> rTeams = new List<TeamToReturn>();
|
||||
|
||||
for(var i = 0; i < allTeams.Count;i++){
|
||||
TeamToReturn tR = new TeamToReturn();
|
||||
_mapper.Map(allTeams[i],tR);
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a=>a.QRcode == allTeams[i].CapQR);
|
||||
UserForListDto uT = new UserForListDto();
|
||||
_mapper.Map(usr,uT);
|
||||
tR.Cap = uT;
|
||||
rTeams.Add(tR);
|
||||
}
|
||||
for (var i = 0; i < allTeams.Count; i++)
|
||||
{
|
||||
TeamToReturn tR = new TeamToReturn();
|
||||
_mapper.Map(allTeams[i], tR);
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
|
||||
UserForListDto uT = new UserForListDto();
|
||||
_mapper.Map(usr, uT);
|
||||
tR.Cap = uT;
|
||||
rTeams.Add(tR);
|
||||
}
|
||||
|
||||
return rTeams;
|
||||
return rTeams;
|
||||
}
|
||||
|
||||
// GET api/teams/e/[id]
|
||||
|
@ -59,44 +61,84 @@ namespace api.Controllers
|
|||
[HttpGet("e/{id}")]
|
||||
public async Task<List<TeamToReturn>> GetTeamsEvent(int id)
|
||||
{
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
List<TeamToReturn> rTeam = new List<TeamToReturn>();
|
||||
TeamToReturn tR = new TeamToReturn();
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
List<TeamToReturn> rTeam = new List<TeamToReturn>();
|
||||
TeamToReturn tR = new TeamToReturn();
|
||||
|
||||
for(var i = 0; i < allTeams.Count;i++){
|
||||
if(allTeams[i].EventId == id){
|
||||
_mapper.Map(allTeams[i],tR);
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a=>a.QRcode == allTeams[i].CapQR);
|
||||
UserForListDto uT = new UserForListDto();
|
||||
_mapper.Map(usr,uT);
|
||||
tR.Cap = uT;
|
||||
rTeam.Add(tR);
|
||||
}
|
||||
}
|
||||
|
||||
return rTeam;
|
||||
for (var i = 0; i < allTeams.Count; i++)
|
||||
{
|
||||
if (allTeams[i].EventId == id)
|
||||
{
|
||||
_mapper.Map(allTeams[i], tR);
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
|
||||
UserForListDto uT = new UserForListDto();
|
||||
_mapper.Map(usr, uT);
|
||||
tR.Cap = uT;
|
||||
rTeam.Add(tR);
|
||||
}
|
||||
}
|
||||
|
||||
return rTeam;
|
||||
}
|
||||
|
||||
// GET api/teams/u/[id]
|
||||
// GET all teams for user id
|
||||
[HttpGet("u/{QR}")]
|
||||
public async Task<TeamToReturn> GetTeamsUser(String QR)
|
||||
public async Task<IActionResult> GetTeamsUser(String QR)
|
||||
{
|
||||
var rUsr = await context.Users.Include(b=>b.team).FirstOrDefaultAsync(a=>a.QRcode == QR);
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
TeamToReturn rTeam = new TeamToReturn();
|
||||
var rUsr = await context.Users.Include(b => b.team).FirstOrDefaultAsync(a => a.QRcode == QR);
|
||||
|
||||
for(var i = 0; i < allTeams.Count;i++){
|
||||
if(allTeams[i].Id == rUsr.team.Id){
|
||||
_mapper.Map(allTeams[i],rTeam);
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a=>a.QRcode == allTeams[i].CapQR);
|
||||
UserForListDto uT = new UserForListDto();
|
||||
_mapper.Map(usr,uT);
|
||||
rTeam.Cap = uT;
|
||||
}
|
||||
}
|
||||
if (rUsr == null)
|
||||
{
|
||||
return NotFound("O utilizador não possui equipa");
|
||||
}
|
||||
|
||||
List<Team> allTeams = await context.Teams.ToListAsync();
|
||||
|
||||
|
||||
TeamToReturn rTeam = new TeamToReturn();
|
||||
|
||||
|
||||
for (var i = 0; i < allTeams.Count; i++)
|
||||
{
|
||||
|
||||
if (allTeams[i].Id == rUsr.team.Id)
|
||||
{
|
||||
|
||||
rTeam.ativa= allTeams[i].pagamento;
|
||||
_mapper.Map(allTeams[i], rTeam);
|
||||
|
||||
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
|
||||
|
||||
return rTeam;
|
||||
var users = await context.Users.ToListAsync();
|
||||
|
||||
List<UserForListDto> usersToReturn = new List<UserForListDto>();
|
||||
|
||||
for (var t = 0; t < users.Count; t++)
|
||||
{
|
||||
|
||||
if (users[t].team != null && users[t].team.Id == allTeams[i].Id)
|
||||
{
|
||||
|
||||
UserForListDto u = new UserForListDto();
|
||||
|
||||
_mapper.Map(users[t], u);
|
||||
|
||||
usersToReturn.Add(u);
|
||||
}
|
||||
}
|
||||
|
||||
UserForListDto uT = new UserForListDto();
|
||||
|
||||
_mapper.Map(usr, uT);
|
||||
|
||||
rTeam.Membros = usersToReturn;
|
||||
rTeam.Cap = uT;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return Ok(rTeam);
|
||||
}
|
||||
|
||||
// POST api/teams/add
|
||||
|
@ -105,27 +147,31 @@ namespace api.Controllers
|
|||
public async Task<IActionResult> CreateTeam(TeamForAdd TeamAddDetails)
|
||||
{
|
||||
|
||||
User tCap = await context.Users.Include(a=>a.team).FirstOrDefaultAsync(u=>u.QRcode == TeamAddDetails.capQR);
|
||||
|
||||
if(tCap.team == null){
|
||||
Team tAdd = new Team{EventId = TeamAddDetails.EventId, Nome = TeamAddDetails.Nome, CapQR = tCap.QRcode, NMembros = 1, Pontos = 0};
|
||||
User tCap = await context.Users.Include(a => a.team).FirstOrDefaultAsync(u => u.QRcode == TeamAddDetails.capQR);
|
||||
|
||||
tCap.team = tAdd;
|
||||
if (tCap.team == null)
|
||||
{
|
||||
|
||||
await context.Teams.AddAsync(tAdd);
|
||||
context.Users.Update(tCap);
|
||||
Team tAdd = new Team { EventId = TeamAddDetails.EventId, Nome = TeamAddDetails.Nome, CapQR = tCap.QRcode, NMembros = 1, Pontos = 0 };
|
||||
|
||||
tCap.team = tAdd;
|
||||
|
||||
await context.Teams.AddAsync(tAdd);
|
||||
context.Users.Update(tCap);
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
if (result >= 1)
|
||||
{
|
||||
return StatusCode(201);
|
||||
}
|
||||
return BadRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
return BadRequest();
|
||||
}
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
if (result >= 1)
|
||||
{
|
||||
return StatusCode(201);
|
||||
}
|
||||
return BadRequest();
|
||||
}else{
|
||||
return BadRequest();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// POST api/teams/add/member
|
||||
|
@ -134,25 +180,29 @@ namespace api.Controllers
|
|||
public async Task<IActionResult> AddTeamMember(TeamAddMember MemberToAdd)
|
||||
{
|
||||
|
||||
User newMember = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == MemberToAdd.newQR);
|
||||
User newMember = await context.Users.FirstOrDefaultAsync(u => u.QRcode == MemberToAdd.newQR);
|
||||
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t=>t.Id == MemberToAdd.id);
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToAdd.id);
|
||||
|
||||
if(newMember.team == null){
|
||||
tEdit.NMembros++;
|
||||
newMember.team = tEdit;
|
||||
if (newMember.team == null)
|
||||
{
|
||||
|
||||
context.Teams.Update(tEdit);
|
||||
context.Users.Update(newMember);
|
||||
tEdit.NMembros++;
|
||||
newMember.team = tEdit;
|
||||
|
||||
var result = context.SaveChanges();
|
||||
context.Teams.Update(tEdit);
|
||||
context.Users.Update(newMember);
|
||||
|
||||
return StatusCode(201);
|
||||
var result = context.SaveChanges();
|
||||
|
||||
return StatusCode(201);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
}else{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// POST api/teams/ChangeName
|
||||
|
@ -161,20 +211,21 @@ namespace api.Controllers
|
|||
public async Task<IActionResult> ChangeName(TeamChangeName NameChange)
|
||||
{
|
||||
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t=>t.Id == NameChange.TeamID);
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == NameChange.TeamID);
|
||||
|
||||
User cap = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == NameChange.UserQR);
|
||||
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == NameChange.UserQR);
|
||||
|
||||
if(cap.QRcode == tEdit.CapQR){
|
||||
tEdit.Nome = NameChange.nome;
|
||||
}
|
||||
if (cap.QRcode == tEdit.CapQR)
|
||||
{
|
||||
tEdit.Nome = NameChange.nome;
|
||||
}
|
||||
|
||||
context.Teams.Update(tEdit);
|
||||
context.Teams.Update(tEdit);
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
return StatusCode(201);
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
return StatusCode(201);
|
||||
|
||||
}
|
||||
|
||||
// POST api/teams/delete
|
||||
|
@ -183,19 +234,24 @@ namespace api.Controllers
|
|||
public async Task<IActionResult> DeleteTeam(TeamDelete DeleteData)
|
||||
{
|
||||
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t=>t.Id == DeleteData.TeamID);
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == DeleteData.TeamID);
|
||||
|
||||
User cap = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == DeleteData.UserQR);
|
||||
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == DeleteData.UserQR);
|
||||
|
||||
if(cap.QRcode == tEdit.CapQR){
|
||||
context.Teams.Remove(tEdit);
|
||||
cap.team = null;
|
||||
context.Users.Update(cap);
|
||||
var result = context.SaveChanges();
|
||||
return StatusCode(201);
|
||||
}else{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
if (tEdit != null && cap.QRcode == tEdit.CapQR)
|
||||
{
|
||||
context.Teams.Remove(tEdit);
|
||||
cap.team = null;
|
||||
context.Users.Update(cap);
|
||||
var result = context.SaveChanges();
|
||||
return StatusCode(201);
|
||||
}
|
||||
else
|
||||
{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// POST api/teams/remove/member
|
||||
|
@ -204,28 +260,48 @@ namespace api.Controllers
|
|||
public async Task<IActionResult> RemoveTeamMember(TeamRemoveMEmber MemberToRemove)
|
||||
{
|
||||
|
||||
User rmMember = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == MemberToRemove.UserToRemoveQR);
|
||||
Console.WriteLine(MemberToRemove.TeamID);
|
||||
//obtem o user para remover
|
||||
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t=>t.Id == MemberToRemove.TeamID);
|
||||
try
|
||||
{
|
||||
User rmMember = await context.Users.FirstOrDefaultAsync(u => u.QRcode == MemberToRemove.UserToRemoveQR);
|
||||
|
||||
if(rmMember.QRcode == tEdit.CapQR){
|
||||
return StatusCode(403);
|
||||
}
|
||||
Console.WriteLine(rmMember.QRcode);
|
||||
|
||||
//encontra a equipa de onde quer remover o user
|
||||
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToRemove.TeamID);
|
||||
|
||||
Console.WriteLine(tEdit.Nome);
|
||||
|
||||
var id = 0;
|
||||
|
||||
if(rmMember.team == tEdit){
|
||||
tEdit.NMembros--;
|
||||
rmMember.team = null;
|
||||
if (rmMember.QRcode == tEdit.CapQR)
|
||||
{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
context.Teams.Update(tEdit);
|
||||
context.Users.Update(rmMember);
|
||||
if (rmMember.team == tEdit)
|
||||
{
|
||||
tEdit.NMembros--;
|
||||
rmMember.team = null;
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
return StatusCode(201);
|
||||
}else{
|
||||
return StatusCode(403);
|
||||
}
|
||||
|
||||
context.Teams.Update(tEdit);
|
||||
context.Users.Update(rmMember);
|
||||
|
||||
var result = context.SaveChanges();
|
||||
|
||||
return StatusCode(201);
|
||||
}
|
||||
else
|
||||
{
|
||||
return StatusCode(403);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return StatusCode(403);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -22,7 +23,7 @@ namespace api.Controllers
|
|||
private readonly RoleManager<Role> _roleManager;
|
||||
private readonly UserManager<User> _userManager;
|
||||
|
||||
public UsersController(IUsersRepository repo, IMapper mapper,RoleManager<Role> roleManager,UserManager<User> UserManager)
|
||||
public UsersController(IUsersRepository repo, IMapper mapper, RoleManager<Role> roleManager, UserManager<User> UserManager)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_roleManager = roleManager;
|
||||
|
@ -30,35 +31,87 @@ namespace api.Controllers
|
|||
_repo = repo;
|
||||
|
||||
}
|
||||
|
||||
|
||||
[AllowAnonymous]
|
||||
[HttpGet("getProfileImage/{QRcode}")]
|
||||
public async Task<IActionResult> getProfileImage(string QRcode)
|
||||
{
|
||||
|
||||
var user = _repo.getProfileImageAsync(QRcode);
|
||||
|
||||
|
||||
|
||||
if (user.Result != null)
|
||||
{
|
||||
|
||||
|
||||
return Ok(user.Result);
|
||||
}
|
||||
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("changeProfileImage")]
|
||||
public async Task<IActionResult> changeProfileImage(profileImage i)
|
||||
{
|
||||
|
||||
User a = new User();
|
||||
|
||||
var cenas = await _repo.changeProfileImage(i);
|
||||
|
||||
return Ok(cenas);
|
||||
}
|
||||
//
|
||||
[HttpGet("{id}")]
|
||||
public async Task<IActionResult> GetUser(int id)
|
||||
{
|
||||
|
||||
|
||||
var user = await _repo.GetUser(id);
|
||||
|
||||
|
||||
var userToReturn = _mapper.Map<UserForDetailedDto>(user);
|
||||
|
||||
|
||||
return Ok(userToReturn);
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Authorize(Policy= "RequireAdminRole")]
|
||||
[Authorize(Policy = "RequireAdminRole")]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetUsers()
|
||||
{
|
||||
var users = await _repo.GetUsers();
|
||||
|
||||
var usersToReturn = _mapper.Map<IEnumerable<UserForListDto>>(users);
|
||||
|
||||
|
||||
return Ok(usersToReturn);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[Authorize(Policy = "RequireAdminRole")]
|
||||
[HttpPost("updateAll")]
|
||||
public async Task<IActionResult> UpdateUsers(updateUsersDTO[] req)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var user in req)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return Ok(req);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
return Ok();
|
||||
}
|
||||
|
||||
[HttpPut("{id}")]
|
||||
public async Task<IActionResult> UpdateUser(int id, UserForUpdateDto userForUpdate){
|
||||
|
||||
public async Task<IActionResult> UpdateUser(int id, UserForUpdateDto userForUpdate)
|
||||
{
|
||||
|
||||
if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
|
||||
return Unauthorized(); //garante que é o próprio pode aceder à sua informação
|
||||
|
||||
|
@ -66,36 +119,38 @@ namespace api.Controllers
|
|||
|
||||
_mapper.Map(userForUpdate, userFromRepo);
|
||||
|
||||
if(await _repo.SaveAll())
|
||||
if (await _repo.SaveAll())
|
||||
return NoContent();
|
||||
|
||||
|
||||
throw new System.Exception($"updating user {id} failed on save");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[HttpPut("update/{id}")]
|
||||
[Authorize(Policy= "RequireAdminRole")]
|
||||
public async Task<IActionResult> UpdateUserById(int id, UserForUpdateDto userForUpdate){
|
||||
|
||||
[Authorize(Policy = "RequireAdminRole")]
|
||||
public async Task<IActionResult> UpdateUserById(int id, UserForUpdateDto userForUpdate)
|
||||
{
|
||||
|
||||
var userFromRepo = await _repo.GetUser(id);
|
||||
|
||||
_mapper.Map(userForUpdate, userFromRepo);
|
||||
|
||||
if(await _repo.SaveAll())
|
||||
if (await _repo.SaveAll())
|
||||
return NoContent();
|
||||
|
||||
throw new System.Exception($"updating user {id} failed on save");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//adiciona uma nova role à base de dados
|
||||
[Authorize(Policy= "RequireAdminRole")]
|
||||
[Authorize(Policy = "RequireAdminRole")]
|
||||
[HttpPost("addRole")]
|
||||
public IActionResult addRole( Role role) {
|
||||
|
||||
public IActionResult addRole(Role role)
|
||||
{
|
||||
|
||||
_roleManager.CreateAsync(role).Wait();
|
||||
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
|
|
|
@ -18,29 +18,50 @@ namespace api.Data
|
|||
|
||||
public async Task<IEnumerable<EventLocVisited>> GetEventLocsVisited()
|
||||
{
|
||||
var rEventLocsVisitedList = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync();
|
||||
|
||||
var rEventLocsVisitedList = await _context.EventLocsVisited.Include(e => e.Team).Include(e => e.Location).ToListAsync();
|
||||
|
||||
return rEventLocsVisitedList;
|
||||
}
|
||||
|
||||
public async Task<List<EventLocVisited>> GetEventLocsVisitedTeam(int id)
|
||||
{
|
||||
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync();
|
||||
List<EventLoc> allPlaces = await _context.EventLocs.ToListAsync();
|
||||
|
||||
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Include(e => e.Team).Include(e => e.Location).ToListAsync();
|
||||
|
||||
List<EventLocVisited> rList = new List<EventLocVisited>();
|
||||
for(var i=0;i<allLocs.Count;i++){
|
||||
if(allLocs[i].Team.Id == id){
|
||||
rList.Add(allLocs[i]);
|
||||
|
||||
for (int j = 0; j < allPlaces.Count; j++)
|
||||
{
|
||||
|
||||
EventLocVisited novo=new EventLocVisited();
|
||||
|
||||
novo.Location= allPlaces[j];
|
||||
|
||||
novo.complete=false;
|
||||
|
||||
for (var i = 0; i < allLocs.Count; i++)
|
||||
{
|
||||
if(allPlaces[j].Id == allLocs[i].Id){
|
||||
novo.complete=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
rList.Add(novo);
|
||||
}
|
||||
|
||||
return rList;
|
||||
}
|
||||
|
||||
public async Task<List<EventLocVisited>> GetEventLocsVisitedEvent(int id)
|
||||
public async Task<List<EventLocVisited>> GetEventLocsVisitedEvent(int id)
|
||||
{
|
||||
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync();
|
||||
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Include(e => e.Team).Include(e => e.Location).ToListAsync();
|
||||
List<EventLocVisited> rList = new List<EventLocVisited>();
|
||||
for(var i=0;i<allLocs.Count;i++){
|
||||
if(allLocs[i].Location.EventId == id){
|
||||
for (var i = 0; i < allLocs.Count; i++)
|
||||
{
|
||||
if (allLocs[i].Location.EventId == id)
|
||||
{
|
||||
rList.Add(allLocs[i]);
|
||||
}
|
||||
}
|
||||
|
|