Clear clear store when create order + redirect to detail if cash type
This commit is contained in:
@@ -25,8 +25,8 @@ type SummarySectionProps = {
|
||||
export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: SummarySectionProps) => {
|
||||
|
||||
const { t } = useTranslation('parallels', { keyPrefix: 'OrderDetail' });
|
||||
const { isSelectedAddress, isSelectedShipment, isSelectedPayment, deliveryType: storeDeliveryType, paymentType, selectedAddressId, tableNumber, carAddress } = useCheckoutStore();
|
||||
const { description } = useCartStore();
|
||||
const { isSelectedAddress, isSelectedShipment, isSelectedPayment, deliveryType: storeDeliveryType, paymentType, selectedAddressId, tableNumber, carAddress, clear } = useCheckoutStore();
|
||||
const { description, reset: resetCart } = useCartStore();
|
||||
const { mutate: createOrder } = useCreateOrder();
|
||||
const { mutate: saveAllMethod } = useSaveAllMethod()
|
||||
const params = useParams();
|
||||
@@ -89,7 +89,7 @@ export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: S
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isDeliveryCar && !selectedAddressId) {
|
||||
if (!isDeliveryCar && !isDineIn && !selectedAddressId) {
|
||||
toast('لطفا آدرس را انتخاب کنید', 'error');
|
||||
return;
|
||||
}
|
||||
@@ -128,11 +128,13 @@ export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: S
|
||||
}
|
||||
createOrder(orderData, {
|
||||
onSuccess: (data) => {
|
||||
clear();
|
||||
resetCart();
|
||||
if (data?.data?.paymentUrl) {
|
||||
window.location.href = data?.data?.paymentUrl;
|
||||
toast('در حال ریدایرکت به صفحه پرداخت...', 'success');
|
||||
} else {
|
||||
window.location.href = `/${name}/verify/${data?.data?.order?.id}`;
|
||||
window.location.href = `/${name}/order/track/${data?.data?.order?.id}`;
|
||||
toast('سفارش با موفقیت ثبت شد', 'success');
|
||||
}
|
||||
},
|
||||
|
||||
@@ -2,25 +2,44 @@ import { create } from "zustand";
|
||||
import { createJSONStorage, persist } from "zustand/middleware";
|
||||
import { CheckoutStoreType } from "../types/Types";
|
||||
|
||||
const initialState = {
|
||||
isSelectedAddress: false,
|
||||
selectedAddressId: null,
|
||||
isSelectedPayment: false,
|
||||
isSelectedShipment: false,
|
||||
deliveryType: "0",
|
||||
paymentType: "0",
|
||||
tableNumber: 0,
|
||||
carAddress: null as {
|
||||
carModel: string;
|
||||
carColor: string;
|
||||
plateNumber: string;
|
||||
} | null,
|
||||
lastUpdated: null as number | null,
|
||||
};
|
||||
|
||||
export const useCheckoutStore = create<CheckoutStoreType>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
isSelectedAddress: false,
|
||||
setIsSelectedAddress: (value) => set({ isSelectedAddress: value }),
|
||||
selectedAddressId: null,
|
||||
setSelectedAddressId: (value) => set({ selectedAddressId: value }),
|
||||
isSelectedPayment: false,
|
||||
setIsSelectedPayment: (value) => set({ isSelectedPayment: value }),
|
||||
isSelectedShipment: false,
|
||||
setIsSelectedShipment: (value) => set({ isSelectedShipment: value }),
|
||||
deliveryType: "0",
|
||||
setDeliveryType: (value) => set({ deliveryType: value }),
|
||||
paymentType: "0",
|
||||
setPaymentType: (value) => set({ paymentType: value }),
|
||||
tableNumber: 0,
|
||||
setTableNumber: (value) => set({ tableNumber: value }),
|
||||
carAddress: null,
|
||||
setCarAddress: (value) => set({ carAddress: value }),
|
||||
...initialState,
|
||||
setIsSelectedAddress: (value) =>
|
||||
set({ isSelectedAddress: value, lastUpdated: Date.now() }),
|
||||
setSelectedAddressId: (value) =>
|
||||
set({ selectedAddressId: value, lastUpdated: Date.now() }),
|
||||
setIsSelectedPayment: (value) =>
|
||||
set({ isSelectedPayment: value, lastUpdated: Date.now() }),
|
||||
setIsSelectedShipment: (value) =>
|
||||
set({ isSelectedShipment: value, lastUpdated: Date.now() }),
|
||||
setDeliveryType: (value) =>
|
||||
set({ deliveryType: value, lastUpdated: Date.now() }),
|
||||
setPaymentType: (value) =>
|
||||
set({ paymentType: value, lastUpdated: Date.now() }),
|
||||
setTableNumber: (value) =>
|
||||
set({ tableNumber: value, lastUpdated: Date.now() }),
|
||||
setCarAddress: (value) =>
|
||||
set({ carAddress: value, lastUpdated: Date.now() }),
|
||||
setLastUpdated: (value) => set({ lastUpdated: value }),
|
||||
clear: () => set({ ...initialState }),
|
||||
}),
|
||||
{
|
||||
name: "checkout-storage",
|
||||
@@ -28,3 +47,34 @@ export const useCheckoutStore = create<CheckoutStoreType>()(
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
// چک خودکار برای پاک کردن بعد از 2 ساعت
|
||||
if (typeof window !== "undefined") {
|
||||
const TWO_HOURS = 2 * 60 * 60 * 1000; // 2 ساعت به میلیثانیه
|
||||
|
||||
const checkAndClear = () => {
|
||||
const stored = localStorage.getItem("checkout-storage");
|
||||
if (stored) {
|
||||
try {
|
||||
const parsed = JSON.parse(stored);
|
||||
const state = parsed.state;
|
||||
if (state?.lastUpdated) {
|
||||
const now = Date.now();
|
||||
const timeDiff = now - state.lastUpdated;
|
||||
if (timeDiff >= TWO_HOURS) {
|
||||
useCheckoutStore.getState().clear();
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// در صورت خطا در parse، store را پاک میکنیم
|
||||
useCheckoutStore.getState().clear();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// چک در زمان لود شدن
|
||||
checkAndClear();
|
||||
|
||||
// چک هر 5 دقیقه
|
||||
setInterval(checkAndClear, 5 * 60 * 1000);
|
||||
}
|
||||
|
||||
@@ -145,6 +145,9 @@ export type CheckoutStoreType = {
|
||||
plateNumber: string;
|
||||
} | null
|
||||
) => void;
|
||||
lastUpdated: number | null;
|
||||
setLastUpdated: (value: number | null) => void;
|
||||
clear: () => void;
|
||||
};
|
||||
|
||||
export interface OrderUser {
|
||||
|
||||
Reference in New Issue
Block a user