import { createClient } from '@/lib/supabase/server' import { PageHeader, PageTitle } from '@/components/ui/page-title' import { hasPermission } from '@/lib/permissions-cache' import { MembersClient } from './members-client' import { InvitesPanel } from '../customize/panels/invites-panel' // member_directory_visibility values come from space settings: // admin_only — only admins see the directory // board_visible — admins + board + treasurer see the directory // members_visible — every member of the space sees the directory (default) const ELEVATED_ROLES = new Set(['admin', 'board', 'treasurer']) export default async function MembersPage() { const supabase = await createClient() const { data: { user } } = await supabase.auth.getUser() if (!user) return null const { data: self } = await supabase .from('space_members') .select('space_id, role, spaces(slug)') .eq('user_id', user.id) .in('status', ['current', 'unverified', 'late']) .single() if (!self) return null const { data: space } = await supabase .from('spaces') .select('member_directory_visibility') .eq('id', self.space_id) .single() const visibility = space?.member_directory_visibility ?? 'members_visible' const isAdmin = self.role === 'admin' const isElevated = ELEVATED_ROLES.has(self.role) // member_directory_visibility is the `directory_visibility` enum. The gate // previously compared against 'board_visible'/'admin_only' — values from // OTHER enums that never match — so every setting except 'members_visible' // silently restricted the directory (including 'public_members_visible', // which should be the most open). Map to the real enum values: // - members_visible / public_members_visible: any authenticated member // - board_only / member_count_visible: only elevated roles see the full list const allowed = visibility === 'members_visible' || visibility === 'public_members_visible' || ((visibility === 'board_only' || visibility === 'member_count_visible') && isElevated) if (!allowed) { return (
The member directory is restricted in this space.
A space admin has set member directory visibility to {visibility}.
Contact an admin if you need access.