From 38b61b08ecbb428c0524c18932c1682e35f9b621 Mon Sep 17 00:00:00 2001 From: irismarie Date: Sat, 20 Feb 2021 09:40:00 +0100 Subject: [PATCH] moved external logout to menu sidebar, grants time to read config (null in logout) --- src/common/menu-sidebar.js | 69 ++++++++++++++++++++++++++++++++++++-- src/user/logout.js | 27 +-------------- 2 files changed, 68 insertions(+), 28 deletions(-) diff --git a/src/common/menu-sidebar.js b/src/common/menu-sidebar.js index 2e953f8..f70d599 100644 --- a/src/common/menu-sidebar.js +++ b/src/common/menu-sidebar.js @@ -17,9 +17,73 @@ import React from 'react'; import { NavLink } from 'react-router-dom'; +import { Container } from 'flux/utils'; +import LoginStore from '../user/login-store'; +import AppDispatcher from './app-dispatcher'; + class SidebarMenu extends React.Component { + constructor(props) { + super(props); + + this.state = { + externalAuth: false, + logoutLink: "", + } + } + + static getStores() { + return [LoginStore] + } + + static calculateState(prevState, props) { + let config = LoginStore.getState().config; + let logout_url = _.get(config, ['authentication', 'logout_url']); + + if (logout_url) { + return { + externalAuth: true, + logoutLink: logout_url, + } + } + + return { + externalAuth: false, + logoutLink: "/logout", + } + } + + logout() { + AppDispatcher.dispatch({ + type: 'users/logout' + }); + // The Login Store is deleted automatically + + // discard login token and current User + localStorage.setItem('token', ''); + localStorage.setItem('currentUser', ''); + } + render() { + if (this.state.externalAuth) { + return ( +
+

Menu

+ +
+ ); + } + return (

Menu

@@ -32,7 +96,7 @@ class SidebarMenu extends React.Component {
  • User Management
  • : '' }
  • Account
  • -
  • Logout
  • +
  • Logout
  • API Browser
  • @@ -40,4 +104,5 @@ class SidebarMenu extends React.Component { } } -export default SidebarMenu; +let fluxContainerConverter = require('../common/FluxContainerConverter'); +export default Container.create(fluxContainerConverter.convert(SidebarMenu)); \ No newline at end of file diff --git a/src/user/logout.js b/src/user/logout.js index bae8d96..7ffce70 100644 --- a/src/user/logout.js +++ b/src/user/logout.js @@ -17,28 +17,11 @@ import React from 'react'; import { Redirect } from 'react-router-dom'; -import { Container } from 'flux/utils'; - import AppDispatcher from '../common/app-dispatcher'; -import LoginStore from './login-store' class Logout extends React.Component { - static getStores() { - return [LoginStore] - } - - static calculateState(prevState, props) { - return { - config: LoginStore.getState().config, - } - } - componentDidMount() { - this.resetValues(); - } - - resetValues() { AppDispatcher.dispatch({ type: 'users/logout' }); @@ -51,18 +34,10 @@ class Logout extends React.Component { } render() { - if (this.state.config) { - let logout_url = _.get(this.props.config, ['authentication', 'logout_url']) - if (logout_url) { - this.resetValues(); - window.location = logout_url; - } - } return ( ); } } -let fluxContainerConverter = require('../common/FluxContainerConverter'); -export default Container.create(fluxContainerConverter.convert(Logout)); \ No newline at end of file +export default Logout; \ No newline at end of file