diff --git a/src/pages/member/MemberAccess.tsx b/src/pages/member/MemberAccess.tsx index b54892e..9c37100 100644 --- a/src/pages/member/MemberAccess.tsx +++ b/src/pages/member/MemberAccess.tsx @@ -36,11 +36,48 @@ export default function MemberAccess() { }, [user, authLoading]); const fetchAccess = async () => { - const { data } = await supabase - .from('user_access') - .select(`id, granted_at, expires_at, product:products (id, title, slug, type, meeting_link, recording_url, description)`) - .eq('user_id', user!.id); - if (data) setAccess(data as unknown as UserAccess[]); + const [accessRes, paidOrdersRes] = await Promise.all([ + // Get direct user_access + supabase + .from('user_access') + .select(`id, granted_at, expires_at, product:products (id, title, slug, type, meeting_link, recording_url, description)`) + .eq('user_id', user!.id), + // Get products from paid orders (via order_items) + supabase + .from("orders") + .select( + ` + order_items ( + product:products (id, title, slug, type, meeting_link, recording_url, description) + ) + `, + ) + .eq("user_id", user!.id) + .eq("payment_status", "paid"), + ]); + + // Combine access from user_access and paid orders + const directAccess = (accessRes.data as unknown as UserAccess[]) || []; + const paidProductAccess: UserAccess[] = []; + + if (paidOrdersRes.data) { + const existingIds = new Set(directAccess.map((a) => a.product.id)); + paidOrdersRes.data.forEach((order: any) => { + order.order_items?.forEach((item: any) => { + if (item.product && !existingIds.has(item.product.id)) { + existingIds.add(item.product.id); + paidProductAccess.push({ + id: `paid-${item.product.id}`, + granted_at: new Date().toISOString(), + expires_at: null, + product: item.product + }); + } + }); + }); + } + + setAccess([...directAccess, ...paidProductAccess]); setLoading(false); }; @@ -127,7 +164,7 @@ export default function MemberAccess() { {item.product.title} {item.product.type} - Aktif + Aktif diff --git a/src/pages/member/MemberDashboard.tsx b/src/pages/member/MemberDashboard.tsx index 963a632..1339a0c 100644 --- a/src/pages/member/MemberDashboard.tsx +++ b/src/pages/member/MemberDashboard.tsx @@ -298,7 +298,7 @@ export default function MemberDashboard() {

- + {order.payment_status === "paid" ? "Lunas" : "Pending"} {formatIDR(order.total_amount)}