From c4fa1d6fb65058ba71928d70dadbf7a422b32275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ushni=E2=9D=A4=EF=B8=8F?= Date: Sun, 17 May 2026 16:46:46 +0530 Subject: [PATCH 1/2] `feat: add reusable brutalist loader system with global switch logic` --- frontend/src/components/shared/Loader.jsx | 24 ---- .../src/components/shared/ProtectedRoute.jsx | 2 +- .../src/components/shared/PublicRoute.jsx | 2 +- .../components/shared/loaders/LoaderAlt.jsx | 40 +++++++ .../shared/loaders/LoaderPrimary.jsx | 106 ++++++++++++++++++ .../shared/loaders/LoaderSwitcher.jsx | 12 ++ frontend/src/pages/DashboardPage.jsx | 5 +- 7 files changed, 163 insertions(+), 28 deletions(-) delete mode 100644 frontend/src/components/shared/Loader.jsx create mode 100644 frontend/src/components/shared/loaders/LoaderAlt.jsx create mode 100644 frontend/src/components/shared/loaders/LoaderPrimary.jsx create mode 100644 frontend/src/components/shared/loaders/LoaderSwitcher.jsx diff --git a/frontend/src/components/shared/Loader.jsx b/frontend/src/components/shared/Loader.jsx deleted file mode 100644 index c6cb74e..0000000 --- a/frontend/src/components/shared/Loader.jsx +++ /dev/null @@ -1,24 +0,0 @@ -const Loader = () => { - return ( -
-
- {/* Brutalist pulsing square */} -
- {/* Secondary rotating square */} -
- {/* Loading text */} -

- Loading -

-
-
- ); -}; - -export default Loader; diff --git a/frontend/src/components/shared/ProtectedRoute.jsx b/frontend/src/components/shared/ProtectedRoute.jsx index 6db5626..6a542c0 100644 --- a/frontend/src/components/shared/ProtectedRoute.jsx +++ b/frontend/src/components/shared/ProtectedRoute.jsx @@ -1,6 +1,6 @@ import { Navigate } from "react-router-dom"; import { useAuth } from "../../context/AuthContext"; -import Loader from "./Loader"; +import Loader from "./loaders/LoaderSwitcher"; const ProtectedRoute = ({ children }) => { const { isAuthenticated, loading } = useAuth(); diff --git a/frontend/src/components/shared/PublicRoute.jsx b/frontend/src/components/shared/PublicRoute.jsx index d1e5884..1c590f8 100644 --- a/frontend/src/components/shared/PublicRoute.jsx +++ b/frontend/src/components/shared/PublicRoute.jsx @@ -1,6 +1,6 @@ import { Navigate } from "react-router-dom"; import { useAuth } from "../../context/AuthContext"; -import Loader from "./Loader"; +import Loader from "./loaders/LoaderSwitcher"; const PublicRoute = ({ children }) => { const { isAuthenticated, loading } = useAuth(); diff --git a/frontend/src/components/shared/loaders/LoaderAlt.jsx b/frontend/src/components/shared/loaders/LoaderAlt.jsx new file mode 100644 index 0000000..3319d62 --- /dev/null +++ b/frontend/src/components/shared/loaders/LoaderAlt.jsx @@ -0,0 +1,40 @@ +const Spinner = () => { + return ( +
+
+ + {[...Array(4)].map((_, i) => ( +
+ ))} +
+ + +
+ ); +}; + +export default Spinner; \ No newline at end of file diff --git a/frontend/src/components/shared/loaders/LoaderPrimary.jsx b/frontend/src/components/shared/loaders/LoaderPrimary.jsx new file mode 100644 index 0000000..d5fae75 --- /dev/null +++ b/frontend/src/components/shared/loaders/LoaderPrimary.jsx @@ -0,0 +1,106 @@ +const Spinner = () => { + return ( +
+
+ + {/* Outer Square */} +
+ + {/* Middle Square */} +
+ + {/* Inner Square */} +
+ + {/* Center Block */} +
+
+ + +
+ ); +}; + +export default Spinner; \ No newline at end of file diff --git a/frontend/src/components/shared/loaders/LoaderSwitcher.jsx b/frontend/src/components/shared/loaders/LoaderSwitcher.jsx new file mode 100644 index 0000000..f8452f8 --- /dev/null +++ b/frontend/src/components/shared/loaders/LoaderSwitcher.jsx @@ -0,0 +1,12 @@ +import LoaderPrimary from "./LoaderPrimary"; +import LoaderAlt from "./LoaderAlt"; + +// Centralized loader switching logic +// Change this boolean to switch loaders globally +const USE_ALT_LOADER = false; // Set to true to use the alternative loader + +const LoaderSwitcher = () => { + return USE_ALT_LOADER ? : ; +}; + +export default LoaderSwitcher; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index d04c569..05ff1ef 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -1,16 +1,17 @@ import { useState } from "react"; import { useAuth } from "../context/AuthContext"; import { useNavigate, Link } from "react-router-dom"; -import Loader from "../components/shared/Loader"; import { useCodeforces } from "../hooks/useCodeforces"; import ConnectBanner from "../components/codeforces/ConnectBanner"; import VerifyModal from "../components/codeforces/VerifyModal"; import AIInsightPanel from "../components/ai/AIInsightPanel"; +import LoaderSwitcher from "../components/shared/loaders/LoaderSwitcher"; export default function DashboardPage() { const { user, loading, logout } = useAuth(); const navigate = useNavigate(); const [modalOpen, setModalOpen] = useState(false); + const load = true const { dashboardSummary: cfData, @@ -29,7 +30,7 @@ export default function DashboardPage() { }; if (loading) { - return ; + return ; } return ( From 4df82cdf6832339084931a99724b81d84b78ce04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ushni=E2=9D=A4=EF=B8=8F?= Date: Sun, 17 May 2026 17:02:44 +0530 Subject: [PATCH 2/2] fix: improve loader accessibility and remove debug logic --- .../src/components/shared/loaders/LoaderAlt.jsx | 8 ++++++-- .../components/shared/loaders/LoaderPrimary.jsx | 16 ++++++++-------- frontend/src/pages/DashboardPage.jsx | 1 - 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/shared/loaders/LoaderAlt.jsx b/frontend/src/components/shared/loaders/LoaderAlt.jsx index 3319d62..23f12ad 100644 --- a/frontend/src/components/shared/loaders/LoaderAlt.jsx +++ b/frontend/src/components/shared/loaders/LoaderAlt.jsx @@ -1,8 +1,12 @@ const Spinner = () => { return ( -
+
+ Loading, please wait...
- {[...Array(4)].map((_, i) => (
{ return ( -
+
+ Loading, please wait...
- {/* Outer Square */}
{/* Middle Square */} -
+
{/* Inner Square */} -
+
{/* Center Block */}
diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 05ff1ef..330a771 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -11,7 +11,6 @@ export default function DashboardPage() { const { user, loading, logout } = useAuth(); const navigate = useNavigate(); const [modalOpen, setModalOpen] = useState(false); - const load = true const { dashboardSummary: cfData,