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:
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user