From 779463dadad2aef6bbb52076eae8540d72b33037 Mon Sep 17 00:00:00 2001 From: DiamondThree <857159145@qq.com> Date: Tue, 10 Jan 2023 11:43:21 +0800 Subject: [PATCH] feat: add workspace route --- .../workspace-setting/general/delete/index.ts | 2 +- .../workspace-setting/general/index.ts | 2 +- .../workspace-setting/general/leave/index.ts | 2 +- .../src/components/workspace-setting/style.ts | 12 +- .../components/workspace-slider-bar/index.tsx | 19 ++- .../pages/workspace/[workspaceId]/setting.tsx | 159 ++++++++++++++++++ 6 files changed, 176 insertions(+), 20 deletions(-) create mode 100644 packages/app/src/pages/workspace/[workspaceId]/setting.tsx diff --git a/packages/app/src/components/workspace-setting/general/delete/index.ts b/packages/app/src/components/workspace-setting/general/delete/index.ts index 69b5324048..c0ea9800e4 100644 --- a/packages/app/src/components/workspace-setting/general/delete/index.ts +++ b/packages/app/src/components/workspace-setting/general/delete/index.ts @@ -1 +1 @@ -export * from './Delete'; +export { WorkspaceDelete } from './Delete'; diff --git a/packages/app/src/components/workspace-setting/general/index.ts b/packages/app/src/components/workspace-setting/general/index.ts index 0ab02c523e..7e81aedd14 100644 --- a/packages/app/src/components/workspace-setting/general/index.ts +++ b/packages/app/src/components/workspace-setting/general/index.ts @@ -1 +1 @@ -export * from './General'; +export { GeneralPage } from './General'; diff --git a/packages/app/src/components/workspace-setting/general/leave/index.ts b/packages/app/src/components/workspace-setting/general/leave/index.ts index c3bfa43ca5..2ef886aa53 100644 --- a/packages/app/src/components/workspace-setting/general/leave/index.ts +++ b/packages/app/src/components/workspace-setting/general/leave/index.ts @@ -1 +1 @@ -export * from './Leave'; +export { WorkspaceLeave } from './Leave'; diff --git a/packages/app/src/components/workspace-setting/style.ts b/packages/app/src/components/workspace-setting/style.ts index 7b4e645526..48fbb284ff 100644 --- a/packages/app/src/components/workspace-setting/style.ts +++ b/packages/app/src/components/workspace-setting/style.ts @@ -4,22 +4,15 @@ import MuiAvatar from '@mui/material/Avatar'; export const StyledSettingContainer = styled('div')(({ theme }) => { return { - position: 'relative', display: 'flex', - padding: '0px', - width: '961px', - background: theme.colors.popoverBackground, - borderRadius: '12px', - overflow: 'hidden', + padding: '50px', + flexDirection: 'column', }; }); export const StyledSettingSidebar = styled('div')(({ theme }) => { { return { - width: '212px', - height: '620px', - background: theme.mode === 'dark' ? '#272727' : '#FBFBFC', flexShrink: 0, flexGrow: 0, }; @@ -59,7 +52,6 @@ export const StyledSettingTabContainer = styled('ul')(() => { { return { display: 'flex', - flexDirection: 'column', marginTop: '25px', }; } diff --git a/packages/app/src/components/workspace-slider-bar/index.tsx b/packages/app/src/components/workspace-slider-bar/index.tsx index c40dc31c11..aae95f7a97 100644 --- a/packages/app/src/components/workspace-slider-bar/index.tsx +++ b/packages/app/src/components/workspace-slider-bar/index.tsx @@ -32,7 +32,7 @@ import { IconButton } from '@/ui/button'; import useLocalStorage from '@/hooks/use-local-storage'; import usePageMetaList from '@/hooks/use-page-meta-list'; import { usePageHelper } from '@/hooks/use-page-helper'; -import { WorkspaceSetting } from '@/components/workspace-setting'; +// import { WorkspaceSetting } from '@/components/workspace-setting'; import { useTranslation } from 'react-i18next'; import { WorkspaceSelector } from './WorkspaceSelector/WorkspaceSelector'; @@ -78,14 +78,15 @@ export const WorkSpaceSliderBar = () => { const [showTip, setShowTip] = useState(false); const [show, setShow] = useLocalStorage('AFFiNE_SLIDE_BAR', false, true); - const [showWorkspaceSetting, setShowWorkspaceSetting] = useState(false); - const paths = { all: currentWorkspaceId ? `/workspace/${currentWorkspaceId}/all` : '', favorite: currentWorkspaceId ? `/workspace/${currentWorkspaceId}/favorite` : '', trash: currentWorkspaceId ? `/workspace/${currentWorkspaceId}/trash` : '', + setting: currentWorkspaceId + ? `/workspace/${currentWorkspaceId}/setting` + : '', }; return ( @@ -154,18 +155,22 @@ export const WorkSpaceSliderBar = () => { { - setShowWorkspaceSetting(true); + // setShowWorkspaceSetting(true); }} > - Setting + + + {t('Setting')} + + - { setShowWorkspaceSetting(false); }} - /> + /> */} { diff --git a/packages/app/src/pages/workspace/[workspaceId]/setting.tsx b/packages/app/src/pages/workspace/[workspaceId]/setting.tsx new file mode 100644 index 0000000000..27122bb2f4 --- /dev/null +++ b/packages/app/src/pages/workspace/[workspaceId]/setting.tsx @@ -0,0 +1,159 @@ +import Modal, { ModalCloseButton } from '@/ui/modal'; +import { + StyledSettingContainer, + StyledSettingContent, + StyledSettingSidebar, + StyledSettingSidebarHeader, + StyledSettingTabContainer, + StyledSettingTagIconContainer, + WorkspaceSettingTagItem, +} from '../../../components/workspace-setting/style'; +import { + EditIcon, + UsersIcon, + PublishIcon, + CloudInsyncIcon, +} from '@blocksuite/icons'; +import { ReactElement, useEffect, useState } from 'react'; +import { GeneralPage } from '../../../components/workspace-setting/general'; +import { MembersPage } from '../../../components/workspace-setting/MembersPage'; +import { PublishPage } from '../../../components/workspace-setting/PublishPage'; +import { ExportPage } from '../../../components/workspace-setting/ExportPage'; +import { SyncPage } from '../../../components/workspace-setting/SyncPage'; +import { useAppState } from '@/providers/app-state-provider'; +import WorkspaceLayout from '@/components/workspace-layout'; + +enum ActiveTab { + 'general' = 'general', + 'members' = 'members', + 'publish' = 'publish', + 'sync' = 'sync', + 'export' = 'export', +} + +type SettingTabProps = { + activeTab: ActiveTab; + onTabChange?: (tab: ActiveTab) => void; +}; + +type WorkspaceSettingProps = { + isShow: boolean; + onClose?: () => void; +}; + +const WorkspaceSettingTab = ({ activeTab, onTabChange }: SettingTabProps) => { + return ( + + { + onTabChange && onTabChange(ActiveTab.general); + }} + > + + + + General + + + { + onTabChange && onTabChange(ActiveTab.sync); + }} + > + + + + Sync + + + { + onTabChange && onTabChange(ActiveTab.members); + }} + > + + + + Collaboration + + { + onTabChange && onTabChange(ActiveTab.publish); + }} + > + + + + Publish + + + { + onTabChange && onTabChange(ActiveTab.export); + }} + > + + + + Export + + + ); +}; + +const WorkspaceSetting = ({ isShow, onClose }: WorkspaceSettingProps) => { + // const { workspaces } = useAppState(); + const [activeTab, setActiveTab] = useState(ActiveTab.general); + const handleTabChange = (tab: ActiveTab) => { + setActiveTab(tab); + }; + + const { currentMetaWorkSpace } = useAppState(); + useEffect(() => { + // reset tab when modal is closed + if (!isShow) { + setActiveTab(ActiveTab.general); + } + }, [isShow]); + return ( + + + + Workspace Settings + + + + + + {activeTab === ActiveTab.general && currentMetaWorkSpace && ( + + )} + {activeTab === ActiveTab.sync && currentMetaWorkSpace && ( + + )} + {activeTab === ActiveTab.members && currentMetaWorkSpace && ( + + )} + {activeTab === ActiveTab.publish && currentMetaWorkSpace && ( + + )} + {activeTab === ActiveTab.export && currentMetaWorkSpace && ( + + )} + + + ); +}; +WorkspaceSetting.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default WorkspaceSetting;