feat: add meta info into workspace

This commit is contained in:
MingLiang Wang
2022-12-21 17:54:24 +08:00
parent 9280388c31
commit 95ad1fdcdc
7 changed files with 81 additions and 288 deletions
@@ -1,7 +1,7 @@
import { useEffect } from 'react';
import type { Page } from '@blocksuite/store';
import {
createWebsocketDocProvider,
// createWebsocketDocProvider,
IndexedDBDocProvider,
Workspace,
} from '@blocksuite/store';
@@ -13,17 +13,18 @@ import type {
LoadWorkspaceHandler,
CreateEditorHandler,
} from './context';
import { downloadWorkspace } from '@pathfinder/data-services';
const getEditorParams = (workspaceId: string) => {
const providers = [];
const params = new URLSearchParams(location.search);
// const room = params.get('room') ?? 'AFFINE-pathfinder';
if (params.get('syncMode') === 'websocket') {
const WebsocketDocProvider = createWebsocketDocProvider(
`ws://${window.location.host}/collaboration/`
);
providers.push(WebsocketDocProvider);
}
// if (params.get('syncMode') === 'websocket') {
// const WebsocketDocProvider = createWebsocketDocProvider(
// `ws://${window.location.host}/collaboration/`
// );
// providers.push(WebsocketDocProvider);
// }
providers.push(IndexedDBDocProvider);
@@ -44,7 +45,7 @@ const DynamicBlocksuite = ({
}: Props) => {
useEffect(() => {
const openWorkspace: LoadWorkspaceHandler = (workspaceId: string) =>
new Promise(resolve => {
new Promise(async resolve => {
const workspace = new Workspace({
...getEditorParams(workspaceId as string),
}).register(BlockSchema);
@@ -53,7 +54,12 @@ const DynamicBlocksuite = ({
p => p instanceof IndexedDBDocProvider
);
if (indexDBProvider) {
(indexDBProvider as IndexedDBDocProvider)?.on('synced', () => {
(indexDBProvider as IndexedDBDocProvider)?.on('synced', async () => {
const updates = await downloadWorkspace({ workspaceId });
updates &&
Workspace.Y.applyUpdate(workspace.doc, new Uint8Array(updates));
// if after update, the space:meta is empty, then we need to get map with doc
workspace.doc.getMap('space:meta');
resolve(workspace);
});
} else {
@@ -118,6 +118,13 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
useEffect(() => {
const callback = async (user: AccessTokenMessage | null) => {
const workspacesMeta = user ? await getWorkspaces() : [];
const workspaces = await Promise.all(
workspacesMeta.map(async ({ id }) => {
const workspace = (await loadWorkspaceHandler?.(id)) || null;
return workspace;
})
);
// TODO: add meta info to workspace meta
setState(state => ({ ...state, user: user, workspacesMeta }));
};
authorizationEvent.onChange(callback);
@@ -125,7 +132,7 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
return () => {
authorizationEvent.removeCallback(callback);
};
}, []);
}, [loadWorkspaceHandler]);
const context = useMemo(
() => ({