diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index ed834fb..54d2b68 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -10,6 +10,7 @@ import { Skeleton } from '@/components/ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { formatIDR, formatDate } from '@/lib/format'; import { Video, Calendar, BookOpen, ArrowRight } from 'lucide-react'; +import { getPaymentStatusLabel, getPaymentStatusColor } from '@/lib/statusHelpers'; interface UserAccess { id: string; @@ -56,24 +57,6 @@ export default function Dashboard() { setLoading(false); }; - const getStatusColor = (status: string) => { - switch (status) { - case 'paid': return 'bg-brand-accent text-white'; - case 'pending': return 'bg-amber-500 text-white'; - case 'cancelled': return 'bg-destructive text-white'; - default: return 'bg-secondary'; - } - }; - - const getPaymentStatusLabel = (status: string | null) => { - switch (status) { - case 'paid': return 'Lunas'; - case 'pending': return 'Pending'; - case 'failed': return 'Gagal'; - default: return status || 'Pending'; - } - }; - const renderAccessActions = (item: UserAccess) => { switch (item.product.type) { case 'consulting': diff --git a/src/pages/member/MemberOrders.tsx b/src/pages/member/MemberOrders.tsx index 4307575..083ec99 100644 --- a/src/pages/member/MemberOrders.tsx +++ b/src/pages/member/MemberOrders.tsx @@ -9,6 +9,7 @@ import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { formatIDR, formatDate } from "@/lib/format"; import { ChevronRight, X } from "lucide-react"; +import { getPaymentStatusLabel, getPaymentStatusColor } from "@/lib/statusHelpers"; interface Order { id: string; @@ -41,21 +42,6 @@ export default function MemberOrders() { setLoading(false); }; - const getStatusLabel = (status: string | null) => { - switch (status) { - case "paid": - return "Lunas"; - case "pending": - return "Pending"; - case "failed": - return "Gagal"; - case "cancelled": - return "Dibatalkan"; - default: - return status || "Pending"; - } - }; - // Filter orders based on status const filteredOrders = orders.filter((order) => { const status = order.payment_status || order.status; @@ -76,19 +62,6 @@ export default function MemberOrders() { setSelectedStatus('all'); }; - const getStatusColor = (status: string) => { - switch (status) { - case "paid": - return "bg-brand-accent text-white"; - case "pending": - return "bg-amber-500 text-white"; - case "cancelled": - return "bg-destructive text-white"; - default: - return "bg-secondary"; - } - }; - if (authLoading || loading) { return ( @@ -125,7 +98,7 @@ export default function MemberOrders() { onClick={() => setSelectedStatus(status)} className={selectedStatus === status ? 'shadow-sm' : 'border-2'} > - {getStatusLabel(status)} + {getPaymentStatusLabel(status)} ({count}) ); @@ -184,8 +157,8 @@ export default function MemberOrders() { )}
- - {getStatusLabel(order.payment_status || order.status)} + + {getPaymentStatusLabel(order.payment_status || order.status)} {formatIDR(order.total_amount)} diff --git a/src/pages/member/OrderDetail.tsx b/src/pages/member/OrderDetail.tsx index eb35c4c..8efd9e3 100644 --- a/src/pages/member/OrderDetail.tsx +++ b/src/pages/member/OrderDetail.tsx @@ -12,6 +12,7 @@ import { Alert, AlertDescription } from "@/components/ui/alert"; import { formatIDR, formatDate } from "@/lib/format"; import { ArrowLeft, Package, CreditCard, Calendar, AlertCircle, Video, Clock, RefreshCw } from "lucide-react"; import { QRCodeSVG } from "qrcode.react"; +import { getPaymentStatusLabel, getPaymentStatusColor, getProductTypeLabel } from "@/lib/statusHelpers"; interface OrderItem { id: string; @@ -203,35 +204,6 @@ export default function OrderDetail() { return () => clearInterval(timer); }, [order?.qr_expires_at]); - const getStatusColor = (status: string) => { - switch (status) { - case "paid": - return "bg-brand-accent text-white"; - case "pending": - return "bg-amber-500 text-white"; - case "cancelled": - case "failed": - return "bg-destructive text-white"; - default: - return "bg-secondary"; - } - }; - - const getStatusLabel = (status: string | null) => { - switch (status) { - case "paid": - return "Lunas"; - case "pending": - return "Pending"; - case "failed": - return "Gagal"; - case "cancelled": - return "Dibatalkan"; - default: - return status || "Pending"; - } - }; - const getTypeLabel = (type: string) => { switch (type) { case "consulting": @@ -337,8 +309,8 @@ export default function OrderDetail() {

Detail Order

#{order.id.slice(0, 8)}

- - {getStatusLabel(order.payment_status || order.status)} + + {getPaymentStatusLabel(order.payment_status || order.status)}