diff --git a/packages/app/src/components/workspace-modal/index.tsx b/packages/app/src/components/workspace-modal/index.tsx index d562538ffc..3ee9848f2d 100644 --- a/packages/app/src/components/workspace-modal/index.tsx +++ b/packages/app/src/components/workspace-modal/index.tsx @@ -37,6 +37,7 @@ export const WorkspaceModal = ({ open, onClose }: LoginModalProps) => { const setList = () => { const data = getWorkspaces(); + console.log('data: ', data); setWorkspaceList(data); }; const setUserInfo = () => { @@ -62,14 +63,14 @@ export const WorkspaceModal = ({ open, onClose }: LoginModalProps) => { - {workspaceList.map(item => { + {workspaceList.map((item, index) => { return ( { setActiveWorkspace(item); onClose(); }} - key={item.id} + key={index} > { General + + { + onTabChange && onTabChange(ActiveTab.sync); + }} + > + + + + Sync + + { @@ -150,6 +166,7 @@ export const WorkspaceSetting = ({ {activeTab === ActiveTab.general && ( )} + {activeTab === ActiveTab.sync && } {activeTab === ActiveTab.members && workspace && ( )} @@ -215,9 +232,9 @@ const MembersPage = ({ workspace }: { workspace: Workspace }) => { > )} {members.length ? ( - members.map(member => { + members.map((member, index) => { return ( - + @@ -395,3 +412,79 @@ const PublishPage = ({ workspace }: { workspace: Workspace }) => { ); }; +const SyncPage = ({ workspace }: { workspace: Workspace }) => { + const [workspaceType, setWorkspaceType] = useState('local'); + useEffect(() => { + setType(); + }); + const setType = () => { + const ACTIVEworkspace = getActiveWorkspace(); + console.log('ACTIVEworkspace: ', ACTIVEworkspace); + ACTIVEworkspace && setWorkspaceType(ACTIVEworkspace.type); + }; + return ( +
+ + {workspaceType === 'local' ? ( + <> + + {workspace.name} is Local Workspace. All data is stored on the + current device. You can enable AFFiNE Cloud for this workspace to + keep data in sync with the cloud. + + + + + + + + + ) : ( + + {workspace.name} is Cloud Workspace. All data will be synchronized + and saved to the AFFiNE account +
+ + { + deleteMember(workspace.id, 0); + }} + icon={} + > + Download core data to device + + { + deleteMember(workspace.id, 0); + }} + icon={} + > + Download all data to device + + + } + placement="bottom-end" + disablePortal={true} + > + + +
+
+ )} +
+
+ ); +}; diff --git a/packages/app/src/hooks/mock-data/mock.ts b/packages/app/src/hooks/mock-data/mock.ts index 24e1427a05..510b6dca01 100644 --- a/packages/app/src/hooks/mock-data/mock.ts +++ b/packages/app/src/hooks/mock-data/mock.ts @@ -1,3 +1,5 @@ +import { type } from 'os'; + export interface Workspace { name: string; // 名称 id: string; //唯一标识 @@ -17,13 +19,19 @@ export interface User { export function updateWorkspaceMeta( workspaceId: string, - workspaceData: { name?: string; avatar?: string } + workspaceData: { + name?: string; + avatar?: string; + workspaceType?: 'local' | 'cloud' | 'join'; + } ) { const workspacesMeta = getWorkspaces(); const newWorkspacesMeta = workspacesMeta.map((workspace: Workspace) => { if (workspace.id === workspaceId) { workspaceData.name && (workspace.name = workspaceData.name); workspaceData.avatar && (workspace.avatar = workspaceData.avatar); + workspaceData.workspaceType && + (workspace.type = workspaceData.workspaceType); return workspaceData; } return workspace; @@ -32,6 +40,8 @@ export function updateWorkspaceMeta( const activeWorkspace = getActiveWorkspace(); workspaceData.name && (activeWorkspace.name = workspaceData.name); workspaceData.avatar && (activeWorkspace.avatar = workspaceData.avatar); + workspaceData.workspaceType && + (activeWorkspace.type = workspaceData.workspaceType); setActiveWorkspace(activeWorkspace); } export function createWorkspace(workspaceName: string) { @@ -122,6 +132,7 @@ export function getActiveWorkspace(): Workspace { } export function setActiveWorkspace(workspaceData: Workspace) { + console.log('workspaceData: ', workspaceData); localStorage.setItem( 'affine-active-workspace', JSON.stringify(workspaceData)