mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 18:46:19 +08:00
refactor(editor): use spec builder to unify the extend of editor extensions (#9916)
This commit is contained in:
+2
-1
@@ -154,7 +154,8 @@ const usePreviewExtensions = () => {
|
||||
|
||||
const extensions = useMemo(() => {
|
||||
const specs = createPageModeSpecs(framework);
|
||||
return [patchReferenceRenderer(reactToLit, referenceRenderer), ...specs];
|
||||
specs.extend([patchReferenceRenderer(reactToLit, referenceRenderer)]);
|
||||
return specs.value;
|
||||
}, [reactToLit, referenceRenderer, framework]);
|
||||
|
||||
return [extensions, portals] as const;
|
||||
|
||||
+26
-26
@@ -144,42 +144,43 @@ const usePatchSpecs = (mode: DocMode) => {
|
||||
extendEdgelessPreviewSpec(framework);
|
||||
}, [framework]);
|
||||
|
||||
const specs = useMemo(() => {
|
||||
return mode === 'edgeless'
|
||||
? createEdgelessModeSpecs(framework)
|
||||
: createPageModeSpecs(framework);
|
||||
}, [mode, framework]);
|
||||
|
||||
const confirmModal = useConfirmModal();
|
||||
|
||||
const patchedSpecs = useMemo(() => {
|
||||
let patched = specs.concat(
|
||||
patchReferenceRenderer(reactToLit, referenceRenderer)
|
||||
const builder =
|
||||
mode === 'edgeless'
|
||||
? createEdgelessModeSpecs(framework)
|
||||
: createPageModeSpecs(framework);
|
||||
|
||||
builder.extend(
|
||||
[
|
||||
patchReferenceRenderer(reactToLit, referenceRenderer),
|
||||
patchForEdgelessNoteConfig(reactToLit),
|
||||
patchNotificationService(confirmModal),
|
||||
patchPeekViewService(peekViewService),
|
||||
patchOpenDocExtension(),
|
||||
patchEdgelessClipboard(),
|
||||
patchParseDocUrlExtension(framework),
|
||||
patchGenerateDocUrlExtension(framework),
|
||||
patchQuickSearchService(framework),
|
||||
patchSideBarService(framework),
|
||||
patchDocModeService(docService, docsService, editorService),
|
||||
].flat()
|
||||
);
|
||||
|
||||
if (featureFlagService.flags.enable_pdf_embed_preview.value) {
|
||||
patched = patched.concat(patchForAttachmentEmbedViews(reactToLit));
|
||||
builder.extend([patchForAttachmentEmbedViews(reactToLit)]);
|
||||
}
|
||||
|
||||
patched = patched.concat(patchForEdgelessNoteConfig(reactToLit));
|
||||
patched = patched.concat(patchNotificationService(confirmModal));
|
||||
patched = patched.concat(patchPeekViewService(peekViewService));
|
||||
patched = patched.concat(patchOpenDocExtension());
|
||||
patched = patched.concat(patchEdgelessClipboard());
|
||||
patched = patched.concat(patchParseDocUrlExtension(framework));
|
||||
patched = patched.concat(patchGenerateDocUrlExtension(framework));
|
||||
patched = patched.concat(patchQuickSearchService(framework));
|
||||
patched = patched.concat(patchSideBarService(framework));
|
||||
if (BUILD_CONFIG.isMobileEdition) {
|
||||
patched = patched.concat(patchForMobile());
|
||||
builder.extend([patchForMobile()].flat());
|
||||
}
|
||||
if (BUILD_CONFIG.isElectron) {
|
||||
patched = patched.concat(patchForClipboardInElectron(framework));
|
||||
builder.extend([patchForClipboardInElectron(framework)].flat());
|
||||
}
|
||||
patched = patched.concat(
|
||||
patchDocModeService(docService, docsService, editorService)
|
||||
);
|
||||
return patched;
|
||||
|
||||
return builder.value;
|
||||
}, [
|
||||
mode,
|
||||
confirmModal,
|
||||
docService,
|
||||
docsService,
|
||||
@@ -188,7 +189,6 @@ const usePatchSpecs = (mode: DocMode) => {
|
||||
peekViewService,
|
||||
reactToLit,
|
||||
referenceRenderer,
|
||||
specs,
|
||||
featureFlagService,
|
||||
]);
|
||||
|
||||
|
||||
+3
-4
@@ -2,20 +2,19 @@ import { createAIEdgelessRootBlockSpec } from '@affine/core/blocksuite/presets/a
|
||||
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import { builtInTemplates as builtInEdgelessTemplates } from '@affine/templates/edgeless';
|
||||
import { builtInTemplates as builtInStickersTemplates } from '@affine/templates/stickers';
|
||||
import type { TemplateManager } from '@blocksuite/affine/blocks';
|
||||
import type { SpecBuilder, TemplateManager } from '@blocksuite/affine/blocks';
|
||||
import {
|
||||
EdgelessRootBlockSpec,
|
||||
EdgelessTemplatePanel,
|
||||
SpecProvider,
|
||||
} from '@blocksuite/affine/blocks';
|
||||
import type { ExtensionType } from '@blocksuite/affine/store';
|
||||
import { type FrameworkProvider } from '@toeverything/infra';
|
||||
|
||||
import { enableAffineExtension, enableAIExtension } from './custom/root-block';
|
||||
|
||||
export function createEdgelessModeSpecs(
|
||||
framework: FrameworkProvider
|
||||
): ExtensionType[] {
|
||||
): SpecBuilder {
|
||||
const featureFlagService = framework.get(FeatureFlagService);
|
||||
const enableAI = featureFlagService.flags.enable_ai.value;
|
||||
const edgelessSpec = SpecProvider.getInstance().getSpec('edgeless');
|
||||
@@ -28,7 +27,7 @@ export function createEdgelessModeSpecs(
|
||||
);
|
||||
}
|
||||
|
||||
return edgelessSpec.value;
|
||||
return edgelessSpec;
|
||||
}
|
||||
|
||||
export function effects() {
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import { createAIPageRootBlockSpec } from '@affine/core/blocksuite/presets/ai';
|
||||
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import { PageRootBlockSpec, SpecProvider } from '@blocksuite/affine/blocks';
|
||||
import type { ExtensionType } from '@blocksuite/affine/store';
|
||||
import {
|
||||
PageRootBlockSpec,
|
||||
type SpecBuilder,
|
||||
SpecProvider,
|
||||
} from '@blocksuite/affine/blocks';
|
||||
import { type FrameworkProvider } from '@toeverything/infra';
|
||||
|
||||
import { enableAffineExtension, enableAIExtension } from './custom/root-block';
|
||||
|
||||
export function createPageModeSpecs(
|
||||
framework: FrameworkProvider
|
||||
): ExtensionType[] {
|
||||
export function createPageModeSpecs(framework: FrameworkProvider): SpecBuilder {
|
||||
const featureFlagService = framework.get(FeatureFlagService);
|
||||
const enableAI = featureFlagService.flags.enable_ai.value;
|
||||
const provider = SpecProvider.getInstance();
|
||||
@@ -18,5 +19,5 @@ export function createPageModeSpecs(
|
||||
enableAIExtension(pageSpec);
|
||||
pageSpec.replace(PageRootBlockSpec, createAIPageRootBlockSpec(framework));
|
||||
}
|
||||
return pageSpec.value;
|
||||
return pageSpec;
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ export class DndService extends Service {
|
||||
|
||||
const std = new BlockStdScope({
|
||||
store: doc,
|
||||
extensions: createPageModeSpecs(this.framework),
|
||||
extensions: createPageModeSpecs(this.framework).value,
|
||||
});
|
||||
const dndAPI = std.get(DndApiExtensionIdentifier);
|
||||
return dndAPI;
|
||||
|
||||
Reference in New Issue
Block a user