diff --git a/packages/frontend/component/src/components/member-components/invite-team-modal/modal-content.tsx b/packages/frontend/component/src/components/member-components/invite-team-modal/modal-content.tsx index d6f6f93ad3..76f58b8981 100644 --- a/packages/frontend/component/src/components/member-components/invite-team-modal/modal-content.tsx +++ b/packages/frontend/component/src/components/member-components/invite-team-modal/modal-content.tsx @@ -15,7 +15,7 @@ export const ModalContent = ({ inviteEmail, setInviteEmail, inviteMethod, - onInviteMethodChange, + // onInviteMethodChange, handleConfirm, isMutating, isValidEmail, @@ -48,7 +48,7 @@ export const ModalContent = ({ } - label={t['com.affine.payment.member.team.invite.invite-link']()} + label={`${t['com.affine.payment.member.team.invite.invite-link']()}(Coming soon)`} /> ), value: 'link', diff --git a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx index f9871cbead..b07aa9eee6 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx @@ -102,6 +102,30 @@ export const MemberList = ({ ); }; +const getShouldShow = ({ + member, + currentAccountId, + isOwner, + isAdmin, +}: { + member: Member; + currentAccountId: string; + isOwner: boolean; + isAdmin: boolean; +}) => { + if ( + member.id === currentAccountId || + member.permission === Permission.Owner + ) { + return false; + } else if (isOwner) { + return true; + } else if (isAdmin) { + return member.permission !== Permission.Admin; + } + return false; +}; + const MemberItem = ({ member, isOwner, @@ -122,7 +146,16 @@ const MemberItem = ({ const permission = useService(WorkspacePermissionService).permission; const isEquals = workspaceName === inputValue; - const show = isOwner && currentAccount.id !== member.id; + const show = useMemo( + () => + getShouldShow({ + member, + currentAccountId: currentAccount.id, + isOwner, + isAdmin, + }), + [member, currentAccount, isOwner, isAdmin] + ); const handleOpenAssignModal = useCallback(() => { setInputValue(''); diff --git a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx index 1dc99cdb52..99aa2aacdb 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx @@ -6,7 +6,7 @@ import { } from '@affine/core/modules/permissions'; import { Permission, WorkspaceMemberStatus } from '@affine/graphql'; import { useI18n } from '@affine/i18n'; -import { useService } from '@toeverything/infra'; +import { useLiveData, useService } from '@toeverything/infra'; import { useCallback, useMemo } from 'react'; export const MemberOptions = ({ @@ -23,6 +23,7 @@ export const MemberOptions = ({ const t = useI18n(); const membersService = useService(WorkspaceMembersService); const permission = useService(WorkspacePermissionService).permission; + const isTeam = useLiveData(permission.isTeam$); const { openConfirmModal } = useConfirmModal(); const openRemoveConfirmModal = useCallback( @@ -207,6 +208,7 @@ export const MemberOptions = ({ label: t['com.affine.payment.member.team.change.admin'](), onClick: handleChangeToAdmin, show: + isTeam && isOwner && member.permission !== Permission.Owner && member.permission !== Permission.Admin && @@ -228,6 +230,7 @@ export const MemberOptions = ({ handleRevoke, isAdmin, isOwner, + isTeam, member, t, ]); diff --git a/packages/frontend/core/src/modules/cloud/entities/subscription.ts b/packages/frontend/core/src/modules/cloud/entities/subscription.ts index 6c77aabb28..f2cbf19a19 100644 --- a/packages/frontend/core/src/modules/cloud/entities/subscription.ts +++ b/packages/frontend/core/src/modules/cloud/entities/subscription.ts @@ -42,11 +42,6 @@ export class Subscription extends Entity { ? subscriptions.find(sub => sub.plan === SubscriptionPlan.AI) : null ); - team$ = this.subscription$.map(subscriptions => - subscriptions - ? subscriptions.find(sub => sub.plan === SubscriptionPlan.Team) - : null - ); isBeliever$ = this.pro$.map( sub => sub?.recurring === SubscriptionRecurring.Lifetime ); diff --git a/packages/frontend/i18n/src/resources/en.json b/packages/frontend/i18n/src/resources/en.json index f471312ca8..d80f585bc4 100644 --- a/packages/frontend/i18n/src/resources/en.json +++ b/packages/frontend/i18n/src/resources/en.json @@ -896,7 +896,7 @@ "com.affine.payment.cloud.team-workspace.benefit.g1-3": "500 MB of maximum file size.", "com.affine.payment.cloud.team-workspace.benefit.g1-4": "Unlimited team members (10+ seats).", "com.affine.payment.cloud.team-workspace.benefit.g1-5": "Multiple admin roles.", - "com.affine.payment.cloud.team-workspace.benefit.g1-6": "Priority customer support", + "com.affine.payment.cloud.team-workspace.benefit.g1-6": "Priority customer support.", "com.affine.payment.cloud.team-workspace.description": "Best for scalable teams.", "com.affine.payment.cloud.team-workspace.name": "Team Workspace", "com.affine.payment.cloud.team-workspace.title.billed-yearly": "annually",