mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-23 21:38:44 +08:00
feat: add show workspace names and members
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user