Fix badge colors and show paid webinars in access pages

- Change "Lunas" badge to use brand accent color instead of hardcoded green
- Fix "Aktif" badge with white text and border for better contrast
- Update MemberAccess page to fetch from paid orders (webinars now show)
- Remove payment_provider filter completely since only Pakasir is used

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
dwindown
2025-12-25 18:08:37 +07:00
parent fe9a8bde1d
commit 24826a3ea4
2 changed files with 44 additions and 7 deletions

View File

@@ -36,11 +36,48 @@ export default function MemberAccess() {
}, [user, authLoading]);
const fetchAccess = async () => {
const { data } = await supabase
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);
if (data) setAccess(data as unknown as UserAccess[]);
.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() {
<CardTitle>{item.product.title}</CardTitle>
<CardDescription className="capitalize">{item.product.type}</CardDescription>
</div>
<Badge className="bg-accent">Aktif</Badge>
<Badge className="bg-brand-accent text-white border-2">Aktif</Badge>
</div>
</CardHeader>
<CardContent>

View File

@@ -298,7 +298,7 @@ export default function MemberDashboard() {
</p>
</div>
<div className="flex items-center gap-4">
<Badge className={order.payment_status === "paid" ? "bg-green-600 text-white border-2 border-green-700" : "bg-amber-500 text-white border-2 border-amber-600"}>
<Badge className={order.payment_status === "paid" ? "bg-brand-accent text-white border-2" : "bg-amber-500 text-white border-2 border-amber-600"}>
{order.payment_status === "paid" ? "Lunas" : "Pending"}
</Badge>
<span className="font-bold">{formatIDR(order.total_amount)}</span>