diff --git a/blocksuite/affine/blocks/embed/src/embed-linked-doc-block/configs/toolbar.ts b/blocksuite/affine/blocks/embed/src/embed-linked-doc-block/configs/toolbar.ts index 6c4ebad8d..fd00703c7 100644 --- a/blocksuite/affine/blocks/embed/src/embed-linked-doc-block/configs/toolbar.ts +++ b/blocksuite/affine/blocks/embed/src/embed-linked-doc-block/configs/toolbar.ts @@ -13,6 +13,7 @@ import { ActionPlacement, DocDisplayMetaProvider, EditorSettingProvider, + FeatureFlagService, type LinkEventType, type OpenDocMode, type ToolbarAction, @@ -215,7 +216,12 @@ const conversionsActionGroup = { run(ctx) { const block = ctx.getCurrentBlockByType(EmbedLinkedDocBlockComponent); - if (isGfxBlockComponent(block)) { + if ( + ctx.std + .get(FeatureFlagService) + .getFlag('enable_embed_doc_with_alias') && + isGfxBlockComponent(block) + ) { const editorSetting = ctx.std.getOptional(EditorSettingProvider); editorSetting?.set?.( 'docDropCanvasPreferView', diff --git a/blocksuite/affine/blocks/embed/src/embed-synced-doc-block/configs/toolbar.ts b/blocksuite/affine/blocks/embed/src/embed-synced-doc-block/configs/toolbar.ts index 388c0a245..bd0f0d346 100644 --- a/blocksuite/affine/blocks/embed/src/embed-synced-doc-block/configs/toolbar.ts +++ b/blocksuite/affine/blocks/embed/src/embed-synced-doc-block/configs/toolbar.ts @@ -4,6 +4,7 @@ import { EmbedSyncedDocModel } from '@blocksuite/affine-model'; import { ActionPlacement, EditorSettingProvider, + FeatureFlagService, type LinkEventType, type OpenDocMode, type ToolbarAction, @@ -142,7 +143,12 @@ const conversionsActionGroup = { label: 'Card view', run(ctx) { const block = ctx.getCurrentBlockByType(EmbedSyncedDocBlockComponent); - if (isGfxBlockComponent(block)) { + if ( + ctx.std + .get(FeatureFlagService) + .getFlag('enable_embed_doc_with_alias') && + isGfxBlockComponent(block) + ) { const editorSetting = ctx.std.getOptional(EditorSettingProvider); editorSetting?.set?.( 'docDropCanvasPreferView', diff --git a/blocksuite/affine/shared/src/services/feature-flag-service.ts b/blocksuite/affine/shared/src/services/feature-flag-service.ts index b25c7ab4e..618d7aa6d 100644 --- a/blocksuite/affine/shared/src/services/feature-flag-service.ts +++ b/blocksuite/affine/shared/src/services/feature-flag-service.ts @@ -18,6 +18,7 @@ export interface BlockSuiteFlags { enable_block_meta: boolean; enable_callout: boolean; enable_edgeless_scribbled_style: boolean; + enable_embed_doc_with_alias: boolean; } export class FeatureFlagService extends StoreExtension { @@ -40,6 +41,7 @@ export class FeatureFlagService extends StoreExtension { enable_block_meta: true, enable_callout: false, enable_edgeless_scribbled_style: false, + enable_embed_doc_with_alias: false, }); setFlag(key: keyof BlockSuiteFlags, value: boolean) { diff --git a/packages/frontend/core/src/modules/dnd/index.ts b/packages/frontend/core/src/modules/dnd/index.ts index 8b6d798b2..1874a8efb 100644 --- a/packages/frontend/core/src/modules/dnd/index.ts +++ b/packages/frontend/core/src/modules/dnd/index.ts @@ -2,11 +2,17 @@ import { type Framework } from '@toeverything/infra'; import { DocsService } from '../doc'; import { EditorSettingService } from '../editor-setting'; +import { FeatureFlagService } from '../feature-flag'; import { WorkspaceScope, WorkspaceService } from '../workspace'; import { DndService } from './services'; export function configureDndModule(framework: Framework) { framework .scope(WorkspaceScope) - .service(DndService, [DocsService, WorkspaceService, EditorSettingService]); + .service(DndService, [ + DocsService, + WorkspaceService, + EditorSettingService, + FeatureFlagService, + ]); } diff --git a/packages/frontend/core/src/modules/dnd/services/index.ts b/packages/frontend/core/src/modules/dnd/services/index.ts index 77faa31b1..2eea0ddef 100644 --- a/packages/frontend/core/src/modules/dnd/services/index.ts +++ b/packages/frontend/core/src/modules/dnd/services/index.ts @@ -18,6 +18,7 @@ import { Service } from '@toeverything/infra'; import type { DocsService } from '../../doc'; import type { EditorSettingService } from '../../editor-setting'; +import type { FeatureFlagService } from '../../feature-flag'; import { resolveLinkToDoc } from '../../navigation'; import type { WorkspaceService } from '../../workspace'; @@ -34,7 +35,8 @@ export class DndService extends Service { constructor( private readonly docsService: DocsService, private readonly workspaceService: WorkspaceService, - private readonly editorSettingService: EditorSettingService + private readonly editorSettingService: EditorSettingService, + private readonly featureFlagService: FeatureFlagService ) { super(); @@ -185,7 +187,9 @@ export class DndService extends Service { return false; }, onDropTargetChange: (args: MonitorDragEvent) => { - changeDocCardView(args); + if (this.featureFlagService.flags.enable_embed_doc_with_alias.value) { + changeDocCardView(args); + } }, }) ); diff --git a/packages/frontend/core/src/modules/feature-flag/constant.ts b/packages/frontend/core/src/modules/feature-flag/constant.ts index 9ab56f099..2664c5453 100644 --- a/packages/frontend/core/src/modules/feature-flag/constant.ts +++ b/packages/frontend/core/src/modules/feature-flag/constant.ts @@ -260,6 +260,15 @@ export const AFFINE_FLAGS = { 'https://discord.com/channels/959027316334407691/1358384103925350542', defaultState: false, }, + // TODO(@L-Sun): remove this flag after the feature is released + enable_embed_doc_with_alias: { + category: 'blocksuite', + bsFlag: 'enable_embed_doc_with_alias', + displayName: 'Embed doc with alias', + description: 'Embed doc with alias', + configurable: isCanaryBuild, + defaultState: isCanaryBuild, + }, } satisfies { [key in string]: FlagInfo }; // oxlint-disable-next-line no-redeclare