diff --git a/src/features/order/orderSlice.ts b/src/features/order/orderSlice.ts index 5b2191e..5e16670 100644 --- a/src/features/order/orderSlice.ts +++ b/src/features/order/orderSlice.ts @@ -65,8 +65,9 @@ interface CartState { scheduledDate: string; discount: DiscountData; plateCar: string; - pickupDate: string, - pickupTime: string + pickupDate: string; + pickupTime: string; + pickupType: string; } // localStorage keys @@ -95,7 +96,8 @@ export const CART_STORAGE_KEYS = { PLATE: "fascano_plate_car", PICKUP_DATE: "fascano_pickup_date", PICKUP_TIME: "fascano_pickup_time", -} as const; + PICKUP_TYPE: "fascano_pickup_type", +} as const; // Utility functions for localStorage const getFromLocalStorage = (key: string, defaultValue: T): T => { @@ -179,6 +181,7 @@ const initialState: CartState = { plateCar: getFromLocalStorage(CART_STORAGE_KEYS.PLATE, ""), pickupDate: getFromLocalStorage(CART_STORAGE_KEYS.PICKUP_DATE, ""), pickupTime: getFromLocalStorage(CART_STORAGE_KEYS.PICKUP_TIME, ""), + pickupType: getFromLocalStorage(CART_STORAGE_KEYS.PICKUP_TYPE, ""), }; const orderSlice = createSlice({ @@ -610,7 +613,16 @@ const orderSlice = createSlice({ JSON.stringify(state.pickupTime), ); } - }, + }, + updatePickUpType(state, action: PayloadAction) { + state.pickupType = action.payload; + if (typeof window !== "undefined") { + localStorage.setItem( + CART_STORAGE_KEYS.PICKUP_TYPE, + JSON.stringify(state.pickupType), + ); + } + }, }, }); @@ -646,6 +658,7 @@ export const { updateDiscount, updatePickupDate, updatePickupTime, + updatePickUpType, } = orderSlice.actions; // Tax calculation helper functions @@ -690,9 +703,8 @@ export const selectCartItemsQuantityById = // Loyalty selectors const selectOrderItems = (state: RootState) => state.order.items; -export const selectLoyaltyItems = createSelector( - [selectOrderItems], - (items) => items.filter((item) => item.isHasLoyalty), +export const selectLoyaltyItems = createSelector([selectOrderItems], (items) => + items.filter((item) => item.isHasLoyalty), ); export const selectHighestPricedLoyaltyItem = (state: RootState) => { diff --git a/src/pages/cart/components/timeEstimate/TimeEstimateCard.tsx b/src/pages/cart/components/timeEstimate/TimeEstimateCard.tsx index 4e04201..fb1ba3f 100644 --- a/src/pages/cart/components/timeEstimate/TimeEstimateCard.tsx +++ b/src/pages/cart/components/timeEstimate/TimeEstimateCard.tsx @@ -3,7 +3,11 @@ import useFormInstance from "antd/es/form/hooks/useFormInstance"; import ProInputCard from "components/ProInputCard/ProInputCard.tsx"; import ProRatioGroups from "components/ProRatioGroups/ProRatioGroups.tsx"; import dayjs from "dayjs"; -import { updatePickupDate, updatePickupTime } from "features/order/orderSlice"; +import { + updatePickupDate, + updatePickupTime, + updatePickUpType, +} from "features/order/orderSlice"; import useBreakPoint from "hooks/useBreakPoint.ts"; import { BottomSheet } from "pages/cart/components/timeEstimate/BottomSheet.tsx"; import { Dialog } from "pages/cart/components/timeEstimate/Dialog.tsx"; @@ -53,9 +57,11 @@ export default function TimeEstimateCard() { dayjs().format(SERVER_DATE_FORMAT), dayjs().format(UI_TIME_FORMAT), ); + dispatch(updatePickUpType("now")); } else { setEstimateWay(value); setIsEstimateTimeOpen(true); + dispatch(updatePickUpType("")); } }} /> diff --git a/src/pages/checkout/hooks/useOrder.ts b/src/pages/checkout/hooks/useOrder.ts index c084a2b..a8f4ee5 100644 --- a/src/pages/checkout/hooks/useOrder.ts +++ b/src/pages/checkout/hooks/useOrder.ts @@ -39,6 +39,7 @@ export default function useOrder() { plateCar, pickupTime, pickupDate, + pickupType, } = useAppSelector(selectCart); const highestLoyaltyItem = useAppSelector(selectHighestPricedLoyaltyItem); const { useLoyaltyPoints } = useAppSelector(selectCart); @@ -88,6 +89,7 @@ export default function useOrder() { pickup_time: pickupTime, pickup_date: pickupDate, car_plate: plateCar, + pickupTimeType: pickupType, delivery_pickup_interval: "", orderPrice: orderPrice, use_loylaty: useLoyaltyPoints && highestLoyaltyItem ? 1 : 0,