Files
web-menu-react-version/src/pages/checkout/hooks/useOrder.ts

128 lines
3.6 KiB
TypeScript

import { message } from "antd";
import { clearCart, selectCart } from "features/order/orderSlice";
import { useCallback } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useParams } from "react-router-dom";
import { useCreateOrderMutation } from "redux/api/others";
import { useAppDispatch, useAppSelector } from "redux/hooks";
import { PAYMENT_CONFIRMATION_URL } from "utils/constants";
import { Customer } from "../../otp/types";
export default function useOrder() {
const dispatch = useAppDispatch();
const navigate = useNavigate();
const { t } = useTranslation();
const { id } = useParams();
const restaurantID = localStorage.getItem("restaurantID");
const { mobilenumber, user_uuid } = JSON.parse(
localStorage.getItem("customer") || "{}",
) as Customer;
const {
items,
coupon,
tip,
tables,
specialRequest,
phone,
estimateTime,
officeDetails,
orderType,
giftDetails,
} = useAppSelector(selectCart);
const [createOrder] = useCreateOrderMutation();
const handleCreateOrder = useCallback(() => {
createOrder({
phone: mobilenumber || phone || giftDetails?.senderPhone,
couponID: coupon,
discountAmount: 0,
comment: specialRequest,
timeslot: "",
table_id: tables,
deliveryType: orderType,
dineType: orderType,
type: "table-pickup",
user_id: id,
restorant_id: restaurantID,
items: items.map((i) => ({
...i,
qty: i.quantity,
extras: i.extras || [],
extrasgroup: i.extrasgroup || [],
})),
office_no: officeDetails?.officeNo || "",
vatvalue: 0,
discountGiftCode: "",
paymentType: "cod",
uuid: user_uuid,
pickup_comments: "",
pickup_time: estimateTime,
delivery_pickup_interval: "",
orderPrice: items.reduce(
(acc, item) => acc + item.price * item.quantity,
0,
),
useWallet: 0,
tip,
...(orderType === "gift"
? {
receiverName: giftDetails?.receiverName,
receiverPhone: giftDetails?.receiverPhone,
specialMessage: giftDetails?.message,
keepNameSecret: giftDetails?.isSecret,
senderEmail: giftDetails?.senderEmail,
senderPhone: giftDetails?.senderPhone,
senderName: giftDetails?.senderName,
}
: {}),
})
.then((res: any) => {
if (res.error)
message.error(res.error.data.message || t("order.createOrderFailed"));
else {
if (orderType === "gift")
// navigate(`/${PAYMENT_CONFIRMATION_URL}/${res.data.result.orderID}`, {
// replace: false,
// });
window.location.href = `${PAYMENT_CONFIRMATION_URL}/${res.data.result.orderID}`;
// window.open(
// `${PAYMENT_CONFIRMATION_URL}/${res.data.result.orderID}`,
// );
else navigate(`/${id}/order/${res.data.result.orderID}`);
dispatch(clearCart());
localStorage.setItem("orderID", res.data.result.orderID);
}
})
.catch((error: any) => {
console.error("Create Order failed:", error);
});
}, [
createOrder,
mobilenumber,
phone,
giftDetails?.senderPhone,
giftDetails?.receiverName,
giftDetails?.receiverPhone,
giftDetails?.message,
giftDetails?.isSecret,
giftDetails?.senderEmail,
giftDetails?.senderName,
coupon,
specialRequest,
tables,
orderType,
id,
restaurantID,
items,
officeDetails?.officeNo,
user_uuid,
estimateTime,
tip,
t,
navigate,
dispatch,
]);
return { handleCreateOrder };
}