Skip to content

Commit 301f8a9

Browse files
committed
docs: supplement document
1 parent 2475250 commit 301f8a9

File tree

1 file changed

+34
-9
lines changed

1 file changed

+34
-9
lines changed

docs/developer-guide/plugin/extension-points/ui/default-editor-extension-create.md

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,6 @@ addOptions() {
375375

376376
拖拽菜单扩展主要用于拖拽的菜单功能扩展,例如转换为、复制、剪切、删除等操作。
377377

378-
![拖拽功能扩展](/img/developer-guide/plugin/extension-points/ui/default-editor-extension-drag-menu.png)
379-
380378
[https://github.com/halo-dev/halo/pull/7861](https://github.com/halo-dev/halo/pull/7861) 中,我们重构了对编辑器拖拽区域的扩展,并且支持了对拖拽菜单的扩展。如果需要对拖拽菜单进行扩展,只需要在具体的 Tiptap Extension 中的 `addOptions` 中定义 `getDraggableMenuItems` 函数即可,如:
381379

382380
```ts
@@ -392,7 +390,31 @@ addOptions() {
392390
}
393391
```
394392

395-
并且,拖拽菜单最多支持两级菜单嵌套, 如果想扩展已有的一级菜单,为其二级菜单增加内容,则只需将二级菜单的 `parentKey` 设置为一级菜单的 `key`。如:
393+
同时,为了支持不同扩展对同一菜单项的扩展,我们提供了 `extendsKey` 属性,用于指定扩展目标菜单项的唯一标识。只需将 `extendsKey` 设置为已有的菜单项的 `key`,即可扩展该菜单项。可扩展已有菜单项的 `visible``isActive``disabled``action` 方法以及 `children.items` 属性,如:
394+
395+
```ts
396+
{
397+
addOptions() {
398+
return {
399+
...this.parent?.(),
400+
getDraggableMenuItems({ editor }: { editor: Editor }) {
401+
return {
402+
extendsKey: CONVERT_TO_KEY,
403+
// 当任意扩展目标菜单项的 visible 方法返回 false 时,当前菜单项不会显示。返回 true 则会继续执行后续的扩展实现。
404+
visible: ({ editor }) => {
405+
if (isActive(editor.state, "table")) {
406+
return false;
407+
}
408+
return true;
409+
},
410+
};
411+
},
412+
};
413+
},
414+
};
415+
```
416+
417+
拖拽菜单最多支持两级菜单嵌套, 如果想扩展已有的一级菜单,为其二级菜单增加内容,则需要同时设置 `extendsKey``children.items` 属性。如:
396418

397419
```ts
398420
{
@@ -401,7 +423,7 @@ addOptions() {
401423
...this.parent?.(),
402424
getDraggableMenuItems({ editor }: { editor: Editor }) {
403425
return {
404-
parentKey: CONVERT_TO_KEY,
426+
extendsKey: CONVERT_TO_KEY,
405427
children: {
406428
items: [
407429
{
@@ -420,6 +442,8 @@ addOptions() {
420442
}
421443
```
422444

445+
默认情况下,将会追加 `items`,若想覆盖,则需要设置子菜单的 `key` 属性,将会覆盖原有的子菜单项。
446+
423447
下面为 `getDraggableMenuItems` 的返回类型:
424448

425449
```ts
@@ -433,12 +457,14 @@ getDraggableMenuItems?: ({
433457

434458
// 拖拽菜单项目属性
435459
export interface DragButtonItemProps {
460+
extendsKey?: string; // 扩展目标菜单项的唯一标识,如果提供了该属性,则视为扩展目标菜单项。
461+
key?: string; // 唯一标识,如果同级菜单项设置了同样的 key,则会被合并为一个菜单项。
436462
priority?: number; // 优先级,数字越小优先级越大,越靠前
437463
title?: string | (() => string); // 标题
438464
icon?: Component; // 图标
439-
key?: string; // 唯一标识,如果同级菜单项设置了同样的 key,则会被合并为一个菜单项。
440465
action?: ({ // 点击菜单后的操作,如果返回 Component,则会将其包含在子菜单中。
441466
// 可以通过调用 close 方法可以在操作完成后关闭拖拽菜单,或者当返回为 true 或 undefined 时,会自动关闭拖拽菜单,如果返回 false,则不会关闭拖拽菜单。
467+
// 多个扩展实现时,则按照顺序执行,并在返回非 undefined 值时停止执行。
442468
editor,
443469
node,
444470
pos,
@@ -451,7 +477,7 @@ export interface DragButtonItemProps {
451477
}) => Component | boolean | void | Promise<Component | boolean | void>;
452478
iconStyle?: string; // 图标自定义样式
453479
class?: string; // 自定义样式
454-
visible?: ({ // 是否显示当前菜单项,默认为 true
480+
visible?: ({ // 是否显示当前菜单项,默认为 true,多个扩展实现时,以 AND 逻辑判断,即所有扩展返回 true 时,当前菜单项才会显示。
455481
editor,
456482
node,
457483
pos,
@@ -460,7 +486,7 @@ export interface DragButtonItemProps {
460486
node: PMNode | null;
461487
pos: number;
462488
}) => boolean;
463-
isActive?: ({ // 当前菜单项是否处于活动状态,默认为 false
489+
isActive?: ({ // 当前菜单项是否处于活动状态,默认为 false,多个扩展实现时,以 OR 逻辑判断,即只要有一个扩展返回 true,则当前菜单项处于活动状态。
464490
editor,
465491
node,
466492
pos,
@@ -469,7 +495,7 @@ export interface DragButtonItemProps {
469495
node: PMNode | null;
470496
pos: number;
471497
}) => boolean;
472-
disabled?: ({ // 是否禁用当前菜单项,默认为 false
498+
disabled?: ({ // 是否禁用当前菜单项,默认为 false,多个扩展实现时,以 OR 逻辑判断,即只要有一个扩展返回 true,则当前菜单项会被禁用。
473499
editor,
474500
node,
475501
pos,
@@ -485,7 +511,6 @@ export interface DragButtonItemProps {
485511

486512
// 一级菜单项
487513
export interface DragButtonType extends DragButtonItemProps {
488-
parentKey?: string; // 父级菜单项的唯一标识,如果提供了该属性,则视为扩展目标菜单项的二级菜单。
489514
children?: { // 子菜单项,如果提供了该属性,则视为扩展目标菜单项的二级菜单。
490515
component?: Component; // 自定义组件,如果提供了该属性,则不会显示默认的子菜单项,而是会显示自定义组件,并且将所有 props 传递给自定义组件。
491516
items?: DragButtonItemProps[]; // 子菜单项列表,如果提供了该属性,则视为扩展目标菜单项的二级菜单。

0 commit comments

Comments
 (0)