mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-16 17:46:18 +08:00
Merge branch 'feat/filesystem_and_search' of github.com:toeverything/AFFiNE into feat/filesystem_and_search
This commit is contained in:
@@ -16,7 +16,7 @@ export const Footer = (props: { query: string }) => {
|
||||
<Command.Item
|
||||
data-testid="quickSearch-addNewPage"
|
||||
onSelect={async () => {
|
||||
const pageId = await createPage();
|
||||
const pageId = await createPage?.current?.();
|
||||
if (pageId) {
|
||||
goToPage(pageId);
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ export const WorkSpaceSliderBar = () => {
|
||||
</Link>
|
||||
<StyledNewPageButton
|
||||
onClick={async () => {
|
||||
const pageId = await createPage();
|
||||
const pageId = await createPage?.current?.();
|
||||
console.log('pageID', pageId);
|
||||
if (pageId) {
|
||||
goToPage(pageId);
|
||||
|
||||
@@ -35,10 +35,10 @@ const Home: NextPage = () => {
|
||||
return ret;
|
||||
}
|
||||
|
||||
const editor = createEditor(page);
|
||||
const editor = createEditor?.current?.(page);
|
||||
if (editor) {
|
||||
editorContainer.current?.appendChild(editor);
|
||||
setEditor(editor);
|
||||
setEditor?.current?.(editor);
|
||||
if (page.isEmpty) {
|
||||
const title = 'Welcome to the AFFiNE Alpha';
|
||||
const pageId = page.addBlock({
|
||||
@@ -53,7 +53,7 @@ const Home: NextPage = () => {
|
||||
}
|
||||
|
||||
return ret;
|
||||
}, [workspace, page]);
|
||||
}, [workspace, page, createEditor, setEditor]);
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -19,13 +19,13 @@ const Page = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
createPage()?.then(async pageId => {
|
||||
createPage?.current?.()?.then(async pageId => {
|
||||
if (!pageId) {
|
||||
return;
|
||||
}
|
||||
router.push(`/workspace/${currentWorkspaceId}/${pageId}`);
|
||||
});
|
||||
}, [workspace, currentWorkspaceId]);
|
||||
}, [workspace, currentWorkspaceId, createPage, router]);
|
||||
|
||||
return <div>Hello, there is [pageId]/index</div>;
|
||||
};
|
||||
|
||||
@@ -9,6 +9,12 @@ import type {
|
||||
import type { EditorContainer } from '@blocksuite/editor';
|
||||
import { QueryContent } from '@blocksuite/store/dist/workspace/search';
|
||||
|
||||
export type LoadWorkspaceHandler = (
|
||||
workspaceId: string
|
||||
) => Promise<StoreWorkspace | null> | null;
|
||||
|
||||
export type CreateEditorHandler = (page: StorePage) => EditorContainer | null;
|
||||
|
||||
export interface AppStateValue {
|
||||
user: AccessTokenMessage | null;
|
||||
workspacesMeta: Workspace[];
|
||||
@@ -23,15 +29,19 @@ export interface AppStateValue {
|
||||
|
||||
export interface AppStateContext extends AppStateValue {
|
||||
setState: (state: AppStateValue) => void;
|
||||
createEditor: (page: StorePage) => EditorContainer | null;
|
||||
setEditor: (editor: EditorContainer) => void;
|
||||
createEditor?: MutableRefObject<
|
||||
((page: StorePage) => EditorContainer | null) | undefined
|
||||
>;
|
||||
setEditor?: MutableRefObject<((page: EditorContainer) => void) | undefined>;
|
||||
loadWorkspace?: MutableRefObject<
|
||||
((workspaceId: string) => Promise<StoreWorkspace | null> | null) | undefined
|
||||
>;
|
||||
loadPage?: MutableRefObject<
|
||||
((pageId: string) => Promise<StorePage | null> | null) | undefined
|
||||
>;
|
||||
createPage: (pageId?: string) => Promise<string | null> | null;
|
||||
createPage?: MutableRefObject<
|
||||
((pageId?: string) => Promise<string | null>) | undefined
|
||||
>;
|
||||
getPageMeta: (pageId: string) => PageMeta | null;
|
||||
toggleFavoritePage: (pageId: string) => void;
|
||||
toggleDeletePage: (pageId: string) => void;
|
||||
@@ -50,11 +60,11 @@ export const AppState = createContext<AppStateContext>({
|
||||
editor: null,
|
||||
|
||||
setState: () => {},
|
||||
createEditor: () => null,
|
||||
setEditor: () => {},
|
||||
createEditor: undefined,
|
||||
setEditor: undefined,
|
||||
loadWorkspace: undefined,
|
||||
loadPage: undefined,
|
||||
createPage: () => null,
|
||||
createPage: undefined,
|
||||
getPageMeta: () => null,
|
||||
toggleFavoritePage: () => {},
|
||||
toggleDeletePage: () => {},
|
||||
|
||||
@@ -8,7 +8,11 @@ import {
|
||||
import '@blocksuite/blocks';
|
||||
import '@blocksuite/blocks/style';
|
||||
import { BlockSchema, createEditor } from '@blocksuite/editor';
|
||||
import type { AppStateContext } from './context';
|
||||
import type {
|
||||
AppStateContext,
|
||||
LoadWorkspaceHandler,
|
||||
CreateEditorHandler,
|
||||
} from './context';
|
||||
|
||||
const getEditorParams = (workspaceId: string) => {
|
||||
const providers = [];
|
||||
@@ -29,9 +33,6 @@ const getEditorParams = (workspaceId: string) => {
|
||||
};
|
||||
};
|
||||
|
||||
type LoadWorkspaceHandler = AppStateContext['loadWorkspace'];
|
||||
type CreateEditorHandler = AppStateContext['createEditor'];
|
||||
|
||||
interface Props {
|
||||
setLoadWorkspaceHandler: (handler: LoadWorkspaceHandler) => void;
|
||||
setCreateEditorHandler: (handler: CreateEditorHandler) => void;
|
||||
|
||||
@@ -7,13 +7,15 @@ import {
|
||||
getWorkspaces,
|
||||
} from '@pathfinder/data-services';
|
||||
import { AppState } from './context';
|
||||
import type { AppStateValue, AppStateContext } from './context';
|
||||
import type {
|
||||
AppStateValue,
|
||||
AppStateContext,
|
||||
CreateEditorHandler,
|
||||
LoadWorkspaceHandler,
|
||||
} from './context';
|
||||
import { QueryContent } from '@blocksuite/store/dist/workspace/search';
|
||||
import type { Page, Workspace } from '@blocksuite/store';
|
||||
|
||||
type LoadWorkspaceHandler = (
|
||||
workspaceId: string
|
||||
) => Promise<Workspace | null> | null;
|
||||
import { EditorContainer } from '@blocksuite/editor';
|
||||
|
||||
const DynamicBlocksuite = dynamic(() => import('./dynamic-blocksuite'), {
|
||||
ssr: false,
|
||||
@@ -42,9 +44,9 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
|
||||
);
|
||||
|
||||
const [createEditorHandler, _setCreateEditorHandler] =
|
||||
useState<AppStateContext['createEditor']>();
|
||||
useState<CreateEditorHandler>();
|
||||
const setCreateEditorHandler = useCallback(
|
||||
(handler: AppStateContext['createEditor']) => {
|
||||
(handler: CreateEditorHandler) => {
|
||||
_setCreateEditorHandler(() => handler);
|
||||
},
|
||||
[_setCreateEditorHandler]
|
||||
@@ -71,6 +73,53 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
|
||||
setState(state => ({ ...state, currentPage: page }));
|
||||
return page;
|
||||
};
|
||||
|
||||
const createEditor = useRef<
|
||||
((page: Page) => EditorContainer | null) | undefined
|
||||
>();
|
||||
createEditor.current = () => {
|
||||
const { currentPage, currentWorkspace } = state;
|
||||
if (!currentPage || !currentWorkspace) {
|
||||
return null;
|
||||
}
|
||||
const editor = createEditorHandler?.(currentPage) || null;
|
||||
|
||||
if (editor) {
|
||||
const pageMeta = currentWorkspace?.meta.pageMetas.find(
|
||||
p => p.id === currentPage.pageId
|
||||
);
|
||||
if (pageMeta?.mode) {
|
||||
editor.mode = pageMeta.mode as 'page' | 'edgeless' | undefined;
|
||||
}
|
||||
if (pageMeta?.trash) {
|
||||
editor.readonly = true;
|
||||
}
|
||||
}
|
||||
|
||||
return editor;
|
||||
};
|
||||
|
||||
const setEditor = useRef<(editor: AppStateValue['editor']) => void>();
|
||||
|
||||
setEditor.current = (editor: AppStateValue['editor']) => {
|
||||
setState(state => ({ ...state, editor }));
|
||||
};
|
||||
|
||||
const createPage = useRef<(pageId?: string) => Promise<string | null>>();
|
||||
|
||||
createPage.current = (pageId: string = Date.now().toString()) =>
|
||||
new Promise<string | null>(resolve => {
|
||||
const { currentWorkspace } = state;
|
||||
if (!currentWorkspace) {
|
||||
resolve(null);
|
||||
return;
|
||||
}
|
||||
currentWorkspace.createPage(pageId);
|
||||
currentWorkspace.signals.pageAdded.once(addedPageId => {
|
||||
resolve(addedPageId);
|
||||
});
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
const callback = async (user: AccessTokenMessage | null) => {
|
||||
const workspacesMeta = user ? await getWorkspaces() : [];
|
||||
@@ -87,44 +136,11 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
|
||||
() => ({
|
||||
...state,
|
||||
setState,
|
||||
createEditor: () => {
|
||||
const { currentPage, currentWorkspace } = state;
|
||||
if (!currentPage || !currentWorkspace) {
|
||||
return null;
|
||||
}
|
||||
const editor = createEditorHandler?.(currentPage) || null;
|
||||
|
||||
if (editor) {
|
||||
const pageMeta = currentWorkspace?.meta.pageMetas.find(
|
||||
p => p.id === currentPage.pageId
|
||||
);
|
||||
if (pageMeta?.mode) {
|
||||
editor.mode = pageMeta.mode as 'page' | 'edgeless' | undefined;
|
||||
}
|
||||
if (pageMeta?.trash) {
|
||||
editor.readonly = true;
|
||||
}
|
||||
}
|
||||
|
||||
return editor;
|
||||
},
|
||||
setEditor: (editor: AppStateValue['editor']) => {
|
||||
setState(state => ({ ...state, editor }));
|
||||
},
|
||||
createEditor,
|
||||
setEditor,
|
||||
loadWorkspace,
|
||||
loadPage,
|
||||
createPage: (pageId: string = Date.now().toString()) =>
|
||||
new Promise<string | null>(resolve => {
|
||||
const { currentWorkspace } = state;
|
||||
if (!currentWorkspace) {
|
||||
resolve(null);
|
||||
return;
|
||||
}
|
||||
currentWorkspace.createPage(pageId);
|
||||
currentWorkspace.signals.pageAdded.once(addedPageId => {
|
||||
resolve(addedPageId);
|
||||
});
|
||||
}),
|
||||
createPage,
|
||||
getPageMeta: (pageId: string) => {
|
||||
const { currentWorkspace } = state;
|
||||
if (!currentWorkspace) {
|
||||
@@ -166,14 +182,7 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
|
||||
return currentWorkspace!.search(query);
|
||||
},
|
||||
}),
|
||||
[
|
||||
state,
|
||||
setState,
|
||||
loadWorkspaceHandler,
|
||||
createEditorHandler,
|
||||
loadPage,
|
||||
loadWorkspace,
|
||||
]
|
||||
[state, setState, loadPage, loadWorkspace]
|
||||
);
|
||||
|
||||
return (
|
||||
|
||||
@@ -45,13 +45,12 @@ export const EditorProvider = ({
|
||||
const router = useRouter();
|
||||
const [workspace, setWorkspace] = useState<Workspace>();
|
||||
const [page, _setPage] = useState<Page>();
|
||||
const workspaceId = router.query.workspaceId as string;
|
||||
const setPage = useCallback(
|
||||
(page: Page) => {
|
||||
_setPage(page);
|
||||
// router.push(`/workspace/${workspaceId}/${page.id.replace('space:', '')}`);
|
||||
},
|
||||
[_setPage, workspaceId]
|
||||
[_setPage]
|
||||
);
|
||||
const [pageList, setPageList] = useState<PageMeta[]>([]);
|
||||
const [editor, setEditor] = useState<EditorContainer>();
|
||||
|
||||
Generated
+2
-2
@@ -3350,7 +3350,7 @@ packages:
|
||||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.38.0_76twfck5d7crjqrmw4yltga7zm
|
||||
'@typescript-eslint/parser': 5.38.0_tg6quxtr5dyl3tikvj7rwonxxi
|
||||
debug: 3.2.7
|
||||
eslint: 8.22.0
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
@@ -3369,7 +3369,7 @@ packages:
|
||||
'@typescript-eslint/parser':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@typescript-eslint/parser': 5.38.0_76twfck5d7crjqrmw4yltga7zm
|
||||
'@typescript-eslint/parser': 5.38.0_tg6quxtr5dyl3tikvj7rwonxxi
|
||||
array-includes: 3.1.5
|
||||
array.prototype.flat: 1.3.0
|
||||
debug: 2.6.9
|
||||
|
||||
Reference in New Issue
Block a user