From cd353acca3b1de6d4e44ffa4fe0dee518706ba48 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sun, 19 Oct 2025 03:51:31 +0000 Subject: [PATCH] Directory: replace studios fetch and members fetch with server proxy when DevConnect cgen-e229611af07146159337a17779d10239 --- client/pages/Directory.tsx | 59 ++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/client/pages/Directory.tsx b/client/pages/Directory.tsx index 488ae736..815c02c4 100644 --- a/client/pages/Directory.tsx +++ b/client/pages/Directory.tsx @@ -119,38 +119,35 @@ export default function Directory() { : undefined, }); - client - .from(studiosTable as any) - .select( - client === devconnect - ? "id,name,description,type,is_recruiting,recruiting_roles,tags,slug,created_at, collective_members:collective_members(count)" - : "id,name,description,visibility,created_at, team_memberships:team_memberships(count)", - ) - .limit(200) - .then(({ data, error }) => { - if (!error && Array.isArray(data)) setStudios(data.map(mapStudio)); - else if (client !== supabase) { - supabase - .from("teams" as any) - .select( - "id,name,description,visibility,created_at, team_memberships:team_memberships(count)", - ) - .limit(200) - .then(({ data: d2 }) => setStudios((d2 || []).map(mapStudio))); - } - }); + if (client === devconnect) { + const sel = encodeURIComponent( + "id,name,description,type,is_recruiting,recruiting_roles,tags,slug,created_at, collective_members:collective_members(count)", + ); + fetch(`/api/devconnect/rest/${studiosTable}?select=${sel}&limit=200`) + .then((r) => r.json()) + .then((data) => Array.isArray(data) && setStudios(data.map(mapStudio))) + .catch(() => setStudios([])); + } else { + client + .from(studiosTable as any) + .select( + "id,name,description,visibility,created_at, team_memberships:team_memberships(count)", + ) + .limit(200) + .then(({ data }) => setStudios((data || []).map(mapStudio))); + } // Fetch member avatars for studios (DevConnect only) if (client === devconnect) { const ids = studios.map((s) => s.id).slice(0, 30); if (ids.length) { - devconnect - ?.from("collective_members" as any) - .select("collective_id, profile_id") - .in("collective_id", ids) - .limit(200) - .then(async ({ data }) => { + const list = encodeURIComponent(ids.join(",")); + fetch( + `/api/devconnect/rest/collective_members?select=collective_id,profile_id&collective_id=in.(${list})&limit=200`, + ) + .then((r) => r.json()) + .then(async (rows) => { const byCollective: Record = {}; - (data || []).forEach((row: any) => { + (rows || []).forEach((row: any) => { const cid = String(row.collective_id); if (!byCollective[cid]) byCollective[cid] = []; if (byCollective[cid].length < 5) @@ -160,10 +157,10 @@ export default function Directory() { new Set(Object.values(byCollective).flat()), ); if (profileIds.length) { - const { data: profs } = await devconnect - ?.from("profiles" as any) - .select("id, display_name, avatar_url") - .in("id", profileIds); + const pids = encodeURIComponent(profileIds.join(",")); + const profs = await fetch( + `/api/devconnect/rest/profiles?select=id,display_name,avatar_url&id=in.(${pids})`, + ).then((r) => r.json()); const map: Record = {}; (profs || []).forEach((p: any) => { map[String(p.id)] = {