Clear clear store when create order + redirect to detail if cash type

This commit is contained in:
hamid zarghami
2025-12-23 11:48:37 +03:30
parent bdd777dd5b
commit 06827edc3d
3 changed files with 75 additions and 20 deletions
@@ -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 {