Skip to content
Snippets Groups Projects
Commit 8e1c5230 authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

Add UserProvider and put providers in single component

parent 681b40be
No related branches found
No related tags found
1 merge request!53Feature/comp 223 login flow
...@@ -12,7 +12,7 @@ import { FilterSelection } from "./Schema"; ...@@ -12,7 +12,7 @@ import { FilterSelection } from "./Schema";
import SubOrganisation from "./pages/SubOrganisation"; import SubOrganisation from "./pages/SubOrganisation";
import ParentOrganisation from "./pages/ParentOrganisation"; import ParentOrganisation from "./pages/ParentOrganisation";
import ECProjects from "./pages/ECProjects"; import ECProjects from "./pages/ECProjects";
import SidebarProvider from "./helpers/SidebarProvider"; import Providers from "./Providers";
import PolicyPage from "./pages/Policy"; import PolicyPage from "./pages/Policy";
...@@ -25,8 +25,8 @@ function App(): ReactElement { ...@@ -25,8 +25,8 @@ function App(): ReactElement {
return ( return (
<div className="app"> <div className="app">
<Router> <Router>
<ExternalPageNavBar /> <Providers>
<SidebarProvider> <ExternalPageNavBar />
<Routes> <Routes>
<Route path="/budget" element={<BudgetPage filterSelection={filterSelection} setFilterSelection={setFilterSelection} />} /> <Route path="/budget" element={<BudgetPage filterSelection={filterSelection} setFilterSelection={setFilterSelection} />} />
<Route path="/funding" element={<FundingSourcePage filterSelection={filterSelection} setFilterSelection={setFilterSelection} />} /> <Route path="/funding" element={<FundingSourcePage filterSelection={filterSelection} setFilterSelection={setFilterSelection} />} />
...@@ -40,7 +40,8 @@ function App(): ReactElement { ...@@ -40,7 +40,8 @@ function App(): ReactElement {
<Route path="/data" element={<CompendiumData />} /> <Route path="/data" element={<CompendiumData />} />
<Route path="*" element={<Landing />} /> <Route path="*" element={<Landing />} />
</Routes> </Routes>
</SidebarProvider> </Providers>
<GeantFooter /> <GeantFooter />
</Router> </Router>
......
import React, { ReactElement } from "react";
import SidebarProvider from "./helpers/SidebarProvider";
import UserProvider from "./shared/UserProvider";
function Providers({ children }): ReactElement {
return (
<SidebarProvider>
<UserProvider>
{children}
</UserProvider>
</SidebarProvider>
);
}
export default Providers;
...@@ -6,7 +6,7 @@ interface Props { ...@@ -6,7 +6,7 @@ interface Props {
const sidebarContext = createContext<{ const sidebarContext = createContext<{
show: boolean; show: boolean;
toggle: React.Dispatch<any>; toggle: () => void;
}>({ }>({
show: false, show: false,
toggle: () => { } toggle: () => { }
......
import React, { createContext, useState, useEffect } from 'react';
interface Props {
children: React.ReactNode;
}
interface User {
name: string,
email?: string,
permissions: {
admin: boolean,
active: boolean,
}
}
async function fetchUser(): Promise<User> {
const response = await fetch('/api/user');
const user = await response.json();
return user
}
const anonymousUser: User = { 'name': '', email: '', permissions: { admin: false, active: false } };
const userContext = createContext<{
user: User;
logout: () => void;
}>({
user: anonymousUser,
logout: () => { }
});
const UserProvider: React.FC<Props> = ({ children }) => {
const [user, setUser] = useState<User>(anonymousUser);
async function logoutUser() {
await fetch('/logout');
setUser(anonymousUser);
}
useEffect(() => {
fetchUser().then(user => {
setUser(user)
});
}, []);
return (
<userContext.Provider value={{ user, logout: logoutUser }}>
{children}
</userContext.Provider>
);
};
export { userContext };
export default UserProvider;
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment