Merge pull request #326 from toeverything/feature-toc-mitsuha-dev

Feature toc mitsuha dev
This commit is contained in:
mitsuha(XiWen TU)
2022-08-25 14:47:29 +08:00
committed by GitHub
10 changed files with 372 additions and 44 deletions
@@ -346,6 +346,12 @@ export class Editor implements Virgo {
return await this.getBlock({ workspace: this.workspace, id: blockId });
}
async getBlockByIds(ids: string[]): Promise<Awaited<AsyncBlock | null>[]> {
return await Promise.all(
ids.map(id => this.getBlock({ workspace: this.workspace, id }))
);
}
/**
* TODO: to be optimized
* get block`s dom by block`s id
@@ -490,6 +496,13 @@ export class Editor implements Virgo {
return await services.api.editorBlock.query(this.workspace, query);
}
async queryByPageId(pageId: string) {
return await services.api.editorBlock.get({
workspace: this.workspace,
ids: [pageId],
});
}
/** Hooks */
public getHooks(): HooksRunner & PluginHooks {
@@ -9,7 +9,10 @@
* 6. Dependencies between plugins are not supported for the time being
*/
import type { PatchNode } from '@toeverything/components/ui';
import type { BlockFlavors } from '@toeverything/datasource/db-service';
import type {
BlockFlavors,
ReturnEditorBlock,
} from '@toeverything/datasource/db-service';
import type { IdList, SelectionInfo, SelectionManager } from './selection';
import { Point } from '@toeverything/utils';
@@ -67,6 +70,8 @@ export interface Virgo {
) => Promise<AsyncBlock>;
getRootBlockId: () => string;
getBlockById(blockId: string): Promise<AsyncBlock | null>;
getBlockByIds(blockId: string[]): Promise<(AsyncBlock | null)[]>;
queryByPageId(pageId: string): Promise<(ReturnEditorBlock | null)[]>;
setHotKeysScope(scope?: string): void;
getBlockList: () => Promise<AsyncBlock[]>;
getBlockListByLevelOrder: () => Promise<AsyncBlock[]>;
+7 -7
View File
@@ -1,5 +1,4 @@
import { atom, useAtom } from 'jotai';
import { useEffect } from 'react';
import { useLocation, useParams } from 'react-router-dom';
// import { Virgo } from '@toeverything/components/editor-core';
@@ -14,12 +13,13 @@ export const useCurrentEditors = () => {
const { pathname } = useLocation();
const [currentEditors, setCurrentEditors] = useAtom(_currentEditors);
useEffect(() => {
if (!workspaceId || !pageId) return;
if (pathname.split('/').length >= 3) {
setCurrentEditors({});
}
}, [pageId, pathname, setCurrentEditors, workspaceId]);
/* not useful: 2022.8.25 */
// useEffect(() => {
// if (!workspaceId || !pageId) return;
// if (pathname.split('/').length >= 3) {
// setCurrentEditors({});
// }
// }, [pageId, pathname, setCurrentEditors, workspaceId]);
return {
currentEditors,