Procházet zdrojové kódy

autologin+spinners on every fetch

David před 9 roky
rodič
revize
50aa6a95f0

+ 14 - 8
src/actions/AuthActions.js

@@ -26,14 +26,20 @@ export const passwordChanged = (text) => {
 
 export const loginUser = ({ email, password }) => {
 	return (dispatch) => {
-	const SHA256 = require('sha256');
-    dispatch({ type: LOGIN_USER });
-    post('login.php', { user: email, pass: SHA256(password) })
-      .then(
-        (response) => loginUserSuccess(dispatch, response, password)
-      ).catch(
-        (error) => loginUserFail(dispatch, error)
-      );
+		const SHA256 = require('sha256');
+	    dispatch({ type: LOGIN_USER });
+	    return post('login.php', { user: email, pass: SHA256(password) })
+	      .then(
+	        (response) => {
+				loginUserSuccess(dispatch, response, password);
+				return Promise.resolve();
+			}
+	      ).catch(
+	        (error) => {
+				loginUserFail(dispatch, error)
+				return Promise.reject();
+			}
+	      );
   };
 };
 

+ 9 - 4
src/actions/CursadaActions.js

@@ -1,17 +1,21 @@
 import { post } from '../api/';
 
 import {
-	CURSADAS_FETCH_SUCCESS,
-	CURSADA_FETCH_SUCCESS,
+	CURSADAS_FETCH,
 	CURSADAS_FETCH_FAIL,
+	CURSADAS_FETCH_SUCCESS,
+	CURSADA_FETCH,
 	CURSADA_FETCH_FAIL,
-	CLASE_FETCH_SUCCESS,
+	CURSADA_FETCH_SUCCESS,
+	CLASE_FETCH,
 	CLASE_FETCH_FAIL,
-	CLASE_FETCH
+	CLASE_FETCH_SUCCESS,
 } from './types';
 
 export const cursadasFetch = () => {
 	return (dispatch) => {
+		dispatch({ type: CURSADAS_FETCH });
+
 		const path = 'listaCursos.php';
 		post(path, { cursadas: 1 })
 		.then((response) => {
@@ -29,6 +33,7 @@ export const cursadasFetch = () => {
 
 export const cursadaFetch = ({ _id }) => {
 	return (dispatch) => {
+		dispatch({ type: CURSADA_FETCH });
 		const path = 'getCourse.php';
 		post(path, { id: _id })
 		.then((response) => {

+ 17 - 2
src/actions/LocalStorageActions.js

@@ -66,6 +66,15 @@ export const saveLogin = ({ user, password }) => {
 	ls.save('user', { user, password });
 }
 
+export const logout = () => {
+	ls.get('user').then((data) => {
+		ls.save('user', { user: data.user, password: '' })
+		.then(() => {
+			Actions.login({ user: data.user, password: '' });
+		});
+	});
+};
+
 export const getLogin = () => {
 	return (dispatch) => {
 		ls.get('user').then((data) => {
@@ -74,12 +83,18 @@ export const getLogin = () => {
 				payload = { user: '', passowrd: ''};
 				ls.save('user', payload);
 			}
-
 			dispatch({
 				type: LS_USER_GET,
 				payload
 			});
-			Actions.login({ user: payload.user, password: payload.password, type: 'replace' });
+
+			const lu = loginUser({ email: payload.user, password: payload.password });
+			lu(dispatch).catch( (error) => {
+				console.log(error);
+				Actions.login({ user: payload.user, password: payload.password, type: 'replace' });
+			})
+
+
 		});
 	};
 };

+ 6 - 4
src/actions/types.js

@@ -1,19 +1,21 @@
 export const EMAIL_CHANGED = 'email_changed';
 export const PASSWORD_CHANGED = 'password_changed';
 
-export const LOGIN_USER_SUCCESS = 'login_user_success';
-export const LOGIN_USER_FAIL = 'login_user_fail';
 export const LOGIN_USER = 'login_user';
+export const LOGIN_USER_FAIL = 'login_user_fail';
+export const LOGIN_USER_SUCCESS = 'login_user_success';
 
-export const CURSADA_FETCH_SUCCESS = 'cursada_fetch_success';
+export const CURSADA_FETCH = 'cursada_fetch';
 export const CURSADA_FETCH_FAIL = 'cursada_fetch_fail';
+export const CURSADA_FETCH_SUCCESS = 'cursada_fetch_success';
 
+export const CURSADAS_FETCH = 'cursadas_fetch';
 export const CURSADAS_FETCH_FAIL = 'cursadas_fetch_fail';
 export const CURSADAS_FETCH_SUCCESS = 'cursadas_fetch_success';
 
+export const CLASE_FETCH = 'clase_fetch';
 export const CLASE_FETCH_FAIL = 'clase_fetch_fail';
 export const CLASE_FETCH_SUCCESS = 'clase_fetch_success';
-export const CLASE_FETCH = 'clase_fetch';
 
 export const PROFESOR_FETCH = 'profesor_fetch';
 export const PROFESOR_FETCH_SUCCESS = 'profesor_fetch_success';

+ 23 - 16
src/reducers/CursadaReducer.js

@@ -1,8 +1,10 @@
 import {
-  CURSADAS_FETCH_SUCCESS,
-  CURSADA_FETCH_SUCCESS,
-  CURSADAS_FETCH_FAIL,
-  CURSADA_FETCH_FAIL
+	CURSADAS_FETCH,
+	CURSADAS_FETCH_FAIL,
+	CURSADAS_FETCH_SUCCESS,
+	CURSADA_FETCH,
+	CURSADA_FETCH_FAIL,
+	CURSADA_FETCH_SUCCESS,
 } from '../actions/types';
 
 const INITIAL_STATE = {
@@ -15,17 +17,22 @@ const INITIAL_STATE = {
 
 export default (state = INITIAL_STATE, action) => {
 	switch (action.type) {
-		case CURSADAS_FETCH_SUCCESS: {
-			const { cursadas, cursos } = action.payload;
-			return { ...state, cursadas, cursos, error: false };
-		}
-    case CURSADAS_FETCH_FAIL:
-      return { ...state, error: true };
-    case CURSADA_FETCH_SUCCESS:
-      return { ...state, curCursada: action.payload };
-    case CURSADA_FETCH_FAIL:
-      return { ...state, curCursada: { error: true } };
-    default:
-      return state;
+	case CURSADAS_FETCH:
+		return { ...state, loading: true };
+	case CURSADAS_FETCH_SUCCESS: {
+		const { cursadas, cursos } = action.payload;
+		return { ...state, cursadas, cursos, loading: false, error: false };
+	}
+	case CURSADAS_FETCH_FAIL:
+		return { ...state, error: true, loading: false };
+
+	case CURSADA_FETCH:
+		return { ...state, curCursada: { loading: true } };
+	case CURSADA_FETCH_SUCCESS:
+		return { ...state, curCursada: { ...action.payload, loading: false } };
+	case CURSADA_FETCH_FAIL:
+		return { ...state, curCursada: { error: true } };
+	default:
+		return state;
   }
 };

+ 1 - 1
src/scenes/Clase.js

@@ -31,7 +31,7 @@ class Clase extends Component {
 		const { clase, local, loading } = this.props;
 
 		if (loading) {
-			return <Spinner size='large' />;
+			return <Spinner size='large' style={{flex:1}} />;
 		}
 
 		if (clase.error) {

+ 4 - 1
src/scenes/ListaClases.js

@@ -5,6 +5,7 @@ import { connect } from 'react-redux';
 import { Actions } from 'react-native-router-flux';
 import { cursadaFetch } from '../actions/';
 import { Card, CardSection, Button, ConnectionError } from '../components/common/';
+import { Spinner } from '../components/common/';
 
 class ListaClases extends Component {
 	componentWillMount() {
@@ -79,7 +80,9 @@ class ListaClases extends Component {
 		if (cursada.error) {
 			return <ConnectionError />;
 		}
-
+		if (cursada.loading) {
+			return <Spinner style={{flex:1}} />;
+		}
 		return (
 			<View style={{ flex: 1 }}>
 				<CardSection>

+ 7 - 2
src/scenes/ListaCursadas.js

@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
 import { cursadasFetch } from '../actions/';
 import ItemCursada from './Cursada/ItemCursada';
 import { ConnectionError } from '../components/common';
+import { Spinner } from '../components/common/';
 
 class ListaCursadas extends Component {
 
@@ -31,6 +32,10 @@ class ListaCursadas extends Component {
 			return <ConnectionError />;
 		}
 
+		if (this.props.loading) {
+			return <Spinner style={{flex:1}} />;
+		}
+
 		return (
 			<ListView
 			enableEmptySections
@@ -43,8 +48,8 @@ class ListaCursadas extends Component {
 }
 
 const mapStateToProps = state => {
-	const { cursadas, cursos, error } = state.cursadasR;
-	return { cursadas, cursos, error };
+	const { cursadas, cursos, error, loading } = state.cursadasR;
+	return { cursadas, cursos, error, loading };
 };
 
 export default connect(mapStateToProps, { cursadasFetch })(ListaCursadas);

+ 10 - 1
src/scenes/Menu.js

@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
 import { Actions } from 'react-native-router-flux';
 
 import { Card, CardSection } from '../components/common';
+import { logout } from '../actions/LocalStorageActions';
 
 class Menu extends Component {
 
@@ -50,9 +51,17 @@ class Menu extends Component {
 				</Card>
 				</TouchableOpacity>
 
+				<TouchableOpacity onPress={() => logout()}>
+				<Card>
+					<CardSection>
+					<Text>Salir</Text>
+					</CardSection>
+				</Card>
+				</TouchableOpacity>
+
 			</View>
 		);
 	}
 }
 
-export default connect(null)(Menu);
+export default connect(null, { logout })(Menu);

+ 4 - 1
src/scenes/Splash.js

@@ -3,6 +3,7 @@ import { Text, TextInput, View, Image, TouchableOpacity } from 'react-native';
 import { connect } from 'react-redux';
 import { Actions } from 'react-native-router-flux';
 import { loginUser, initLSClase, getLogin } from '../actions/';
+import { Spinner } from '../components/common/';
 
 class Splash extends Component {
 	componentWillMount() {
@@ -14,7 +15,7 @@ class Splash extends Component {
 		this.props.initLSClase();
 		this.props.getLogin();
 	}*/
-	
+
 	render() {
 		console.log();
 		return (
@@ -34,6 +35,8 @@ class Splash extends Component {
 					PLATAFORMA DE ESTUDIO
 				</Text>
 
+				<Spinner size="large" />
+
 				</View>
 			);
 		}