fix(tip): allow checkout for all auth states

This commit is contained in:
2026-07-20 18:36:44 +08:00
parent 1e13f94b5d
commit c187f0b817
5 changed files with 196 additions and 36 deletions
+4 -20
View File
@@ -23,12 +23,10 @@ import {
TIP_COFFEE_OPTIONS,
type TipCoffeeType,
} from "@/lib/tip/tip_coffee";
import { useAppNavigator } from "@/router/use-app-navigator";
import {
useActiveCharacter,
useActiveCharacterRoutes,
} from "@/providers/character-provider";
import { useAuthState } from "@/stores/auth/auth-context";
import { useUserState } from "@/stores/user/user-context";
import { TipCheckoutButton } from "./tip-checkout-button";
@@ -39,7 +37,6 @@ import {
import {
findTipCoffeePlan,
formatTipPrice,
isRealLoginStatus,
} from "./tip-screen.helpers";
import styles from "./tip-screen.module.css";
@@ -59,10 +56,8 @@ export function TipScreen({
shouldResumePendingOrder = false,
initialPayChannel = null,
}: TipScreenProps) {
const navigator = useAppNavigator();
const character = useActiveCharacter();
const characterRoutes = useActiveCharacterRoutes();
const authState = useAuthState();
const userState = useUserState();
const paymentMethodConfig = getPaymentMethodConfig({
countryCode: userState.currentUser?.countryCode,
@@ -125,7 +120,6 @@ export function TipScreen({
payment.status === "ready" && !payment.isLoadingPlans && coffeePlan === null;
const isTierSelectionDisabled =
payment.status !== "ready" || payment.isLoadingPlans || isPaymentBusy;
const isAuthLoading = !authState.hasInitialized || authState.isLoading;
const handlePaymentMethodChange = (payChannel: PayChannel) => {
paymentDispatch({
@@ -176,16 +170,9 @@ export function TipScreen({
]);
const handleOrder = () => {
if (isAuthLoading) return;
if (coffeePlan) {
behaviorAnalytics.planClick(coffeePlan, TIP_ANALYTICS_CONTEXT);
}
if (!isRealLoginStatus(authState.loginStatus)) {
navigator.openAuth(returnPath);
return;
}
if (!canCreateOrder) return;
behaviorAnalytics.planClick(coffeePlan, TIP_ANALYTICS_CONTEXT);
paymentDispatch({
type: "PaymentCreateOrderSubmitted",
recipientCharacterId: character.id,
@@ -249,7 +236,8 @@ export function TipScreen({
{character.copy.tipTitle}
</h1>
<p className={styles.subtitle}>
Send a warm coffee tip and keep the private moments glowing.
Thank you for being here. If you&apos;d ever like to treat me to a
little coffee, I&apos;d really appreciate it.
</p>
</section>
@@ -322,11 +310,7 @@ export function TipScreen({
<div className={styles.checkoutSlot}>
<TipCheckoutButton
coffeeType={selectedCoffeeType}
disabled={
showMissingPlan ||
(!canCreateOrder && isRealLoginStatus(authState.loginStatus))
}
isAuthLoading={isAuthLoading}
disabled={showMissingPlan || !canCreateOrder}
onOrder={handleOrder}
returnPath={returnPath}
/>