You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.9 KiB
JavaScript
100 lines
3.9 KiB
JavaScript
import React, { useState } from 'react'
|
|
import { Head, router } from '@inertiajs/react'
|
|
|
|
import { formatIDR } from '@/utils'
|
|
import CustomerLayout from '@/Layouts/CustomerLayout'
|
|
import VoucherCard from './VoucherCard'
|
|
import EmptyHere from './IndexPartials/EmptyHere'
|
|
import { useModalState } from '@/hooks'
|
|
import Payment from './IndexPartials/Payment'
|
|
|
|
export default function Index({ carts: items, total, allow_process }) {
|
|
const [carts, setCarts] = useState(items)
|
|
const paymentModal = useModalState()
|
|
|
|
const removeCart = (cart) => {
|
|
setCarts(carts.filter((c) => c.id !== cart.id))
|
|
}
|
|
|
|
console.log(carts)
|
|
const changeQty = (cart, qty) => {
|
|
setCarts(
|
|
carts.map((c) => {
|
|
if (c.id === cart.id) {
|
|
return {
|
|
...c,
|
|
quantity: qty,
|
|
}
|
|
}
|
|
return c
|
|
})
|
|
)
|
|
}
|
|
|
|
const handlePayment = () => {
|
|
paymentModal.toggle()
|
|
}
|
|
|
|
const handleTopUp = () => {
|
|
router.get(route('transactions.deposit.topup'))
|
|
}
|
|
|
|
return (
|
|
<CustomerLayout>
|
|
<Head title="Cart" />
|
|
<div className="flex flex-col min-h-[calc(95dvh)]">
|
|
<div className="py-5 text-2xl px-5 font-bold">Keranjang</div>
|
|
{carts.length > 0 ? (
|
|
<>
|
|
<div className="w-full px-2 flex flex-col space-y-2 pb-28">
|
|
{carts.map((item) => (
|
|
<VoucherCard
|
|
key={item.id}
|
|
item={item}
|
|
onRemove={removeCart}
|
|
onChangeQty={changeQty}
|
|
/>
|
|
))}
|
|
</div>
|
|
<div className="fixed bottom-12 w-full bg-white py-5 px-2 shadow-lg border-t max-w-md mx-auto">
|
|
<div className="flex flex-row justify-between px-5">
|
|
<div className="flex flex-col">
|
|
<div className="text-gray-400">
|
|
Total Harga
|
|
</div>
|
|
<div className="font-bold text-lg">
|
|
Rp. {formatIDR(total)}
|
|
</div>
|
|
</div>
|
|
{allow_process ? (
|
|
<div
|
|
onClick={handlePayment}
|
|
className="font-bold h-11 border bg-blue-700 text-white px-5 py-2 rounded-full hover:text-black hover:bg-white"
|
|
>
|
|
Bayar
|
|
</div>
|
|
) : (
|
|
<div
|
|
onClick={handleTopUp}
|
|
className="font-bold h-11 border bg-blue-700 text-white px-5 py-2 rounded-full hover:text-black hover:bg-white"
|
|
>
|
|
Top Up
|
|
</div>
|
|
)}
|
|
</div>
|
|
{allow_process === false && (
|
|
<div className="-mt-2 px-5 text-right text-sm text-gray-500">
|
|
saldo tidak cukup
|
|
</div>
|
|
)}
|
|
</div>
|
|
</>
|
|
) : (
|
|
<EmptyHere />
|
|
)}
|
|
</div>
|
|
<Payment state={paymentModal} />
|
|
</CustomerLayout>
|
|
)
|
|
}
|