feat(payment): implement first recharge offer functionality and UI updates
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { PaymentPlan } from "@/data/dto/payment";
|
||||
import type { PaymentPlan, PaymentPlansResponse } from "@/data/dto/payment";
|
||||
|
||||
import type { PaymentState } from "./payment-state";
|
||||
|
||||
@@ -44,7 +44,10 @@ export function getDefaultPlanId(plans: readonly PaymentPlan[]): string {
|
||||
export function hydratePlansState(
|
||||
plans: PaymentPlan[],
|
||||
selectedPlanId: string,
|
||||
): Pick<PaymentState, "plans" | "selectedPlanId" | "autoRenew" | "errorMessage"> {
|
||||
): Pick<
|
||||
PaymentState,
|
||||
"plans" | "selectedPlanId" | "autoRenew" | "errorMessage"
|
||||
> {
|
||||
const nextSelectedPlanId = selectedPlanId || getDefaultPlanId(plans);
|
||||
return {
|
||||
plans,
|
||||
@@ -54,10 +57,32 @@ export function hydratePlansState(
|
||||
};
|
||||
}
|
||||
|
||||
export function hydratePlansResponseState(
|
||||
response: PaymentPlansResponse,
|
||||
selectedPlanId: string,
|
||||
): Pick<
|
||||
PaymentState,
|
||||
| "plans"
|
||||
| "isFirstRecharge"
|
||||
| "firstRechargeOffer"
|
||||
| "selectedPlanId"
|
||||
| "autoRenew"
|
||||
| "errorMessage"
|
||||
> {
|
||||
return {
|
||||
...hydratePlansState(response.plans, selectedPlanId),
|
||||
isFirstRecharge: response.isFirstRecharge,
|
||||
firstRechargeOffer: response.firstRechargeOffer,
|
||||
};
|
||||
}
|
||||
|
||||
export function refreshPlansState(
|
||||
plans: PaymentPlan[],
|
||||
selectedPlanId: string,
|
||||
): Pick<PaymentState, "plans" | "selectedPlanId" | "autoRenew" | "errorMessage"> {
|
||||
): Pick<
|
||||
PaymentState,
|
||||
"plans" | "selectedPlanId" | "autoRenew" | "errorMessage"
|
||||
> {
|
||||
const nextSelectedPlanId = plans.some((plan) => plan.planId === selectedPlanId)
|
||||
? selectedPlanId
|
||||
: getDefaultPlanId(plans);
|
||||
@@ -69,6 +94,25 @@ export function refreshPlansState(
|
||||
};
|
||||
}
|
||||
|
||||
export function refreshPlansResponseState(
|
||||
response: PaymentPlansResponse,
|
||||
selectedPlanId: string,
|
||||
): Pick<
|
||||
PaymentState,
|
||||
| "plans"
|
||||
| "isFirstRecharge"
|
||||
| "firstRechargeOffer"
|
||||
| "selectedPlanId"
|
||||
| "autoRenew"
|
||||
| "errorMessage"
|
||||
> {
|
||||
return {
|
||||
...refreshPlansState(response.plans, selectedPlanId),
|
||||
isFirstRecharge: response.isFirstRecharge,
|
||||
firstRechargeOffer: response.firstRechargeOffer,
|
||||
};
|
||||
}
|
||||
|
||||
export function selectPlanState(
|
||||
planId: string,
|
||||
plans: readonly PaymentPlan[],
|
||||
|
||||
Reference in New Issue
Block a user