client user data
parent
a99df8060e
commit
3580b7fac0
33
src/App.js
33
src/App.js
|
@ -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;
|
|
||||||
|
|
|
@ -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 = "/";
|
||||||
|
},
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue