'use client'; import React, { useEffect, useState } from 'react'; import { onAuthStateChanged } from 'firebase/auth'; import { useRouter, useSearchParams } from 'next/navigation'; import { firebaseAuth } from '../../lib/firebase-client'; import { fetchFounderClubContext, sanitizePortalError, type FounderClubContext } from '../../lib/club-data'; import { FounderPortalShell } from './founder-portal-shell'; import { FounderMembers } from './founder-members'; import { FounderWall } from './founder-wall'; import { OverviewSkeleton } from './skeleton-state'; import { SafeErrorState } from './safe-error-state'; export function FounderCommunityPage({ clubId, section }: { clubId: string; section: 'members' | 'wall' }) { const router = useRouter(); const searchParams = useSearchParams(); const demo = process.env.NODE_ENV === 'development' && searchParams?.get('preview') === 'demo'; const [context, setContext] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [access, setAccess] = useState<'sign-in' | 'restricted' | null>(null); const [retry, setRetry] = useState(0); useEffect(() => { let generation = 0; let disposed = false; const unsubscribe = onAuthStateChanged(firebaseAuth, async (user) => { const current = ++generation; setContext(null); setLoading(true); setAccess(null); setError(null); if (!demo && (!user || user.isAnonymous)) { setAccess('sign-in'); setLoading(false); return; } try { const result = await fetchFounderClubContext(clubId, user?.uid, { allowDemoPreview: demo }); if (disposed || current !== generation) return; if (!result.permissions.canManageSettings && !result.isDemoFixture) setAccess('restricted'); else setContext(result); } catch (err) { if (!disposed && current === generation) setError(sanitizePortalError(err)); } finally { if (!disposed && current === generation) setLoading(false); } }); return () => { disposed = true; generation++; unsubscribe(); }; }, [clubId, demo, retry]); if (loading) return
; if (access) return router.push(access === 'sign-in' ? '/login' : '/clubs')} />; if (error || !context) return setRetry((value) => value + 1)} actionLabel="Return to Clubs" onAction={() => router.push('/clubs')} />; return { if (section === 'wall') document.getElementById('wall-post-content')?.focus(); else router.push(`/clubs/${clubId}/manage/wall${demo ? '?preview=demo' : ''}#wall-post-content`); }}> {section === 'members' ? : } ; }