refactor(stores): tighten chat and payment boundaries

This commit is contained in:
2026-07-01 10:12:19 +08:00
parent b7bccaa4cf
commit 5d9ed7e027
9 changed files with 435 additions and 431 deletions
@@ -41,6 +41,45 @@ export function getDefaultPlanId(plans: readonly PaymentPlan[]): string {
);
}
export function hydratePlansState(
plans: PaymentPlan[],
selectedPlanId: string,
): Pick<PaymentState, "plans" | "selectedPlanId" | "autoRenew" | "errorMessage"> {
const nextSelectedPlanId = selectedPlanId || getDefaultPlanId(plans);
return {
plans,
selectedPlanId: nextSelectedPlanId,
autoRenew: defaultAutoRenewForPlan(nextSelectedPlanId, plans),
errorMessage: null,
};
}
export function refreshPlansState(
plans: PaymentPlan[],
selectedPlanId: string,
): Pick<PaymentState, "plans" | "selectedPlanId" | "autoRenew" | "errorMessage"> {
const nextSelectedPlanId = plans.some((plan) => plan.planId === selectedPlanId)
? selectedPlanId
: getDefaultPlanId(plans);
return {
plans,
selectedPlanId: nextSelectedPlanId,
autoRenew: defaultAutoRenewForPlan(nextSelectedPlanId, plans),
errorMessage: null,
};
}
export function selectPlanState(
planId: string,
plans: readonly PaymentPlan[],
): Partial<PaymentState> {
return {
...resetOrderState(),
selectedPlanId: planId,
autoRenew: defaultAutoRenewForPlan(planId, plans),
};
}
export function resetOrderState(): Partial<PaymentState> {
return {
currentOrderId: null,