import { Button } from '../../../components/ui/button'
import { usePaymentNavigation } from '../lib/navigation'
import { usePaymentStatus } from '../lib/usePaymentStatus'
import type { PaymentStatusResponse } from '../lib/midtrans'
function formatIDR(amount?: string) {
if (!amount) return ''
const n = Number(amount)
if (Number.isNaN(n)) return amount
return new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', maximumFractionDigits: 0 }).format(Math.round(n))
}
export function InlinePaymentStatus({ orderId, method, compact }: { orderId: string; method?: string; compact?: boolean }) {
const nav = usePaymentNavigation()
const { data, isLoading, error, refetch, isRefetching } = usePaymentStatus(orderId)
const status = (data?.status ?? 'pending') as PaymentStatusResponse['status']
const isSuccess = status === 'settlement' || status === 'capture'
const isFailure = ['deny', 'cancel', 'expire', 'refund', 'chargeback'].includes(status)
return (
{/* Header minimal tanpa detail teknis */}
Status pembayaran
{/* Konten berdasarkan status */}
{isLoading ? (
Mengecek pembayaran…
Kami memeriksa otomatis setiap 3 detik.
) : error ? (
Gagal memuat status. Coba refresh.
) : isSuccess ? (
{/* check icon */}
Pembayaran berhasil
{data?.grossAmount ? (
Total dibayar: {formatIDR(data.grossAmount)}
) : null}
Terima kasih! Pesanan Anda sedang diproses.
) : isFailure ? (
{/* x icon */}
Pembayaran belum berhasil
Silakan coba lagi atau pilih metode lain.
) : (
{/* hourglass/spinner icon */}
Menunggu pembayaran
Kami memeriksa otomatis setiap 3 detik sampai selesai.
)}
)
}