fix(core): handle unexpected hits to paywalls (#10215)

close AF-2232

fix(core): handle unexpected hits to paywalls

chore: remove sent email action
This commit is contained in:
JimmFly
2025-02-17 08:04:32 +00:00
parent 6dc1fefa33
commit 29d8824479
2 changed files with 25 additions and 30 deletions

View File

@@ -1,6 +1,5 @@
import { import {
Button, Button,
Checkbox,
Loading, Loading,
Menu, Menu,
MenuItem, MenuItem,
@@ -165,9 +164,11 @@ export const InviteMemberEditor = ({
} }
return [...prev, member]; return [...prev, member];
}); });
setSearchText('');
memberSearchService.search('');
focusInput(); focusInput();
}, },
[focusInput] [focusInput, memberSearchService]
); );
const handleRoleChange = useCallback((role: DocRole) => { const handleRoleChange = useCallback((role: DocRole) => {
@@ -211,9 +212,11 @@ export const InviteMemberEditor = ({
onBlur={onBlur} onBlur={onBlur}
autoFocus autoFocus
className={styles.searchInput} className={styles.searchInput}
placeholder={t[ placeholder={
'com.affine.share-menu.invite-editor.placeholder' selectedMembers.length
]()} ? ''
: t['com.affine.share-menu.invite-editor.placeholder']()
}
/> />
</div> </div>
{!selectedMembers.length ? null : ( {!selectedMembers.length ? null : (
@@ -225,17 +228,6 @@ export const InviteMemberEditor = ({
/> />
)} )}
</div> </div>
{selectedMembers.length ? (
<div className={styles.sentEmail}>
<Checkbox
className={styles.checkbox}
checked={false}
disabled // TODO(@JimmFly): implement this
/>
{t['com.affine.share-menu.invite-editor.sent-email']()}
{` (coming soon)`}
</div>
) : null}
<div className={styles.resultContainer}> <div className={styles.resultContainer}>
<Result onClickMember={handleClickMember} /> <Result onClickMember={handleClickMember} />
</div> </div>

View File

@@ -1,12 +1,10 @@
import { Tabs, Tooltip, useConfirmModal } from '@affine/component'; import { Tabs, Tooltip, useConfirmModal } from '@affine/component';
import { Button } from '@affine/component/ui/button'; import { Button } from '@affine/component/ui/button';
import { Menu } from '@affine/component/ui/menu'; import { Menu } from '@affine/component/ui/menu';
import { import { ServerService } from '@affine/core/modules/cloud';
ServerService,
WorkspaceSubscriptionService,
} from '@affine/core/modules/cloud';
import { WorkspaceDialogService } from '@affine/core/modules/dialogs'; import { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import { WorkspacePermissionService } from '@affine/core/modules/permissions'; import { WorkspacePermissionService } from '@affine/core/modules/permissions';
import { WorkspaceQuotaService } from '@affine/core/modules/quota';
import { ShareInfoService } from '@affine/core/modules/share-doc'; import { ShareInfoService } from '@affine/core/modules/share-doc';
import type { WorkspaceMetadata } from '@affine/core/modules/workspace'; import type { WorkspaceMetadata } from '@affine/core/modules/workspace';
import { ServerDeploymentType, SubscriptionPlan } from '@affine/graphql'; import { ServerDeploymentType, SubscriptionPlan } from '@affine/graphql';
@@ -20,6 +18,7 @@ import {
type Ref, type Ref,
useCallback, useCallback,
useEffect, useEffect,
useMemo,
useState, useState,
} from 'react'; } from 'react';
@@ -55,14 +54,18 @@ export const ShareMenuContent = (props: ShareMenuProps) => {
c => c.type === ServerDeploymentType.Selfhosted c => c.type === ServerDeploymentType.Selfhosted
) )
); );
const workspaceQuotaService = useService(WorkspaceQuotaService);
const workspaceSubscriptionService = useService(WorkspaceSubscriptionService); const quota = useLiveData(workspaceQuotaService.quota.quota$);
const subscription = useLiveData( const hittingPaywall = useMemo(() => {
workspaceSubscriptionService.subscription.subscription$ if (isSelfhosted) {
); return false;
const hittingPaywall = }
(!subscription && !isSelfhosted) || if (quota) {
(subscription && subscription.plan === SubscriptionPlan.Free); const { name } = quota;
return name.toLowerCase() === SubscriptionPlan.Free.toLowerCase();
}
return true;
}, [isSelfhosted, quota]);
const permissionService = useService(WorkspacePermissionService); const permissionService = useService(WorkspacePermissionService);
const isOwner = useLiveData(permissionService.permission.isOwner$); const isOwner = useLiveData(permissionService.permission.isOwner$);
@@ -74,8 +77,8 @@ export const ShareMenuContent = (props: ShareMenuProps) => {
}, []); }, []);
useEffect(() => { useEffect(() => {
workspaceSubscriptionService.subscription.revalidate(); workspaceQuotaService.quota.revalidate();
}, [workspaceSubscriptionService]); }, [workspaceQuotaService]);
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();