diff --git a/app/(app)/comms/page.tsx b/app/(app)/comms/page.tsx index 1a6ed69..2b2bcf2 100644 --- a/app/(app)/comms/page.tsx +++ b/app/(app)/comms/page.tsx @@ -7,7 +7,7 @@ export default async function CommsPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('*, spaces(id, name, slug)').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('*, spaces(id, name, slug)').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const { data: channels } = await supabase diff --git a/app/(app)/contacts/page.tsx b/app/(app)/contacts/page.tsx index 0f5cf00..4e59f02 100644 --- a/app/(app)/contacts/page.tsx +++ b/app/(app)/contacts/page.tsx @@ -7,7 +7,7 @@ export default async function ContactsPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const { data: contacts } = await supabase diff --git a/app/(app)/import/page.tsx b/app/(app)/import/page.tsx index 29fb7b3..950ae18 100644 --- a/app/(app)/import/page.tsx +++ b/app/(app)/import/page.tsx @@ -7,7 +7,7 @@ export default async function ImportPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id, role').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() const isAdmin = member?.role === 'admin' || member?.role === 'board' || member?.role === 'treasurer' diff --git a/app/(app)/members/page.tsx b/app/(app)/members/page.tsx index 962ad51..548d964 100644 --- a/app/(app)/members/page.tsx +++ b/app/(app)/members/page.tsx @@ -10,7 +10,7 @@ export default async function MembersPage() { .from('space_members') .select('space_id, role') .eq('user_id', user.id) - .eq('status', 'current') + .in('status', ['current', 'unverified', 'late']) .single() if (!self) return null diff --git a/app/(app)/ops/[id]/page.tsx b/app/(app)/ops/[id]/page.tsx index 4810fc7..0b24db2 100644 --- a/app/(app)/ops/[id]/page.tsx +++ b/app/(app)/ops/[id]/page.tsx @@ -11,7 +11,7 @@ export default async function OpsEntryPage({ params }: { params: Promise<{ id: s if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id, role, display_name').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role, display_name').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const { data: entry } = await supabase diff --git a/app/(app)/ops/new/page.tsx b/app/(app)/ops/new/page.tsx index 00ce438..b44d654 100644 --- a/app/(app)/ops/new/page.tsx +++ b/app/(app)/ops/new/page.tsx @@ -7,7 +7,7 @@ export default async function NewOpsEntryPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id, role, display_name').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role, display_name').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null return diff --git a/app/(app)/ops/page.tsx b/app/(app)/ops/page.tsx index b853263..8c8a2c8 100644 --- a/app/(app)/ops/page.tsx +++ b/app/(app)/ops/page.tsx @@ -7,7 +7,7 @@ export default async function OpsPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id, role, display_name, user_id').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role, display_name, user_id').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const canSeeSecrets = member.role === 'admin' || member.role === 'board' diff --git a/app/(app)/payments/page.tsx b/app/(app)/payments/page.tsx index d0af570..a67478c 100644 --- a/app/(app)/payments/page.tsx +++ b/app/(app)/payments/page.tsx @@ -7,7 +7,7 @@ export default async function PaymentsPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id, role').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const [{ data: payments }, { data: members }, { data: integrations }] = await Promise.all([ @@ -19,7 +19,7 @@ export default async function PaymentsPage() { supabase.from('space_members') .select('id, display_name, email') .eq('space_id', member.space_id) - .eq('status', 'current'), + .in('status', ['current', 'late']), supabase.from('integrations') .select('platform, is_connected, config') .eq('space_id', member.space_id), diff --git a/app/(app)/projects/page.tsx b/app/(app)/projects/page.tsx index 1ad76c4..8c3e325 100644 --- a/app/(app)/projects/page.tsx +++ b/app/(app)/projects/page.tsx @@ -7,7 +7,7 @@ export default async function ProjectsPage() { if (!user) return null const { data: member } = await supabase - .from('space_members').select('space_id').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) return null const { data: projects } = await supabase diff --git a/app/(app)/settings/page.tsx b/app/(app)/settings/page.tsx index 88ff802..d0da5ed 100644 --- a/app/(app)/settings/page.tsx +++ b/app/(app)/settings/page.tsx @@ -8,7 +8,7 @@ export default async function SettingsPage() { if (!user) redirect('/login') const { data: member } = await supabase - .from('space_members').select('space_id, role').eq('user_id', user.id).eq('status', 'current').single() + .from('space_members').select('space_id, role').eq('user_id', user.id).in('status', ['current', 'unverified', 'late']).single() if (!member) redirect('/login') diff --git a/app/(app)/tasks/tasks-client.tsx b/app/(app)/tasks/tasks-client.tsx index b66c6c3..2a918bd 100644 --- a/app/(app)/tasks/tasks-client.tsx +++ b/app/(app)/tasks/tasks-client.tsx @@ -53,10 +53,13 @@ export function TasksClient({ tasks: initialTasks, members, currentUserId, space const [formError, setFormError] = useState('') const [formLoading, setFormLoading] = useState(false) - // Ongoing = tasks with a recurrence (not 'none') + // Ongoing = recurring tasks (recurrence != 'none') + // Chores = chore type OR regular tasks without recurrence (the general open pool) + // Mine = tasks claimed/assigned to me + // Done = completed const isDone = (t: any) => t.status === 'done' || t.status === 'completed' const isOpen = (t: any) => !isDone(t) - const chores = tasks.filter(t => (t.type === 'chore' || t.task_type === 'chore') && isOpen(t) && (!t.recurrence || t.recurrence === 'none')) + const chores = tasks.filter(t => isOpen(t) && (!t.recurrence || t.recurrence === 'none')) const ongoing = tasks.filter(t => t.recurrence && t.recurrence !== 'none' && isOpen(t)) const mine = tasks.filter(t => (t.claimed_by === currentUserId || t.assigned_to === currentUserId) && isOpen(t)) const done = tasks.filter(isDone) @@ -154,7 +157,7 @@ export function TasksClient({ tasks: initialTasks, members, currentUserId, space activeTab === tab ? 'border-primary text-primary' : 'border-transparent text-muted-foreground hover:text-foreground' }`} > - {tab === 'mine' ? 'My Tasks' : tab.charAt(0).toUpperCase() + tab.slice(1)}{' '} + {tab === 'mine' ? 'My Tasks' : tab === 'chores' ? 'Open Tasks' : tab.charAt(0).toUpperCase() + tab.slice(1)}{' '} {tabCounts[tab] > 0 && ( )) : (
-

No {activeTab === 'done' ? 'completed' : 'open'} tasks in this view

+

No {activeTab === 'done' ? 'completed' : activeTab === 'chores' ? 'open' : activeTab} tasks in this view