Files
web/app/components/pos/composables/useOrderInfo.js
2026-06-25 09:14:51 +07:00

64 lines
2.1 KiB
JavaScript

export default function useOrderInfo({ activeCartId, activeCart, activeCartItems, addresses, getAddresses, subtotal }) {
const orderInfo = ref({
address: null,
receiver_name: null,
receiver_phone: null,
shipping_fee: null,
deliveryMethod: null,
paymentMethod: null,
});
const total = computed(() => subtotal.value + orderInfo.value.shipping_fee);
watch(activeCartId, () => {
// reset fields when tab is switched
orderInfo.value.deliveryMethod = null;
orderInfo.value.paymentMethod = null;
});
watch(activeCart, async (newVal, oldVal) => {
// set order info
if (newVal?.customer) {
await getAddresses();
if (!oldVal || !oldVal.customer || oldVal.customer !== newVal.customer) {
const defaultAddress = addresses.value.find((add) => add.is_default);
orderInfo.value.address = defaultAddress;
orderInfo.value.receiver_name = newVal.customer__fullname;
orderInfo.value.receiver_phone = newVal.customer__phone;
}
} else {
addresses.value = null;
orderInfo.value.address = null;
orderInfo.value.receiver_name = null;
orderInfo.value.receiver_phone = null;
}
});
watch(
() => orderInfo.value.deliveryMethod,
(newVal) => {
if (newVal?.code === "HOME_DELIVERY") {
const defaultAddress = addresses.value.find((add) => add.is_default);
orderInfo.value.address = defaultAddress;
}
},
);
const isOrderValid = computed(() => {
if (activeCartItems.value?.length === 0) return false;
if (!activeCart.value?.customer) return false;
if (!orderInfo.value.deliveryMethod) return false;
if (!orderInfo.value.paymentMethod) return false;
if (orderInfo.value.deliveryMethod.code === "HOME_DELIVERY" && !orderInfo.value.address) return false;
return true;
});
const fullAddress = computed(() => {
if (!orderInfo.value.address) return "";
return `${orderInfo.value.address.address_detail}, ${orderInfo.value.address.ward}, ${orderInfo.value.address.district}, ${orderInfo.value.address.city}`;
});
return { orderInfo, isOrderValid, fullAddress, total };
}