From 6271d06ed0421d00638179eb72a0b7e7b2fb58e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Leszczyk?= Date: Wed, 2 Mar 2022 11:44:48 +0100 Subject: [PATCH 1/3] feat(dashboard-v2): add UserContext --- .../src/contexts/user/UserContext.js | 6 ++++++ .../src/contexts/user/UserProvider.js | 17 +++++++++++++++++ .../dashboard-v2/src/contexts/user/index.js | 2 ++ .../dashboard-v2/src/contexts/user/useUser.js | 5 +++++ 4 files changed, 30 insertions(+) create mode 100644 packages/dashboard-v2/src/contexts/user/UserContext.js create mode 100644 packages/dashboard-v2/src/contexts/user/UserProvider.js create mode 100644 packages/dashboard-v2/src/contexts/user/index.js create mode 100644 packages/dashboard-v2/src/contexts/user/useUser.js diff --git a/packages/dashboard-v2/src/contexts/user/UserContext.js b/packages/dashboard-v2/src/contexts/user/UserContext.js new file mode 100644 index 00000000..e97723a3 --- /dev/null +++ b/packages/dashboard-v2/src/contexts/user/UserContext.js @@ -0,0 +1,6 @@ +import { createContext } from "react"; + +export const UserContext = createContext({ + user: null, + error: null, +}); diff --git a/packages/dashboard-v2/src/contexts/user/UserProvider.js b/packages/dashboard-v2/src/contexts/user/UserProvider.js new file mode 100644 index 00000000..4d1efac5 --- /dev/null +++ b/packages/dashboard-v2/src/contexts/user/UserProvider.js @@ -0,0 +1,17 @@ +import { useEffect, useState } from "react"; +import useSWR from "swr"; + +import { UserContext } from "./UserContext"; + +export const UserProvider = ({ children }) => { + const { data: user, error, mutate } = useSWR("user"); + const [loading, setLoading] = useState(true); + + useEffect(() => { + if (user || error) { + setLoading(false); + } + }, [user, error]); + + return {children}; +}; diff --git a/packages/dashboard-v2/src/contexts/user/index.js b/packages/dashboard-v2/src/contexts/user/index.js new file mode 100644 index 00000000..311416e7 --- /dev/null +++ b/packages/dashboard-v2/src/contexts/user/index.js @@ -0,0 +1,2 @@ +export * from "./UserProvider"; +export * from "./useUser"; diff --git a/packages/dashboard-v2/src/contexts/user/useUser.js b/packages/dashboard-v2/src/contexts/user/useUser.js new file mode 100644 index 00000000..2b077961 --- /dev/null +++ b/packages/dashboard-v2/src/contexts/user/useUser.js @@ -0,0 +1,5 @@ +import { useContext } from "react"; + +import { UserContext } from "./UserContext"; + +export const useUser = () => useContext(UserContext); From 3128a2e7805c1d847e2591b8178fbf2acc0844fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Leszczyk?= Date: Wed, 2 Mar 2022 12:50:32 +0100 Subject: [PATCH 2/3] feat(dashboard-v2): prevent flashing dashboard's main screen to unauthenticated users --- .../src/layouts/DashboardLayout.js | 35 ++++++++++++++----- packages/dashboard-v2/src/lib/swrConfig.js | 1 + 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/dashboard-v2/src/layouts/DashboardLayout.js b/packages/dashboard-v2/src/layouts/DashboardLayout.js index 32156549..07f4eabf 100644 --- a/packages/dashboard-v2/src/layouts/DashboardLayout.js +++ b/packages/dashboard-v2/src/layouts/DashboardLayout.js @@ -7,8 +7,9 @@ import { authenticatedOnly } from "../lib/swrConfig"; import { PageContainer } from "../components/PageContainer"; import { NavBar } from "../components/Navbar"; import { Footer } from "../components/Footer"; +import { UserProvider, useUser } from "../contexts/user"; -const Layout = styled.div.attrs({ +const Wrapper = styled.div.attrs({ className: "min-h-screen overflow-hidden", })` background-image: url(/images/dashboard-bg.svg); @@ -16,17 +17,35 @@ const Layout = styled.div.attrs({ background-repeat: no-repeat; `; +const Layout = ({ children }) => { + const { user } = useUser(); + + // Prevent from flashing the dashboard screen to unauthenticated users. + return ( + + {!user && ( +
+

Loading...

{/* TODO: Do something nicer here */} +
+ )} + {user && <>{children}} +
+ ); +}; + const DashboardLayout = ({ children }) => { return ( <> - - - -
{children}
-
-