diff --git a/App/app/App.js b/App/app/App.js
index b4f401ee..06f3ae59 100755
--- a/App/app/App.js
+++ b/App/app/App.js
@@ -1,555 +1,504 @@
-import React, {Component} from 'react';
+import React, { Component } from "react";
import {
- Platform,
- StyleSheet,
- Text,
- View,
- StatusBar,
- Dimensions,
- Image,
- ActivityIndicator,
- Button,
- TouchableHighlight,
- Keyboard,
- ImageBackground,
- LinearGradient,
- TouchableOpacity,
- TextInput,
- NetInfo,
- Animated
+ Platform,
+ StyleSheet,
+ Text,
+ View,
+ StatusBar,
+ Dimensions,
+ Image,
+ ActivityIndicator,
+ Button,
+ TouchableHighlight,
+ Keyboard,
+ ImageBackground,
+ LinearGradient,
+ TouchableOpacity,
+ TextInput,
+ NetInfo,
+ Animated
+} from "react-native";
-} from 'react-native';
+import { bindActionCreators } from "redux";
+import { connect } from "react-redux";
-import {bindActionCreators} from 'redux';
-import {connect} from 'react-redux';
+import QRCodeScanner from "react-native-qrcode-scanner";
+import { UtilStyles } from "./assets/styles";
-import QRCodeScanner from 'react-native-qrcode-scanner';
-import {UtilStyles} from './assets/styles'
+import * as Actions from "./store/actions";
-import * as Actions from './store/actions';
-
-import {RkButton, RkTheme, RkText, RkTextInput} from 'react-native-ui-kitten';
+import { RkButton, RkTheme, RkText, RkTextInput } from "react-native-ui-kitten";
import Modal from "react-native-modal";
-import Router from './Router'
+import Router from "./Router";
-import Icon from "react-native-vector-icons/Ionicons"
+import Icon from "react-native-vector-icons/Ionicons";
const SCREEN_HEIGHT = Dimensions.get("window").height;
const SCREEN_WIDTH = Dimensions.get("window").width;
-import Swiper from 'react-native-swiper';
-var TimerMixin = require('react-timer-mixin');
+import Swiper from "react-native-swiper";
+var TimerMixin = require("react-timer-mixin");
function handleConnectivityChange() {
console.log("asdasd");
- }
-
+}
+
class App extends Component {
handleConnectivityChange = isConnected => {
this.setState({ isConnected });
- }
- _activate=()=>{
-
- this.setState({ isModalVisible: !this.state.isModalVisible});
- this.scanner.reactivate();
-
- }
- _scanQr=()=>{
- this.props.openScannerLogin()
- console.log(this.props.UI_loginScannerActive)
- }
- _tryLogin=()=>{
-
- //console.log(this.state.text)
- //this.scanner.reactivate();
- this.props.login(this.state.username, this.state.text);
-
-
-
- }
-
- _toggleModal = () =>
- this.setState({ isModalVisible: !this.state.isModalVisible });
-
- constructor(props) {
-
- super(props);
-
- this.state = {
-
- token: {valid: false},
- tokenData: '',
- onHold: true,
- logged: false,
- isModalVisible: false,
- state : {text: ''},
- username:'QR code',
- failedAttempt: false,
- push:4,
- UI_loginScannerActive:false,
- userDetails:{username:'', password:''},
- isConnected: true
- };
-
- }
- _print=()=>{
- console.log("hello")
- this.setState({push:0})
- }
- checkValue=(e)=>{
- console.log("check"+e)
- }
- _handleConnectionChange = (isConnected) => {
- this.props.connectionState(true);
- };
-
-
- componentDidMount() {
- this.props.hold();
- NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
-
- this.setState({isModalVisible: false})
- //verifica se o utilizador tem token guardado
- this.props.checkUser(this.props.userDetails);
- this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);
- this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
-
-
- }
- componentWillUnmount() {
- NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectivityChange);
- }
-
- _keyboardDidShow () {
- //alert('Keyboard Shown');
- // this.setState({push:0})
-
- }
-
- _keyboardDidHide () {
-
- //this.setState({push:4})
-
- }
- onSuccess = (e) => {
-
- // this.setState({ isModalVisible: !this.state.isModalVisible });
- // this.props.login(e.data, 'f8908cc0');
- this.props.closeLoginQRScan();
- this.setState({username:e.data})
-
- console.log("QR code lido");
+ };
+ _activate = () => {
+ this.setState({ isModalVisible: !this.state.isModalVisible });
+ this.scanner.reactivate();
+ };
+ _scanQr = () => {
+ this.props.openScannerLogin();
+ console.log(this.props.UI_loginScannerActive);
+ };
+ _tryLogin = () => {
+ //console.log(this.state.text)
+ //this.scanner.reactivate();
+ this.props.login(this.state.username, this.state.text);
+ };
+ _toggleModal = () =>
+ this.setState({ isModalVisible: !this.state.isModalVisible });
+ constructor(props) {
+ super(props);
+ this.state = {
+ token: { valid: false },
+ tokenData: "",
+ onHold: true,
+ logged: false,
+ isModalVisible: false,
+ state: { text: "" },
+ username: "QR code",
+ failedAttempt: false,
+ push: 4,
+ UI_loginScannerActive: false,
+ userDetails: { username: "", password: "" },
+ isConnected: true,
+ modalOpen: false
};
+ }
+ _print = () => {
+ console.log("hello");
+ this.setState({ push: 0 });
+ };
+ checkValue = e => {
+ console.log("check" + e);
+ };
+ _handleConnectionChange = isConnected => {
+ this.props.connectionState(true);
+ };
- render() {
- if (!this.state.isConnected) {
- return (
-
- cenas da vida
-
- );
- }
- if (!this.props.logged && this.props.onHold) {
+ componentDidMount() {
+ //this.props.hold();
+ NetInfo.isConnected.addEventListener(
+ "connectionChange",
+ this.handleConnectivityChange
+ );
+ this.setState({ isModalVisible: false });
+ //verifica se o utilizador tem token guardado
+ this.props.checkUser(this.props.userDetails);
+ this.keyboardDidShowListener = Keyboard.addListener(
+ "keyboardDidShow",
+ this._keyboardDidShow
+ );
+ this.keyboardDidHideListener = Keyboard.addListener(
+ "keyboardDidHide",
+ this._keyboardDidHide
+ );
+ }
+ componentWillUnmount() {
+ NetInfo.isConnected.removeEventListener(
+ "connectionChange",
+ this.handleConnectivityChange
+ );
+ }
- return (
-
-
-
-
- )
+ _keyboardDidShow() {
+ //alert('Keyboard Shown');
+ // this.setState({push:0})
+ }
- }
- else
- {
+ _keyboardDidHide() {
+ //this.setState({push:4})
+ }
+ onSuccess = e => {
+ // this.setState({ isModalVisible: !this.state.isModalVisible });
+ // this.props.login(e.data, 'f8908cc0');
+ this.props.closeLoginQRScan();
+ this.setState({ username: e.data });
- // console.log('token... '+ this.props.logged)
+ console.log("QR code lido");
+ };
- //se existir token
-
- if (this.props.logged ) {
-
- return (
-
-
- )
- }
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {this.setState({searchString})}}
- maxLength={15}
- underlineColorAndroid="transparent"
- />
-
-
-
-
-
- Scan QR
-
-
-
-
-
-
- this.setState({text})}
- clearButtonMode='always'
- value={this.state.text}
- clearTextOnFocus={true}
- onSubmitEditing={Keyboard.dismiss}
- placeholder='Password' />
-
- Entrar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Não sabes a password?
-
-
-
- Recuperar Password
-
-
-
-
-
-
-
-
-
- );
-
- }
+ render() {
+ if (!this.state.isConnected) {
+ return (
+
+ cenas da vida
+
+ );
}
+ if (!this.props.logged && this.props.onHold) {
+ return (
+
+
+
+ );
+ } else {
+ // console.log('token... '+ this.props.logged)
+
+ //se existir token
+
+ if (this.props.logged) {
+ return ;
+ }
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ this.setState({ searchString });
+ }}
+ maxLength={15}
+ underlineColorAndroid="transparent"
+ />
+
+
+
+ Scan QR
+
+
+
+
+ this.setState({ text })}
+ clearButtonMode="always"
+ value={this.state.text}
+ clearTextOnFocus={true}
+ onSubmitEditing={Keyboard.dismiss}
+ placeholder="Password"
+ />
+
+
+ Entrar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Não sabes a password?
+
+
+
+ Recuperar Password
+
+
+
+
+
+
+ );
+ }
+ }
}
+RkTheme.setType("RkButton", "dark", {
+ container: {
+ paddingTop: 10,
+ backgroundColor: "gray",
-RkTheme.setType('RkButton', 'dark', {
- container: {
- paddingTop: 10,
- backgroundColor: 'gray',
-
- borderRadius: 90,
- }
+ borderRadius: 90
+ }
});
-
const rectDimensions = SCREEN_WIDTH * 0.85; // this is equivalent to 255 from a 393 device width
-const overlayColor = 'rgba(0,0,0,0.30)';
+const overlayColor = "rgba(0,0,0,0.30)";
const styles = {
- cameraContainer:{
- // height: Dimensions.get('window').height ,
- },
- passwordInput:{
- borderRadius: 90,
-
- borderColor:'#bfbdbd',
- borderWidth: 1,
- marginTop:20,
- marginBottom:20,
- width:SCREEN_WIDTH*0.8,
-
- backgroundColor: 'white',
+ cameraContainer: {
+ // height: Dimensions.get('window').height ,
+ },
+ passwordInput: {
+ borderRadius: 90,
- borderRadius: 90,
- height: SCREEN_HEIGHT*0.08,
- borderColor:'#bfbdbd',
- borderWidth: 1,
- paddingLeft:SCREEN_WIDTH*0.05,
-
- },
- scanQRText:{
+ borderColor: "#bfbdbd",
+ borderWidth: 1,
+ marginTop: 20,
+ marginBottom: 20,
+ width: SCREEN_WIDTH * 0.8,
- paddingTop:50
- // paddingTop:20,
-
+ backgroundColor: "white",
- },
- scanQR:{
-
- //flexDirection: 'row',
- paddingTop:5,
- backgroundColor:10,
-
- width:80,
- paddingLeft:10,
- backgroundColor:'#f24b4b',
- borderBottomRightRadius:90,
- borderTopRightRadius:90,
- height:'100%',
-
- },
- inputSection: {
-
- flexDirection: 'row',
- backgroundColor: '#fff',
-
- backgroundColor: 'white',
+ borderRadius: 90,
+ height: SCREEN_HEIGHT * 0.08,
+ borderColor: "#bfbdbd",
+ borderWidth: 1,
+ paddingLeft: SCREEN_WIDTH * 0.05
+ },
+ scanQRText: {
+ paddingTop: 50
+ // paddingTop:20,
+ },
+ scanQR: {
+ //flexDirection: 'row',
+ paddingTop: 5,
+ backgroundColor: 10,
- borderRadius: 90,
- height: SCREEN_HEIGHT*0.08,
- borderColor:'#bfbdbd',
- borderWidth: 1,
-
+ width: 80,
+ paddingLeft: 10,
+ backgroundColor: "#f24b4b",
+ borderBottomRightRadius: 90,
+ borderTopRightRadius: 90,
+ height: "100%"
+ },
+ inputSection: {
+ flexDirection: "row",
+ backgroundColor: "#fff",
- },
- searchIcon: {
- paddingLeft:10
- },
+ backgroundColor: "white",
- input: {
-
-
-
- flex: 1,
- paddingRight: 10,
-
-
- paddingLeft: 0,
- paddingLeft:SCREEN_WIDTH*0.05,
- color: '#424242',
-
- },
- textRow:{
- marginBottom:40
- },
- loginContainer:{
- width: '100%',
- height: '30%',
- justifyContent: 'center',
- alignItems: 'center'
- },
- loginBtn:{
- marginTop:10,
- marginBottom:20,
- marginLeft: '25%',
-
- },
-
- button: {
- borderWidth:1,
- borderColor:'rgba(0,0,0,0.2)',
- alignItems:'center',
- justifyContent:'center',
- width:60,
- height:60,
- backgroundColor:'#fff',
- borderRadius:100,
- marginRight: 10,
- marginLeft:10
- },
- footer: {},
+ borderRadius: 90,
+ height: SCREEN_HEIGHT * 0.08,
+ borderColor: "#bfbdbd",
+ borderWidth: 1
+ },
+ searchIcon: {
+ paddingLeft: 10
+ },
- buttons: {
- flexDirection: 'row',
- marginBottom: 24,
- marginHorizontal: 24,
- marginTop:24,
- justifyContent: 'space-around',
-
-
- },
+ input: {
+ flex: 1,
+ paddingRight: 10,
- logoContainer:{
+ paddingLeft: 0,
+ paddingLeft: SCREEN_WIDTH * 0.05,
+ color: "#424242"
+ },
+ textRow: {
+ marginBottom: 40
+ },
+ loginContainer: {
+ width: "100%",
+ height: "30%",
+ justifyContent: "center",
+ alignItems: "center"
+ },
+ loginBtn: {
+ marginTop: 10,
+ marginBottom: 20,
+ marginLeft: "25%"
+ },
- width:'100%',
-
- justifyContent: 'center',
- alignItems: 'center',
- marginTop:200
+ button: {
+ borderWidth: 1,
+ borderColor: "rgba(0,0,0,0.2)",
+ alignItems: "center",
+ justifyContent: "center",
+ width: 60,
+ height: 60,
+ backgroundColor: "#fff",
+ borderRadius: 100,
+ marginRight: 10,
+ marginLeft: 10
+ },
+ footer: {},
- },
+ buttons: {
+ flexDirection: "row",
+ marginBottom: 24,
+ marginHorizontal: 24,
+ marginTop: 24,
+ justifyContent: "space-around"
+ },
- logo2:{
-
- // flex: 1,
- // resizeMode: 'contain',
- width: 200, height: 200,
+ logoContainer: {
+ width: "100%",
- },
- wrapper: {
- },
- slide1: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- backgroundColor: 'white',
- },
- slide2: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- backgroundColor: 'white',
- },
- slide3: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- color:'black',
- backgroundColor: 'white',
- },
- text: {
- color: '#fff',
- fontSize: 30,
- fontWeight: 'bold',
- },
- recover: {
- paddingTop: 10,
- color: "red",
- paddingBottom: 10
- },
- manual: {},
+ justifyContent: "center",
+ alignItems: "center",
+ marginTop: 200
+ },
- logo: {
+ logo2: {
+ // flex: 1,
+ // resizeMode: 'contain',
+ width: 200,
+ height: 200
+ },
+ wrapper: {},
+ slide1: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ backgroundColor: "white"
+ },
+ slide2: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ backgroundColor: "white"
+ },
+ slide3: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ color: "black",
+ backgroundColor: "white"
+ },
+ text: {
+ color: "#fff",
+ fontSize: 30,
+ fontWeight: "bold"
+ },
+ recover: {
+ paddingTop: 10,
+ color: "red",
+ paddingBottom: 10
+ },
+ manual: {},
- height: SCREEN_HEIGHT * 0.35,
- width: SCREEN_WIDTH,
- backgroundColor: overlayColor,
- },
- rectangleContainer: {
+ logo: {
+ height: SCREEN_HEIGHT * 0.35,
+ width: SCREEN_WIDTH,
+ backgroundColor: overlayColor
+ },
+ rectangleContainer: {
+ flex: 1,
+ alignItems: "center",
+ justifyContent: "center",
+ backgroundColor: "transparent"
+ },
- flex: 1,
- alignItems: "center",
- justifyContent: "center",
- backgroundColor: "transparent",
+ rectangle: {
+ height: rectDimensions,
+ width: rectDimensions,
+ alignItems: "center",
+ justifyContent: "center",
+ backgroundColor: "transparent"
+ },
- },
+ topOverlay: {
+ flex: 1,
+ backgroundColor: overlayColor,
+ justifyContent: "center",
+ alignItems: "center"
+ },
- rectangle: {
+ bottomOverlay: {
+ flex: 1,
+ height: SCREEN_HEIGHT,
+ width: SCREEN_WIDTH,
+ backgroundColor: overlayColor,
+ paddingBottom: SCREEN_WIDTH * 0.2
+ },
- height: rectDimensions,
- width: rectDimensions,
- alignItems: "center",
- justifyContent: "center",
- backgroundColor: "transparent"
- },
-
- topOverlay: {
- flex: 1,
- backgroundColor: overlayColor,
- justifyContent: "center",
- alignItems: "center"
- },
-
- bottomOverlay: {
- flex: 1,
- height: SCREEN_HEIGHT,
- width: SCREEN_WIDTH,
- backgroundColor: overlayColor,
- paddingBottom: SCREEN_WIDTH * 0.2
- },
-
- leftAndRightOverlay: {
- height: rectDimensions,
- width: SCREEN_WIDTH,
- backgroundColor: overlayColor
- },
+ leftAndRightOverlay: {
+ height: rectDimensions,
+ width: SCREEN_WIDTH,
+ backgroundColor: overlayColor
+ }
};
-RkTheme.setType('RkTextInput', 'frame', {
- input: {
- backgroundColor: 'white',
- marginLeft: 0,
- marginHorizontal: 0,
- borderRadius: 5
- },
- color: 'gray',
- backgroundColor: 'gray',
- borderRadius: 10,
- container: {
- paddingHorizontal: 20
- }
- });
-
+RkTheme.setType("RkTextInput", "frame", {
+ input: {
+ backgroundColor: "white",
+ marginLeft: 0,
+ marginHorizontal: 0,
+ borderRadius: 5
+ },
+ color: "gray",
+ backgroundColor: "gray",
+ borderRadius: 10,
+ container: {
+ paddingHorizontal: 20
+ }
+});
+
mapStateToProps = (state, props) => {
-
- return {
- token: state.apiReducer.token,
- loggedIn: state.apiReducer.loggedIn,
- onHold: state.apiReducer.onHold,
- logged: state.apiReducer.logged,
- failedAttempt:state.apiReducer.failedAttempt,
- UI_loginScannerActive: state.uiReducer.UI_loginScannerActive,
- userDetails: state.apiReducer.userDetails,
- }
+ return {
+ token: state.apiReducer.token,
+ loggedIn: state.apiReducer.loggedIn,
+ onHold: state.apiReducer.onHold,
+ logged: state.apiReducer.logged,
+ failedAttempt: state.apiReducer.failedAttempt,
+ UI_loginScannerActive: state.uiReducer.UI_loginScannerActive,
+ userDetails: state.apiReducer.userDetails,
+ modalOpen: state.apiReducer.modalOpen,
+ modalInfo: state.apiReducer.modalInfo,
+ type: state.apiReducer.type
+ };
};
-mapDispatchToProps = (dispatch) => {
-
- return bindActionCreators(Actions, dispatch);
+mapDispatchToProps = dispatch => {
+ return bindActionCreators(Actions, dispatch);
};
-
-export default connect(mapStateToProps, mapDispatchToProps)(App);
\ No newline at end of file
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(App);
diff --git a/App/app/screens/Calendar.js b/App/app/screens/Calendar.js
index bb216504..b68a44a0 100644
--- a/App/app/screens/Calendar.js
+++ b/App/app/screens/Calendar.js
@@ -1,397 +1,415 @@
-import * as React from 'react';
-import {View, StyleSheet, Dimensions, Image, ScrollView, Text, Button, TouchableOpacity, Animated} from 'react-native';
-import {TabView, TabBar, SceneMap} from 'react-native-tab-view';
+import * as React from "react";
import {
- RkButton, RkCard, RkText,
- RkTheme
-} from 'react-native-ui-kitten';
-import Timeline from 'react-native-timeline-feed'
+ View,
+ StyleSheet,
+ Dimensions,
+ Image,
+ ScrollView,
+ Text,
+ Button,
+ TouchableOpacity,
+ Animated
+} from "react-native";
+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 * as Progress from "react-native-progress";
+import { connect } from "react-redux";
-import {connect} from 'react-redux';
+import { bindActionCreators } from "redux";
-import {bindActionCreators} from 'redux';
+import * as Actions from "../store/actions"; //Import your actionss
-import * as Actions from '../store/actions'; //Import your actionss
+const formatObj = obj => {
+ let a = {};
+ a.push({});
-const formatObj = (obj) => {
-
- let a = {};
-
- a.push({})
-
- return a
-
+ return a;
};
-
-const ThirdRoute = () => (
-
-);
-
-
-const FourthRoute = () => (
-
-);
-
-
class Calendar extends React.Component {
-
- state = {
- index: 0,
- routes: [
- {key: 'first', weekDay: 'sex', day:12},
- {key: 'second', weekDay: 'sab',day:13},
- {key: 'third', weekDay: 'dom', day:14},
- {key: 'fourth', weekDay: 'seg', day:15},
+ state = {
+ index: 0,
+ routes: [
+ { key: "first", weekDay: "sex", day: 12 },
+ { key: "second", weekDay: "sab", day: 13 },
+ { key: "third", weekDay: "dom", day: 14 },
+ { key: "fourth", weekDay: "seg", day: 15 }
+ ],
+ CP: "SEM",
+ cpColor: "white",
+ careerPath: { name: "", color: "" }
+ };
- ],
- };
+ componentDidMount() {
+ this.props.getEvents(this.props.user);
- componentDidMount() {
+ this.props.getSessions(this.props.userDetails.token);
+ }
- this.props.getEvents(this.props.user);
- console.log('didMount');
- console.log(this.props.events);
- }
+ _openDetails = () => {
+ console.log("los");
+ };
- _openDetails=()=>{
-
- console.log("los");
- }
-
- renderDetail = ({item, index}) => {
- const {navigate} = this.props.navigation;
- //
- return (
- navigate('calendarDetail', { info: item })} >
-
-
-
- {item.name}
- Local: 1
-
-
-
-
-
- {item.description}
-
-
- {item.Enrolled} / {item.MaxAttendees}
-
-
-
-
-
-
- );
- }
-
-
-
- _update = () => {
- this.setState({user: this.props.user});
- console.log(this.props.events);
- }
-
-
- _renderTabBar = props => {
- const inputRange = props.navigationState.routes.map((x, i) => i);
-
- return (
-
- {props.navigationState.routes.map((route, i) => {
- const bgcolor = props.position.interpolate({
- inputRange,
- outputRange: inputRange.map(
- inputIndex => (inputIndex === i ? '#CC1A17' : 'rgba(0,0,0,0)')
- ),
- });
- const color = props.position.interpolate({
- inputRange,
- outputRange: inputRange.map(
- inputIndex => (inputIndex === i ? 'white' : 'black')
- ),
- });
-
-
- return (
- this.setState({ index: i })}>
-
- {route.weekDay}
- {route.day}
-
-
- );
- })}
+ renderDetail = ({ item, index }) => {
+ const { navigate } = this.props.navigation;
+ //
+ return (
+ navigate("calendarDetail", { info: item })}
+ >
+
+
+ {item.name}
+ Local: 1
- );
- };
-
- constructor() {
-
- super()
-
- const archeryImgSource = require('../assets/img/archery.png');
- const badmintonImgSource = require('../assets/img/badminton.png');
- const lunchImgSource = require('../assets/img/lunch.png');
- const soccerImgSource = require('../assets/img/soccer.png');
- const dumbbellImgSource = require('../assets/img/dumbbell.png');
-
- const ArcheryImage = (props) => ;
- const BadmintonImage = (props) => ;
- const LunchImage = (props) => ;
- const SoccerImage = (props) => ;
- const DumbbellImage = (props) => ;
- const VectorIconImage = (props) => ;
-
- this.data = [
-
-
-
- ]
- }
-
- render() {
-
- const FirstRoute = () => (
-
-
-
- index.toString()}
-
-
- />
-
-
-
-
- )
- const SecondRoute = () => (
-
-
-
- index.toString()}
-
-
- />
-
-
-
-
- )
-
-
- return (
-
-
-
- WEB DEVELOPMENT
-
-
- this.setState({index})}
- initialLayout={{width: Dimensions.get('window').width, height: Dimensions.get('window').height}}
- style={{backgroundColor:"#F2F2F2"}}
- indicatorStyle={{ backgroundColor: 'pink' }}
- />
+
+ {item.description}
+
+
+
+ {item.Enrolled} / {item.MaxAttendees}
+
- );
- }
+
+
+
+ );
+ };
+
+ _update = () => {
+ this.setState({ user: this.props.user });
+ console.log(this.props.events);
+ };
+
+ _renderTabBar = props => {
+ const inputRange = props.navigationState.routes.map((x, i) => i);
+
+ return (
+
+ {props.navigationState.routes.map((route, i) => {
+ const bgcolor = props.position.interpolate({
+ inputRange,
+ outputRange: inputRange.map(inputIndex =>
+ inputIndex === i ? "#CC1A17" : "rgba(0,0,0,0)"
+ )
+ });
+ const color = props.position.interpolate({
+ inputRange,
+ outputRange: inputRange.map(inputIndex =>
+ inputIndex === i ? "white" : "black"
+ )
+ });
+
+ return (
+ this.setState({ index: i })}
+ >
+
+ {route.weekDay}
+
+
+ {route.day}
+
+
+ );
+ })}
+
+ );
+ };
+
+ constructor() {
+ super();
+ }
+
+ render() {
+ const ThirdRoute = () => (
+
+ {this.props.events != undefined && (
+ index.toString()}
+ />
+ )}
+
+ );
+
+ const FourthRoute = () => (
+
+ {this.props.events != undefined && (
+ index.toString()}
+ />
+ )}
+
+ );
+ const FirstRoute = () => (
+
+ {this.props.events != undefined && (
+ index.toString()}
+ />
+ )}
+
+ );
+ const SecondRoute = () => (
+
+ {this.props.events != undefined && (
+ index.toString()}
+ />
+ )}
+
+ );
+
+ return (
+
+
+ {this.props.careerPath != undefined && (
+
+ {this.props.careerPath.name}
+
+ )}
+
+ this.setState({ index })}
+ initialLayout={{
+ width: Dimensions.get("window").width,
+ height: Dimensions.get("window").height
+ }}
+ style={{ backgroundColor: "#F2F2F2" }}
+ indicatorStyle={{ backgroundColor: "pink" }}
+ />
+
+ );
+ }
}
const styles = StyleSheet.create({
- tabBar: {
- flexDirection: 'row',
- paddingTop:0,
- marginTop:0,
- backgroundColor:'white',
- borderWidth: 1,
- borderRadius: 2,
- borderColor: '#ddd',
- borderBottomWidth: 0,
- shadowColor: '#000',
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 0.8,
- shadowRadius: 2,
- elevation: 2,
-
-
- },
- tabItem: {
- flex: 1,
- alignItems: 'center',
- padding: 10,
- },
- details: {
- backgroundColor: "#FFFFFF",
- borderBottomRightRadius: 10,
- borderBottomLeftRadius: 10,
- padding: 10,
- paddingTop:0
-
- },
- description: {
- padding: 10,
- paddingLeft:0,
- paddingTop:0
-
- },
- title: {
- color: '#212121',
- fontWeight: 'bold',
- fontSize: 15,
-
- },
- titleContainer:{
- padding: 10
- },
- event: {
- borderRadius: 5,
- backgroundColor: "#FFFFFF",
- marginLeft:-25,
+ tabBar: {
+ flexDirection: "row",
+ paddingTop: 0,
+ marginTop: 0,
+ backgroundColor: "white",
+ borderWidth: 1,
+ borderRadius: 2,
+ borderColor: "#ddd",
+ borderBottomWidth: 0,
+ shadowColor: "#000",
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.8,
+ shadowRadius: 2,
+ elevation: 2
+ },
+ tabItem: {
+ flex: 1,
+ alignItems: "center",
+ padding: 10
+ },
+ details: {
+ backgroundColor: "#FFFFFF",
+ borderBottomRightRadius: 10,
+ borderBottomLeftRadius: 10,
+ padding: 10,
+ paddingTop: 0
+ },
+ description: {
+ padding: 10,
+ paddingLeft: 0,
+ paddingTop: 0
+ },
+ title: {
+ color: "#212121",
+ fontWeight: "bold",
+ fontSize: 15
+ },
+ titleContainer: {
+ padding: 10
+ },
+ event: {
+ borderRadius: 5,
+ backgroundColor: "#FFFFFF",
+ marginLeft: -25,
- shadowColor: "#000",
- shadowOffset: { width: 0, height: 2,},
- shadowOpacity: 0.25,
- shadowRadius: 1,
- elevation: 2,
- marginRight:2
-
-
- },
- scene: {
- flex: 1,
- },
- contentContainer: {
- //paddingVertical: 20,
- backgroundColor:'#F2F2F2'
- }
+ shadowColor: "#000",
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.25,
+ shadowRadius: 1,
+ elevation: 2,
+ marginRight: 2
+ },
+ scene: {
+ flex: 1
+ },
+ contentContainer: {
+ //paddingVertical: 20,
+ backgroundColor: "#F2F2F2"
+ }
});
-RkTheme.setType('RkCard', 'story', {
- img: {
- height: 100,
- opacity: 0.7
- },
- header: {
- alignSelf: 'center'
- },
- content: {
- alignSelf: 'center'
- }
+RkTheme.setType("RkCard", "story", {
+ img: {
+ height: 100,
+ opacity: 0.7
+ },
+ header: {
+ alignSelf: "center"
+ },
+ content: {
+ alignSelf: "center"
+ }
});
-
function mapStateToProps(state, props) {
-
- return {
-
- token: state.apiReducer.token,
- user: state.apiReducer.user,
- logged: state.apiReducer.logged,
- events: state.apiReducer.events
-
- }
+ return {
+ token: state.apiReducer.token,
+ user: state.apiReducer.user,
+ logged: state.apiReducer.logged,
+ events: state.apiReducer.events,
+ userDetails: state.apiReducer.userDetails,
+ sessions: state.apiReducer.sessions,
+ careerPath: state.apiReducer.careerPath,
+ a: state.apiReducer.a,
+ b: state.apiReducer.b,
+ c: state.apiReducer.c,
+ d: state.apiReducer.d
+ };
}
function mapDispatchToProps(dispatch) {
-
- return bindActionCreators(Actions, dispatch);
+ return bindActionCreators(Actions, dispatch);
}
-export default connect(mapStateToProps, mapDispatchToProps)(Calendar);
\ No newline at end of file
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Calendar);
diff --git a/App/app/screens/Eventos.js b/App/app/screens/Eventos.js
index 9a7e42a5..043d39c4 100644
--- a/App/app/screens/Eventos.js
+++ b/App/app/screens/Eventos.js
@@ -1,57 +1,47 @@
-import * as React from 'react';
-import {
- View,
- StyleSheet,
- Dimensions,
- Text
-} from 'react-native';
-import { TabView, TabBar, SceneMap } from 'react-native-tab-view';
-
+import * as React from "react";
+import { View, StyleSheet, Dimensions, Text, Button } from "react-native";
+import { TabView, TabBar, SceneMap } from "react-native-tab-view";
const FirstRoute = () => (
-
+
);
const SecondRoute = () => (
-
+
);
-
const ThirdRoute = () => (
-
+
);
const FourthRoute = () => (
-
+
);
-
-
-
-
-export default class Eventos extends React.Component {
-
+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' },
+ index: 0,
+ routes: [
+ { key: "first", title: "Festarola" },
+ { key: "second", title: "Febrada" },
+ { key: "third", title: "Rally" },
+ { key: "fourth", title: "Peddy" }
+ ]
+ };
- ],
-};
-
-render() {
- return (
-
- asd
-
- );
-}
+ render() {
+ return (
+
+
+ );
+ }
}
const styles = StyleSheet.create({
scene: {
- flex: 1,
- },
-});
\ No newline at end of file
+ flex: 1
+ }
+});
diff --git a/App/app/screens/choosePath.js b/App/app/screens/choosePath.js
index 0429692a..ce320784 100644
--- a/App/app/screens/choosePath.js
+++ b/App/app/screens/choosePath.js
@@ -1,427 +1,508 @@
-import * as React from 'react';
+import * as React from "react";
import {
- View,
- StyleSheet,
- Dimensions,
- Image,
- ScrollView,
- Text,
- Button,
- TouchableOpacity,
- Picker,
- CheckBox,
- ActivityIndicator,
- SectionList,
- FlatList
- } from 'react-native';
+ View,
+ StyleSheet,
+ Dimensions,
+ ScrollView,
+ Text,
+ Button,
+ TouchableOpacity,
+ Picker,
+ ActivityIndicator,
+
+ FlatList
+} from "react-native";
+import moment from "moment";
-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 Modal from "react-native-modal";
-import {connect} from 'react-redux';
+import * as Progress from "react-native-progress";
-import {bindActionCreators} from 'redux';
+import { connect } from "react-redux";
+
+import { bindActionCreators } from "redux";
+
+import * as Actions from "../store/actions"; //Import your actionss
+import AwesomeAlert from 'react-native-awesome-alerts';
-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 { Dropdown } from 'react-native-material-dropdown';
-import {Card, Divider} from 'react-native-elements'
-import IconF from "react-native-vector-icons/Foundation"
-
-import LinearGradient from 'react-native-linear-gradient';
+import FitImage from "react-native-fit-image";
-const formatObj = (obj) => {
-
- let a = {};
-
- a.push({})
-
- return a
-
-};
+import { Divider } from "react-native-elements";
+import LinearGradient from "react-native-linear-gradient";
+
+import IconFA from "react-native-vector-icons/FontAwesome5";
-
class choosePath extends React.Component {
+ _verifySession = Id => {
+ var sessions = this.props.user.Sessions;
+ for (let key in sessions) {
+ if (sessions[key].Id == Id) return true;
+ // cenas.push(result[key]);
+ console.log();
+ }
+ };
+ static navigationOptions = ({ navigation }) => ({
+ headerTitleStyle: { textAlign: "center", alignSelf: "center" },
+ headerStyle: {
+ backgroundColor: "rgba(0,0,0,0)",
+ shadowRadius: 0,
+ elevation: 0
+ }
+ });
- static navigationOptions = ({ navigation }) => ({
-
- headerTitleStyle : {textAlign: 'center',alignSelf:'center'},
- headerStyle:{
- backgroundColor:'rgba(0,0,0,0)',
- shadowRadius:0,
- elevation:0
- },
- });
+ state = {
+ calendar: {},
+ guest: "9"
+ };
- state = {
- calendar:{},
- guest:'9'
+ _mount = () => {
+ var sessions = this.props.sessions;
+
+ for (let key in sessions) {
+
+ if (sessions[key].Name == "IA") {
+ this.setState({ guest: "9" });
+ }
+ //...
+
+ }
+ };
+ componentDidMount() {
+ // this.props.getEvents(this.props.user);
+ this.props.getAvailableGuestlists(this.props.userDetails.token);
+ this.props.getSessions(this.props.userDetails.token);
+ this._mount();
+
+ //console.log('didMount');
+ // console.log(this.props.events);
+ }
+
+ _update = () => {
+ this.setState({ user: this.props.user });
+ console.log(this.props.events);
+ };
+
+ _findPath = id => {
+ var sessions = this.props.sessions;
+
+ for (let key in sessions) {
+ if (sessions[key].Name == id) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ constructor() {
+ super();
+ this.state = {
+ showAlert:true,
+ Blocks: [],
+ onHoldBlocks: true,
+ checked: true,
+ modalVisible: false,
+ isModalVisible: false,
};
- componentDidMount() {
+ this.data = [];
+ }
+ onPress = () => {
+
+ };
- // this.props.getEvents(this.props.user);
- this.props.getAvailableGuestlists(this.props.userDetails.token)
- console.log('didMount');
- console.log(this.props.events);
- }
+ _s() {
+
+ this.props.signSession(this.props.userDetails.token, item[index].Id);
+ }
+ getCareerPaths = () => {
+ this.props.getAvailableGuestlists(this.props.userDetails.token);
+ console.log(this.props.calendar);
+ };
+ _keyExtractor = (item, index) => item.id;
+ _renderItem = ({ item }) => (
+
+ );
+ _toggleModal = () =>
+ this.setState({ isModalVisible: !this.state.isModalVisible });
- _update = () => {
- this.setState({user: this.props.user});
- console.log(this.props.events);
- }
+
+ _onPressItem = id => {
+ // updater functions are preferred for transactional updates
+ this.setState(state => {
+ // copy the map rather than modifying state.
+ const selected = new Map(state.selected);
+ selected.set(id, !selected.get(id)); // toggle
+ return { selected };
+ });
+ };
+ _render = ({ item }) => {
+ Cenas: {item.Name};
+ };
- constructor() {
+ render() {
+ return (
+
+
+
- super()
-
-
-
- this.data = [
-
-
-
- ]
- }
- getCareerPaths=()=>{
-
- this.props.getAvailableGuestlists(this.props.userDetails.token)
- console.log(this.props.calendar)
- }
- _keyExtractor = (item, index) => item.id;
-
- _renderItem = ({item}) => (
-
- );
- _onPressItem = (id) => {
- // updater functions are preferred for transactional updates
- this.setState((state) => {
- // copy the map rather than modifying state.
- const selected = new Map(state.selected);
- selected.set(id, !selected.get(id)); // toggle
- return {selected};
- });
- };
-
- render() {
-
-
- return (
-
-
-
- {this.state.guest=='9' &&
- Empresa responsável:
-
-
- Critical Software
- A CRITICAL Software fornece sistemas e serviços de software para segurança e
-aplicações essenciais aos negócios.
-
-
-
-
-
-}
-{this.state.guest=='10' &&
- Empresa responsável:
-
-
- Altice
- Altice é uma multinacional neerlandesa de telecomunicações, conteúdos, media, entretenimento e publicidade.
-
-
-
-
-
-}
-
-
-
-
-
-
-
- {
- this.setState({guest: itemValue})
- this.props.waitChangeGuest();
- this.props.changeGuestList(this.props.userDetails.token,itemValue)
- this.props.waitChangeGuest();
- this.props.getAvailableSessions(this.props.userDetails.token);
-
-
- }
-
- }>
-
-
-
-
-
-
-
-
-
- (
-
+ {this._findPath("IA") && (
+
+
+ {" "}
+ Empresa responsável:{" "}
+
+
+
+
+ Critical Software
+
+
+ A CRITICAL Software fornece sistemas e serviços de software
+ para segurança e aplicações essenciais aos negócios.
+
+
+
+
+
+
+
+ )}
+ {this._findPath("NET") && (
+
+
+ {" "}
+ Empresa responsável:{" "}
+
+
+
+
+ Altice
+
+
+ Altice é uma multinacional neerlandesa de telecomunicações,
+ conteúdos, media, entretenimento e publicidade.
+
+
+
+
+
+
+
)}
- keyExtractor={item => item.email}
- />
-
- { !this.props.changingGuest &&
-
-
-
-
-
- 9:00
- até
-
- 9:30
-
-
-
-
+
+
+ {
+ this.setState({ guest: itemValue });
+ this.props.timerChangeGuest();
+ this.props.waitChangeGuest();
+ this.props.changeGuestList(
+ this.props.userDetails.token,
+ itemValue
+ );
+
+ // this.props.waitChangeGuest();
+ // this.props.getAvailableSessions(this.props.userDetails.token);
+
+ // this.props.waitChangeGuest();
+
+ // this.props.getSessionBlocks(this.props.sessions)
+ }}
+ >
+
+
+
+
+
+
+
+
+
+
+
+ {!this.props.changingGuest && (
+ (
+
+
+
+ {moment(item[0].SessionStart).format("HH:mm")}
+
+ às
+
+ {moment(item[0].SessionEnd).format("HH:mm")}
+
+
+
+ (
+
+ {this._verifySession(item[index].Id) && (
+ {}}
+ style={{ flex: 1, alignSelf: "center" }}
+ >
+
+
+
+
+ )}
+ {!this._verifySession(item[index].Id) && (
+ {
+ this.props.waitChangeGuest()
+ this.props.signSession(
+ this.props.userDetails.token,
+ item[index].Id
+ );
+ }}
+ style={{ flex: 1, alignSelf: "center" }}
+ >
+
+
+
+
+ )}
- this.setState({ checkbox1: !this.state.checkbox1 })}
- />
-
- Nome da palestra
- 12 Lugares disponíveis
-
-
-
-
-
+
+ this.props.navigation.navigate("febrada")
+ }
+ >
+
+
+ {item[index].Name}
+
+
+ {item[index].MaxAttendees -
+ item[index].Enrolled}{" "}
+ Lugares disponíveis
+
+
+
+
-
-
-
-
- this.setState({ checkbox1: !this.state.checkbox1 })}
-/>
-
- Nome da palestra
- 12 Lugares disponíveis
-
-
-
-
-
-
-
-
-
-
-
- this.setState({ checkbox1: !this.state.checkbox1 })}
-/>
-
- Nome da palestra
- 12 Lugares disponíveis
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ )}
+ />
- }
- {this.props.changingGuest &&
+
+ )}
+ />
+ )}
+
+
-
- }
-
-
-
-
- );
- }
-
+ {(this.props.changingGuest || this.props.Blocks == true) && (
+
+ )}
+
+
+ );
+ }
}
const styles = StyleSheet.create({
- companyLogo:{
- backgroundColor:'white',
- margin:20,
- width:SCREEN_WIDTH*0.35,
- borderRadius:3,
- padding:5
- },
- companyDescription:{
- // backgroundColor:'white',
- margin:20,
- marginRight:0,
- width:SCREEN_WIDTH*0.5,
- borderRadius:3,
- },
- sessionInfo:{
- margin:5
- },
- sessionTitle:{
- fontSize:15,
- fontWeight:'bold'
- },
- day:{
- margin:10
- },
- dayText:{
- fontSize:20,
- color: '#CC1A17',
- textAlign: 'center',
-
- },
- time:{
- alignContent:'center',
- width:SCREEN_WIDTH*0.20,
- backgroundColor:'white'
- },
-
- block:{
-
- flex:1,
- flexDirection:'row',
- backgroundColor:'red',
- margin:10,
- borderRadius:5
-
- },
-
- companyContainer:{
- flex:1,
- // backgroundColor:'blue',
-
- flexDirection:'row',
- marginTop:0
-
-
+ companyLogo: {
+ backgroundColor: "white",
+ margin: 20,
+ width: SCREEN_WIDTH * 0.35,
+ borderRadius: 3,
+ padding: 5
+ },
+ companyDescription: {
+ // backgroundColor:'white',
+ margin: 20,
+ marginRight: 0,
+ width: SCREEN_WIDTH * 0.5,
+ borderRadius: 3
+ },
+ sessionInfo: {
+ margin: 5
+ },
+ sessionTitle: {
+ fontSize: 15,
+ fontWeight: "bold"
+ },
+ day: {
+ margin: 10
+ },
+ dayText: {
+ fontSize: 20,
+ color: "#CC1A17",
+ textAlign: "center"
+ },
+ time: {
+ alignContent: "center",
+ width: SCREEN_WIDTH * 0.23,
+ backgroundColor: "white"
},
-
- sessions:{
- flex:1,
- flexDirection:'column',
-
- backgroundColor:'white',
-
+ block: {
+ flex: 1,
+ flexDirection: "row",
+ backgroundColor: "red",
+ margin: 10,
+ borderRadius: 5
},
- page:{
- backgroundColor:'#eeeeee',
-
- },
- pickerCareer:{
-
- paddingLeft:30,
- paddingRight:30,
- backgroundColor:'white',
- width:SCREEN_WIDTH,
+ companyContainer: {
+ flex: 1,
+ // backgroundColor:'blue',
+ flexDirection: "row",
+ marginTop: 0
},
- session:{
- margin:10,
- flex:1,
- flexDirection:'row',
-
+
+ sessions: {
+ flex: 1,
+ flexDirection: "column",
+
+ backgroundColor: "white"
+ },
+
+ page: {
+ backgroundColor: "#eeeeee"
+ },
+ pickerCareer: {
+ paddingLeft: 30,
+ paddingRight: 30,
+ backgroundColor: "white",
+ width: SCREEN_WIDTH
+ },
+ session: {
+ margin: 10,
+ flex: 1,
+ flexDirection: "row"
}
-
});
-
-
function mapStateToProps(state, props) {
-
- return {
-
- // token: state.apiReducer.token,
- user: state.apiReducer.user,
- logged: state.apiReducer.logged,
- events: state.apiReducer.events,
- userDetails: state.apiReducer.userDetails,
- calendar : state.apiReducer.calendar,
- changingGuest : state.apiReducer.changingGuest,
- sessions:state.apiReducer.sessions,
-
-
- }
+ return {
+ // token: state.apiReducer.token,
+ showAlert: state.apiReducer.showAlert,
+ user: state.apiReducer.user,
+ logged: state.apiReducer.logged,
+ events: state.apiReducer.events,
+ userDetails: state.apiReducer.userDetails,
+ calendar: state.apiReducer.calendar,
+ changingGuest: state.apiReducer.changingGuest,
+ sessions: state.apiReducer.sessions,
+ Blocks: state.apiReducer.Blocks,
+ showAlert: state.apiReducer.showAlert
+ };
}
function mapDispatchToProps(dispatch) {
-
- return bindActionCreators(Actions, dispatch);
+ return bindActionCreators(Actions, dispatch);
}
-export default connect(mapStateToProps, mapDispatchToProps)(choosePath);
\ No newline at end of file
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(choosePath);
diff --git a/App/app/store/actions/actionTypes.js b/App/app/store/actions/actionTypes.js
index a4a0036c..e2e128e8 100644
--- a/App/app/store/actions/actionTypes.js
+++ b/App/app/store/actions/actionTypes.js
@@ -31,4 +31,7 @@ export const UI_LOGIN_NOINTERNET='UI_LOGIN_NOINTERNET'
export const UI_LOGIN_OPEN_SCANNER='UI_LOIN_OPEN_SCANNER'
-//HOME
\ No newline at end of file
+
+
+export const OPEN_MODAL='OPEN_MODAL'
+export const CLOSE_MODAL='CLOSE_MODAL'
\ No newline at end of file
diff --git a/App/app/store/actions/api.js b/App/app/store/actions/api.js
index 4b54967f..b7e833b0 100644
--- a/App/app/store/actions/api.js
+++ b/App/app/store/actions/api.js
@@ -1,97 +1,281 @@
-import { AsyncStorage } from 'react-native';
+import { AsyncStorage } from "react-native";
-import { NetInfo } from 'react-native';
+import { NetInfo } from "react-native";
+var _ = require("lodash");
-import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS, GET_CAREERS, GET_SESSIONS, CHANGE_GUEST, WAIT_CHANGE } from "./actionTypes" //Import the actions types constant we defined in our actions
+import {
+ TIMERWAIT_CHANGE,
+ SESSION_BLOCKS,
+ DATA_AVAILABLE,
+ API_LOGIN,
+ CHECK_USER,
+ LOGOUT_USER,
+ USER_INFO,
+ HOLD,
+ GET_EVENTS,
+ GET_CAREERS,
+ GET_SESSIONS,
+ CHANGE_GUEST,
+ WAIT_CHANGE,
+ SIGN_SESSION,
+ OPEN_MODAL
+} from "./actionTypes"; //Import the actions types constant we defined in our actions
-import moment from 'moment'
+import moment from "moment";
-import { compose } from 'redux';
-
-const axios = require('axios');
+import { compose } from "redux";
+import tap from "lodash/fp/tap";
+import flow from "lodash/fp/flow";
+import groupBy from "lodash/fp/groupBy";
+import { colors } from "react-native-elements";
-axios.defaults.baseURL = 'http://enei2019.uingress.com/internal/api'
+const axios = require("axios");
+
+axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api";
//http://enei2019.uingress.com/internal/api/Attendee/Edit
+const map = require("lodash/fp/map").convert({ cap: false });
-export function updateUser(token, user){
-
- axios.defaults.headers.common = {'Authorization': `bearer ${token.access_token}`}
-
- console.log("asdasdasdasd")
- return (dispatch)=>{
- axios.post('/Attendee/Edit', user).then(a=>{
- console.log(a);
- alert("guardado com sucesso")
- dispatch({
- type: UPDATE_USER
- // guests: response.data
-
- });
- }).catch(b=>{
-
- alert("Erro a guardar os dados")
+export function openModal(info, t) {
+ return dispatch => {
+ dispatch({
+ type: OPEN_MODAL,
+ modalInfo: info,
+ modalType: t
});
+ };
}
+export function closeModal() {
+ return dispatch => {
+ dispatch({
+ type: OPEN_MODAL,
+ modalInfo: info
+ });
+ };
}
-
-export const waitChangeGuest= ()=>{
- return (dispatch)=>{
- dispatch({
- type: WAIT_CHANGE,
- });
- }
-
-}
-
-export const connectionState = (status) => {
-
- console.log(status);
- return { type: 'CHANGE_CONNECTION_STATUS', isConnected: status };
+export function updateUser(token, user) {
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
};
-
-
-
-///Attendee/AvailableGuestlists
-
-
-
-
-export function getAvailableGuestlists(token){
-
-
-
- axios.defaults.headers.common = {'Authorization': `bearer ${token.access_token}`}
-
- return (dispatch)=>{
-
- axios.get('/Attendee/AvailableGuestlists')
- .then(function (response) {
-
- // handle success
- console.log(response);
- dispatch({
- type: GET_CAREERS,
- guests: response.data
-
- });
- })
- .catch(function (error) {
- // handle error
- console.log(error);
- })
- .then(function () {
- // always executed
+ return dispatch => {
+ axios
+ .post("/Attendee/Edit", user)
+ .then(a => {
+ console.log(a);
+ alert("guardado com sucesso");
+ dispatch({
+ type: UPDATE_USER
+ // guests: response.data
});
+ })
+ .catch(b => {
+ alert("Erro a guardar os dados");
+ });
+ };
+}
+function getCareerPath(sessions) {
+ careerPath = "Sem Career Path";
+ careerColor = "white";
+
+ for (let key in sessions) {
+ if (sessions[key].Name == "IA") {
+ careerPath = "Artificial Inteligence";
+ careerColor='#CC1A17'
}
+ if (sessions[key].Name == "IOT") {
+ careerPath = "Internet of Things";
+ careerColor= "green"
+ }
+ if (sessions[key].Name == "WEB") {
+ careerPath = "Web Development";
+ careerColor="purple"
+ }
+ if (sessions[key].Name == "NET") {
+ careerPath = "Networking and Security";
+ careerColor="blue"
+ }
+ if (sessions[key].Name == "MOB") {
+ careerPath = "Mobile Development";
+ careerColor="orange"
+ }
+ if(sessions[key].Name=="DS"){
+ careerPath="Data Science"
+ careerColor="yellow"
+ }
+ }
+ return { name: careerPath, color: careerColor };
+}
+export const waitChangeGuest = () => {
+ return dispatch => {
+ dispatch({
+ type: WAIT_CHANGE
+ });
+ };
+};
+export const timerChangeGuest = () => {
+ return dispatch => {
+ dispatch({
+ type: TIMERWAIT_CHANGE
+ });
+ };
+};
+
+export const connectionState = status => {
+ console.log(status);
+ return { type: "CHANGE_CONNECTION_STATUS", isConnected: status };
+};
+
+//inscrição em palestra através de ID
+export function signSession(token, idSession) {
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+
+ var obj = {
+ IdSession: idSession,
+ Direction: 0
+ };
+
+ return dispatch => {
+ //adiciona participante a uma palestra
+ axios
+ .post("/Session/AddAttendee", obj)
+ //se não existir erro na chamada...
+ .then(a => {
+ if (a.data.Success) {
+ axios
+ .get("/Attendee/AvailableSessions")
+
+ .then(function(response) {
+ console.log(response);
+
+ var sessions = response.data;
+ var careerPath = getCareerPath(sessions);
+ var cenas = [];
+
+ const result = flow(groupBy("SessionStart"))(response.data);
+
+ for (let key in result) {
+ result[key].option = 0;
+ cenas.push(result[key]);
+ }
+
+ alert("Inscrição efectuada com sucesso");
+
+ //obter informações pessoais:
+ axios
+ .get("/Attendee/Detail")
+
+ .catch(error => {
+ alert(error);
+ })
+ .then(sucess => {
+ dispatch({
+ type: SIGN_SESSION,
+ sessions: response.data,
+ Blocks: cenas,
+ changeGuestList: false,
+ careerPath: careerPath,
+ user: sucess.data
+ });
+ });
+ })
+ .catch(function(error) {
+ alert("Erro a obter sessões disponíveis!!");
+
+ console.log(error);
+ });
+ } else {
+ alert("Erro a inscrever na palestra");
+ dispatch({
+ type: SIGN_SESSION,
+ waitChangeGuest: false
+ });
+ }
+ })
+ .catch(b => {
+ alert("Erro a inscrever na palestra");
+ });
+ };
}
+export function getSessions(token) {
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+ return dispatch => {
+ axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api";
+
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+
+ axios
+ .get("/Attendee/AvailableSessions")
+ .then(function(response) {
+ var sessions = response.data;
+
+ var careerPath = getCareerPath(sessions);
+
+ console.log(careerPath);
+
+ var cenas = [];
+
+ const result = flow(
+ groupBy("SessionStart")
+ // map((Id) => ({Id})),
+ //tap(console.log)
+ )(response.data);
+ for (let key in result) {
+ result[key].option = 0;
+ cenas.push(result[key]);
+ }
+ dispatch({
+ type: GET_SESSIONS,
+ sessions: response.data,
+ Blocks: cenas,
+ careerPath: careerPath
+ //guests: response.data
+ });
+ })
+ .catch(function(error) {
+ alert("Error a obter sessões disponíveis!!");
+ console.log(error);
+ });
+ };
+}
+
+export function getAvailableGuestlists(token) {
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+
+ return dispatch => {
+ axios
+ .get("/Attendee/AvailableGuestlists")
+ .then(function(response) {
+ // handle success
+ console.log(response);
+ dispatch({
+ type: GET_CAREERS,
+ guests: response.data
+ });
+ })
+ .catch(function(error) {
+ // handle error
+ console.log(error);
+ })
+ .then(function() {
+ // always executed
+ });
+ };
+}
/*
8 - group
@@ -103,570 +287,665 @@ export function getAvailableGuestlists(token){
15 - DS
*/
-export function changeGuestList(token, guestID){
- //http://enei2019.uingress.com/internal/api/Attendee/ChangeGuestlist/
-
-
- axios.defaults.headers.common = {'Authorization': `bearer ${token.access_token}`}
-
+export function changeGuestList(token, guestID) {
+
+ //http://enei2019.uingress.com/internal/api/Attendee/ChangeGuestlist/
- return (dispatch)=>{
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
- var full= `/Attendee/ChangeGuestlist/${guestID}`
-console.log(full)
- axios.get(full)
- .then(function (response) {
-
+ return dispatch => {
+ var full = `/Attendee/ChangeGuestlist/${guestID}`;
+
+ axios
+ .get(full)
+ .then(function(response) {
+ console.log(response)
+ axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api";
+
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+
+ axios
+ .get("/Attendee/AvailableSessions")
+
+ .then(function(response) {
// handle success
- console.log(response);
+ //console.log(response);
+
+ var cenas = [];
+ c= getCareerPath(response.data);
+ const result = flow(
+ groupBy("SessionStart")
+ // map((Id) => ({Id})),
+ //tap(console.log)
+ )(response.data);
+
+ for (let key in result) {
+ result[key].option = 0;
+ cenas.push(result[key]);
+ console.log();
+ }
+ console.log(cenas);
dispatch({
- type: CHANGE_GUEST,
- //guests: response.data
-
- });
- })
- .catch(function (error) {
- // handle error
- console.log(response);
- console.log(error);
- })
- .then(function () {
- // always executed
- });
- }
-}
+ type: CHANGE_GUEST,
+ sessions: response.data,
+ Blocks: cenas,
+ careerPath: c
-export function getAvailableSessions(token){
- //http://enei2019.uingress.com/internal/api/Attendee/AvailableSessions
-
- axios.defaults.baseURL = 'http://enei2019.uingress.com/internal/api'
-
- axios.defaults.headers.common = {'Authorization': `bearer ${token.access_token}`}
-
- return (dispatch)=>{
-
- axios.get('/Attendee/AvailableSessions')
- .then(function (response) {
-
- // handle success
- console.log(response);
- dispatch({
- type: GET_SESSIONS,
- sessions: response.data
-
- });
- })
- .catch(function (error) {
+ //guests: response.data
+ });
+ })
+ .catch(function(error) {
alert("Error a obter sessões disponíveis!!");
console.log(error);
- })
- .then(function () {
- // always executed
- });
- }
-
-}
-
-export function getEvents(user){
-
- return (dispatch)=>{
-
- let events = [];
- console.log("chegou aqui")
-
-
- for(let key in user.Sessions){
-
- events.push({
- time: moment(user.Sessions[key].SessionStart).format('h:mm'),
- timeEnd: moment(user.Sessions[key].SessionEnd).format('h:mm'),
- //lineColor:'#009688',
- imageUrl: 'https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/Vjkyj2hBg/welcome-white-sign-with-falling-colorful-confetti-animation-on-white-background_sglmmh3qm__F0013.png',
- description:user.Sessions[key].Description,
- name:user.Sessions[key].Name,
- Enrolled:user.Sessions[key].Enrolled,
- MaxAttendees:user.Sessions[key].MaxAttendees
+ });
})
-
+ .catch(function(error) {
+ // handle error
+ console.log(response);
+ console.log(error);
+ alert("Erro a mudar de career path");
+ })
+ .then(function() {
+ // always executed
+ });
+ };
+}
+export function getSessionBlocks(sessions) {
+ var a;
+ var cenas = [];
+
+ const result = flow(
+ groupBy("SessionStart")
+ // map((Id) => ({Id})),
+ //tap(console.log)
+ )(sessions);
+
+ return dispatch => {
+ for (let key in result) {
+ cenas.push(result[key]);
+ console.log();
}
+ console.log(cenas);
dispatch({
- type: GET_EVENTS,
- events: events
+ type: SESSION_BLOCKS,
+ Blocks: cenas
+ });
+ };
+}
+
+export function getAvailableSessions(token) {
+ //http://enei2019.uingress.com/internal/api/Attendee/AvailableSessions
+
+ axios.defaults.baseURL = "http://enei2019.uingress.com/internal/api";
+
+ axios.defaults.headers.common = {
+ Authorization: `bearer ${token.access_token}`
+ };
+
+ return dispatch => {
+ axios
+ .get("/Attendee/AvailableSessions")
+ .then(function(response) {
+ // handle success
+ console.log(response);
+
+ var cenas = [];
+
+ const result = flow(
+ groupBy("SessionStart")
+ // map((Id) => ({Id})),
+ //tap(console.log)
+ )(response.data);
+ for (let key in result) {
+ cenas.push(result[key]);
+ console.log();
+ }
+
+ dispatch({
+ type: GET_SESSIONS,
+ sessions: response.data,
+
+ Blocks: cenas
+ });
+ })
+ .catch(function(error) {
+ alert("Error a obter sessões disponíveis!!");
+ console.log(error);
+ });
+ };
+}
+
+export function getEvents(user) {
+ return dispatch => {
+ let events = [];
+ console.log("chegou aqui");
+var i=0
+ for (let key in user.Sessions) {
+ events.push({
+ key:i++,
+ time: moment(user.Sessions[key].SessionStart).format("HH:mm"),
+ timeEnd: moment(user.Sessions[key].SessionEnd).format("HH:mm"),
+ //lineColor:'#009688',
+ imageUrl:
+ "https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/Vjkyj2hBg/welcome-white-sign-with-falling-colorful-confetti-animation-on-white-background_sglmmh3qm__F0013.png",
+ description: user.Sessions[key].Description,
+ name: user.Sessions[key].Name,
+ Enrolled: user.Sessions[key].Enrolled,
+ MaxAttendees: user.Sessions[key].MaxAttendees,
+ day: moment(user.Sessions[key].SessionStart).format("DD")
+ });
+ }
+
+
+ const result = flow(
+ groupBy("day")
+
+
+ )(events);
+
+
+ var cenas=[];
+ for (let key in result) {
+ cenas.push(result[key]);
+ console.log();
+ }
+ console.log(".--------")
+ console.log(cenas);
+ console.log(".--------")
+
+ var a=[], b=[],c=[],d=[]
+
+ for (let key in cenas[0]) {
+ a.push({
+ time:cenas[0][key].time ,
+ timeEnd: cenas[0][key].timeEnd,
+ imageUrl:cenas[0][key].imageUrl,
+ description: cenas[0][key].description,
+ name:cenas[0][key].name,
+ Enrolled: cenas[0][key].Enrolled,
+ MaxAttendees: cenas[0][key].MaxAttendees,
+ day: cenas[0][key].day
+ });
+ }
+
+
+
+ for (let key in cenas[1]) {
+ b.push({
+ time:cenas[1][key].time ,
+ timeEnd: cenas[1][key].timeEnd,
+ imageUrl:cenas[1][key].imageUrl,
+ description: cenas[1][key].description,
+ name:cenas[1][key].name,
+ Enrolled: cenas[1][key].Enrolled,
+ MaxAttendees: cenas[1][key].MaxAttendees,
+ day: cenas[1][key].day
+ });
+ }
+ for (let key in cenas[2]) {
+ c.push({
+ time:cenas[2][key].time ,
+ timeEnd: cenas[2][key].timeEnd,
+ imageUrl:cenas[2][key].imageUrl,
+ description: cenas[2][key].description,
+ name:cenas[2][key].name,
+ Enrolled: cenas[2][key].Enrolled,
+ MaxAttendees: cenas[2][key].MaxAttendees,
+ day: cenas[2][key].day
+ });
+ }
+
+ for (let key in cenas[3]) {
+ d.push({
+ time:cenas[3][key].time ,
+ timeEnd: cenas[3][key].timeEnd,
+ imageUrl:cenas[3][key].imageUrl,
+ description: cenas[3][key].description,
+ name:cenas[3][key].name,
+ Enrolled: cenas[3][key].Enrolled,
+ MaxAttendees: cenas[3][key].MaxAttendees,
+ day: cenas[3][key].day
+ });
+ }
+ a=_.sortBy(a, function(o) { return o.time; });
+ b=_.sortBy(b, function(o) { return o.time; });
+ c=_.sortBy(c, function(o) { return o.time; });
+ d=_.sortBy(d, function(o) { return o.time; });
+ dispatch({
+
+ type: GET_EVENTS,
+ events:a,
+ day1:a,
+ day2:b,
+ day3:c,
+ day4:d
});
-
- }
+ };
}
const saveToken = async token => {
-
-
- try {
- await AsyncStorage.setItem('refreshToken', token.refreshToken).catch(a=>{
-
- })
- await AsyncStorage.setItem('userToken', token.access_token).catch(a=>{
-
- })
- await AsyncStorage.setItem('expirationDateToken', token.expirationDateToken.toString()).catch(a=>{
-
- })
-
-
- } catch (error) {
-
- // Error retrieving data
- console.log(error.message);
-
- }
-
- };
-
-
- const getToken = async () => {
-
- obj={}
- try {
-
- obj.access_token = await AsyncStorage.getItem('userToken') || 'none';
- obj.expirationDateToken = await AsyncStorage.getItem('expirationDateToken') || 'none';
- obj.refreshToken = await AsyncStorage.getItem('refreshToken') || 'none';
-
- } catch (error) {
- // Error retrieving data
- console.log(error.message);
- }
- return obj;
-}
+ try {
+ await AsyncStorage.setItem("refreshToken", token.refreshToken).catch(
+ a => {}
+ );
+ await AsyncStorage.setItem("userToken", token.access_token).catch(a => {});
+ await AsyncStorage.setItem(
+ "expirationDateToken",
+ token.expirationDateToken.toString()
+ ).catch(a => {});
+ } catch (error) {
+ // Error retrieving data
+ console.log(error.message);
+ }
+};
+const getToken = async () => {
+ obj = {};
+ try {
+ obj.access_token = (await AsyncStorage.getItem("userToken")) || "none";
+ obj.expirationDateToken =
+ (await AsyncStorage.getItem("expirationDateToken")) || "none";
+ obj.refreshToken = (await AsyncStorage.getItem("refreshToken")) || "none";
+ } catch (error) {
+ // Error retrieving data
+ console.log(error.message);
+ }
+ return obj;
+};
const deleteToken = async () => {
-
- try {
- await AsyncStorage.removeItem('userToken');
- await AsyncStorage.removeItem('expirationDateToken');
- await AsyncStorage.removeItem('refreshToken');
- } catch (error) {
- // Error retrieving data
- console.log(error.message);
- }
+ try {
+ await AsyncStorage.removeItem("userToken");
+ await AsyncStorage.removeItem("expirationDateToken");
+ await AsyncStorage.removeItem("refreshToken");
+ } catch (error) {
+ // Error retrieving data
+ console.log(error.message);
}
+};
-const renewToken=(refresh)=>{
+const renewToken = refresh => {};
-}
+export function login(user, pass) {
+ return dispatch => {
+ console.log("user: " + user + " password: " + pass);
-export function login(user, pass){
+ var details = {
+ username: user,
+ password: pass,
+ grant_type: "password"
+ };
- return (dispatch)=>{
+ var formBody = [];
- console.log('user: ' +user + ' password: '+pass );
+ for (var property in details) {
+ var encodedKey = encodeURIComponent(property);
+
+ var encodedValue = encodeURIComponent(details[property]);
+
+ formBody.push(encodedKey + "=" + encodedValue);
+ }
+
+ formBody = formBody.join("&");
+
+ fetch("http://enei2019.uingress.com/internal/api/token", {
+ method: "POST",
+
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
+ },
+
+ body: formBody
+ })
+ .catch(err => {
+ console.log(err);
+ alert("Erro no login!!");
+
+ alert("error");
+ co;
+ dispatch({
+ type: API_LOGIN,
+ logged: false,
+ failedAttempt: true,
+ tokenData: "error"
+ });
+ })
+ .then(res => res.json())
+ .then(parsed => {
+ if (
+ parsed.error_description ==
+ "Provided username and password is incorrect"
+ ) {
+ dispatch({
+ type: API_LOGIN,
+ logged: false,
+ failedAttempt: true,
+ token: obj,
+ user: { Name: "Henrique" }
+ });
+ }
+ var obj = {
+ access_token: parsed.access_token,
+ expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598,
+ refreshToken: parsed.refresh_token,
+ valid: true
+ };
var details = {
- 'username': user,
- 'password': pass,
- 'grant_type': 'password'
+ username: user,
+ password: pass
};
-
- var formBody = [];
-
- for (var property in details) {
-
- var encodedKey = encodeURIComponent(property);
-
- var encodedValue = encodeURIComponent(details[property]);
-
- formBody.push(encodedKey + "=" + encodedValue);
-
- }
-
- formBody = formBody.join("&");
-
- fetch('https://tickets.enei.pt/internal/api/token', {
-
- method: 'POST',
-
- headers: {
-
- 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
- },
-
- body: formBody
-
- }).catch(err=>{
-
- console.log(err);
- alert("Erro no login!!");
-
- alert("error");
- co
- dispatch({
- type: API_LOGIN,
- logged:false,
- failedAttempt:true,
- tokenData:'error'
- });
- }).then(res=>res.json()).then(parsed=>{
-
- if(parsed.error_description=="Provided username and password is incorrect"){
- dispatch({
- type: API_LOGIN,
- logged:false,
- failedAttempt:true,
- token: obj,
- user:{Name:'Henrique'}
-
- });
- }
- var obj={
- access_token:parsed.access_token,
- expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
- refreshToken:parsed.refresh_token,
- valid:true
- };
-
- var details={
- username:user,
- password:pass
- }
- dispatch({
- type: API_LOGIN,
- logged:true,
- failedAttempt:false,
- token:obj,
- user:{Name:'Henrique'},
- userDetails: details
-
- });
- }
- )
- }
-}
-export function hold(){
- return (dispatch)=>{
dispatch({
- type: HOLD,
- onHold:true
-
+ type: API_LOGIN,
+ logged: true,
+ failedAttempt: false,
+ token: obj,
+ user: { Name: "Henrique" },
+ userDetails: details
});
- }
+ });
+ };
+}
+export function hold() {
+ return dispatch => {
+ dispatch({
+ type: HOLD,
+ onHold: true
+ });
+ };
}
+export function getUserInfo(token) {
+ return dispatch => {
+ //TODO: verificar validade do token
+ console.log('Chamada "getUserInfo"');
-export function getUserInfo(token){
+ var obj = {
+ method: "GET",
+ headers: {
+ Authorization: `Bearer ${token.access_token}`
+ }
+ };
+ fetch("http://enei2019.uingress.com/internal/api/Attendee/Detail", obj)
+ .then(function(res) {
+ console.log(res);
+ let obj = JSON.parse(res._bodyText);
-
- return (dispatch)=>{
-
- //TODO: verificar validade do token
-
- console.log('Chamada "getUserInfo"');
-
- var obj = {
-
- method: 'GET',
- headers: {
-
- 'Authorization': `Bearer ${token.access_token}`,
- },
- }
-
- fetch('http://enei2019.uingress.com/internal/api/Attendee/Detail', obj)
-
- .then(function(res) {
-
- console.log(res);
- let obj = JSON.parse(res._bodyText);
-
- dispatch({ type: USER_INFO, user: obj,onHold:false, logged:true });
-
- }).catch(function(res){
-
- console.log("erro")
- // dispatch({ type: USER_INFO,onHold:false});
- alert("Erro a obter a informação pessoal.")
- })
-
-
-
- }
+ dispatch({ type: USER_INFO, user: obj, onHold: false, logged: true });
+ })
+ .catch(function(res) {
+ console.log("erro");
+ // dispatch({ type: USER_INFO,onHold:false});
+ alert("Erro a obter a informação pessoal.");
+ });
+ };
}
-export function logoutUser(){
- return (dispatch)=>{
-
- deleteToken().then(a=>{
-
- console.log('token apagado');
- dispatch({
- type: LOGOUT_USER,
- loggedIn:false,
- tokenData:'error',
- token:false
- });
- }).catch(err=>{
-
- console.log('errors');
-
- })
-
- }
+export function logoutUser() {
+ return dispatch => {
+ deleteToken()
+ .then(a => {
+ console.log("token apagado");
+ dispatch({
+ type: LOGOUT_USER,
+ loggedIn: false,
+ tokenData: "error",
+ token: false
+ });
+ })
+ .catch(err => {
+ console.log("errors");
+ });
+ };
}
//
-function refreshToken(){
+function refreshToken() {
+ refresh = a.refreshToken;
- refresh=a.refreshToken
-
- //chamar funçao para renovar
- console.log("expirou")
-
- var details = {
+ //chamar funçao para renovar
+ console.log("expirou");
- 'grant_type': 'refresh_token',
- 'refresh_token':refresh
+ var details = {
+ grant_type: "refresh_token",
+ refresh_token: refresh
+ };
- };
+ var formBody = [];
- var formBody = [];
+ for (var property in details) {
+ var encodedKey = encodeURIComponent(property);
- for (var property in details) {
+ var encodedValue = encodeURIComponent(details[property]);
- var encodedKey = encodeURIComponent(property);
+ formBody.push(encodedKey + "=" + encodedValue);
+ }
- var encodedValue = encodeURIComponent(details[property]);
-
- formBody.push(encodedKey + "=" + encodedValue);
+ formBody = formBody.join("&");
- }
+ fetch("http://enei2019.uingress.com/internal/api/token", {
+ method: "POST",
- formBody = formBody.join("&");
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
+ },
- fetch('http://enei2019.uingress.com/internal/api/token', {
+ body: formBody
+ })
+ .then(res => res.json())
+ .then(parsed => {
+ console.log(parsed);
- method: 'POST',
+ if (parsed.error == "invalid_grant") {
+ console.log(formBody);
+ dispatch({ type: CHECK_USER, token: "", logged: false, onHold: false });
+ } else {
+ var obj = {
+ access_token: parsed.access_token,
+ expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598,
+ refreshToken: parsed.refresh_token,
+ valid: true
+ };
- headers: {
+ // deleteToken();
+ saveToken(obj).then(a => {
+ console.log("Token guardado");
+ console.log(obj);
+ dispatch({
+ type: CHECK_USER,
+ token: obj,
+ logged: true,
+ onHold: false
+ });
+ });
+ }
+ })
+ .catch(a => {
+ console.log("erro na api");
+ dispatch({ type: CHECK_USER, token: "", logged: false, onHold: false });
+ });
+}
- 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
- },
-
- body: formBody
+refreshLogin = async (user, pass) => {
+ console.log("login");
- }).then(res=>res.json()).then(parsed=>{
+ console.log("user: " + user + " password: " + pass);
+ var details = {
+ username: user,
+ password: pass,
+ grant_type: "password"
+ };
+
+ var formBody = [];
+
+ for (var property in details) {
+ var encodedKey = encodeURIComponent(property);
+
+ var encodedValue = encodeURIComponent(details[property]);
+
+ formBody.push(encodedKey + "=" + encodedValue);
+ }
+
+ formBody = formBody.join("&");
+
+ fetch("http://enei2019.uingress.com/internal/api/token", {
+ method: "POST",
+
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
+ },
+
+ body: formBody
+ })
+ .catch(err => {
+ console.log(err);
+
+ alert("error");
+ })
+ .then(res => res.json())
+ .then(parsed => {
+ if (
+ parsed.error_description ==
+ "Provided username and password is incorrect"
+ ) {
+ console.error("cenas da vida");
+ } else {
console.log(parsed);
- if(parsed.error=='invalid_grant'){
-
- console.log(formBody);
- dispatch({type: CHECK_USER, token:'', logged:false, onHold:false});
-
- }else{
-
- var obj={
- access_token:parsed.access_token,
- expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
- refreshToken:parsed.refresh_token,
- valid:true
-
-
+ var obj = {
+ access_token: parsed.access_token,
+ expirationDateToken: Math.round(new Date().getTime() / 1000) + 3598,
+ refreshToken: parsed.refresh_token,
+ valid: true
};
-
- // deleteToken();
- saveToken(obj).then(a=>{
- console.log("Token guardado" )
- console.log(obj)
- dispatch({type: CHECK_USER, token:obj, logged:true, onHold:false});
+ go();
+ return obj;
+ }
+ });
+};
+
+go = t => {
+ dispatch({
+ type: CHECK_USER,
+ logged: true,
+ onHold: false,
+ user: { Name: "Henrique" },
+ token: t
+ });
+};
+
+export function checkUser(userDetails) {
+ var u = userDetails;
+
+ return dispatch => {
+ //verifica se existe utilizador em memória
+ if (
+ userDetails.username != undefined &&
+ userDetails.username != "" &&
+ userDetails.password != undefined &&
+ userDetails.password != ""
+ ) {
+ //verifica a validade do token
+ if (
+ Math.round(new Date().getTime() / 1000) >=
+ userDetails.token.expirationDateToken
+ ) {
+ var details = {
+ username: userDetails.username,
+ password: userDetails.password,
+ grant_type: "password"
+ };
+
+ var formBody = [];
+
+ for (var property in details) {
+ var encodedKey = encodeURIComponent(property);
+
+ var encodedValue = encodeURIComponent(details[property]);
+
+ formBody.push(encodedKey + "=" + encodedValue);
+ }
+
+ formBody = formBody.join("&");
+
+ fetch("http://enei2019.uingress.com/internal/api/token", {
+ method: "POST",
+
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
+ },
+ body: formBody
})
- }
-
-
- }).catch(a=>{
- console.log("erro na api")
- dispatch({type: CHECK_USER, token:'', logged:false, onHold:false});
- })
+ .catch(err => {
+ alert("Erro a validar o utilizador");
+ })
+ .then(res => res.json())
+ .then(parsed => {
+ if (
+ parsed.error_description ==
+ "Provided username and password is incorrect"
+ ) {
+ alert("Ups, password ou utilizador errada");
+ } else {
+ console.log(parsed);
-}
-
- refreshLogin= async (user, pass)=>{
-
-
- console.log("login")
-
-
- console.log('user: ' +user + ' password: '+pass );
-
- var details = {
- 'username': user,
- 'password': pass,
- 'grant_type': 'password'
- };
-
- var formBody = [];
-
- for (var property in details) {
-
- var encodedKey = encodeURIComponent(property);
-
- var encodedValue = encodeURIComponent(details[property]);
-
- formBody.push(encodedKey + "=" + encodedValue);
-
- }
-
- formBody = formBody.join("&");
-
- fetch('http://enei2019.uingress.com/internal/api/token', {
-
- method: 'POST',
-
- headers: {
-
- 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
- },
-
- body: formBody
-
- }).catch(err=>{
-
- console.log(err);
-
- alert("error");
-
-
- }).then(res=>res.json()).then(parsed=>{
-
- if(parsed.error_description=="Provided username and password is incorrect"){
-
- console.error("cenas da vida")
-
- }
- else{
-
- console.log(parsed)
-
- var obj={
- access_token:parsed.access_token,
- expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
- refreshToken:parsed.refresh_token,
- valid:true
- };
-
- go();
- return obj;
-
-
- }
-
- }
-
- )
-
-}
-
-
-go=(t)=>{
- dispatch({type: CHECK_USER, logged:true, onHold:false, user:{Name:'Henrique'}, token:t});
-}
-
-
-
-
-export function checkUser(userDetails){
-
- var u= userDetails;
-
- return (dispatch)=>{
-
- //verifica se existe utilizador em memória
- if(
- userDetails.username != undefined &&
- userDetails.username != '' &&
- userDetails.password != undefined &&
- userDetails.password != ''
- ){
-
- //verifica a validade do token
- if(Math.round(new Date().getTime()/1000) >= userDetails.token.expirationDateToken){
-
-
- var details = {
- 'username': userDetails.username,
- 'password': userDetails.password,
- 'grant_type': 'password'
- };
-
- var formBody = [];
-
- for (var property in details) {
-
- var encodedKey = encodeURIComponent(property);
-
- var encodedValue = encodeURIComponent(details[property]);
-
- formBody.push(encodedKey + "=" + encodedValue);
-
- }
-
- formBody = formBody.join("&");
-
- fetch('http://enei2019.uingress.com/internal/api/token', {
-
- method: 'POST',
-
- headers: {
-
- 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
- },
- body: formBody
-
- }).catch(err=>{
-
- alert("Erro a validar o utilizador");
-
- }).then(res=>res.json()).then(parsed=>{
-
- if(parsed.error_description=="Provided username and password is incorrect"){
-
- alert("Ups, password ou utilizador errada");
- }
- else{
-
- console.log(parsed)
-
- var obj={
- access_token:parsed.access_token,
- expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
- refreshToken:parsed.refresh_token,
- valid:true
- };
-
- dispatch({type: CHECK_USER, logged:true, onHold:false, userDetails:u,token:obj});
-
- }
-
- }
- )
- }else{
-
- console.log("Tempo restante token: "+ Math.round((userDetails.token.expirationDateToken-Math.round(new Date().getTime()/1000) )/60) +" Minutos");
-
- //dispatch home
- dispatch({type: CHECK_USER, logged:true, onHold:false, user:{Name:'Henrique'},userDetails:u});
+ var obj = {
+ access_token: parsed.access_token,
+ expirationDateToken:
+ Math.round(new Date().getTime() / 1000) + 3598,
+ refreshToken: parsed.refresh_token,
+ valid: true
+ };
+ dispatch({
+ type: CHECK_USER,
+ logged: true,
+ onHold: false,
+ userDetails: u,
+ token: obj
+ });
}
+ });
+ } else {
+ console.log(
+ "Tempo restante token: " +
+ Math.round(
+ (userDetails.token.expirationDateToken -
+ Math.round(new Date().getTime() / 1000)) /
+ 60
+ ) +
+ " Minutos"
+ );
-
- }
- //utilizador não existe em memória
- else{
-
- dispatch({type: CHECK_USER,logged:false, onHold:false,userDetails:u});
- //dispatch menu de login
- }
- }}
\ No newline at end of file
+ //dispatch home
+ dispatch({
+ type: CHECK_USER,
+ logged: true,
+ onHold: false,
+ user: { Name: "Henrique" },
+ userDetails: u
+ });
+ }
+ }
+ //utilizador não existe em memória
+ else {
+ dispatch({
+ type: CHECK_USER,
+ logged: false,
+ onHold: false,
+ userDetails: u
+ });
+ //dispatch menu de login
+ }
+ };
+}
diff --git a/App/app/store/actions/index.js b/App/app/store/actions/index.js
index 02161b65..282219b8 100644
--- a/App/app/store/actions/index.js
+++ b/App/app/store/actions/index.js
@@ -1,12 +1,20 @@
export {checkUser,
- login,getEvents,
- hold, getUserInfo,
+ login,
+ getEvents,
+ hold,
+ getUserInfo,
logoutUser,
getAvailableGuestlists,
changeGuestList,
waitChangeGuest,
getAvailableSessions,
updateUser,
+ getSessionBlocks,
+ timerChangeGuest,
+ getSessions,
+ signSession,
+ openModal,
+ closeModal
} from "./api"
export {
diff --git a/App/app/store/reducers/api.js b/App/app/store/reducers/api.js
index 5dd9e151..855df7f1 100644
--- a/App/app/store/reducers/api.js
+++ b/App/app/store/reducers/api.js
@@ -1,182 +1,219 @@
-import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS, GET_CAREERS, CHANGE_GUEST, WAIT_CHANGE, GET_SESSIONS } from "../actions/actionTypes" //Import the actions types constant we defined in our actions
-import { REHYDRATE } from 'redux-persist';
+import {
+ DATA_AVAILABLE,
+ API_LOGIN,
+ CHECK_USER,
+ LOGOUT_USER,
+ USER_INFO,
+ HOLD,
+ GET_EVENTS,
+ GET_CAREERS,
+ CHANGE_GUEST,
+ WAIT_CHANGE,
+ GET_SESSIONS,
+ SESSION_BLOCKS,
+ TIMERWAIT_CHANGE,
+ SIGN_SESSION,
+ OPEN_MODAL,
+ CLOSE_MODAL
+} from "../actions/actionTypes"; //Import the actions types constant we defined in our actions
+import { REHYDRATE } from "redux-persist";
+
+let apiState = {
+ isConnected: false,
+ logged: false,
+ onHold: true,
+ user: {},
+ events: [],
+ showAlert: true,
+ failedAttempt: false,
+ userDetails: {
+ username: "",
+ password: "",
+ token: {
+ expirationDateToken: 0,
+ access_token: ""
+ }
+ },
+ calendar: {},
+ changingGuest: false,
+ sessions: {},
+ Blocks: {},
+ onHoldBlocks: true,
+ careerPath:{name:'Sem Career Path', color:'#eeeeee'},
+ a:{},
+ b:{},
+ c:{},
+ d:{}
-let apiState= {
-
- isConnected:false,
- logged:false,
- onHold:true,user:{},
- events:[],
- failedAttempt:false,
- userDetails:{
- username:'',
- password:'',
- token:{
- expirationDateToken:0,
- access_token:''
- }
- },
- calendar:{
-
- },
- changingGuest:false,
- sessions:{}
-
-}
+};
const apiReducer = (state = apiState, action) => {
-
- switch(action.type){
+ switch (action.type) {
+ case REHYDRATE:
+ console.log(action);
+ if (action.payload != undefined) {
+ console.log(action.payload);
- case REHYDRATE:
- console.log(action)
- if(action.payload!=undefined){
-
- console.log( action.payload)
+ var expirationDateTokenA = 0;
+ var access_tokenA = "";
- var expirationDateTokenA=0;
- var access_tokenA='';
+ if (action.payload.apiReducer.userDetails.token != undefined) {
+ if (
+ action.payload.apiReducer.userDetails.token.expirationDateToken !=
+ undefined
+ ) {
+ expirationDateTokenA =
+ action.payload.apiReducer.userDetails.token.expirationDateToken;
+ }
- if(action.payload.apiReducer.userDetails.token!=undefined){
-
- if(action.payload.apiReducer.userDetails.token.expirationDateToken!= undefined){
-
- expirationDateTokenA= action.payload.apiReducer.userDetails.token.expirationDateToken;
- }
-
- if((action.payload.apiReducer.userDetails.token.access_token!= undefined)){
+ if (
+ action.payload.apiReducer.userDetails.token.access_token !=
+ undefined
+ ) {
+ access_tokenA =
+ action.payload.apiReducer.userDetails.token.access_token;
+ }
+ }
- access_tokenA= action.payload.apiReducer.userDetails.token.access_token;
+ return {
+ sessions: action.payload.apiReducer.sessions,
+ // token: action.payload.apiReducer.token,
+ user: action.payload.apiReducer.user,
+ onHoldBlocks: true,
+ userDetails: {
+ token: {
+ expirationDateToken: expirationDateTokenA,
+ access_token: access_tokenA
+ },
+ username: action.payload.apiReducer.userDetails.username,
+ password: action.payload.apiReducer.userDetails.password
+ }
+ };
+ }
- }
-
- }
-
- return {
-
- // token: action.payload.apiReducer.token,
- user: action.payload.apiReducer.user,
-
- userDetails:{
- token:{
- expirationDateToken: expirationDateTokenA,
- access_token:access_tokenA,
-
- },
- username:action.payload.apiReducer.userDetails.username,
- password:action.payload.apiReducer.userDetails.password
- }
- };
- }
+ case "CHANGE_CONNECTION_STATUS":
+ return Object.assign({}, state, {
+ isConnected: action.isConnected
+ });
- case 'CHANGE_CONNECTION_STATUS':
- return Object.assign({}, state, {
- isConnected: action.isConnected,
- });
-
-
- case HOLD:
+ case HOLD:
+ state = Object.assign({}, state, { onHold: true });
+ return state;
- state=Object.assign({},state, { onHold:true });
- return state;
+ case API_LOGIN:
+ state = Object.assign({}, state, {
+ logged: action.logged,
+ //token:action.token,
+ failedAttempt: action.failedAttempt,
+ user: action.user,
+ userDetails: {
+ token: action.token,
+ username: action.userDetails.username,
+ password: action.userDetails.password
+ }
+ });
- case API_LOGIN:
-
-
- state=Object.assign({},state, {
- logged:action.logged,
- //token:action.token,
- failedAttempt: action.failedAttempt,
- user:action.user,
- userDetails: {token:action.token, username:action.userDetails.username, password:action.userDetails.password},
-
-
- });
+ return state;
- return state;
+ case CHECK_USER:
+ var u = action.userDetails;
+ if (action.token != undefined) u.token = action.token;
- case CHECK_USER:
+ state = Object.assign({}, state, {
+ logged: action.logged,
+ onHold: action.onHold,
+ userDetails: u
+ });
- var u= action.userDetails;
- if(action.token!=undefined)
- u.token= action.token;
+ return state;
- state=Object.assign({},state, {logged:action.logged, onHold:action.onHold, userDetails:u });
+ case LOGOUT_USER:
+ state = Object.assign({}, state, { user:{}, userDetails:{}, logged:false});
- return state;
+ return state;
- case LOGOUT_USER:
+ case USER_INFO:
+ state = Object.assign({}, state, {
+ user: action.user,
+ loggedIn: action.loggedIn,
+ onHold: action.onHold
+ });
- state=Object.assign({},state, { logged:false});
+ return state;
- return state;
+ case GET_EVENTS:
+ state = Object.assign({}, state, { events: action.events , a:action.day1, b:action.day2, c:action.day3, d:action.day4});
- case USER_INFO:
+ return state;
- state=Object.assign({},state, { user: action.user , loggedIn:action.loggedIn, onHold:action.onHold});
-
- return state;
-
- case GET_EVENTS:
+ case OPEN_MODAL:
+ console.log("open modal")
+ state = Object.assign({}, state, {
+ modalOpen: true,
+ modalInfo: action.modalInfo,
+ modalType: action.type
+ });
+ return state;
- state=Object.assign({},state, { events: action.events});
-
- return state;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- case GET_CAREERS:
- var c= {
- guests:action.guests
- }
- state=Object.assign({},state, { calendar:c });
+ case CLOSE_MODAL:
+ state = Object.assign({}, state, {
+ modalOpen: false,
+ modalInfo: "",
+ type: ""
+ });
+ return state;
- return state;
-
- case CHANGE_GUEST:
- state=Object.assign({},state, { changingGuest:false});
- return state;
+ case SIGN_SESSION:
+ state = Object.assign({}, state, {
+ sessions: action.sessions,
+ Blocks: action.Blocks,
+ careerPath: action.careerPath,
+ changingGuest: action.changingGuest,
+ user:action.user
+ });
+ return state;
- case WAIT_CHANGE:
- state=Object.assign({},state, { changingGuest:true});
- return state;
+ case SESSION_BLOCKS:
+ state = Object.assign({}, state, {
+ Blocks: action.Blocks,
+ onHoldBlocks: false,
+ changingGuest: false
+ });
+ return state;
- case GET_SESSIONS:
- state=Object.assign({},state, { changingGuest:false, sessions:action.sessions});
- return state;
- default:
- return state;
- }
-}
-export default apiReducer;
\ No newline at end of file
+ case GET_CAREERS:
+ var c = {
+ guests: action.guests
+ };
+ state = Object.assign({}, state, { calendar: c });
+
+ return state;
+
+ case CHANGE_GUEST:
+ state = Object.assign({}, state, {
+ changingGuest: false,
+ sessions: action.sessions,
+ Blocks: action.Blocks,
+ careerPath: action.careerPath
+ });
+ return state;
+
+ case WAIT_CHANGE:
+ state = Object.assign({}, state, { changingGuest: true });
+ return state;
+
+ 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
+ });
+ return state;
+ default:
+ return state;
+ }
+};
+export default apiReducer;
diff --git a/App/package-lock.json b/App/package-lock.json
index 32913975..5409bc1a 100755
--- a/App/package-lock.json
+++ b/App/package-lock.json
@@ -7840,6 +7840,14 @@
"resolved": "https://registry.npmjs.org/react-native-app-intro-slider/-/react-native-app-intro-slider-1.0.1.tgz",
"integrity": "sha512-5Gzg5FG2uP/RHkSDFB5+2df4vQ2FpyUJ5PGYd23lLEISsEOJe0Zredh1hHMJj+fB5D9B7ZoL0IlR+SNn8iFxHg=="
},
+ "react-native-awesome-alerts": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/react-native-awesome-alerts/-/react-native-awesome-alerts-1.2.0.tgz",
+ "integrity": "sha512-ouxDGJ/porNkuaeqpgxIJA4jAPqHC9bJIsxLA21NA6eZhnEhbqWOprjsNqwI0/7bJxXm9baTzXESCMzwAy3eZw==",
+ "requires": {
+ "prop-types": "^15.5.10"
+ }
+ },
"react-native-branch": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/react-native-branch/-/react-native-branch-2.2.5.tgz",
diff --git a/App/package.json b/App/package.json
index 19db1eee..77dcf036 100755
--- a/App/package.json
+++ b/App/package.json
@@ -17,6 +17,7 @@
"react-native": "0.57.8",
"react-native-action-button": "^2.8.5",
"react-native-app-intro-slider": "^1.0.1",
+ "react-native-awesome-alerts": "^1.2.0",
"react-native-camera": "^1.9.2",
"react-native-check-box": "^2.1.7",
"react-native-cli": "^2.0.1",