Loading...
功能特点
- 用户管理: 存储和管理带有头像和名称的用户数据
- 讨论线程: 管理带有评论的讨论数据结构
- 当前用户跟踪: 跟踪当前活跃用户以进行协作
- 数据存储: 用于存储协作状态的纯 UI 插件
- 选择器 API: 通过插件选择器轻松访问用户数据
Kit 使用
安装
添加讨论功能最快的方法是使用 DiscussionKit
,它包含预配置的 discussionPlugin
及其 Plate UI 组件。
BlockDiscussion
: 在节点上方渲染讨论 UI
添加 Kit
import { createPlateEditor } from 'platejs/react';
import { DiscussionKit } from '@/components/editor/plugins/discussion-kit';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
...DiscussionKit,
],
});
手动使用
安装
pnpm add @platejs/comment @platejs/suggestion
创建插件
import { createPlatePlugin } from 'platejs/react';
import { BlockDiscussion } from '@/components/ui/block-discussion';
export interface TDiscussion {
id: string;
comments: TComment[];
createdAt: Date;
isResolved: boolean;
userId: string;
documentContent?: string;
}
const usersData = {
alice: {
id: 'alice',
avatarUrl: 'https://api.dicebear.com/9.x/glass/svg?seed=alice6',
name: 'Alice',
},
bob: {
id: 'bob',
avatarUrl: 'https://api.dicebear.com/9.x/glass/svg?seed=bob4',
name: 'Bob',
},
};
export const discussionPlugin = createPlatePlugin({
key: 'discussion',
options: {
currentUserId: 'alice',
discussions: [],
users: usersData,
},
})
.configure({
render: { aboveNodes: BlockDiscussion },
})
.extendSelectors(({ getOption }) => ({
currentUser: () => getOption('users')[getOption('currentUserId')],
user: (id: string) => getOption('users')[id],
}));
options.currentUserId
: 当前活跃用户的 IDoptions.discussions
: 讨论数据结构数组options.users
: 将用户 ID 映射到用户数据的对象render.aboveNodes
: 在节点上方渲染BlockDiscussion
用于讨论 UIselectors.currentUser
: 获取当前用户数据selectors.user
: 通过 ID 获取用户数据
添加插件
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
discussionPlugin,
],
});
插件
discussionPlugin
用于管理包括用户和讨论数据在内的协作状态的纯 UI 插件。
选择器
currentUser
获取当前用户数据。
user
通过 ID 获取用户数据。
类型
TDiscussion
包含评论和元数据的讨论数据结构。
UserData
用于协作的用户信息结构。