fix(subscription): return chat paywalls after payment

This commit is contained in:
2026-06-25 10:20:13 +08:00
parent 9555a173b5
commit c8f0827e40
7 changed files with 58 additions and 14 deletions
+15 -1
View File
@@ -15,6 +15,7 @@
* 8. 协议复选框
*/
import { useEffect, useMemo, useRef, useState } from "react";
import { useRouter } from "next/navigation";
import { Checkbox, MobileShell } from "@/app/_components/core";
import { AppConstants } from "@/core/app_constants";
@@ -25,6 +26,7 @@ import {
usePaymentState,
} from "@/stores/payment/payment-context";
import { useUserDispatch, useUserState } from "@/stores/user/user-context";
import { ROUTES } from "@/router/routes";
import {
SubscriptionBackLink,
@@ -50,12 +52,15 @@ export type { SubscriptionType } from "./subscription-screen.helpers";
export interface SubscriptionScreenProps {
subscriptionType?: SubscriptionType;
shouldResumePendingOrder?: boolean;
returnTo?: "chat" | null;
}
export function SubscriptionScreen({
subscriptionType = "vip",
shouldResumePendingOrder = false,
returnTo = null,
}: SubscriptionScreenProps) {
const router = useRouter();
const user = useUserState();
const userDispatch = useUserDispatch();
const payment = usePaymentState();
@@ -176,6 +181,14 @@ export function SubscriptionScreen({
? "Choose a voice package"
: "Choose a subscription plan";
const handlePaymentSuccessClose = () => {
setShowPaymentSuccessDialog(false);
paymentDispatch({ type: "PaymentReset" });
if (returnTo === "chat") {
router.replace(ROUTES.chat);
}
};
useEffect(() => {
if (payment.isLoadingPlans || payment.plans.length === 0) return;
if (selectedPlan !== null) return;
@@ -272,6 +285,7 @@ export function SubscriptionScreen({
<SubscriptionCheckoutButton
disabled={!canActivate}
subscriptionType={subscriptionType}
returnTo={returnTo}
/>
</div>
@@ -312,7 +326,7 @@ export function SubscriptionScreen({
<SubscriptionPaymentSuccessDialog
open={showPaymentSuccessDialog}
subscriptionType={subscriptionType}
onClose={() => setShowPaymentSuccessDialog(false)}
onClose={handlePaymentSuccessClose}
/>
</div>
</MobileShell>