diff --git a/packages/app/src/components/create-workspace/index.tsx b/packages/app/src/components/create-workspace/index.tsx index 7f157e2b9..e4645df8e 100644 --- a/packages/app/src/components/create-workspace/index.tsx +++ b/packages/app/src/components/create-workspace/index.tsx @@ -19,8 +19,8 @@ export const CreateWorkspaceModal = ({ open, onClose }: ModalProps) => { const router = useRouter(); const handleCreateWorkspace = async () => { const workspace = await createWorkspace(workspaceName); - if (workspace && workspace.room) { - router.replace(`/workspace/${workspace.room}`); + if (workspace && workspace.id) { + router.replace(`/workspace/${workspace.id}`); onClose(); } else { console.log('create error'); diff --git a/packages/app/src/components/import/index.tsx b/packages/app/src/components/import/index.tsx index df621a9c9..111648138 100644 --- a/packages/app/src/components/import/index.tsx +++ b/packages/app/src/components/import/index.tsx @@ -22,11 +22,11 @@ export const ImportModal = ({ open, onClose }: ImportModalProps) => { const { currentWorkspace } = useAppState(); const { t } = useTranslation(); const _applyTemplate = function (pageId: string, template: Template) { - const page = currentWorkspace?.getPage(pageId); + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId); const title = template.name; if (page) { - currentWorkspace?.setPageMeta(page.id, { title }); + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title }); if (page && page.root === null) { setTimeout(() => { const editor = document.querySelector('editor-container'); diff --git a/packages/app/src/components/quick-search/Input.tsx b/packages/app/src/components/quick-search/Input.tsx index e12dc655b..6b5a6395d 100644 --- a/packages/app/src/components/quick-search/Input.tsx +++ b/packages/app/src/components/quick-search/Input.tsx @@ -80,7 +80,7 @@ export const Input = (props: { }} placeholder={ isPublish - ? `Search in ${currentWorkspace?.meta.name}` + ? `Search in ${currentWorkspace?.blocksuiteWorkspace?.meta.name}` : 'Quick Search...' } /> diff --git a/packages/app/src/components/workspace-modal/index.tsx b/packages/app/src/components/workspace-modal/index.tsx index dbe5146c5..419654fde 100644 --- a/packages/app/src/components/workspace-modal/index.tsx +++ b/packages/app/src/components/workspace-modal/index.tsx @@ -52,7 +52,7 @@ export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => { router.replace(`/workspace/${item.id}`); onClose(); }} - active={item.id === currentWorkspace?.room} + active={item.id === currentWorkspace?.id} key={index} > diff --git a/packages/app/src/hooks/use-change-page-meta.ts b/packages/app/src/hooks/use-change-page-meta.ts index 1b553f209..a01b7f186 100644 --- a/packages/app/src/hooks/use-change-page-meta.ts +++ b/packages/app/src/hooks/use-change-page-meta.ts @@ -11,7 +11,7 @@ export const useChangePageMeta = () => { return useCallback( (pageId, pageMeta) => { - currentWorkspace?.setPageMeta(pageId, { + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(pageId, { ...pageMeta, }); }, diff --git a/packages/app/src/hooks/use-current-page-meta.ts b/packages/app/src/hooks/use-current-page-meta.ts index 14db9ae2a..5ce191935 100644 --- a/packages/app/src/hooks/use-current-page-meta.ts +++ b/packages/app/src/hooks/use-current-page-meta.ts @@ -9,7 +9,7 @@ export const useCurrentPageMeta = (): PageMeta | null => { return null; } return ( - (currentWorkspace.meta.pageMetas.find( + (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find( p => p.id === currentPage.id ) as PageMeta) ?? null ); @@ -22,9 +22,11 @@ export const useCurrentPageMeta = (): PageMeta | null => { useEffect(() => { setCurrentPageMeta(pageMetaHandler); - const dispose = currentWorkspace?.meta.pagesUpdated.on(() => { - setCurrentPageMeta(pageMetaHandler); - }).dispose; + const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on( + () => { + setCurrentPageMeta(pageMetaHandler); + } + ).dispose; return () => { dispose?.(); diff --git a/packages/app/src/hooks/use-page-helper.ts b/packages/app/src/hooks/use-page-helper.ts index e4bf4f295..6b0258d73 100644 --- a/packages/app/src/hooks/use-page-helper.ts +++ b/packages/app/src/hooks/use-page-helper.ts @@ -1,9 +1,10 @@ -import { Workspace, uuidv4 } from '@blocksuite/store'; +import { uuidv4 } from '@blocksuite/store'; import { QueryContent } from '@blocksuite/store/dist/workspace/search'; import { PageMeta, useAppState } from '@/providers/app-state-provider'; import { EditorContainer } from '@blocksuite/editor'; import { useChangePageMeta } from '@/hooks/use-change-page-meta'; import { useRouter } from 'next/router'; +import { WorkspaceUnit } from '@affine/datacenter'; export type EditorHandlers = { createPage: (params?: { @@ -27,8 +28,10 @@ export type EditorHandlers = { ) => Promise; }; -const getPageMeta = (workspace: Workspace | null, pageId: string) => { - return workspace?.meta.pageMetas.find(p => p.id === pageId); +const getPageMeta = (workspace: WorkspaceUnit | null, pageId: string) => { + return workspace?.blocksuiteWorkspace?.meta.pageMetas.find( + p => p.id === pageId + ); }; export const usePageHelper = (): EditorHandlers => { const router = useRouter(); @@ -44,11 +47,15 @@ export const usePageHelper = (): EditorHandlers => { if (!currentWorkspace) { return resolve(null); } - currentWorkspace.createPage(pageId); - currentWorkspace.signals.pageAdded.once(addedPageId => { - currentWorkspace.setPageMeta(addedPageId, { title }); - resolve(addedPageId); - }); + currentWorkspace.blocksuiteWorkspace?.createPage(pageId); + currentWorkspace.blocksuiteWorkspace?.signals.pageAdded.once( + addedPageId => { + currentWorkspace.blocksuiteWorkspace?.setPageMeta(addedPageId, { + title, + }); + resolve(addedPageId); + } + ); }); }, toggleFavoritePage: async pageId => { @@ -78,7 +85,7 @@ export const usePageHelper = (): EditorHandlers => { }, search: (query: QueryContent) => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return currentWorkspace!.search(query); + return currentWorkspace!.blocksuiteWorkspace!.search(query); }, changePageMode: async (pageId, mode) => { const pageMeta = getPageMeta(currentWorkspace, pageId); @@ -96,7 +103,7 @@ export const usePageHelper = (): EditorHandlers => { permanentlyDeletePage: pageId => { // TODO: workspace.meta.removePage or workspace.removePage? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - currentWorkspace!.meta.removePage(pageId); + currentWorkspace!.blocksuiteWorkspace?.meta.removePage(pageId); }, openPage: (pageId, query = {}, newTab = false) => { pageId = pageId.replace('space:', ''); @@ -116,7 +123,7 @@ export const usePageHelper = (): EditorHandlers => { } return ( - (currentWorkspace.meta.pageMetas.find( + (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find( page => page.id === pageId ) as PageMeta) || null ); diff --git a/packages/app/src/hooks/use-workspace-helper.ts b/packages/app/src/hooks/use-workspace-helper.ts index 77e154e33..f0e4d1f7c 100644 --- a/packages/app/src/hooks/use-workspace-helper.ts +++ b/packages/app/src/hooks/use-workspace-helper.ts @@ -1,7 +1,7 @@ import { useAppState } from '@/providers/app-state-provider'; import { useConfirm } from '@/providers/ConfirmProvider'; import { toast } from '@/ui/toast'; -import { Workspace } from '@blocksuite/store'; +import { WorkspaceUnit } from '@affine/datacenter'; import router from 'next/router'; export const useWorkspaceHelper = () => { @@ -12,8 +12,8 @@ export const useWorkspaceHelper = () => { const workspaceInfo = await dataCenter.createWorkspace({ name: name, }); - if (workspaceInfo && workspaceInfo.room) { - return await dataCenter.loadWorkspace(workspaceInfo.room); + if (workspaceInfo && workspaceInfo.id) { + return await dataCenter.loadWorkspace(workspaceInfo.id); } return null; }; @@ -26,14 +26,14 @@ export const useWorkspaceHelper = () => { const updateWorkspace = async ( { name, avatarBlob }: { name?: string; avatarBlob?: Blob }, - workspace: Workspace + workspace: WorkspaceUnit ) => { if (name) { await dataCenter.updateWorkspaceMeta({ name }, workspace); } if (avatarBlob) { - const blobId = await dataCenter.setBlob(workspace, avatarBlob); - await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace); + // const blobId = await dataCenter.setBlob(workspace, avatarBlob); + // await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace); } }; diff --git a/packages/app/src/pages/playground/templates.tsx b/packages/app/src/pages/playground/templates.tsx index 3dc825b1e..e30fdbee6 100644 --- a/packages/app/src/pages/playground/templates.tsx +++ b/packages/app/src/pages/playground/templates.tsx @@ -37,11 +37,11 @@ const All = () => { const { openPage, createPage } = usePageHelper(); const { currentWorkspace } = useAppState(); const _applyTemplate = function (pageId: string, template: Template) { - const page = currentWorkspace?.getPage(pageId); + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId); const title = template.name; if (page) { - currentWorkspace?.setPageMeta(page.id, { title }); + currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title }); if (page && page.root === null) { setTimeout(async () => { const editor = document.querySelector('editor-container'); diff --git a/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx b/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx index 2ede23582..ebb5b8b93 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/[pageId].tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ import { PropsWithChildren, ReactElement, @@ -31,10 +30,10 @@ const Page: NextPageWithLayout = () => { - {currentPage && currentWorkspace && ( + {currentPage && currentWorkspace?.blocksuiteWorkspace && ( )} @@ -52,9 +51,10 @@ const PageDefender = ({ children }: PropsWithChildren) => { useEffect(() => { const initPage = async () => { const pageId = router.query.pageId as string; - const isPageExist = !!currentWorkspace!.meta.pageMetas.find( - p => p.id === pageId - ); + const isPageExist = + currentWorkspace?.blocksuiteWorkspace?.meta?.pageMetas.find( + p => p.id === pageId + ); if (!isPageExist) { await createPage({ pageId }); } diff --git a/packages/app/src/pages/workspace/[workspaceId]/index.tsx b/packages/app/src/pages/workspace/[workspaceId]/index.tsx index cdfd343af..6ed36718b 100644 --- a/packages/app/src/pages/workspace/[workspaceId]/index.tsx +++ b/packages/app/src/pages/workspace/[workspaceId]/index.tsx @@ -16,7 +16,8 @@ const WorkspaceIndex = () => { if (!workspaceLoaded) { return; } - const savedPageId = currentWorkspace?.meta.pageMetas[0]?.id; + const savedPageId = + currentWorkspace?.blocksuiteWorkspace?.meta.pageMetas[0]?.id; if (savedPageId) { router.replace(`/workspace/${activeWorkspaceId}/${savedPageId}`); return; diff --git a/packages/app/src/providers/app-state-provider/Provider.tsx b/packages/app/src/providers/app-state-provider/Provider.tsx index 95e545e45..fbe04c7fe 100644 --- a/packages/app/src/providers/app-state-provider/Provider.tsx +++ b/packages/app/src/providers/app-state-provider/Provider.tsx @@ -48,18 +48,21 @@ export const AppStateProvider = ({ }, []); useEffect(() => { - if (!appState?.currentWorkspace) { + if (!appState?.currentWorkspace?.blocksuiteWorkspace) { return; } const currentWorkspace = appState.currentWorkspace; - const dispose = currentWorkspace.meta.pagesUpdated.on(() => { - setAppState({ - ...appState, - pageList: currentWorkspace.meta.pageMetas as PageMeta[], - }); - }).dispose; + const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on( + () => { + setAppState({ + ...appState, + pageList: currentWorkspace.blocksuiteWorkspace?.meta + .pageMetas as PageMeta[], + }); + } + ).dispose; return () => { - dispose(); + dispose && dispose(); }; }, [appState]); @@ -83,7 +86,7 @@ export const AppStateProvider = ({ if (pageId === currentPage?.id) { return; } - const page = currentWorkspace?.getPage(pageId) || null; + const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId) || null; setAppState({ ...appState, currentPage: page, @@ -103,16 +106,17 @@ export const AppStateProvider = ({ const workspace = await dataCenter.loadWorkspace(workspaceId); const currentMetaWorkSpace = dataCenter.workspaces.find( (item: WorkspaceUnit) => { - return item.id.toString() === workspace.room; + return item.id.toString() === workspace.id; } ); - + const pageList = + (workspace?.blocksuiteWorkspace?.meta.pageMetas as PageMeta[]) ?? []; setAppState({ ...appState, currentWorkspace: workspace, currentWorkspaceId: workspaceId, currentMetaWorkSpace: currentMetaWorkSpace ?? null, - pageList: currentWorkspace?.meta.pageMetas as PageMeta[], + pageList: pageList, currentPage: null, editor: null, }); diff --git a/packages/app/src/providers/app-state-provider/interface.ts b/packages/app/src/providers/app-state-provider/interface.ts index 4dd9d3db4..e940927ed 100644 --- a/packages/app/src/providers/app-state-provider/interface.ts +++ b/packages/app/src/providers/app-state-provider/interface.ts @@ -3,7 +3,6 @@ import type { EditorContainer } from '@blocksuite/editor'; import type { Page as StorePage, - Workspace as StoreWorkspace, PageMeta as StorePageMeta, } from '@blocksuite/store'; import { MutableRefObject } from 'react'; @@ -19,7 +18,7 @@ export type AppStateValue = { dataCenter: DataCenter; user: User | null; workspaceList: WorkspaceUnit[]; - currentWorkspace: StoreWorkspace | null; + currentWorkspace: WorkspaceUnit | null; currentMetaWorkSpace: WorkspaceUnit | null; currentWorkspaceId: string; pageList: PageMeta[]; @@ -31,7 +30,7 @@ export type AppStateValue = { export type AppStateFunction = { setEditor: MutableRefObject<(page: EditorContainer) => void>; - loadWorkspace: (workspaceId: string) => Promise; + loadWorkspace: (workspaceId: string) => Promise; loadPage: (pageId: string) => void; login: () => Promise; diff --git a/packages/data-center/src/provider/local/local.ts b/packages/data-center/src/provider/local/local.ts index 591a02bf0..12ed43011 100644 --- a/packages/data-center/src/provider/local/local.ts +++ b/packages/data-center/src/provider/local/local.ts @@ -23,7 +23,23 @@ export class LocalProvider extends BaseProvider { } private _storeWorkspaces(workspaces: WorkspaceMeta0[]) { - storage.setItem(WORKSPACE_KEY, JSON.stringify(workspaces)); + storage.setItem( + WORKSPACE_KEY, + JSON.stringify( + workspaces.map(w => { + return { + id: w.id, + name: w.name, + avatar: w.avatar, + owner: w.owner, + published: w.published, + memberCount: w.memberCount, + provider: w.provider, + syncMode: w.syncMode, + }; + }) + ) + ); } public override async linkLocal(workspace: BlocksuiteWorkspace) {