fix: redirect unauthorized users
This commit is contained in:
parent
ea585bd748
commit
c7d7fd53cb
5 changed files with 55 additions and 21 deletions
|
|
@ -79,6 +79,17 @@ export default function Home() {
|
||||||
isLoading,
|
isLoading,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Error handling (after all hooks)
|
||||||
|
if (error)
|
||||||
|
return (
|
||||||
|
<Error
|
||||||
|
title="Impossible de charger les colles"
|
||||||
|
message={error?.toString()}
|
||||||
|
code={500}
|
||||||
|
description="Une erreur s'est produite lors du chargement de la liste des colles."
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
// TODO: FAVORITES
|
// TODO: FAVORITES
|
||||||
const useToggleStar = (auth: any) => {};
|
const useToggleStar = (auth: any) => {};
|
||||||
// TODO: FILTERS
|
// TODO: FILTERS
|
||||||
|
|
@ -127,17 +138,6 @@ export default function Home() {
|
||||||
// setTimeout(restoreScrollPosition, 500);
|
// setTimeout(restoreScrollPosition, 500);
|
||||||
// }, [location]);
|
// }, [location]);
|
||||||
|
|
||||||
// Error handling (after all hooks)
|
|
||||||
if (error)
|
|
||||||
return (
|
|
||||||
<Error
|
|
||||||
title="Impossible de charger les colles"
|
|
||||||
message={error?.toString()}
|
|
||||||
code={500}
|
|
||||||
description="Une erreur s'est produite lors du chargement de la liste des colles."
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-6 pb-20 md:pb-0">
|
<div className="space-y-6 pb-20 md:pb-0">
|
||||||
{/* Week Navigation */}
|
{/* Week Navigation */}
|
||||||
|
|
|
||||||
20
app/components/loader.tsx
Normal file
20
app/components/loader.tsx
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
export default function Loader() {
|
||||||
|
return (
|
||||||
|
<div className="min-h-screen flex items-center justify-center">
|
||||||
|
<div className="flex flex-col items-center space-y-4">
|
||||||
|
<div className="flex space-x-2">
|
||||||
|
<div className="w-3 h-3 bg-primary rounded-full animate-bounce"></div>
|
||||||
|
<div
|
||||||
|
className="w-3 h-3 bg-primary rounded-full animate-bounce"
|
||||||
|
style={{ animationDelay: "0.1s" }}
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
className="w-3 h-3 bg-primary rounded-full animate-bounce"
|
||||||
|
style={{ animationDelay: "0.2s" }}
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
<h2 className="text-primary text-sm">Chargement...</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -103,6 +103,8 @@ const defaultUser = {
|
||||||
|
|
||||||
export type User = typeof defaultUser;
|
export type User = typeof defaultUser;
|
||||||
|
|
||||||
|
export const AUTH_ERROR = "Unauthorized access"
|
||||||
|
|
||||||
export const useUser = () => {
|
export const useUser = () => {
|
||||||
const { data, ...props } = useQuery({
|
const { data, ...props } = useQuery({
|
||||||
queryKey: ["user"],
|
queryKey: ["user"],
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ import AttachmentItem from "~/components/details/attachment";
|
||||||
// import { ScrollToTopOnMount } from "~/components/noscroll";
|
// import { ScrollToTopOnMount } from "~/components/noscroll";
|
||||||
import Error from "~/components/error";
|
import Error from "~/components/error";
|
||||||
import { Badge } from "~/components/ui/badge";
|
import { Badge } from "~/components/ui/badge";
|
||||||
import { useColle, useUser } from "~/lib/api";
|
import { AUTH_ERROR, useColle, useUser } from "~/lib/api";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { formatDate, formatGrade, formatTime, goBack } from "~/lib/utils";
|
import { formatDate, formatGrade, formatTime, goBack } from "~/lib/utils";
|
||||||
|
|
||||||
|
|
@ -60,10 +60,14 @@ export default function ColleDetailPage() {
|
||||||
|
|
||||||
const [isReloading, setIsReloading] = useState(false);
|
const [isReloading, setIsReloading] = useState(false);
|
||||||
|
|
||||||
// TODO: Handle user loading state
|
if (isUserLoading) {
|
||||||
|
return <ColleDetailsSkeleton />
|
||||||
|
}
|
||||||
|
if (userError?.message === AUTH_ERROR) {
|
||||||
|
return <Navigate to="/login" replace />;
|
||||||
|
}
|
||||||
if (userError) {
|
if (userError) {
|
||||||
console.error(userError);
|
return <Error message={userError.message} />;
|
||||||
return <Navigate to="/login" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Favorite toggle function
|
// TODO: Favorite toggle function
|
||||||
|
|
@ -84,7 +88,6 @@ export default function ColleDetailPage() {
|
||||||
description="Une erreur s'est produite lors du chargement de la colle."
|
description="Une erreur s'est produite lors du chargement de la colle."
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isLoading || !colle) return <ColleDetailsSkeleton />;
|
if (isLoading || !colle) return <ColleDetailsSkeleton />;
|
||||||
|
|
||||||
const handleToggleFavorite = () => {};
|
const handleToggleFavorite = () => {};
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,30 @@
|
||||||
|
import { Navigate } from "react-router";
|
||||||
|
import Error from "~/components/error";
|
||||||
import HomePage from "~/components/home";
|
import HomePage from "~/components/home";
|
||||||
|
import Loader from "~/components/loader";
|
||||||
import UserDropdown from "~/components/user-dropdown";
|
import UserDropdown from "~/components/user-dropdown";
|
||||||
import { MainLayout } from "~/layout";
|
import { MainLayout } from "~/layout";
|
||||||
import { useUser } from "~/lib/api";
|
import { AUTH_ERROR, useUser } from "~/lib/api";
|
||||||
import { forceReload } from "~/lib/utils";
|
import { forceReload } from "~/lib/utils";
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const { user, isLoading, error } = useUser();
|
const { user, isLoading, error } = useUser();
|
||||||
if (error) {
|
|
||||||
console.error(error);
|
if (isLoading) {
|
||||||
// TODO: handle error (redirect to login or show error message)
|
return <Loader />;
|
||||||
}
|
}
|
||||||
|
if (error?.message === AUTH_ERROR) {
|
||||||
|
return <Navigate to="/login" replace />;
|
||||||
|
}
|
||||||
|
if (error) {
|
||||||
|
return <Error message={error.message} />;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MainLayout page={<HomePage />}>
|
<MainLayout page={<HomePage />}>
|
||||||
<h1 className="text-2xl font-bold" onClick={forceReload}>
|
<h1 className="text-2xl font-bold" onClick={forceReload}>
|
||||||
Khollisé - {user.className} ⚔️
|
Khollisé - {user.className} ⚔️
|
||||||
</h1>
|
</h1>
|
||||||
{/* TODO: isLoading to display skeleton */}
|
|
||||||
<UserDropdown user={user} />
|
<UserDropdown user={user} />
|
||||||
</MainLayout>
|
</MainLayout>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue