mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
refactor(editor): finish the extension provider migration (#12259)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added AI-powered store extension to support chat and transcription block schemas. - Introduced a new database view extension for enhanced database block integration. - **Refactor** - Updated and reorganized import paths for improved code structure and maintainability. - Consolidated and streamlined extension registration for store and view managers. - **Chores** - Removed deprecated or redundant extension classes and imports. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import { createReactComponentFromLit } from '@affine/component';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/view';
|
||||
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import { Container, type ServiceProvider } from '@blocksuite/affine/global/di';
|
||||
import { WithDisposable } from '@blocksuite/affine/global/lit';
|
||||
@@ -33,8 +35,6 @@ import { keyed } from 'lit/directives/keyed.js';
|
||||
import { literal } from 'lit/static-html.js';
|
||||
import React from 'react';
|
||||
|
||||
import { getStoreManager } from '../../manager/migrating-store';
|
||||
import { getViewManager } from '../../manager/migrating-view';
|
||||
import { markDownToDoc } from '../../utils';
|
||||
import type {
|
||||
AffineAIPanelState,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store.js';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { Container } from '@blocksuite/affine/global/di';
|
||||
import { TestWorkspace } from '@blocksuite/affine/store/test';
|
||||
import { describe, expect, test } from 'vitest';
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import { Button, Divider, useLitPortalFactory } from '@affine/component';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/view';
|
||||
import {
|
||||
patchReferenceRenderer,
|
||||
type ReferenceReactRenderer,
|
||||
} from '@affine/core/blocksuite/view-extensions/editor-view/reference-renderer';
|
||||
import { useGuard } from '@affine/core/components/guard';
|
||||
import { useEnableAI } from '@affine/core/components/hooks/affine/use-enable-ai';
|
||||
import { DocService } from '@affine/core/modules/doc';
|
||||
@@ -41,11 +46,6 @@ import {
|
||||
AffineSharedPageReference,
|
||||
} from '../../components/affine/reference-link';
|
||||
import { LitTextRenderer } from '../ai/components/text-renderer';
|
||||
import {
|
||||
patchReferenceRenderer,
|
||||
type ReferenceReactRenderer,
|
||||
} from '../extensions/reference-renderer';
|
||||
import { getViewManager } from '../manager/migrating-view';
|
||||
import * as styles from './bi-directional-link-panel.css';
|
||||
|
||||
const PREFIX = 'bi-directional-link-panel-collapse:';
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
LitEdgelessEditor,
|
||||
type PageEditor,
|
||||
} from '@affine/core/blocksuite/editors';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/migrating-view';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/view';
|
||||
import { useEnableAI } from '@affine/core/components/hooks/affine/use-enable-ai';
|
||||
import type { DocCustomPropertyInfo } from '@affine/core/modules/db';
|
||||
import type {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { toast } from '@affine/component';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { AppSidebarService } from '@affine/core/modules/app-sidebar';
|
||||
import { DocsService } from '@affine/core/modules/doc';
|
||||
import { WorkbenchService } from '@affine/core/modules/workbench';
|
||||
@@ -8,8 +9,6 @@ import type { Workspace } from '@blocksuite/affine/store';
|
||||
import { useServices } from '@toeverything/infra';
|
||||
import { useCallback, useMemo } from 'react';
|
||||
|
||||
import { getStoreManager } from '../manager/migrating-store';
|
||||
|
||||
export const usePageHelper = (docCollection: Workspace) => {
|
||||
const { docsService, workbenchService, appSidebarService } = useServices({
|
||||
DocsService,
|
||||
|
||||
@@ -1,24 +1,9 @@
|
||||
import { FeatureFlagStoreExtension } from '@affine/core/blocksuite/extensions/feature-flag';
|
||||
import { AIStoreExtension } from '@affine/core/blocksuite/store-extensions/ai';
|
||||
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import {
|
||||
type StoreExtensionContext,
|
||||
StoreExtensionManager,
|
||||
StoreExtensionProvider,
|
||||
} from '@blocksuite/affine/ext-loader';
|
||||
import { StoreExtensionManager } from '@blocksuite/affine/ext-loader';
|
||||
import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
|
||||
|
||||
import { AIChatBlockSchemaExtension } from '../ai/blocks/ai-chat-block/model';
|
||||
import { TranscriptionBlockSchemaExtension } from '../ai/blocks/transcription-block/model';
|
||||
|
||||
class MigratingAffineStoreExtension extends StoreExtensionProvider {
|
||||
override name = 'affine-store-extensions';
|
||||
|
||||
override setup(context: StoreExtensionContext) {
|
||||
super.setup(context);
|
||||
context.register(AIChatBlockSchemaExtension);
|
||||
context.register(TranscriptionBlockSchemaExtension);
|
||||
}
|
||||
}
|
||||
import { FeatureFlagStoreExtension } from '../store-extensions/feature-flag';
|
||||
|
||||
interface Configure {
|
||||
init: () => Configure;
|
||||
@@ -42,7 +27,7 @@ class StoreProvider {
|
||||
constructor() {
|
||||
this._manager = new StoreExtensionManager([
|
||||
...getInternalStoreExtensions(),
|
||||
MigratingAffineStoreExtension,
|
||||
AIStoreExtension,
|
||||
FeatureFlagStoreExtension,
|
||||
]);
|
||||
}
|
||||
@@ -1,23 +1,25 @@
|
||||
import type { ReactToLit } from '@affine/component';
|
||||
import { AIViewExtension } from '@affine/core/blocksuite/extensions/ai';
|
||||
import { CloudViewExtension } from '@affine/core/blocksuite/extensions/cloud';
|
||||
import { AIViewExtension } from '@affine/core/blocksuite/view-extensions/ai';
|
||||
import { CloudViewExtension } from '@affine/core/blocksuite/view-extensions/cloud';
|
||||
import { CodeBlockPreviewViewExtension } from '@affine/core/blocksuite/view-extensions/code-block-preview';
|
||||
import { AffineDatabaseViewExtension } from '@affine/core/blocksuite/view-extensions/database';
|
||||
import {
|
||||
EdgelessBlockHeaderConfigViewExtension,
|
||||
type EdgelessBlockHeaderViewOptions,
|
||||
} from '@affine/core/blocksuite/extensions/edgeless-block-header';
|
||||
import { AffineEditorConfigViewExtension } from '@affine/core/blocksuite/extensions/editor-config';
|
||||
import { createDatabaseOptionsConfig } from '@affine/core/blocksuite/extensions/editor-config/database';
|
||||
import { createLinkedWidgetConfig } from '@affine/core/blocksuite/extensions/editor-config/linked';
|
||||
import { ElectronViewExtension } from '@affine/core/blocksuite/extensions/electron';
|
||||
import { AffineLinkPreviewExtension } from '@affine/core/blocksuite/extensions/link-preview-service';
|
||||
import { MobileViewExtension } from '@affine/core/blocksuite/extensions/mobile';
|
||||
import { PdfViewExtension } from '@affine/core/blocksuite/extensions/pdf';
|
||||
import { AffineThemeViewExtension } from '@affine/core/blocksuite/extensions/theme';
|
||||
import { TurboRendererViewExtension } from '@affine/core/blocksuite/extensions/turbo-renderer';
|
||||
} from '@affine/core/blocksuite/view-extensions/edgeless-block-header';
|
||||
import { AffineEditorConfigViewExtension } from '@affine/core/blocksuite/view-extensions/editor-config';
|
||||
import { createDatabaseOptionsConfig } from '@affine/core/blocksuite/view-extensions/editor-config/database';
|
||||
import { createLinkedWidgetConfig } from '@affine/core/blocksuite/view-extensions/editor-config/linked';
|
||||
import {
|
||||
AffineEditorViewExtension,
|
||||
type AffineEditorViewOptions,
|
||||
} from '@affine/core/blocksuite/manager/editor-view';
|
||||
} from '@affine/core/blocksuite/view-extensions/editor-view/editor-view';
|
||||
import { ElectronViewExtension } from '@affine/core/blocksuite/view-extensions/electron';
|
||||
import { AffineLinkPreviewExtension } from '@affine/core/blocksuite/view-extensions/link-preview-service';
|
||||
import { MobileViewExtension } from '@affine/core/blocksuite/view-extensions/mobile';
|
||||
import { PdfViewExtension } from '@affine/core/blocksuite/view-extensions/pdf';
|
||||
import { AffineThemeViewExtension } from '@affine/core/blocksuite/view-extensions/theme';
|
||||
import { TurboRendererViewExtension } from '@affine/core/blocksuite/view-extensions/turbo-renderer';
|
||||
import { PeekViewService } from '@affine/core/modules/peek-view';
|
||||
import { DebugLogger } from '@affine/debug';
|
||||
import { mixpanel } from '@affine/track';
|
||||
@@ -35,8 +37,6 @@ import { LinkedDocViewExtension } from '@blocksuite/affine/widgets/linked-doc/vi
|
||||
import type { FrameworkProvider } from '@toeverything/infra';
|
||||
import type { TemplateResult } from 'lit';
|
||||
|
||||
import { CodeBlockPreviewViewExtension } from './code-block-preview';
|
||||
|
||||
type Configure = {
|
||||
init: () => Configure;
|
||||
|
||||
@@ -88,6 +88,7 @@ class ViewProvider {
|
||||
AIViewExtension,
|
||||
ElectronViewExtension,
|
||||
AffineLinkPreviewExtension,
|
||||
AffineDatabaseViewExtension,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { AIChatBlockSchemaExtension } from '@affine/core/blocksuite/ai/blocks';
|
||||
import { TranscriptionBlockSchemaExtension } from '@affine/core/blocksuite/ai/blocks/transcription-block/model';
|
||||
import {
|
||||
type StoreExtensionContext,
|
||||
StoreExtensionProvider,
|
||||
} from '@blocksuite/affine/ext-loader';
|
||||
|
||||
export class AIStoreExtension extends StoreExtensionProvider {
|
||||
override name = 'affine-store-extensions';
|
||||
|
||||
override setup(context: StoreExtensionContext) {
|
||||
super.setup(context);
|
||||
context.register(AIChatBlockSchemaExtension);
|
||||
context.register(TranscriptionBlockSchemaExtension);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getFeatureFlagSyncer } from '@affine/core/blocksuite/extensions/feature-flag/feature-flag-syncer';
|
||||
import { getFeatureFlagSyncer } from '@affine/core/blocksuite/store-extensions/feature-flag/feature-flag-syncer';
|
||||
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import {
|
||||
type StoreExtensionContext,
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
import {
|
||||
CodeBlockHtmlPreview,
|
||||
effects as htmlPreviewEffects,
|
||||
} from '../extensions/code-block-preview/html-preview';
|
||||
} from './html-preview';
|
||||
|
||||
export class CodeBlockPreviewViewExtension extends ViewExtensionProvider {
|
||||
override name = 'code-block-preview';
|
||||
@@ -4,8 +4,8 @@ import {
|
||||
} from '@blocksuite/affine/blocks/database';
|
||||
import type { ExtensionType } from '@blocksuite/affine/store';
|
||||
|
||||
import { groupByConfigList } from '../database-block/group-by';
|
||||
import { propertiesPresets } from '../database-block/properties';
|
||||
import { groupByConfigList } from '../../database-block/group-by';
|
||||
import { propertiesPresets } from '../../database-block/properties';
|
||||
|
||||
export function patchDatabaseBlockConfigService(): ExtensionType {
|
||||
//TODO use service
|
||||
@@ -0,0 +1,26 @@
|
||||
import {
|
||||
type ViewExtensionContext,
|
||||
ViewExtensionProvider,
|
||||
} from '@blocksuite/affine/ext-loader';
|
||||
import { z } from 'zod';
|
||||
|
||||
import { patchDatabaseBlockConfigService } from './database-block-config-service';
|
||||
|
||||
const optionsSchema = z.object({});
|
||||
|
||||
export type AffineDatabaseViewOptions = z.infer<typeof optionsSchema>;
|
||||
|
||||
export class AffineDatabaseViewExtension extends ViewExtensionProvider<AffineDatabaseViewOptions> {
|
||||
override name = 'affine-database-view';
|
||||
|
||||
override schema = optionsSchema;
|
||||
|
||||
override setup(
|
||||
context: ViewExtensionContext,
|
||||
options?: AffineDatabaseViewOptions
|
||||
) {
|
||||
super.setup(context, options);
|
||||
|
||||
context.register(patchDatabaseBlockConfigService());
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import type { ElementOrFactory } from '@affine/component';
|
||||
import {
|
||||
patchForEdgelessNoteConfig,
|
||||
patchForEmbedSyncedDocConfig,
|
||||
} from '@affine/core/blocksuite/extensions/edgeless-block-header/patch';
|
||||
} from '@affine/core/blocksuite/view-extensions/edgeless-block-header/patch';
|
||||
import {
|
||||
type ViewExtensionContext,
|
||||
ViewExtensionProvider,
|
||||
@@ -1,7 +1,7 @@
|
||||
import {
|
||||
createCustomToolbarExtension,
|
||||
createToolbarMoreMenuConfig,
|
||||
} from '@affine/core/blocksuite/extensions/editor-config/toolbar';
|
||||
} from '@affine/core/blocksuite/view-extensions/editor-config/toolbar';
|
||||
import { WorkspaceServerService } from '@affine/core/modules/cloud';
|
||||
import { EditorSettingService } from '@affine/core/modules/editor-setting';
|
||||
import { ToolbarMoreMenuConfigExtension } from '@blocksuite/affine/components/toolbar';
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getEditorConfigExtension } from '@affine/core/blocksuite/extensions/editor-config/get-config';
|
||||
import { getEditorConfigExtension } from '@affine/core/blocksuite/view-extensions/editor-config/get-config';
|
||||
import {
|
||||
type ViewExtensionContext,
|
||||
ViewExtensionProvider,
|
||||
@@ -89,7 +89,7 @@ import { keyed } from 'lit/directives/keyed.js';
|
||||
import { repeat } from 'lit/directives/repeat.js';
|
||||
import { styleMap } from 'lit/directives/style-map.js';
|
||||
|
||||
import { openDocActions } from '../../open-doc';
|
||||
import { openDocActions } from '../../editor-view/open-doc';
|
||||
import { copyAsImage, createCopyAsPngMenuItem } from './copy-as-image';
|
||||
|
||||
export function createToolbarMoreMenuConfig(framework: FrameworkProvider) {
|
||||
@@ -1,18 +1,4 @@
|
||||
import type { ConfirmModalProps, ElementOrFactory } from '@affine/component';
|
||||
import { patchForAudioEmbedView } from '@affine/core/blocksuite/extensions/audio/audio-view';
|
||||
import { patchDatabaseBlockConfigService } from '@affine/core/blocksuite/extensions/database-block-config-service';
|
||||
import { buildDocDisplayMetaExtension } from '@affine/core/blocksuite/extensions/display-meta';
|
||||
import { patchDocModeService } from '@affine/core/blocksuite/extensions/doc-mode-service';
|
||||
import { patchDocUrlExtensions } from '@affine/core/blocksuite/extensions/doc-url';
|
||||
import { patchFileSizeLimitExtension } from '@affine/core/blocksuite/extensions/file-size-limit';
|
||||
import { patchNotificationService } from '@affine/core/blocksuite/extensions/notification-service';
|
||||
import { patchOpenDocExtension } from '@affine/core/blocksuite/extensions/open-doc';
|
||||
import { patchQuickSearchService } from '@affine/core/blocksuite/extensions/quick-search-service';
|
||||
import {
|
||||
patchReferenceRenderer,
|
||||
type ReferenceReactRenderer,
|
||||
} from '@affine/core/blocksuite/extensions/reference-renderer';
|
||||
import { patchSideBarService } from '@affine/core/blocksuite/extensions/side-bar-service';
|
||||
import {
|
||||
AffinePageReference,
|
||||
AffineSharedPageReference,
|
||||
@@ -29,6 +15,20 @@ import { FrameworkProvider } from '@toeverything/infra';
|
||||
import type { TemplateResult } from 'lit';
|
||||
import { z } from 'zod';
|
||||
|
||||
import { patchForAudioEmbedView } from './audio/audio-view';
|
||||
import { buildDocDisplayMetaExtension } from './display-meta';
|
||||
import { patchDocModeService } from './doc-mode-service';
|
||||
import { patchDocUrlExtensions } from './doc-url';
|
||||
import { patchFileSizeLimitExtension } from './file-size-limit';
|
||||
import { patchNotificationService } from './notification-service';
|
||||
import { patchOpenDocExtension } from './open-doc';
|
||||
import { patchQuickSearchService } from './quick-search-service';
|
||||
import {
|
||||
patchReferenceRenderer,
|
||||
type ReferenceReactRenderer,
|
||||
} from './reference-renderer';
|
||||
import { patchSideBarService } from './side-bar-service';
|
||||
|
||||
const optionsSchema = z.object({
|
||||
// services
|
||||
framework: z.instanceof(FrameworkProvider),
|
||||
@@ -115,12 +115,9 @@ export class AffineEditorViewExtension extends ViewExtensionProvider<AffineEdito
|
||||
patchDocModeService(docService, docsService, editorService),
|
||||
patchFileSizeLimitExtension(framework),
|
||||
buildDocDisplayMetaExtension(framework),
|
||||
patchForAudioEmbedView(reactToLit),
|
||||
])
|
||||
.register(patchDocUrlExtensions(framework))
|
||||
.register(patchQuickSearchService(framework))
|
||||
.register([
|
||||
patchDatabaseBlockConfigService(),
|
||||
patchForAudioEmbedView(reactToLit),
|
||||
]);
|
||||
.register(patchQuickSearchService(framework));
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { KeyboardToolbarExtension } from '@affine/core/blocksuite/extensions/mobile/keyboard-toolbar-extension';
|
||||
import { MobileFeatureFlagControl } from '@affine/core/blocksuite/extensions/mobile/mobile-feature-flag-control';
|
||||
import { KeyboardToolbarExtension } from '@affine/core/blocksuite/view-extensions/mobile/keyboard-toolbar-extension';
|
||||
import { MobileFeatureFlagControl } from '@affine/core/blocksuite/view-extensions/mobile/mobile-feature-flag-control';
|
||||
import {
|
||||
type ViewExtensionContext,
|
||||
ViewExtensionProvider,
|
||||
@@ -1,5 +1,5 @@
|
||||
import { getPreviewThemeExtension } from '@affine/core/blocksuite/extensions/theme/preview-theme';
|
||||
import { getThemeExtension } from '@affine/core/blocksuite/extensions/theme/theme';
|
||||
import { getPreviewThemeExtension } from '@affine/core/blocksuite/view-extensions/theme/preview-theme';
|
||||
import { getThemeExtension } from '@affine/core/blocksuite/view-extensions/theme/theme';
|
||||
import {
|
||||
type ViewExtensionContext,
|
||||
ViewExtensionProvider,
|
||||
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
import 'fake-indexeddb/auto';
|
||||
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { type Store, Text } from '@blocksuite/affine/store';
|
||||
import { TestWorkspace } from '@blocksuite/affine/store/test';
|
||||
import { renderHook } from '@testing-library/react';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Button, IconButton, Modal } from '@affine/component';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
|
||||
import type {
|
||||
DialogComponentProps,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Skeleton } from '@affine/component';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/migrating-view';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/view';
|
||||
import type { EditorSettingSchema } from '@affine/core/modules/editor-setting';
|
||||
import { EditorSettingService } from '@affine/core/modules/editor-setting';
|
||||
import { EdgelessCRUDIdentifier } from '@blocksuite/affine/blocks/surface';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/migrating-view';
|
||||
import { getViewManager } from '@affine/core/blocksuite/manager/view';
|
||||
import { DebugLogger } from '@affine/debug';
|
||||
import { BlockStdScope } from '@blocksuite/affine/std';
|
||||
import type { Store } from '@blocksuite/affine/store';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
|
||||
import { Service } from '@toeverything/infra';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
|
||||
import { Entity } from '@toeverything/infra';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
|
||||
import { getStoreManager } from '@affine/core/blocksuite/manager/store';
|
||||
import {
|
||||
AwarenessStore,
|
||||
type Doc,
|
||||
|
||||
Reference in New Issue
Block a user