Files
documenso/packages/lib/client-only/providers/session.tsx
David Nguyen 8373af3f41 fix: wip
2025-02-07 00:58:50 +11:00

45 lines
1.1 KiB
TypeScript

import { createContext, useContext } from 'react';
import React from 'react';
import type { Session, User } from '@documenso/prisma/client';
import type { TGetTeamByUrlResponse } from '../../server-only/team/get-team';
import type { TGetTeamsResponse } from '../../server-only/team/get-teams';
export type AppSession = {
session: Session;
user: User; // Todo: Remove password, and redundant fields.
currentTeam: TGetTeamByUrlResponse | null;
teams: TGetTeamsResponse;
};
interface SessionProviderProps {
children: React.ReactNode;
session: AppSession | null;
}
const SessionContext = createContext<AppSession | null>(null);
export const useSession = () => {
const context = useContext(SessionContext);
if (!context) {
throw new Error('useSession must be used within a SessionProvider');
}
return context;
};
export const useOptionalSession = () => {
return (
useContext(SessionContext) || {
user: null,
session: null,
}
);
};
export const SessionProvider = ({ children, session }: SessionProviderProps) => {
return <SessionContext.Provider value={session}>{children}</SessionContext.Provider>;
};