Files
work-club-manager/frontend/src/hooks/useActiveClub.ts

52 lines
1.3 KiB
TypeScript
Raw Normal View History

'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,
};
}