Skip to content

Commit

Permalink
feat(cart)!: add setPastTimeToCurrent to update the fulfillment time …
Browse files Browse the repository at this point in the history
…to ASAP if the requested fulfillment time is in the past
  • Loading branch information
AustinWu666 committed Dec 5, 2024
1 parent 904fd8e commit 6d74490
Show file tree
Hide file tree
Showing 3 changed files with 734 additions and 9 deletions.
33 changes: 33 additions & 0 deletions src/api/cart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,43 @@ const createBuyNowItemFetchBody = (request: BuyNowItemRequest) => {

const createFulfillment = (cartFulfillment: CartFulfillment) => {
const fulfillment: CartFulfillment = JSON.parse(JSON.stringify(cartFulfillment));
const now = new Date();

// Default `setPastTimeToCurrent` to true if undefined
const setPastTimeToCurrent = cartFulfillment.setPastTimeToCurrent ?? true;

if (setPastTimeToCurrent) {
if (
fulfillment.fulfillmentType === FulfillmentType.PICKUP &&
fulfillment.pickupDetails?.pickupAt &&
fulfillment.pickupDetails.scheduleType === ScheduleType.SCHEDULED
) {
const pickupTime = new Date(fulfillment.pickupDetails.pickupAt);
if (pickupTime.getTime() < now.getTime()) {
fulfillment.pickupDetails.scheduleType = ScheduleType.ASAP;
}
} else if (
fulfillment.fulfillmentType === FulfillmentType.DELIVERY &&
fulfillment.deliveryDetails?.deliverAt &&
fulfillment.deliveryDetails.scheduleType === ScheduleType.SCHEDULED
) {
const deliveryTime = new Date(fulfillment.deliveryDetails.deliverAt);
if (deliveryTime.getTime() < now.getTime()) {
fulfillment.deliveryDetails.scheduleType = ScheduleType.ASAP;
}
}
}

if (fulfillment.fulfillmentType === FulfillmentType.PICKUP) {
if (!fulfillment.pickupDetails) {
fulfillment.pickupDetails = {};
}
if (!fulfillment.pickupDetails.scheduleType) {
fulfillment.pickupDetails.scheduleType = ScheduleType.ASAP;
}
if (fulfillment.pickupDetails.scheduleType === ScheduleType.ASAP) {
delete fulfillment.pickupDetails.pickupAt;
}
if (fulfillment.pickupDetails.curbsidePickupRequested == undefined) {
fulfillment.pickupDetails.curbsidePickupRequested = false;
}
Expand All @@ -176,6 +206,9 @@ const createFulfillment = (cartFulfillment: CartFulfillment) => {
if (!fulfillment.deliveryDetails.scheduleType) {
fulfillment.deliveryDetails.scheduleType = ScheduleType.ASAP;
}
if (fulfillment.deliveryDetails.scheduleType === ScheduleType.ASAP) {
delete fulfillment.deliveryDetails.deliverAt;
}
}
return fulfillment;
};
Expand Down
7 changes: 6 additions & 1 deletion src/types/api/cart/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,11 @@ export interface CartFulfillment {
*/
deliverAt?: string;
};
/**
* Flag that determines whether to automatically adjust requested fulfillment times to the current time (ASAP) if
* the specified time is in the past. Default is `true` if not provided.
*/
setPastTimeToCurrent?: boolean;
}

export interface AddItemBaseRequest {
Expand Down Expand Up @@ -494,4 +499,4 @@ export interface CartErrorNextFulfillmentWindow {
export interface CartResponse extends CartBaseResponse {
/** The response from the Fetch API. */
response: Response;
}
}
Loading

0 comments on commit 6d74490

Please sign in to comment.