-
Comunicazioni
+ Comunicazioni
diff --git a/apps/infoalloggi/src/pages/area-riservata/dashboard.tsx b/apps/infoalloggi/src/pages/area-riservata/dashboard.tsx
index 938e747..13cd689 100644
--- a/apps/infoalloggi/src/pages/area-riservata/dashboard.tsx
+++ b/apps/infoalloggi/src/pages/area-riservata/dashboard.tsx
@@ -1,10 +1,8 @@
import Head from "next/head";
import { useTranslation } from "~/providers/I18nProvider";
-import { useSession } from "~/providers/SessionProvider";
+import { useEnforcedSession } from "~/providers/SessionProvider";
import { AreaRiservataLayout } from "~/components/Layout";
import type { NextPageWithLayout } from "~/pages/_app";
-import { Status500 } from "~/components/status-page";
-import { LoadingPage } from "~/components/loading";
import {
AdminDashboard,
UserDashboard,
@@ -12,10 +10,7 @@ import {
const Dashboard: NextPageWithLayout = () => {
const { t } = useTranslation();
- const session = useSession();
-
- if (session.status === "pending") return
;
- if (!session || !session.user) return
;
+ const session = useEnforcedSession();
return (
<>
diff --git a/apps/infoalloggi/src/pages/area-riservata/ordini.tsx b/apps/infoalloggi/src/pages/area-riservata/ordini.tsx
index f8a3c85..b733995 100644
--- a/apps/infoalloggi/src/pages/area-riservata/ordini.tsx
+++ b/apps/infoalloggi/src/pages/area-riservata/ordini.tsx
@@ -5,16 +5,13 @@ import Head from "next/head";
import { api } from "~/utils/api";
import type { NextPageWithLayout } from "~/pages/_app";
import { Status500 } from "~/components/status-page";
-import { useSession } from "~/providers/SessionProvider";
+import { useEnforcedSession } from "~/providers/SessionProvider";
import type { UsersId } from "~/schemas/public/Users";
import { OrdiniTable } from "~/components/tables/orders-table";
const Ordini: NextPageWithLayout = () => {
const { t } = useTranslation();
- const session = useSession();
-
- if (session.status == "pending") return
;
- if (!session.user) return
;
+ const session = useEnforcedSession();
return (
<>
diff --git a/apps/infoalloggi/src/pages/area-riservata/profilo.tsx b/apps/infoalloggi/src/pages/area-riservata/profilo.tsx
index 0d6ceee..8c7b0cc 100644
--- a/apps/infoalloggi/src/pages/area-riservata/profilo.tsx
+++ b/apps/infoalloggi/src/pages/area-riservata/profilo.tsx
@@ -1,5 +1,4 @@
import Head from "next/head";
-import { LoadingPage } from "~/components/loading";
import { useTranslation } from "~/providers/I18nProvider";
import { AreaRiservataLayout } from "~/components/Layout";
import type { NextPageWithLayout } from "~/pages/_app";
@@ -9,7 +8,7 @@ import { Status500 } from "~/components/status-page";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs";
import { ProfileFormAccount } from "~/forms/FormProfilo_Account";
import { ProfileFormAnagrafica } from "~/forms/FormProfilo_Anagrafica";
-import { useSession } from "~/providers/SessionProvider";
+import { useEnforcedSession } from "~/providers/SessionProvider";
import {
Card,
CardContent,
@@ -18,15 +17,16 @@ import {
CardTitle,
} from "~/components/ui/card";
import { UserAvatar } from "~/components/user_avatar";
+import { LoadingPage } from "~/components/loading";
const Dashboard: NextPageWithLayout = () => {
const { t } = useTranslation();
const { data: userData, isLoading } = api.users.getClientProfilo.useQuery({
id: undefined,
});
- const session = useSession();
+ const session = useEnforcedSession();
if (isLoading) return
;
- if (!userData || !session.user) return
;
+ if (!userData) return
;
return (
<>
diff --git a/apps/infoalloggi/src/providers/SessionProvider.tsx b/apps/infoalloggi/src/providers/SessionProvider.tsx
index d58f056..7a3cb07 100644
--- a/apps/infoalloggi/src/providers/SessionProvider.tsx
+++ b/apps/infoalloggi/src/providers/SessionProvider.tsx
@@ -6,7 +6,7 @@ import {
type FC,
type ReactNode,
} from "react";
-import type { Session } from "~/server/api/trpc";
+import type { Session, ValidSession } from "~/server/api/trpc";
import { api } from "~/utils/api";
type SessionStatus = "pending" | "success" | "error";
export type SessionContextType = {
@@ -66,3 +66,20 @@ export const SessionProvider: FC<{ children: ReactNode }> = ({ children }) => {
};
export const useSession = () => useContext(SessionContext);
+
+export const EnforcedSessionContext = createContext
(
+ undefined,
+);
+/**
+ * AreaRiservata specific session context. It ensures that the session is valid.
+ */
+
+export const useEnforcedSession = () => {
+ const session = useContext(EnforcedSessionContext);
+ if (!session) {
+ throw new Error(
+ "useValidSession must be used within a ValidSessionProvider",
+ );
+ }
+ return session;
+};
diff --git a/apps/infoalloggi/src/server/api/trpc.ts b/apps/infoalloggi/src/server/api/trpc.ts
index cbc7cbf..b8020df 100644
--- a/apps/infoalloggi/src/server/api/trpc.ts
+++ b/apps/infoalloggi/src/server/api/trpc.ts
@@ -36,6 +36,11 @@ export const sessionSchema = z.object({
export type Session = z.infer;
+export type ValidSession = {
+ user: Session;
+ status: "success";
+};
+
interface CreateInnerContextOptions extends Partial {
session: Session | null;
res?: NextApiResponse;