From e1549c1b0c79f740bfad50973fa2603984d4bbd3 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Thu, 18 Mar 2021 21:45:11 +0100 Subject: [PATCH] Add account button with log out Add a button on the right of the top nav bar to access account related functions and add a log out button there. To make it fit on the navbar the text and version is hidden on narrow layouts. --- packages/web_ui/src/components/App.jsx | 9 +++- packages/web_ui/src/components/SiteLayout.jsx | 22 ++++++-- packages/web_ui/src/index.css | 53 +++++++++++++++++++ packages/web_ui/src/model/account.jsx | 20 +++++++ packages/web_ui/src/util/websocket.jsx | 8 ++- 5 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 packages/web_ui/src/model/account.jsx diff --git a/packages/web_ui/src/components/App.jsx b/packages/web_ui/src/components/App.jsx index 7532d7c8..b5ea5aa8 100644 --- a/packages/web_ui/src/components/App.jsx +++ b/packages/web_ui/src/components/App.jsx @@ -55,8 +55,13 @@ export default function App(props) { connector.on("error", onError); if (token && !connected) { - connector.token = token; - connector.connect(); + if (props.control.loggingOut) { + clearToken(); + props.control.loggingOut = false; + } else { + connector.token = token; + connector.connect(); + } } return () => { diff --git a/packages/web_ui/src/components/SiteLayout.jsx b/packages/web_ui/src/components/SiteLayout.jsx index 6553837b..bdfeedc9 100644 --- a/packages/web_ui/src/components/SiteLayout.jsx +++ b/packages/web_ui/src/components/SiteLayout.jsx @@ -1,8 +1,10 @@ import React, { useEffect, useState } from "react"; import { Switch, Route, useHistory } from "react-router-dom"; -import { Layout, Menu } from "antd"; +import { Dropdown, Layout, Menu } from "antd"; +import UserOutlined from "@ant-design/icons/UserOutlined"; import webUiPackage from "../../package.json"; +import { useAccount } from "../model/account"; import ErrorBoundary from "./ErrorBoundary"; import ErrorPage from "./ErrorPage"; @@ -40,6 +42,7 @@ const sidebar = [ export default function SiteLayout(props) { let history = useHistory(); let [sidebarPath, setSidebarPath] = useState(null); + let account = useAccount(); function SetSidebar(setSidebarProps) { useEffect(() => { @@ -48,14 +51,27 @@ export default function SiteLayout(props) { return null; } + let accountMenu = + { account.logOut(); }}>Log out + ; + + return
- Clusterio - { webUiPackage.version } + Clusterio + { webUiPackage.version } Dashboard + + +
{ @@ -120,7 +126,7 @@ export class Control extends libLink.Link { } async shutdown() { - this.connector.setTimeout(30); + this.connector.setTimeout(5); try { await libLink.messages.prepareDisconnect.send(this);