diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
index fa68c249e5..ce82b5b83b 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
@@ -12,7 +12,6 @@ import {
pricesQuery,
resumeSubscriptionMutation,
SubscriptionPlan,
- subscriptionQuery,
SubscriptionRecurring,
SubscriptionStatus,
} from '@affine/graphql';
@@ -20,10 +19,14 @@ import { useMutation, useQuery } from '@affine/workspace/affine/gql';
import { ArrowRightSmallIcon } from '@blocksuite/icons';
import { Button, IconButton } from '@toeverything/components/button';
import { useSetAtom } from 'jotai';
-import { Suspense, useCallback, useEffect } from 'react';
+import { Suspense, useCallback } from 'react';
import { openSettingModalAtom } from '../../../../../atoms';
import { useCurrentLoginStatus } from '../../../../../hooks/affine/use-current-login-status';
+import {
+ type SubscriptionMutator,
+ useUserSubscription,
+} from '../../../../../hooks/use-subscription';
import * as styles from './style.css';
export const BillingSettings = () => {
@@ -56,14 +59,11 @@ export const BillingSettings = () => {
};
const SubscriptionSettings = () => {
- const { data: subscriptionQueryResult } = useQuery({
- query: subscriptionQuery,
- });
+ const [subscription, mutateSubscription] = useUserSubscription();
const { data: pricesQueryResult } = useQuery({
query: pricesQuery,
});
- const subscription = subscriptionQueryResult.currentUser?.subscription;
const plan = subscription?.plan ?? SubscriptionPlan.Free;
const recurring = subscription?.recurring ?? SubscriptionRecurring.Monthly;
@@ -123,7 +123,7 @@ const SubscriptionSettings = () => {
subscription.end
).toLocaleDateString()}`}
>
-
+
) : (
{
subscription.end
).toLocaleDateString()}`}
>
-
+
)}
>
@@ -166,20 +166,18 @@ const PlanAction = ({ plan }: { plan: string }) => {
const PaymentMethodUpdater = () => {
// TODO: open stripe customer portal
- const { isMutating, trigger, data } = useMutation({
+ const { isMutating, trigger } = useMutation({
mutation: createCustomerPortalMutation,
});
const update = useCallback(() => {
- trigger();
+ trigger(null, {
+ onSuccess: data => {
+ window.open(data.createCustomerPortal, '_blank', 'noopener noreferrer');
+ },
+ });
}, [trigger]);
- useEffect(() => {
- if (data?.createCustomerPortal) {
- window.open(data.createCustomerPortal, '_blank', 'noopener noreferrer');
- }
- }, [data]);
-
return (