feat(core): add an entry for admin panel (#10813)

![CleanShot 2025-03-13 at 13 02 25@2x](https://github.com/user-attachments/assets/82f50a5b-f079-4c64-a3fa-6554735bea82)
This commit is contained in:
JimmFly
2025-03-13 10:46:26 +00:00
parent 7df06ea98b
commit 0c9591f08e
5 changed files with 81 additions and 22 deletions
@@ -14,7 +14,7 @@ import {
} from '@affine/core/modules/dialogs';
import { useI18n } from '@affine/i18n';
import { track } from '@affine/track';
import { AccountIcon, SignOutIcon } from '@blocksuite/icons/rc';
import { AccountIcon, AdminIcon, SignOutIcon } from '@blocksuite/icons/rc';
import { useLiveData, useService } from '@toeverything/infra';
import { cssVar } from '@toeverything/theme';
import { assignInlineVars } from '@vanilla-extract/dynamic';
@@ -27,6 +27,7 @@ import {
ServerService,
SubscriptionService,
UserCopilotQuotaService,
UserFeatureService,
UserQuotaService,
} from '../../modules/cloud';
import { UserPlanButton } from '../affine/auth/user-plan-button';
@@ -80,6 +81,9 @@ const UnauthorizedUserInfo = () => {
const AccountMenu = () => {
const workspaceDialogService = useService(WorkspaceDialogService);
const openSignOutModal = useSignOut();
const serverService = useService(ServerService);
const userFeatureService = useService(UserFeatureService);
const isAdmin = useLiveData(userFeatureService.userFeature.isAdmin$);
const onOpenAccountSetting = useCallback(() => {
track.$.navigationPanel.profileAndBadge.openSettings({ to: 'account' });
@@ -88,8 +92,16 @@ const AccountMenu = () => {
});
}, [workspaceDialogService]);
const onOpenAdminPanel = useCallback(() => {
window.open(`${serverService.server.baseUrl}/admin`, '_blank');
}, [serverService.server.baseUrl]);
const t = useI18n();
useEffect(() => {
userFeatureService.userFeature.revalidate();
}, [userFeatureService]);
return (
<>
<MenuItem
@@ -99,6 +111,15 @@ const AccountMenu = () => {
>
{t['com.affine.workspace.cloud.account.settings']()}
</MenuItem>
{isAdmin ? (
<MenuItem
prefixIcon={<AdminIcon />}
data-testid="workspace-modal-account-admin-option"
onClick={onOpenAdminPanel}
>
{t['com.affine.workspace.cloud.account.admin']()}
</MenuItem>
) : null}
<MenuItem
prefixIcon={<SignOutIcon />}
data-testid="workspace-modal-sign-out-option"