52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
|
|
'use client';
|
||
|
|
|
||
|
|
import { useSession } from 'next-auth/react';
|
||
|
|
import { useState, useEffect } from 'react';
|
||
|
|
|
||
|
|
const ACTIVE_CLUB_KEY = 'activeClubId';
|
||
|
|
|
||
|
|
export interface ActiveClubData {
|
||
|
|
activeClubId: string | null;
|
||
|
|
role: string | null;
|
||
|
|
clubs: Record<string, string> | null;
|
||
|
|
setActiveClub: (clubId: string) => void;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useActiveClub(): ActiveClubData {
|
||
|
|
const { data: session, status } = useSession();
|
||
|
|
const [activeClubId, setActiveClubIdState] = useState<string | null>(null);
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
if (status === 'authenticated' && session?.user?.clubs) {
|
||
|
|
const clubs = session.user.clubs;
|
||
|
|
const storedClubId = localStorage.getItem(ACTIVE_CLUB_KEY);
|
||
|
|
|
||
|
|
if (storedClubId && clubs[storedClubId]) {
|
||
|
|
setActiveClubIdState(storedClubId);
|
||
|
|
} else {
|
||
|
|
const firstClubId = Object.keys(clubs)[0];
|
||
|
|
if (firstClubId) {
|
||
|
|
setActiveClubIdState(firstClubId);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}, [session, status]);
|
||
|
|
|
||
|
|
const setActiveClub = (clubId: string) => {
|
||
|
|
if (session?.user?.clubs && session.user.clubs[clubId]) {
|
||
|
|
localStorage.setItem(ACTIVE_CLUB_KEY, clubId);
|
||
|
|
setActiveClubIdState(clubId);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const clubs = session?.user?.clubs || null;
|
||
|
|
const role = activeClubId && clubs ? clubs[activeClubId] : null;
|
||
|
|
|
||
|
|
return {
|
||
|
|
activeClubId,
|
||
|
|
role,
|
||
|
|
clubs,
|
||
|
|
setActiveClub,
|
||
|
|
};
|
||
|
|
}
|