change workspacetype to worksopace until

This commit is contained in:
DiamondThree
2023-01-11 16:04:38 +08:00
parent e9b38a2380
commit 8e8e18fdf9
14 changed files with 82 additions and 53 deletions

View File

@@ -19,8 +19,8 @@ export const CreateWorkspaceModal = ({ open, onClose }: ModalProps) => {
const router = useRouter(); const router = useRouter();
const handleCreateWorkspace = async () => { const handleCreateWorkspace = async () => {
const workspace = await createWorkspace(workspaceName); const workspace = await createWorkspace(workspaceName);
if (workspace && workspace.room) { if (workspace && workspace.id) {
router.replace(`/workspace/${workspace.room}`); router.replace(`/workspace/${workspace.id}`);
onClose(); onClose();
} else { } else {
console.log('create error'); console.log('create error');

View File

@@ -22,11 +22,11 @@ export const ImportModal = ({ open, onClose }: ImportModalProps) => {
const { currentWorkspace } = useAppState(); const { currentWorkspace } = useAppState();
const { t } = useTranslation(); const { t } = useTranslation();
const _applyTemplate = function (pageId: string, template: Template) { const _applyTemplate = function (pageId: string, template: Template) {
const page = currentWorkspace?.getPage(pageId); const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId);
const title = template.name; const title = template.name;
if (page) { if (page) {
currentWorkspace?.setPageMeta(page.id, { title }); currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title });
if (page && page.root === null) { if (page && page.root === null) {
setTimeout(() => { setTimeout(() => {
const editor = document.querySelector('editor-container'); const editor = document.querySelector('editor-container');

View File

@@ -80,7 +80,7 @@ export const Input = (props: {
}} }}
placeholder={ placeholder={
isPublish isPublish
? `Search in ${currentWorkspace?.meta.name}` ? `Search in ${currentWorkspace?.blocksuiteWorkspace?.meta.name}`
: 'Quick Search...' : 'Quick Search...'
} }
/> />

View File

@@ -52,7 +52,7 @@ export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => {
router.replace(`/workspace/${item.id}`); router.replace(`/workspace/${item.id}`);
onClose(); onClose();
}} }}
active={item.id === currentWorkspace?.room} active={item.id === currentWorkspace?.id}
key={index} key={index}
> >
<span style={{ width: '100px' }}> <span style={{ width: '100px' }}>

View File

@@ -11,7 +11,7 @@ export const useChangePageMeta = () => {
return useCallback<ChangePageMeta>( return useCallback<ChangePageMeta>(
(pageId, pageMeta) => { (pageId, pageMeta) => {
currentWorkspace?.setPageMeta(pageId, { currentWorkspace?.blocksuiteWorkspace?.setPageMeta(pageId, {
...pageMeta, ...pageMeta,
}); });
}, },

View File

@@ -9,7 +9,7 @@ export const useCurrentPageMeta = (): PageMeta | null => {
return null; return null;
} }
return ( return (
(currentWorkspace.meta.pageMetas.find( (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find(
p => p.id === currentPage.id p => p.id === currentPage.id
) as PageMeta) ?? null ) as PageMeta) ?? null
); );
@@ -22,9 +22,11 @@ export const useCurrentPageMeta = (): PageMeta | null => {
useEffect(() => { useEffect(() => {
setCurrentPageMeta(pageMetaHandler); setCurrentPageMeta(pageMetaHandler);
const dispose = currentWorkspace?.meta.pagesUpdated.on(() => { const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on(
() => {
setCurrentPageMeta(pageMetaHandler); setCurrentPageMeta(pageMetaHandler);
}).dispose; }
).dispose;
return () => { return () => {
dispose?.(); dispose?.();

View File

@@ -1,9 +1,10 @@
import { Workspace, uuidv4 } from '@blocksuite/store'; import { uuidv4 } from '@blocksuite/store';
import { QueryContent } from '@blocksuite/store/dist/workspace/search'; import { QueryContent } from '@blocksuite/store/dist/workspace/search';
import { PageMeta, useAppState } from '@/providers/app-state-provider'; import { PageMeta, useAppState } from '@/providers/app-state-provider';
import { EditorContainer } from '@blocksuite/editor'; import { EditorContainer } from '@blocksuite/editor';
import { useChangePageMeta } from '@/hooks/use-change-page-meta'; import { useChangePageMeta } from '@/hooks/use-change-page-meta';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { WorkspaceUnit } from '@affine/datacenter';
export type EditorHandlers = { export type EditorHandlers = {
createPage: (params?: { createPage: (params?: {
@@ -27,8 +28,10 @@ export type EditorHandlers = {
) => Promise<EditorContainer['mode']>; ) => Promise<EditorContainer['mode']>;
}; };
const getPageMeta = (workspace: Workspace | null, pageId: string) => { const getPageMeta = (workspace: WorkspaceUnit | null, pageId: string) => {
return workspace?.meta.pageMetas.find(p => p.id === pageId); return workspace?.blocksuiteWorkspace?.meta.pageMetas.find(
p => p.id === pageId
);
}; };
export const usePageHelper = (): EditorHandlers => { export const usePageHelper = (): EditorHandlers => {
const router = useRouter(); const router = useRouter();
@@ -44,11 +47,15 @@ export const usePageHelper = (): EditorHandlers => {
if (!currentWorkspace) { if (!currentWorkspace) {
return resolve(null); return resolve(null);
} }
currentWorkspace.createPage(pageId); currentWorkspace.blocksuiteWorkspace?.createPage(pageId);
currentWorkspace.signals.pageAdded.once(addedPageId => { currentWorkspace.blocksuiteWorkspace?.signals.pageAdded.once(
currentWorkspace.setPageMeta(addedPageId, { title }); addedPageId => {
resolve(addedPageId); currentWorkspace.blocksuiteWorkspace?.setPageMeta(addedPageId, {
title,
}); });
resolve(addedPageId);
}
);
}); });
}, },
toggleFavoritePage: async pageId => { toggleFavoritePage: async pageId => {
@@ -78,7 +85,7 @@ export const usePageHelper = (): EditorHandlers => {
}, },
search: (query: QueryContent) => { search: (query: QueryContent) => {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return currentWorkspace!.search(query); return currentWorkspace!.blocksuiteWorkspace!.search(query);
}, },
changePageMode: async (pageId, mode) => { changePageMode: async (pageId, mode) => {
const pageMeta = getPageMeta(currentWorkspace, pageId); const pageMeta = getPageMeta(currentWorkspace, pageId);
@@ -96,7 +103,7 @@ export const usePageHelper = (): EditorHandlers => {
permanentlyDeletePage: pageId => { permanentlyDeletePage: pageId => {
// TODO: workspace.meta.removePage or workspace.removePage? // TODO: workspace.meta.removePage or workspace.removePage?
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
currentWorkspace!.meta.removePage(pageId); currentWorkspace!.blocksuiteWorkspace?.meta.removePage(pageId);
}, },
openPage: (pageId, query = {}, newTab = false) => { openPage: (pageId, query = {}, newTab = false) => {
pageId = pageId.replace('space:', ''); pageId = pageId.replace('space:', '');
@@ -116,7 +123,7 @@ export const usePageHelper = (): EditorHandlers => {
} }
return ( return (
(currentWorkspace.meta.pageMetas.find( (currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find(
page => page.id === pageId page => page.id === pageId
) as PageMeta) || null ) as PageMeta) || null
); );

View File

@@ -1,7 +1,7 @@
import { useAppState } from '@/providers/app-state-provider'; import { useAppState } from '@/providers/app-state-provider';
import { useConfirm } from '@/providers/ConfirmProvider'; import { useConfirm } from '@/providers/ConfirmProvider';
import { toast } from '@/ui/toast'; import { toast } from '@/ui/toast';
import { Workspace } from '@blocksuite/store'; import { WorkspaceUnit } from '@affine/datacenter';
import router from 'next/router'; import router from 'next/router';
export const useWorkspaceHelper = () => { export const useWorkspaceHelper = () => {
@@ -12,8 +12,8 @@ export const useWorkspaceHelper = () => {
const workspaceInfo = await dataCenter.createWorkspace({ const workspaceInfo = await dataCenter.createWorkspace({
name: name, name: name,
}); });
if (workspaceInfo && workspaceInfo.room) { if (workspaceInfo && workspaceInfo.id) {
return await dataCenter.loadWorkspace(workspaceInfo.room); return await dataCenter.loadWorkspace(workspaceInfo.id);
} }
return null; return null;
}; };
@@ -26,14 +26,14 @@ export const useWorkspaceHelper = () => {
const updateWorkspace = async ( const updateWorkspace = async (
{ name, avatarBlob }: { name?: string; avatarBlob?: Blob }, { name, avatarBlob }: { name?: string; avatarBlob?: Blob },
workspace: Workspace workspace: WorkspaceUnit
) => { ) => {
if (name) { if (name) {
await dataCenter.updateWorkspaceMeta({ name }, workspace); await dataCenter.updateWorkspaceMeta({ name }, workspace);
} }
if (avatarBlob) { if (avatarBlob) {
const blobId = await dataCenter.setBlob(workspace, avatarBlob); // const blobId = await dataCenter.setBlob(workspace, avatarBlob);
await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace); // await dataCenter.updateWorkspaceMeta({ avatar: blobId }, workspace);
} }
}; };

View File

@@ -37,11 +37,11 @@ const All = () => {
const { openPage, createPage } = usePageHelper(); const { openPage, createPage } = usePageHelper();
const { currentWorkspace } = useAppState(); const { currentWorkspace } = useAppState();
const _applyTemplate = function (pageId: string, template: Template) { const _applyTemplate = function (pageId: string, template: Template) {
const page = currentWorkspace?.getPage(pageId); const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId);
const title = template.name; const title = template.name;
if (page) { if (page) {
currentWorkspace?.setPageMeta(page.id, { title }); currentWorkspace?.blocksuiteWorkspace?.setPageMeta(page.id, { title });
if (page && page.root === null) { if (page && page.root === null) {
setTimeout(async () => { setTimeout(async () => {
const editor = document.querySelector('editor-container'); const editor = document.querySelector('editor-container');

View File

@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { import {
PropsWithChildren, PropsWithChildren,
ReactElement, ReactElement,
@@ -31,10 +30,10 @@ const Page: NextPageWithLayout = () => {
<EditorHeader /> <EditorHeader />
<MobileModal /> <MobileModal />
{currentPage && currentWorkspace && ( {currentPage && currentWorkspace?.blocksuiteWorkspace && (
<DynamicBlocksuite <DynamicBlocksuite
page={currentPage} page={currentPage}
workspace={currentWorkspace} workspace={currentWorkspace.blocksuiteWorkspace}
setEditor={setEditorHandler} setEditor={setEditorHandler}
/> />
)} )}
@@ -52,7 +51,8 @@ const PageDefender = ({ children }: PropsWithChildren) => {
useEffect(() => { useEffect(() => {
const initPage = async () => { const initPage = async () => {
const pageId = router.query.pageId as string; const pageId = router.query.pageId as string;
const isPageExist = !!currentWorkspace!.meta.pageMetas.find( const isPageExist =
currentWorkspace?.blocksuiteWorkspace?.meta?.pageMetas.find(
p => p.id === pageId p => p.id === pageId
); );
if (!isPageExist) { if (!isPageExist) {

View File

@@ -16,7 +16,8 @@ const WorkspaceIndex = () => {
if (!workspaceLoaded) { if (!workspaceLoaded) {
return; return;
} }
const savedPageId = currentWorkspace?.meta.pageMetas[0]?.id; const savedPageId =
currentWorkspace?.blocksuiteWorkspace?.meta.pageMetas[0]?.id;
if (savedPageId) { if (savedPageId) {
router.replace(`/workspace/${activeWorkspaceId}/${savedPageId}`); router.replace(`/workspace/${activeWorkspaceId}/${savedPageId}`);
return; return;

View File

@@ -48,18 +48,21 @@ export const AppStateProvider = ({
}, []); }, []);
useEffect(() => { useEffect(() => {
if (!appState?.currentWorkspace) { if (!appState?.currentWorkspace?.blocksuiteWorkspace) {
return; return;
} }
const currentWorkspace = appState.currentWorkspace; const currentWorkspace = appState.currentWorkspace;
const dispose = currentWorkspace.meta.pagesUpdated.on(() => { const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on(
() => {
setAppState({ setAppState({
...appState, ...appState,
pageList: currentWorkspace.meta.pageMetas as PageMeta[], pageList: currentWorkspace.blocksuiteWorkspace?.meta
.pageMetas as PageMeta[],
}); });
}).dispose; }
).dispose;
return () => { return () => {
dispose(); dispose && dispose();
}; };
}, [appState]); }, [appState]);
@@ -83,7 +86,7 @@ export const AppStateProvider = ({
if (pageId === currentPage?.id) { if (pageId === currentPage?.id) {
return; return;
} }
const page = currentWorkspace?.getPage(pageId) || null; const page = currentWorkspace?.blocksuiteWorkspace?.getPage(pageId) || null;
setAppState({ setAppState({
...appState, ...appState,
currentPage: page, currentPage: page,
@@ -103,16 +106,17 @@ export const AppStateProvider = ({
const workspace = await dataCenter.loadWorkspace(workspaceId); const workspace = await dataCenter.loadWorkspace(workspaceId);
const currentMetaWorkSpace = dataCenter.workspaces.find( const currentMetaWorkSpace = dataCenter.workspaces.find(
(item: WorkspaceUnit) => { (item: WorkspaceUnit) => {
return item.id.toString() === workspace.room; return item.id.toString() === workspace.id;
} }
); );
const pageList =
(workspace?.blocksuiteWorkspace?.meta.pageMetas as PageMeta[]) ?? [];
setAppState({ setAppState({
...appState, ...appState,
currentWorkspace: workspace, currentWorkspace: workspace,
currentWorkspaceId: workspaceId, currentWorkspaceId: workspaceId,
currentMetaWorkSpace: currentMetaWorkSpace ?? null, currentMetaWorkSpace: currentMetaWorkSpace ?? null,
pageList: currentWorkspace?.meta.pageMetas as PageMeta[], pageList: pageList,
currentPage: null, currentPage: null,
editor: null, editor: null,
}); });

View File

@@ -3,7 +3,6 @@ import type { EditorContainer } from '@blocksuite/editor';
import type { import type {
Page as StorePage, Page as StorePage,
Workspace as StoreWorkspace,
PageMeta as StorePageMeta, PageMeta as StorePageMeta,
} from '@blocksuite/store'; } from '@blocksuite/store';
import { MutableRefObject } from 'react'; import { MutableRefObject } from 'react';
@@ -19,7 +18,7 @@ export type AppStateValue = {
dataCenter: DataCenter; dataCenter: DataCenter;
user: User | null; user: User | null;
workspaceList: WorkspaceUnit[]; workspaceList: WorkspaceUnit[];
currentWorkspace: StoreWorkspace | null; currentWorkspace: WorkspaceUnit | null;
currentMetaWorkSpace: WorkspaceUnit | null; currentMetaWorkSpace: WorkspaceUnit | null;
currentWorkspaceId: string; currentWorkspaceId: string;
pageList: PageMeta[]; pageList: PageMeta[];
@@ -31,7 +30,7 @@ export type AppStateValue = {
export type AppStateFunction = { export type AppStateFunction = {
setEditor: MutableRefObject<(page: EditorContainer) => void>; setEditor: MutableRefObject<(page: EditorContainer) => void>;
loadWorkspace: (workspaceId: string) => Promise<StoreWorkspace | null>; loadWorkspace: (workspaceId: string) => Promise<WorkspaceUnit | null>;
loadPage: (pageId: string) => void; loadPage: (pageId: string) => void;
login: () => Promise<User>; login: () => Promise<User>;

View File

@@ -23,7 +23,23 @@ export class LocalProvider extends BaseProvider {
} }
private _storeWorkspaces(workspaces: WorkspaceMeta0[]) { 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) { public override async linkLocal(workspace: BlocksuiteWorkspace) {