feat: add show workspace names and members

This commit is contained in:
MingLiang Wang
2022-12-22 16:36:50 +08:00
parent b0e7362eff
commit 0d23cf31e3
13 changed files with 162 additions and 34 deletions
@@ -10,12 +10,12 @@ export type LoadWorkspaceHandler = (
workspaceId: string,
websocket?: boolean
) => Promise<StoreWorkspace | null> | null;
export type CreateEditorHandler = (page: StorePage) => EditorContainer | null;
export interface AppStateValue {
user: AccessTokenMessage | null;
workspacesMeta: Workspace[];
workspaces: Record<string, StoreWorkspace | null>;
currentWorkspaceId: string;
currentWorkspace: StoreWorkspace | null;
@@ -59,6 +59,7 @@ export const AppState = createContext<AppStateContext>({
loadWorkspace: undefined,
loadPage: undefined,
createPage: undefined,
workspaces: {},
});
export const useAppState = () => {
@@ -101,6 +101,11 @@ const DynamicBlocksuite = ({
resolve(workspace);
});
} else {
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);
}
});
@@ -5,6 +5,8 @@ import {
authorizationEvent,
AccessTokenMessage,
getWorkspaces,
WorkspaceType,
getWorkspaceDetail,
} from '@pathfinder/data-services';
import { AppState } from './context';
import type {
@@ -26,6 +28,7 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
currentWorkspace: null,
currentPage: null,
editor: null,
workspaces: {},
});
const [loadWorkspaceHandler, _setLoadWorkspaceHandler] =
@@ -129,14 +132,21 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
useEffect(() => {
const callback = async (user: AccessTokenMessage | null) => {
const workspacesMeta = user ? await getWorkspaces() : [];
const workspaces = await Promise.all(
const workspacesList = await Promise.all(
workspacesMeta?.map(async ({ id }) => {
const workspace = (await loadWorkspaceHandler?.(id)) || null;
return workspace;
return { id, workspace };
})
);
let workspaces: Record<string, Workspace | null> = {};
workspacesList.forEach(({ id, workspace }) => {
workspaces[id] = workspace;
});
// TODO: add meta info to workspace meta
setState(state => ({ ...state, user: user, workspacesMeta }));
setState(state => ({ ...state, user: user, workspacesMeta, workspaces }));
};
authorizationEvent.onChange(callback);