client user data

main
alex 2023-04-20 17:03:53 +02:00
parent a99df8060e
commit 3580b7fac0
4 changed files with 54 additions and 14 deletions

View File

@ -5,6 +5,7 @@ import PageContent from "./Components/PageContent";
import SideMenu from "./Components/SideMenu"; import SideMenu from "./Components/SideMenu";
import Login from "./Pages/Login"; import Login from "./Pages/Login";
import { Layout } from "antd"; import { Layout } from "antd";
import { Constants, ClientUserDataPreview, ClientUserData } from "./constants";
function useUserSession() { function useUserSession() {
const getUserSession = () => { const getUserSession = () => {
@ -29,8 +30,30 @@ function useUserSession() {
}; };
} }
function App() { export default function App() {
const { userSession, setUserSession } = useUserSession(); const { userSession, setUserSession } = useUserSession();
const [userData, setUserData] = useState(ClientUserDataPreview);
useEffect(() => {
if (!userSession) return;
fetch(Constants.API_ADDRESS + "/user", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Authorization": userSession,
},
})
.then((res) => {
if (res.status === 200) {
return res.json();
}
return Promise.reject(res.status);
})
.then((data) => setUserData(data))
.catch(console.error);
}, []);
if (!userSession) { if (!userSession) {
return <Login setUserSession={setUserSession} />; return <Login setUserSession={setUserSession} />;
@ -38,10 +61,10 @@ function App() {
return ( return (
<Layout style={{ minHeight: "100vh" }}> <Layout style={{ minHeight: "100vh" }}>
<SideMenu setUserSession={setUserSession}></SideMenu> <ClientUserData.Provider value={userData}>
<PageContent></PageContent> <SideMenu setUserSession={setUserSession}></SideMenu>
<PageContent></PageContent>
</ClientUserData.Provider>
</Layout> </Layout>
); );
} }
export default App;

View File

@ -6,13 +6,15 @@ import {
} from "@ant-design/icons"; } from "@ant-design/icons";
import { Divider, Menu } from "antd"; import { Divider, Menu } from "antd";
import Sider from "antd/es/layout/Sider"; import Sider from "antd/es/layout/Sider";
import { useEffect, useState } from "react"; import { useContext, useEffect, useState } from "react";
import { useLocation, useNavigate } from "react-router-dom"; import { useLocation, useNavigate } from "react-router-dom";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { ClientUserData } from "../../constants";
export default function SideMenu({ setUserSession }) { export default function SideMenu({ setUserSession }) {
const location = useLocation(); const location = useLocation();
const [selectedKeys, setSelectedKeys] = useState("/"); const [selectedKeys, setSelectedKeys] = useState("/");
const clientUserData = useContext(ClientUserData);
useEffect(() => { useEffect(() => {
const pathName = location.pathname; const pathName = location.pathname;
@ -63,10 +65,17 @@ export default function SideMenu({ setUserSession }) {
selectable={false} selectable={false}
mode="vertical" mode="vertical"
items={[ items={[
{
label: clientUserData.Username,
icon: <UserOutlined />,
},
{ {
label: "Logout", label: "Logout",
icon: <LogoutOutlined />, icon: <LogoutOutlined />,
onClick: () => setUserSession(), onClick: () => {
setUserSession();
window.location.href = "/";
},
}, },
]} ]}
/> />

View File

@ -1,5 +1,15 @@
const config = { import { createContext } from "react";
export const Constants = {
API_ADDRESS: "http://localhost:8080/v1", API_ADDRESS: "http://localhost:8080/v1",
}; };
export default config; let l = "loading...";
// for the data preview when the request is not finished
export const ClientUserDataPreview = {
Username: l,
Email: l,
};
export let ClientUserData = createContext(null);

View File

@ -7,11 +7,9 @@ import { BrowserRouter } from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById("root")); const root = ReactDOM.createRoot(document.getElementById("root"));
root.render( root.render(
<React.StrictMode> <BrowserRouter>
<BrowserRouter> <App />
<App /> </BrowserRouter>
</BrowserRouter>
</React.StrictMode>
); );
// If you want to start measuring performance in your app, pass a function // If you want to start measuring performance in your app, pass a function