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) => {
|
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user