Files
AFFiNE-Mirror/blocksuite/affine/blocks/surface-ref/src/configs/toolbar.ts
T
L-Sun 091bac1047 fix(editor): add comment entire to inner toolbar (#13304)
Close
[BS-3624](https://linear.app/affine-design/issue/BS-3624/page模式单选图片的时候希望有comment-按钮)




#### PR Dependency Tree


* **PR #13304** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a comment button to the image and surface reference block
toolbars for easier commenting.

* **Refactor**
* Simplified array flattening operations across multiple components and
utilities by replacing `.map(...).flat()` with `.flatMap(...)`,
improving code readability and maintainability.

* **Bug Fixes**
* Improved comment creation logic to allow adding comments even when
selections exist.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-07-29 13:21:56 +08:00

101 lines
2.7 KiB
TypeScript

import { toast } from '@blocksuite/affine-components/toast';
import {
copySelectedModelsCommand,
draftSelectedModelsCommand,
} from '@blocksuite/affine-shared/commands';
import {
ActionPlacement,
blockCommentToolbarButton,
type ToolbarModuleConfig,
} from '@blocksuite/affine-shared/services';
import { CaptionIcon, CopyIcon, DeleteIcon } from '@blocksuite/icons/lit';
import { html } from 'lit';
import { SurfaceRefBlockComponent } from '../surface-ref-block';
export const surfaceRefToolbarModuleConfig: ToolbarModuleConfig = {
actions: [
{
id: 'a.surface-ref-title',
when: ctx =>
!!ctx.getCurrentBlockByType(SurfaceRefBlockComponent)?.referenceModel,
content: ctx => {
const surfaceRefBlock = ctx.getCurrentBlockByType(
SurfaceRefBlockComponent
);
if (!surfaceRefBlock) return null;
return html`<surface-ref-toolbar-title
.referenceModel=${surfaceRefBlock.referenceModel}
></surface-ref-toolbar-title>`;
},
},
{
id: 'c.copy-surface-ref',
label: 'Copy',
icon: CopyIcon(),
run: ctx => {
const surfaceRefBlock = ctx.getCurrentBlockByType(
SurfaceRefBlockComponent
);
if (!surfaceRefBlock) return;
ctx.chain
.pipe(draftSelectedModelsCommand, {
selectedModels: [surfaceRefBlock.model],
})
.pipe(copySelectedModelsCommand)
.run();
toast(surfaceRefBlock.std.host, 'Copied to clipboard');
},
},
{
id: 'd.surface-ref-caption',
icon: CaptionIcon(),
run: ctx => {
const surfaceRefBlock = ctx.getCurrentBlockByType(
SurfaceRefBlockComponent
);
if (!surfaceRefBlock) return;
surfaceRefBlock.captionElement.show();
},
},
{
id: 'e.comment',
...blockCommentToolbarButton,
},
{
id: 'a.clipboard',
placement: ActionPlacement.More,
when: ctx => {
const surfaceRefBlock = ctx.getCurrentBlock();
if (!(surfaceRefBlock instanceof SurfaceRefBlockComponent))
return false;
return !!surfaceRefBlock.referenceModel;
},
actions: [
// TODO(@L-Sun): add duplicate action after refactoring root-block/edgeless
],
},
{
id: 'g.surface-ref-deletion',
label: 'Delete',
icon: DeleteIcon(),
placement: ActionPlacement.More,
variant: 'destructive',
run: ctx => {
const surfaceRefBlock = ctx.getCurrentBlockByType(
SurfaceRefBlockComponent
);
if (!surfaceRefBlock) return;
ctx.store.deleteBlock(surfaceRefBlock.model);
},
},
],
placement: 'inner',
};