返回 presentation-ai
useDiscussionPluginSync.ts
根目录 / src / components / plate / hooks / useDiscussionPluginSync.ts
1 "use client";
2
3 import { type PlateEditor } from "platejs/react";
4 import { useEffect } from "react";
5
6 import { discussionPlugin } from "@/components/plate/plugins/discussion-kit";
7 import { suggestionPlugin } from "@/components/plate/plugins/suggestion-kit";
8 import {
9 parseStoredDiscussions,
10 type DiscussionUsersMap,
11 type StoredDiscussion,
12 } from "@/lib/notes/discussions";
13
14 type UseDiscussionPluginSyncParams = {
15 currentUserId?: string;
16 discussions?: StoredDiscussion[];
17 editor: PlateEditor;
18 onDiscussionsChange?: (discussions: StoredDiscussion[]) => void;
19 users?: DiscussionUsersMap;
20 };
21
22 export function useDiscussionPluginSync({
23 currentUserId,
24 discussions,
25 editor,
26 onDiscussionsChange,
27 users,
28 }: UseDiscussionPluginSyncParams) {
29 useEffect(() => {
30 editor.setOption(discussionPlugin, "currentUserId", currentUserId ?? "");
31 editor.setOption(
32 discussionPlugin,
33 "discussions",
34 parseStoredDiscussions(discussions ?? []),
35 );
36 editor.setOption(
37 discussionPlugin,
38 "onDiscussionsChange",
39 onDiscussionsChange,
40 );
41 editor.setOption(discussionPlugin, "users", users ?? {});
42 editor.setOption(suggestionPlugin, "currentUserId", currentUserId ?? "");
43 }, [currentUserId, discussions, editor, onDiscussionsChange, users]);
44 }
45
45 lines TYPESCRIPT