mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 21:27:20 +00:00
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { createContext, MutableRefObject, useContext } from 'react';
|
|
import type { AccessTokenMessage, Workspace } from '@affine/datacenter';
|
|
import type {
|
|
Page as StorePage,
|
|
Workspace as StoreWorkspace,
|
|
} from '@blocksuite/store';
|
|
import type { EditorContainer } from '@blocksuite/editor';
|
|
|
|
export type LoadWorkspaceHandler = (
|
|
workspaceId: string,
|
|
user?: AccessTokenMessage | null
|
|
) => Promise<StoreWorkspace | null> | null;
|
|
export type CreateEditorHandler = (page: StorePage) => EditorContainer | null;
|
|
|
|
export interface AppStateValue {
|
|
user: AccessTokenMessage | null;
|
|
workspacesMeta: Workspace[];
|
|
|
|
currentWorkspaceId: string;
|
|
currentWorkspace: StoreWorkspace | null;
|
|
|
|
currentPage: StorePage | null;
|
|
|
|
// workspaces: Record<string, StoreWorkspace | null>;
|
|
|
|
editor: EditorContainer | null;
|
|
synced: boolean;
|
|
refreshWorkspacesMeta: () => void;
|
|
}
|
|
|
|
export interface AppStateContext extends AppStateValue {
|
|
setState: (state: AppStateValue) => void;
|
|
createEditor?: MutableRefObject<
|
|
((page: StorePage) => EditorContainer | null) | undefined
|
|
>;
|
|
setEditor?: MutableRefObject<((page: EditorContainer) => void) | undefined>;
|
|
loadWorkspace: (workspaceId: string) => Promise<StoreWorkspace | null>;
|
|
loadPage: (pageId: string) => Promise<StorePage | null>;
|
|
}
|
|
|
|
export const AppState = createContext<AppStateContext>({
|
|
user: null,
|
|
workspacesMeta: [],
|
|
currentWorkspaceId: '',
|
|
currentWorkspace: null,
|
|
currentPage: null,
|
|
editor: null,
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
setState: () => {},
|
|
createEditor: undefined,
|
|
setEditor: undefined,
|
|
loadWorkspace: () => Promise.resolve(null),
|
|
loadPage: () => Promise.resolve(null),
|
|
synced: false,
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
refreshWorkspacesMeta: () => {},
|
|
});
|
|
|
|
export const useAppState = () => {
|
|
return useContext(AppState);
|
|
};
|