From 55ca1521f942581645fe9ec32528e242812588bd Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 8 Jul 2026 00:09:57 +0700 Subject: [PATCH] feat: implement cart item quantity adjustment and empty cart handling in PurchasePosCartDetailDialog for improved user interaction --- .../form/PurchasePosCartDetailDialog.vue | 80 +++++++++++++++++-- .../manage/purchases/form/PurchasePosForm.vue | 16 ++++ .../purchases/form/usePurchasePosCart.ts | 26 ++++++ 3 files changed, 114 insertions(+), 8 deletions(-) diff --git a/resources/js/pages/admin/manage/purchases/form/PurchasePosCartDetailDialog.vue b/resources/js/pages/admin/manage/purchases/form/PurchasePosCartDetailDialog.vue index bce687b..0ab6e6c 100644 --- a/resources/js/pages/admin/manage/purchases/form/PurchasePosCartDetailDialog.vue +++ b/resources/js/pages/admin/manage/purchases/form/PurchasePosCartDetailDialog.vue @@ -1,31 +1,62 @@ diff --git a/resources/js/pages/admin/manage/purchases/form/usePurchasePosCart.ts b/resources/js/pages/admin/manage/purchases/form/usePurchasePosCart.ts index 60beecf..6df94e9 100644 --- a/resources/js/pages/admin/manage/purchases/form/usePurchasePosCart.ts +++ b/resources/js/pages/admin/manage/purchases/form/usePurchasePosCart.ts @@ -189,6 +189,31 @@ export function usePurchasePosCart(options: { } } + async function setCartItemQuantity(index: number, value: string) { + const item = cart.value[index]; + const nextQty = Number.parseFloat(value.replace(',', '.')); + + if (Number.isNaN(nextQty) || nextQty < 0) { + return; + } + + if (nextQty <= 0) { + await removeFromCart(index); + + return; + } + + item.quantity = String(nextQty); + + if (toValue(options.isCreateMode)) { + try { + await syncDraftItem(item.raw_material_price_id, nextQty); + } catch (error) { + toast.error(error instanceof Error ? error.message : 'Gagal memperbarui jumlah item.'); + } + } + } + return { search, cart, @@ -202,6 +227,7 @@ export function usePurchasePosCart(options: { removeFromCart, adjustQuantity, syncCartItemQuantity, + setCartItemQuantity, decreasePriceQty, upsertCartItem, };