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 a1eab2ab5d..ec4ef72362 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
@@ -21,7 +21,7 @@ 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, useMemo } from 'react';
+import { Suspense, useCallback, useMemo, useState } from 'react';
import { openSettingModalAtom } from '../../../../../atoms';
import { useCurrentLoginStatus } from '../../../../../hooks/affine/use-current-login-status';
@@ -29,6 +29,7 @@ import {
type SubscriptionMutator,
useUserSubscription,
} from '../../../../../hooks/use-subscription';
+import { DowngradeModal } from '../plans/modals';
import * as styles from './style.css';
enum DescriptionI18NKey {
@@ -83,6 +84,19 @@ export const BillingSettings = () => {
const SubscriptionSettings = () => {
const [subscription, mutateSubscription] = useUserSubscription();
+ const { isMutating, trigger } = useMutation({
+ mutation: cancelSubscriptionMutation,
+ });
+ const [openCancelModal, setOpenCancelModal] = useState(false);
+
+ const cancel = useCallback(() => {
+ trigger(null, {
+ onSuccess: data => {
+ mutateSubscription(data.cancelSubscription);
+ },
+ });
+ }, [trigger, mutateSubscription]);
+
const { data: pricesQueryResult } = useQuery({
query: pricesQuery,
});
@@ -189,6 +203,8 @@ const SubscriptionSettings = () => {
) : (
(isMutating ? null : setOpenCancelModal(true))}
className="dangerous-setting"
name={t[
'com.affine.payment.billing-setting.cancel-subscription'
@@ -199,9 +215,14 @@ const SubscriptionSettings = () => {
cancelDate: new Date(subscription.end).toLocaleDateString(),
})}
>
-
+
)}
+ (isMutating ? null : cancel())}
+ onOpenChange={setOpenCancelModal}
+ />
>
)}
@@ -287,29 +308,13 @@ const ResumeSubscription = ({
);
};
-const CancelSubscription = ({
- onSubscriptionUpdate,
-}: {
- onSubscriptionUpdate: SubscriptionMutator;
-}) => {
- const { isMutating, trigger } = useMutation({
- mutation: cancelSubscriptionMutation,
- });
-
- const cancel = useCallback(() => {
- trigger(null, {
- onSuccess: data => {
- onSubscriptionUpdate(data.cancelSubscription);
- },
- });
- }, [trigger, onSubscriptionUpdate]);
-
+const CancelSubscription = ({ loading }: { loading?: boolean }) => {
return (
}
- disabled={isMutating}
- loading={isMutating}
- onClick={cancel /* TODO: popup confirmation modal instead */}
+ disabled={loading}
+ loading={loading}
/>
);
};