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) => { export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: SummarySectionProps) => {
const { t } = useTranslation('parallels', { keyPrefix: 'OrderDetail' }); const { t } = useTranslation('parallels', { keyPrefix: 'OrderDetail' });
const { isSelectedAddress, isSelectedShipment, isSelectedPayment, deliveryType: storeDeliveryType, paymentType, selectedAddressId, tableNumber, carAddress } = useCheckoutStore(); const { isSelectedAddress, isSelectedShipment, isSelectedPayment, deliveryType: storeDeliveryType, paymentType, selectedAddressId, tableNumber, carAddress, clear } = useCheckoutStore();
const { description } = useCartStore(); const { description, reset: resetCart } = useCartStore();
const { mutate: createOrder } = useCreateOrder(); const { mutate: createOrder } = useCreateOrder();
const { mutate: saveAllMethod } = useSaveAllMethod() const { mutate: saveAllMethod } = useSaveAllMethod()
const params = useParams(); const params = useParams();
@@ -89,7 +89,7 @@ export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: S
return; return;
} }
if (!isDeliveryCar && !selectedAddressId) { if (!isDeliveryCar && !isDineIn && !selectedAddressId) {
toast('لطفا آدرس را انتخاب کنید', 'error'); toast('لطفا آدرس را انتخاب کنید', 'error');
return; return;
} }
@@ -128,11 +128,13 @@ export const SummarySection = ({ cartModal, onToggleCartModal, deliveryType }: S
} }
createOrder(orderData, { createOrder(orderData, {
onSuccess: (data) => { onSuccess: (data) => {
clear();
resetCart();
if (data?.data?.paymentUrl) { if (data?.data?.paymentUrl) {
window.location.href = data?.data?.paymentUrl; window.location.href = data?.data?.paymentUrl;
toast('در حال ریدایرکت به صفحه پرداخت...', 'success'); toast('در حال ریدایرکت به صفحه پرداخت...', 'success');
} else { } else {
window.location.href = `/${name}/verify/${data?.data?.order?.id}`; window.location.href = `/${name}/order/track/${data?.data?.order?.id}`;
toast('سفارش با موفقیت ثبت شد', 'success'); toast('سفارش با موفقیت ثبت شد', 'success');
} }
}, },
@@ -2,25 +2,44 @@ import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware"; import { createJSONStorage, persist } from "zustand/middleware";
import { CheckoutStoreType } from "../types/Types"; 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>()( export const useCheckoutStore = create<CheckoutStoreType>()(
persist( persist(
(set) => ({ (set) => ({
isSelectedAddress: false, ...initialState,
setIsSelectedAddress: (value) => set({ isSelectedAddress: value }), setIsSelectedAddress: (value) =>
selectedAddressId: null, set({ isSelectedAddress: value, lastUpdated: Date.now() }),
setSelectedAddressId: (value) => set({ selectedAddressId: value }), setSelectedAddressId: (value) =>
isSelectedPayment: false, set({ selectedAddressId: value, lastUpdated: Date.now() }),
setIsSelectedPayment: (value) => set({ isSelectedPayment: value }), setIsSelectedPayment: (value) =>
isSelectedShipment: false, set({ isSelectedPayment: value, lastUpdated: Date.now() }),
setIsSelectedShipment: (value) => set({ isSelectedShipment: value }), setIsSelectedShipment: (value) =>
deliveryType: "0", set({ isSelectedShipment: value, lastUpdated: Date.now() }),
setDeliveryType: (value) => set({ deliveryType: value }), setDeliveryType: (value) =>
paymentType: "0", set({ deliveryType: value, lastUpdated: Date.now() }),
setPaymentType: (value) => set({ paymentType: value }), setPaymentType: (value) =>
tableNumber: 0, set({ paymentType: value, lastUpdated: Date.now() }),
setTableNumber: (value) => set({ tableNumber: value }), setTableNumber: (value) =>
carAddress: null, set({ tableNumber: value, lastUpdated: Date.now() }),
setCarAddress: (value) => set({ carAddress: value }), setCarAddress: (value) =>
set({ carAddress: value, lastUpdated: Date.now() }),
setLastUpdated: (value) => set({ lastUpdated: value }),
clear: () => set({ ...initialState }),
}), }),
{ {
name: "checkout-storage", 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; plateNumber: string;
} | null } | null
) => void; ) => void;
lastUpdated: number | null;
setLastUpdated: (value: number | null) => void;
clear: () => void;
}; };
export interface OrderUser { export interface OrderUser {