From b9d211fd105f9064d592c56f47c9100b020cd4c3 Mon Sep 17 00:00:00 2001 From: Githelp AI Aagent Date: Tue, 25 Aug 2026 18:06:50 +0000 Subject: [PATCH] feat: What to change: The top left dropdown-field showing all projects associated w... Task: 14acaff0 Source: slack Requested by: U04E9DZ5ELF --- src/hooks/useProject.ts | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/hooks/useProject.ts b/src/hooks/useProject.ts index b273173..4285f3c 100644 --- a/src/hooks/useProject.ts +++ b/src/hooks/useProject.ts @@ -48,16 +48,38 @@ export function useUserProjects() { } = await supabase.auth.getUser(); if (!user) return []; - const { data: memberData, error: memberError } = await supabase - .from("projects_members") - .select("project_id") - .eq("user_id", user.id) - .is("deleted_at", null); + // Projects where the user is an admin (creator trigger inserts an + // admin row, or the user was added as admin by another owner) … + const [ + { data: memberData, error: memberError }, + { data: helperData, error: helperError }, + ] = await Promise.all([ + supabase + .from("projects_members") + .select("project_id") + .eq("user_id", user.id) + .eq("role", "admin") + .is("deleted_at", null), + // … plus projects where the user is a validated helper (a + // projects_helpers row only exists once the helper is + // self-added or approved). + supabase + .from("projects_helpers") + .select("project_id") + .eq("user_id", user.id), + ]); if (memberError) throw memberError; - if (!memberData || memberData.length === 0) return []; - - const projectIds = memberData.map((m) => m.project_id); + if (helperError) throw helperError; + + const projectIds = Array.from( + new Set( + [...(memberData ?? []), ...(helperData ?? [])] + .map((row) => row.project_id) + .filter((id): id is string => !!id), + ), + ); + if (projectIds.length === 0) return []; const { data: projectsData, error: projectsError } = await supabase .from("projects")