128 lines
3.6 KiB
TypeScript
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 };
|
|
}
|