Skip to content

Commit 720929c

Browse files
feat: enhance LoadingSpinner component with customizable props and refactor App component for improved routing
1 parent cc97f16 commit 720929c

File tree

2 files changed

+49
-16
lines changed

2 files changed

+49
-16
lines changed

apps/client/src/App.tsx

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
22
import Navbar from "./components/NavBar";
33
import Footer from "./components/Footer";
4-
import React, { Suspense } from "react";
4+
import React, { Suspense, useState } from "react";
55
import LoadingSpinner from "./helpers/LoadingSpinner";
66
import { UserProvider } from "./contexts/UserContext";
77
import { GradientProvider } from "./contexts/GradientContext";
@@ -17,6 +17,27 @@ const EmailVerificationPage = React.lazy(
1717
const ResetPasswordPage = React.lazy(() => import("./pages/ResetPasswordPage"));
1818

1919
function App() {
20+
const [isReady, setIsReady] = useState(false);
21+
22+
const AppRoutes = () => {
23+
React.useEffect(() => {
24+
setIsReady(true);
25+
}, []);
26+
return (
27+
<Routes>
28+
<Route path="/" element={<HomePage />} />
29+
<Route
30+
path="/verify-email"
31+
element={<EmailVerificationPage />}
32+
/>
33+
<Route
34+
path="/reset-password"
35+
element={<ResetPasswordPage />}
36+
/>
37+
</Routes>
38+
);
39+
};
40+
2041
return (
2142
<>
2243
<Toaster />
@@ -26,20 +47,10 @@ function App() {
2647
<GradientProvider>
2748
<SocketProvider>
2849
<Navbar />
29-
<Suspense fallback={<LoadingSpinner />}>
30-
<Routes>
31-
<Route path="/" element={<HomePage />} />
32-
<Route
33-
path="/verify-email"
34-
element={<EmailVerificationPage />}
35-
/>
36-
<Route
37-
path="/reset-password"
38-
element={<ResetPasswordPage />}
39-
/>
40-
</Routes>
50+
<Suspense fallback={<LoadingSpinner fullScreen overlay />}>
51+
<AppRoutes />
4152
</Suspense>
42-
<Footer />
53+
{isReady && <Footer />}
4354
</SocketProvider>
4455
</GradientProvider>
4556
</UserProvider>

apps/client/src/helpers/LoadingSpinner.tsx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,30 @@
11
import { Spinner } from "../components/shadcn/ui/spinner";
22

3-
const LoadingSpinner = () => {
3+
type Props = {
4+
fullScreen?: boolean;
5+
overlay?: boolean;
6+
className?: string;
7+
};
8+
9+
const LoadingSpinner = ({
10+
fullScreen = false,
11+
overlay = false,
12+
className = "",
13+
}: Props) => {
14+
const base = "flex justify-center items-center";
15+
16+
if (fullScreen) {
17+
return (
18+
<div
19+
className={`${base} fixed inset-0 z-50 ${overlay ? "bg-black/50" : ""}`}
20+
>
21+
<Spinner size="large" className="text-teal-500" />
22+
</div>
23+
);
24+
}
25+
426
return (
5-
<div className="flex justify-center items-center h-screen">
27+
<div className={`${base} w-full ${className}`}>
628
<Spinner size="large" className="text-teal-500" />
729
</div>
830
);

0 commit comments

Comments
 (0)