diff --git a/apps/web/src/components/affine/setting-modal/index.tsx b/apps/web/src/components/affine/setting-modal/index.tsx index e408f5f4c8..32dd1d8b0f 100644 --- a/apps/web/src/components/affine/setting-modal/index.tsx +++ b/apps/web/src/components/affine/setting-modal/index.tsx @@ -2,16 +2,11 @@ import { SettingModal as SettingModalBase, type SettingModalProps, } from '@affine/component/setting-components'; -import { WorkspaceFlavour } from '@affine/env/workspace'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { ContactWithUsIcon } from '@blocksuite/icons'; -import { useAtomValue } from 'jotai'; import type React from 'react'; -import { useCallback, useMemo } from 'react'; +import { useCallback } from 'react'; -import { useCurrentWorkspace } from '../../../hooks/current/use-current-workspace'; -import type { AllWorkspace } from '../../../shared'; import { AccountSetting } from './account-setting'; import { GeneralSetting, @@ -40,14 +35,7 @@ export const SettingModal: React.FC = ({ }) => { const t = useAFFiNEI18N(); - const workspaces = useAtomValue(rootWorkspacesMetadataAtom); - const [currentWorkspace] = useCurrentWorkspace(); const generalSettingList = useGeneralSettingList(); - const workspaceList = useMemo(() => { - return workspaces.filter( - ({ flavour }) => flavour !== WorkspaceFlavour.PUBLIC - ); - }, [workspaces]); const onGeneralSettingClick = useCallback( (key: GeneralSettingKeys) => { @@ -76,8 +64,6 @@ export const SettingModal: React.FC = ({ void; - currentWorkspace: AllWorkspace; - workspaceList: RootWorkspaceMetadata[]; onWorkspaceSettingClick: (workspaceId: string) => void; - selectedWorkspaceId: string | null; selectedGeneralKey: string | null; onAccountSettingClick: () => void; +}> = ({ + generalSettingList, + onGeneralSettingClick, + onWorkspaceSettingClick, + selectedWorkspaceId, + selectedGeneralKey, }) => { const t = useAFFiNEI18N(); return ( @@ -70,10 +70,29 @@ export const SettingSidebar = ({ {t['com.affine.settings.workspace']()}
- {workspaceList.map(workspace => { - return ( + }> + + +
+ + ); +}; + +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); @@ -81,30 +100,10 @@ export const SettingSidebar = ({ isCurrent={workspace.id === currentWorkspace.id} isActive={workspace.id === selectedWorkspaceId} /> - ); - })} - - - {runtimeConfig.enableCloud && ( -
- - -
-
- Account NameAccount Name -
-
- xxxxxxxx@gmail.comxxxxxxxx@gmail.com -
-
-
- )} - +
+ ); + })} + ); }; diff --git a/apps/web/src/components/affine/setting-modal/style.css.ts b/apps/web/src/components/affine/setting-modal/style.css.ts index 3b434de3f3..a545bcd166 100644 --- a/apps/web/src/components/affine/setting-modal/style.css.ts +++ b/apps/web/src/components/affine/setting-modal/style.css.ts @@ -14,6 +14,10 @@ globalStyle(`${settingContent} .wrapper`, { maxWidth: '560px', margin: '0 auto', }); + +globalStyle(`${settingContent} .wrapper::-webkit-scrollbar`, { + display: 'none', +}); globalStyle(`${settingContent} .content`, { minHeight: '100%', paddingBottom: '80px', diff --git a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx index b34def74d9..11148ec8ca 100644 --- a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx +++ b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx @@ -1,3 +1,4 @@ +import { WorkspaceDetailSkeleton } from '@affine/component/setting-components'; import { usePassiveWorkspaceEffect } from '@toeverything/hooks/use-block-suite-workspace'; import { useSetAtom } from 'jotai'; import { useRouter } from 'next/router'; @@ -29,7 +30,7 @@ export const WorkspaceSetting = ({ workspaceId }: { workspaceId: string }) => { const onTransformWorkspace = useOnTransformWorkspace(); return ( - loading}> + }> , 'title' > diff --git a/packages/component/src/components/setting-components/setting-row.tsx b/packages/component/src/components/setting-components/setting-row.tsx index 2e6cf2ae78..07a6620019 100644 --- a/packages/component/src/components/setting-components/setting-row.tsx +++ b/packages/component/src/components/setting-components/setting-row.tsx @@ -1,12 +1,12 @@ import clsx from 'clsx'; -import type { CSSProperties, FC, PropsWithChildren, ReactElement } from 'react'; +import type { CSSProperties, FC, PropsWithChildren, ReactNode } from 'react'; import { settingRow } from './share.css'; export const SettingRow: FC< PropsWithChildren<{ - name: string | ReactElement; - desc: string | ReactElement; + name: ReactNode; + desc: ReactNode; style?: CSSProperties; onClick?: () => void; spreadCol?: boolean; diff --git a/packages/component/src/components/setting-components/workspace-detail-skeleton.tsx b/packages/component/src/components/setting-components/workspace-detail-skeleton.tsx new file mode 100644 index 0000000000..0b9ee85557 --- /dev/null +++ b/packages/component/src/components/setting-components/workspace-detail-skeleton.tsx @@ -0,0 +1,25 @@ +import { Skeleton } from '@mui/material'; + +import { SettingHeader } from './setting-header'; +import { SettingRow } from './setting-row'; +import { SettingWrapper } from './wrapper'; + +export const WorkspaceDetailSkeleton = () => { + return ( + <> + } subtitle={} /> + + {new Array(3).fill(0).map((_, index) => { + return ( + } key={index}> + } + desc={} + spreadCol={false} + > + + ); + })} + + ); +}; diff --git a/packages/component/src/components/setting-components/workspace-list-skeleton.tsx b/packages/component/src/components/setting-components/workspace-list-skeleton.tsx new file mode 100644 index 0000000000..047f4119eb --- /dev/null +++ b/packages/component/src/components/setting-components/workspace-list-skeleton.tsx @@ -0,0 +1,30 @@ +import { Skeleton } from '@mui/material'; + +import { FlexWrapper } from '../../ui/layout'; + +export const WorkspaceListItemSkeleton = () => { + return ( + + + + + ); +}; + +export const WorkspaceListSkeleton = () => { + return ( + <> + {new Array(5).fill(0).map((_, index) => { + return ; + })} + + ); +}; diff --git a/packages/component/src/components/setting-components/wrapper.tsx b/packages/component/src/components/setting-components/wrapper.tsx index 3c7b8ff1f2..e12d833318 100644 --- a/packages/component/src/components/setting-components/wrapper.tsx +++ b/packages/component/src/components/setting-components/wrapper.tsx @@ -1,9 +1,9 @@ -import type { FC, PropsWithChildren } from 'react'; +import type { FC, PropsWithChildren, ReactNode } from 'react'; import { wrapper } from './share.css'; export const SettingWrapper: FC< PropsWithChildren<{ - title?: string; + title?: ReactNode; }> > = ({ title, children }) => { return ( diff --git a/packages/component/src/ui/mui.ts b/packages/component/src/ui/mui.ts index bb85e40fe3..742f151239 100644 --- a/packages/component/src/ui/mui.ts +++ b/packages/component/src/ui/mui.ts @@ -4,8 +4,8 @@ import MuiBreadcrumbs from '@mui/material/Breadcrumbs'; import MuiCollapse from '@mui/material/Collapse'; import MuiFade from '@mui/material/Fade'; import MuiGrow from '@mui/material/Grow'; +import MuiSkeleton from '@mui/material/Skeleton'; import MuiSlide from '@mui/material/Slide'; - export { MuiAvatar, MuiBreadcrumbs, @@ -13,5 +13,6 @@ export { MuiCollapse, MuiFade, MuiGrow, + MuiSkeleton, MuiSlide, };