2.10.3 • Published 12 months ago

@aomao/plugin-mention v2.10.3

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

@aomao/plugin-mention

提及插件

安装

$ yarn add @aomao/plugin-mention

添加到引擎

import Engine, { EngineInterface } from '@aomao/engine';
import Mention, { MentionComponent } from '@aomao/plugin-mention';

new Engine(...,{ plugins:[Mention], cards: [MentionComponent] })

可选项

//使用配置
new Engine(...,{
    config:{
        "mention":{
            //其它可选项
            ...
        }
    }
 })
/**
 * 查询地址,或者监听 mention:search 事件执行查询
 */
action?: string;
/**
 * 数据返回类型,默认 json
 */
type?: '*' | 'json' | 'xml' | 'html' | 'text' | 'js';
/**
 * 额外携带数据上传
 */
data?: Record<string, RequestDataValue> | FormData | (() => Promise<Record<string, RequestDataValue> | FormData>)
/**
 * 请求类型,默认 multipart/form-data;
 */
contentType?: string;
/**
 * 解析上传后的Respone,返回 result:是否成功,data:成功:文件地址,失败:错误信息
 */
parse?: (
    response: any,
) => {
    result: boolean;
    data: Array<{ key: string, name: string, avatar?: string}>;
};

解析服务端响应数据

result: true 上传成功,data 数据集合。false 上传失败,data 为错误消息

/**
 * 解析上传后的Respone,返回 result:是否成功,data:成功:文件地址,失败:错误信息
 */
parse?: (
    response: any,
) => {
    result: boolean;
    data: Array<{ key: string, name: string, avatar?: string}>;
};

插件方法

获取文档中所有的提及

//返回 Array<{ key: string, name: string}>
engine.command.executeMethod('mention', 'getList');

插件事件

mention:default: 默认下拉查询列表展示数据

this.engine.on('mention:default', () => {
	return [];
});

mention:search: 查询时的方法,或者配置 action,二选其一

this.engine.on('mention:search', (keyword) => {
	return new Promise((resolve) => {
		query({ keyword })
			.then((result) => {
				resolve(result);
			})
			.catch(() => resolve([]));
	});
});

mention:select: 选中列表中的一项后回调,这里可以返回一个自定义值与 key、name 一起组合成新的值存在 cardValue 里面。并且执行 getList 命令后会一起返回来

this.engine.on('mention:select', (data) => {
	data['test'] = 'test';
	return data;
});

mention:item-click: 在“提及”上单击时触发

this.engine.on(
	'mention:item-click',
	(root: NodeInterface, { key, name }: { key: string; name: string }) => {
		console.log('mention click:', key, '-', name);
	},
);

mention:enter: 鼠标移入“提及”上时触发

this.engine.on(
	'mention:enter',
	(layout: NodeInterface, { name }: { key: string; name: string }) => {
		ReactDOM.render(
			<div style={{ padding: 5 }}>
				<p>This is name: {name}</p>
				<p>配置 mention 插件的 mention:enter 事件</p>
				<p>此处使用 ReactDOM.render 自定义渲染</p>
				<p>Use ReactDOM.render to customize rendering here</p>
			</div>,
			layout.get<HTMLElement>()!,
		);
	},
);

mention:render: 自定义渲染列表

this.engine.on(
	'mention:render',
	(
		root: NodeInterface,
		data: Array<MentionItem>,
		bindItem: (
			node: NodeInterface,
			data: { [key: string]: string },
		) => NodeInterface,
	) => {
		return new Promise<void>((resolve) => {
			const renderCallback = (items: { [key: string]: Element }) => {
				// 遍历每个项的DOM节点
				Object.keys(items).forEach((key) => {
					const element = items[key];
					const item = data.find((d) => d.key === key);
					if (!item) return;
					// 绑定每个列表项所属的属性、事件,以满足编辑器中上下左右选择的功能需要
					bindItem($(element), item);
				});
				resolve();
			};
			ReactDOM.render(
				<MentionList data={data} callback={renderCallback} />,
				root.get<HTMLElement>()!,
			);
		});
	},
);

mention:render-item: 自定义渲染列表项

this.engine.on('mention:render-item', (data, root) => {
	const item = $(`<div>${data}</div>`);
	return item;
});

mention:loading: 自定渲染加载状态

this.engine.on('mention:loading', (root) => {
	ReactDOM.render(
		<div className="data-mention-loading">Loading...</div>,
		root.get<HTMLElement>()!,
	);
});

mention:empty: 自定渲染空状态

this.engine.on('mention:empty', (root) => {
	root.html('<div>没有查询到数据</div>');
	// or
	ReactDOM.render(
		<div className="data-mention-empty">Empty</div>,
		root.get<HTMLElement>()!,
	);
});
2.10.3

12 months ago

2.10.1

1 year ago

2.10.2

1 year ago

2.10.0

1 year ago

2.9.31

2 years ago

2.9.18

2 years ago

2.9.19

2 years ago

2.9.12

2 years ago

2.9.13

2 years ago

2.9.10

2 years ago

2.9.11

2 years ago

2.9.16

2 years ago

2.9.17

2 years ago

2.9.14

2 years ago

2.9.15

2 years ago

2.9.20

2 years ago

2.9.29

2 years ago

2.9.23

2 years ago

2.9.24

2 years ago

2.9.21

2 years ago

2.9.22

2 years ago

2.9.27

2 years ago

2.9.28

2 years ago

2.9.25

2 years ago

2.9.26

2 years ago

2.9.30

2 years ago

2.9.9

2 years ago

2.9.2

2 years ago

2.9.1

2 years ago

2.9.4

2 years ago

2.9.3

2 years ago

2.9.6

2 years ago

2.9.5

2 years ago

2.9.8

2 years ago

2.9.7

2 years ago

2.9.0

2 years ago

2.8.27

2 years ago

2.8.26

2 years ago

2.8.25

2 years ago

2.8.24

2 years ago

2.8.3

2 years ago

2.8.5

2 years ago

2.8.4

2 years ago

2.8.7

2 years ago

2.8.6

2 years ago

2.8.9

2 years ago

2.8.8

2 years ago

2.8.19

2 years ago

2.8.18

2 years ago

2.8.17

2 years ago

2.8.12

2 years ago

2.8.11

2 years ago

2.8.10

2 years ago

2.8.16

2 years ago

2.8.15

2 years ago

2.8.14

2 years ago

2.8.13

2 years ago

2.8.23

2 years ago

2.8.22

2 years ago

2.8.21

2 years ago

2.8.20

2 years ago

2.8.1

2 years ago

2.8.0

2 years ago

2.8.2

2 years ago

2.7.37

2 years ago

2.7.36

2 years ago

2.6.19

2 years ago

2.6.16

2 years ago

2.6.17

2 years ago

2.6.18

2 years ago

2.6.22

2 years ago

2.6.23

2 years ago

2.6.20

2 years ago

2.6.21

2 years ago

2.7.0

2 years ago

2.7.2

2 years ago

2.7.1

2 years ago

2.7.19

2 years ago

2.7.18

2 years ago

2.7.17

2 years ago

2.7.16

2 years ago

2.7.11

2 years ago

2.7.10

2 years ago

2.7.15

2 years ago

2.7.14

2 years ago

2.7.13

2 years ago

2.7.12

2 years ago

2.7.29

2 years ago

2.7.28

2 years ago

2.7.27

2 years ago

2.7.22

2 years ago

2.7.21

2 years ago

2.7.20

2 years ago

2.7.26

2 years ago

2.7.25

2 years ago

2.7.24

2 years ago

2.7.23

2 years ago

2.7.4

2 years ago

2.7.3

2 years ago

2.7.6

2 years ago

2.7.5

2 years ago

2.7.8

2 years ago

2.7.7

2 years ago

2.7.9

2 years ago

2.7.33

2 years ago

2.7.32

2 years ago

2.7.31

2 years ago

2.7.30

2 years ago

2.7.35

2 years ago

2.7.34

2 years ago

2.6.15

2 years ago

2.6.11

2 years ago

2.6.12

2 years ago

2.6.13

2 years ago

2.6.14

2 years ago

2.6.10

3 years ago

2.6.5

3 years ago

2.6.7

3 years ago

2.6.6

3 years ago

2.6.9

3 years ago

2.6.8

3 years ago

2.6.1

3 years ago

2.6.0

3 years ago

2.6.3

3 years ago

2.6.2

3 years ago

2.5.3

3 years ago

2.6.4

3 years ago

2.5.0

3 years ago

2.5.2

3 years ago

2.5.1

3 years ago

1.2.23

3 years ago

1.2.21

3 years ago

1.2.22

3 years ago

1.2.16

3 years ago

1.2.17

3 years ago

1.2.14

3 years ago

1.2.15

3 years ago

1.2.18

3 years ago

1.2.19

3 years ago

1.2.20

3 years ago

1.2.13

3 years ago

1.2.12

3 years ago

1.2.11

3 years ago

1.2.10

3 years ago

1.2.9

3 years ago

1.2.8

3 years ago

1.2.7

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.34

3 years ago

1.1.35

3 years ago

1.1.33

3 years ago

1.1.32

3 years ago

1.1.31

3 years ago

1.1.29

3 years ago

1.1.28

3 years ago

1.1.30

3 years ago

1.1.26

3 years ago

1.1.25

3 years ago

1.1.24

3 years ago

1.1.23

3 years ago

1.1.22

3 years ago

1.1.21

3 years ago

1.1.19

3 years ago

1.1.18

3 years ago

1.1.20

3 years ago

1.1.17

3 years ago

1.1.16

3 years ago

1.1.15

3 years ago

1.1.14

3 years ago

1.1.12

3 years ago

1.1.13

3 years ago

1.1.11

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.10

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago