import { WorkspaceListItemSkeleton, WorkspaceListSkeleton, } from '@affine/component/setting-components'; import { WorkspaceAvatar } from '@affine/component/workspace-avatar'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import type { RootWorkspaceMetadata } from '@affine/workspace/atom'; import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-workspace-name'; import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/react'; import clsx from 'clsx'; import { useAtomValue } from 'jotai'; import type { FC } from 'react'; import { Suspense } from 'react'; import { useCurrentWorkspace } from '../../../../hooks/current/use-current-workspace'; import type { GeneralSettingKeys, GeneralSettingList, } from '../general-setting'; import { settingSlideBar, sidebarItemsWrapper, sidebarSelectItem, sidebarSubtitle, sidebarTitle, } from './style.css'; export const SettingSidebar: FC<{ generalSettingList: GeneralSettingList; onGeneralSettingClick: (key: GeneralSettingKeys) => void; onWorkspaceSettingClick: (workspaceId: string) => void; selectedWorkspaceId: string | null; selectedGeneralKey: string | null; onAccountSettingClick: () => void; }> = ({ generalSettingList, onGeneralSettingClick, onWorkspaceSettingClick, selectedWorkspaceId, selectedGeneralKey, }) => { const t = useAFFiNEI18N(); return (
{t['Settings']()}
{t['General']()}
{generalSettingList.map(({ title, icon, key, testId }) => { if (!runtimeConfig.enablePlugin && key === 'plugins') { return null; } return (
{ onGeneralSettingClick(key); }} data-testid={testId} > {icon({ className: 'icon' })} {title}
); })}
{t['com.affine.settings.workspace']()}
}>
); }; export const WorkspaceList: FC<{ onWorkspaceSettingClick: (workspaceId: string) => void; selectedWorkspaceId: string | null; }> = ({ onWorkspaceSettingClick, selectedWorkspaceId }) => { const workspaces = useAtomValue(rootWorkspacesMetadataAtom); const [currentWorkspace] = useCurrentWorkspace(); return ( <> {workspaces.map(workspace => { return ( }> { onWorkspaceSettingClick(workspace.id); }} isCurrent={workspace.id === currentWorkspace.id} isActive={workspace.id === selectedWorkspaceId} /> ); })} ); }; const WorkspaceListItem = ({ meta, onClick, isCurrent, isActive, }: { meta: RootWorkspaceMetadata; onClick: () => void; isCurrent: boolean; isActive: boolean; }) => { const workspace = useStaticBlockSuiteWorkspace(meta.id); const [workspaceName] = useBlockSuiteWorkspaceName(workspace); return (
{workspaceName} {isCurrent ? (
Current
) : null}
); };