refactor(editor): add helper function for undo notification (#11903)

### What Changes
- Refactors the `notify` function call with undo button. It is called `notifyWithUndo`, which can  associate the visibility of the `NotificationCard` with the top undo item in history stack, such as undo by shortcut `Cmd+Z`.
- change icon of the "Insert into page" button. Close [BS-3267](https://linear.app/affine-design/issue/BS-3267/frame和group的insert-into-page图标也更换一下)
This commit is contained in:
L-Sun
2025-04-23 02:43:56 +00:00
committed by L-Sun
parent 27ff9ab9f4
commit 9dbdd4b7ba
14 changed files with 136 additions and 157 deletions

View File

@@ -16,6 +16,7 @@ import {
SurfaceRefBlockSchema,
} from '@blocksuite/affine-model';
import {
NotificationProvider,
type ToolbarContext,
type ToolbarModuleConfig,
ToolbarModuleExtension,
@@ -26,7 +27,11 @@ import {
} from '@blocksuite/affine-shared/utils';
import { mountFrameTitleEditor } from '@blocksuite/affine-widget-frame-title';
import { Bound } from '@blocksuite/global/gfx';
import { EditIcon, PageIcon, UngroupIcon } from '@blocksuite/icons/lit';
import {
EditIcon,
InsertIntoPageIcon,
UngroupIcon,
} from '@blocksuite/icons/lit';
import { type BlockComponent, BlockFlavourIdentifier } from '@blocksuite/std';
import { GfxControllerIdentifier } from '@blocksuite/std/gfx';
import type { ExtensionType } from '@blocksuite/store';
@@ -46,9 +51,8 @@ const builtinSurfaceToolbarConfig = {
{
id: 'a.insert-into-page',
label: 'Insert into Page',
showLabel: true,
tooltip: 'Insert into Page',
icon: PageIcon(),
icon: InsertIntoPageIcon(),
when: ctx => ctx.getSurfaceModelsByType(FrameBlockModel).length === 1,
run(ctx) {
const model = ctx.getCurrentModelByType(FrameBlockModel);
@@ -78,13 +82,23 @@ const builtinSurfaceToolbarConfig = {
);
}
ctx.store.captureSync();
ctx.store.addBlock(
SurfaceRefBlockSchema.model.flavour,
{ reference: frameId, refFlavour: FrameBlockSchema.model.flavour },
lastNoteId
);
toast(ctx.host, 'Frame has been inserted into doc');
const notification = ctx.std.getOptional(NotificationProvider);
if (notification) {
notification.notifyWithUndoAction({
title: 'Frame inserted into Page.',
message: 'Frame has been inserted into doc',
accent: 'success',
});
} else {
toast(ctx.host, 'Frame has been inserted into doc');
}
},
},
{