Greet the user after login with a toast

This commit is contained in:
Felix Hamme 2019-04-23 15:41:43 +02:00
parent 662050d60b
commit b85ce62b2f
2 changed files with 26 additions and 5 deletions

View File

@ -20,6 +20,7 @@ const actiontypes_userinfo = {
'LOGIN' : 'LOGIN', 'LOGIN' : 'LOGIN',
'LOGIN_RESULT_SUCCESS' : 'LOGIN_RESULT_SUCCESS', 'LOGIN_RESULT_SUCCESS' : 'LOGIN_RESULT_SUCCESS',
'LOGIN_RESULT_ERROR' : 'LOGIN_RESULT_ERROR', 'LOGIN_RESULT_ERROR' : 'LOGIN_RESULT_ERROR',
'GREET' : 'GREET',
'CLEAR_ERRORS' : 'CLEAR_ERRORS', 'CLEAR_ERRORS' : 'CLEAR_ERRORS',
@ -37,6 +38,7 @@ const actiontypes_userinfo = {
const defaultstate_userinfo = { const defaultstate_userinfo = {
isSignedIn : false, isSignedIn : false,
wasGreeted : false,
username : null, username : null,
error : false, error : false,
errorMessages : [], errorMessages : [],
@ -214,6 +216,7 @@ const reducer_userinfo = (state = defaultstate_userinfo, action) => {
case actiontypes_userinfo.LOGIN_RESULT_SUCCESS: case actiontypes_userinfo.LOGIN_RESULT_SUCCESS:
return Object.assign({}, state, { return Object.assign({}, state, {
isSignedIn : true, isSignedIn : true,
wasGreeted : false,
error : false, error : false,
errorMessages : [], errorMessages : [],
username : action.parameters.username, username : action.parameters.username,
@ -235,6 +238,10 @@ const reducer_userinfo = (state = defaultstate_userinfo, action) => {
__store.dispatch({ type : actiontypes_userinfo.CLEAR }); __store.dispatch({ type : actiontypes_userinfo.CLEAR });
}); });
return Object.assign({}, state, {}); return Object.assign({}, state, {});
case actiontypes_userinfo.GREET:
return Object.assign({}, state, {
wasGreeted : true,
});
case actiontypes_userinfo.STORE_AUTH_HEADERS: case actiontypes_userinfo.STORE_AUTH_HEADERS:
return Object.assign({}, state, { return Object.assign({}, state, {
accesstoken : action.parameters.accesstoken, accesstoken : action.parameters.accesstoken,
@ -396,6 +403,14 @@ export function login(email, password) {
}); });
} }
export function greet() {
__store.dispatch({
type: actiontypes_userinfo.GREET,
parameters: {},
state: __store.getState()
});
}
export function logout() { export function logout() {
__store.dispatch({ __store.dispatch({
type : actiontypes_userinfo.LOGOUT, type : actiontypes_userinfo.LOGOUT,

View File

@ -13,7 +13,8 @@ import {
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import React from 'react'; import React from 'react';
import { logout } from '../api'; import {greet, logout} from '../api';
import {notify} from "react-notify-toast";
export class TurniereNavigation extends React.Component { export class TurniereNavigation extends React.Component {
@ -67,7 +68,12 @@ function Betabadge() {
class InvisibleLoginLogoutButtons extends React.Component { class InvisibleLoginLogoutButtons extends React.Component {
render() { render() {
const { isSignedIn, username } = this.props; const {isSignedIn, username, wasGreeted} = this.props;
if (isSignedIn && !wasGreeted) {
notify.show('Willkommen, ' + username + '!', 'success', 3000);
greet();
}
if(isSignedIn) { if(isSignedIn) {
return ( return (
@ -88,8 +94,8 @@ class InvisibleLoginLogoutButtons extends React.Component {
} }
const mapStateToLoginLogoutButtonProperties = (state) => { const mapStateToLoginLogoutButtonProperties = (state) => {
const { isSignedIn, username } = state.userinfo; const {isSignedIn, username, wasGreeted} = state.userinfo;
return { isSignedIn, username }; return {isSignedIn, username, wasGreeted};
}; };
const LoginLogoutButtons = connect( const LoginLogoutButtons = connect(