Files
cozsweet-frontend-nextjs/src/stores/payment/helper/order.ts
T

49 lines
1.3 KiB
TypeScript

import { ExceptionHandler } from "@/core/errors";
import type { PaymentPlan } from "@/data/schemas/payment";
import type { PaymentState } from "../payment-state";
export const MAX_ORDER_POLLING_MS = 5 * 60 * 1000;
export const PAYMENT_TIMEOUT_ERROR_MESSAGE =
"Payment timed out. Please try again.";
export function toPaymentErrorMessage(error: unknown): string {
return ExceptionHandler.message(error);
}
export function hasOrderPollingTimedOut(
startedAt: number | null,
now = Date.now(),
maxDurationMs = MAX_ORDER_POLLING_MS,
): boolean {
return startedAt !== null && now - startedAt >= maxDurationMs;
}
export function resetOrderState(): Partial<PaymentState> {
return {
currentOrderId: null,
currentOrderPlanId: null,
payParams: null,
orderStatus: null,
tipCount: null,
thankYouMessage: null,
orderPollingStartedAt: null,
errorMessage: null,
};
}
export function getSelectedPlan(context: PaymentState): PaymentPlan | undefined {
return context.plans.find(
(plan) => plan.planId === context.selectedPlanId,
);
}
export function getCurrentOrderPlan(
context: PaymentState,
): PaymentPlan | undefined {
if (!context.currentOrderPlanId) return undefined;
return context.plans.find(
(plan) => plan.planId === context.currentOrderPlanId,
);
}