From 4e33059d584cb2b485a464c604499ea69aabfea9 Mon Sep 17 00:00:00 2001 From: L-Sun Date: Mon, 7 Apr 2025 06:03:49 +0000 Subject: [PATCH] fix(editor): remove copy-as-png from toolbar of surface-ref (#11493) --- .../block-surface-ref/src/configs/toolbar.ts | 32 ------------- .../blocks/block-surface-ref/src/utils.ts | 48 +------------------ 2 files changed, 1 insertion(+), 79 deletions(-) diff --git a/blocksuite/affine/blocks/block-surface-ref/src/configs/toolbar.ts b/blocksuite/affine/blocks/block-surface-ref/src/configs/toolbar.ts index 33fe22521..6eb081cff 100644 --- a/blocksuite/affine/blocks/block-surface-ref/src/configs/toolbar.ts +++ b/blocksuite/affine/blocks/block-surface-ref/src/configs/toolbar.ts @@ -11,7 +11,6 @@ import { CaptionIcon, CopyIcon, DeleteIcon } from '@blocksuite/icons/lit'; import { html } from 'lit'; import { SurfaceRefBlockComponent } from '../surface-ref-block'; -import { surfaceRefToBlob, writeImageBlobToClipboard } from '../utils'; export const surfaceRefToolbarModuleConfig: ToolbarModuleConfig = { actions: [ @@ -73,37 +72,6 @@ export const surfaceRefToolbarModuleConfig: ToolbarModuleConfig = { return !!surfaceRefBlock.referenceModel; }, actions: [ - { - id: 'a.surface-ref-copy-as-image', - label: 'Copy as Image', - icon: CopyIcon(), - placement: ActionPlacement.More, - when: ctx => { - const surfaceRefBlock = ctx.getCurrentBlockByType( - SurfaceRefBlockComponent - ); - if (!surfaceRefBlock) return false; - - return !!surfaceRefBlock.referenceModel; - }, - run: ctx => { - const surfaceRefBlock = ctx.getCurrentBlockByType( - SurfaceRefBlockComponent - ); - if (!surfaceRefBlock) return; - - surfaceRefToBlob(surfaceRefBlock) - .then(async blob => { - if (!blob) { - toast(ctx.host, 'Failed to render surface-ref to image'); - } else { - await writeImageBlobToClipboard(blob); - toast(ctx.host, 'Copied image to clipboard'); - } - }) - .catch(console.error); - }, - }, // TODO(@L-Sun): add duplicate action after refactoring root-block/edgeless ], }, diff --git a/blocksuite/affine/blocks/block-surface-ref/src/utils.ts b/blocksuite/affine/blocks/block-surface-ref/src/utils.ts index f63baa8ae..9f003e932 100644 --- a/blocksuite/affine/blocks/block-surface-ref/src/utils.ts +++ b/blocksuite/affine/blocks/block-surface-ref/src/utils.ts @@ -1,22 +1,16 @@ import { isFrameBlock } from '@blocksuite/affine-block-frame'; -import type { SurfaceBlockComponent } from '@blocksuite/affine-block-surface'; -import { ExportManager } from '@blocksuite/affine-block-surface'; -import type { SurfaceRefBlockComponent } from '@blocksuite/affine-block-surface-ref'; import { GroupElementModel, MindmapElementModel, ShapeElementModel, } from '@blocksuite/affine-model'; -import { BlockSuiteError } from '@blocksuite/global/exceptions'; -import { Bound } from '@blocksuite/global/gfx'; -import { assertType } from '@blocksuite/global/utils'; import { EdgelessIcon, FrameIcon, GroupIcon, MindmapIcon, } from '@blocksuite/icons/lit'; -import { GfxControllerIdentifier, type GfxModel } from '@blocksuite/std/gfx'; +import { type GfxModel } from '@blocksuite/std/gfx'; import { html, type TemplateResult } from 'lit'; export const noContentPlaceholder = html` @@ -117,46 +111,6 @@ export const noContentPlaceholder = html` `; -export const surfaceRefToBlob = async ( - surfaceRefBlock: SurfaceRefBlockComponent -): Promise => { - const { referenceModel, previewEditor } = surfaceRefBlock; - if (!referenceModel || !previewEditor) return null; - - const exportManager = previewEditor.std.get(ExportManager); - const gfx = previewEditor.std.get(GfxControllerIdentifier); - - const { surface } = gfx; - if (!surface) return null; - const surfaceBlock = previewEditor.std.view.getBlock(surface.id); - if (!surfaceBlock) return null; - assertType(surfaceBlock); - - const canvas = await exportManager.edgelessToCanvas( - surfaceBlock.renderer, - Bound.deserialize(referenceModel.xywh), - gfx, - undefined, - undefined, - { zoom: surfaceBlock.renderer.viewport.zoom } - ); - - if (!canvas) { - throw new BlockSuiteError( - BlockSuiteError.ErrorCode.ValueNotExists, - 'Failed to export edgeless to canvas' - ); - } - - return new Promise((resolve, reject) => { - canvas.toBlob(blob => (blob ? resolve(blob) : reject(null)), 'image/png'); - }); -}; - -export const writeImageBlobToClipboard = async (blob: Blob) => { - await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]); -}; - export const TYPE_ICON_MAP: { [key: string]: { name: string;