refactor(stores): tighten chat and payment boundaries
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -12,11 +12,12 @@ import {
|
||||
refreshPaymentPlansActor,
|
||||
} from "./payment-machine.actors";
|
||||
import {
|
||||
defaultAutoRenewForPlan,
|
||||
getDefaultPlanId,
|
||||
hasOrderPollingTimedOut,
|
||||
hydratePlansState,
|
||||
PAYMENT_TIMEOUT_ERROR_MESSAGE,
|
||||
refreshPlansState,
|
||||
resetOrderState,
|
||||
selectPlanState,
|
||||
toPaymentErrorMessage,
|
||||
} from "./payment-machine.helpers";
|
||||
|
||||
@@ -58,14 +59,7 @@ export const paymentMachine = setup({
|
||||
target: "refreshingPlans",
|
||||
actions: assign(({ context, event }) => {
|
||||
const plans = event.output?.plans ?? [];
|
||||
const selectedPlanId =
|
||||
context.selectedPlanId || getDefaultPlanId(plans);
|
||||
return {
|
||||
plans,
|
||||
selectedPlanId,
|
||||
autoRenew: defaultAutoRenewForPlan(selectedPlanId, plans),
|
||||
errorMessage: null,
|
||||
};
|
||||
return hydratePlansState(plans, context.selectedPlanId);
|
||||
}),
|
||||
},
|
||||
{
|
||||
@@ -85,14 +79,7 @@ export const paymentMachine = setup({
|
||||
target: "ready",
|
||||
actions: assign(({ context, event }) => {
|
||||
const plans = event.output.plans;
|
||||
const selectedPlanId =
|
||||
context.selectedPlanId || getDefaultPlanId(plans);
|
||||
return {
|
||||
plans,
|
||||
selectedPlanId,
|
||||
autoRenew: defaultAutoRenewForPlan(selectedPlanId, plans),
|
||||
errorMessage: null,
|
||||
};
|
||||
return hydratePlansState(plans, context.selectedPlanId);
|
||||
}),
|
||||
},
|
||||
onError: {
|
||||
@@ -111,16 +98,7 @@ export const paymentMachine = setup({
|
||||
target: "ready",
|
||||
actions: assign(({ context, event }) => {
|
||||
const plans = event.output.plans;
|
||||
const selectedPlanId =
|
||||
plans.some((plan) => plan.planId === context.selectedPlanId)
|
||||
? context.selectedPlanId
|
||||
: getDefaultPlanId(plans);
|
||||
return {
|
||||
plans,
|
||||
selectedPlanId,
|
||||
autoRenew: defaultAutoRenewForPlan(selectedPlanId, plans),
|
||||
errorMessage: null,
|
||||
};
|
||||
return refreshPlansState(plans, context.selectedPlanId);
|
||||
}),
|
||||
},
|
||||
onError: {
|
||||
@@ -137,9 +115,7 @@ export const paymentMachine = setup({
|
||||
PaymentInit: "refreshingPlans",
|
||||
PaymentPlanSelected: {
|
||||
actions: assign(({ context, event }) => ({
|
||||
...resetOrderState(),
|
||||
selectedPlanId: event.planId,
|
||||
autoRenew: defaultAutoRenewForPlan(event.planId, context.plans),
|
||||
...selectPlanState(event.planId, context.plans),
|
||||
})),
|
||||
},
|
||||
PaymentPayChannelChanged: {
|
||||
@@ -283,9 +259,7 @@ export const paymentMachine = setup({
|
||||
PaymentPlanSelected: {
|
||||
target: "ready",
|
||||
actions: assign(({ context, event }) => ({
|
||||
...resetOrderState(),
|
||||
selectedPlanId: event.planId,
|
||||
autoRenew: defaultAutoRenewForPlan(event.planId, context.plans),
|
||||
...selectPlanState(event.planId, context.plans),
|
||||
})),
|
||||
},
|
||||
PaymentPayChannelChanged: {
|
||||
|
||||
Reference in New Issue
Block a user