mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-26 01:06:23 +02:00
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect, useRef } from "react";
|
|
import "@blocknote/core/fonts/inter.css";
|
|
import "@blocknote/mantine/style.css";
|
|
import { useCreateBlockNote } from "@blocknote/react";
|
|
import { BlockNoteView } from "@blocknote/mantine";
|
|
|
|
interface BlockNoteEditorProps {
|
|
initialContent?: any;
|
|
onChange?: (content: any) => void;
|
|
}
|
|
|
|
export default function BlockNoteEditor({
|
|
initialContent,
|
|
onChange,
|
|
}: BlockNoteEditorProps) {
|
|
// Track the initial content to prevent re-initialization
|
|
const initialContentRef = useRef<any>(null);
|
|
const isInitializedRef = useRef(false);
|
|
|
|
// Creates a new editor instance - only use initialContent on first render
|
|
const editor = useCreateBlockNote({
|
|
initialContent: initialContentRef.current === null ? (initialContent || undefined) : undefined,
|
|
});
|
|
|
|
// Store initial content on first render only
|
|
useEffect(() => {
|
|
if (initialContent && initialContentRef.current === null) {
|
|
initialContentRef.current = initialContent;
|
|
isInitializedRef.current = true;
|
|
}
|
|
}, [initialContent]);
|
|
|
|
// Call onChange when document changes (but don't update from props)
|
|
useEffect(() => {
|
|
if (!onChange || !editor || !isInitializedRef.current) return;
|
|
|
|
const handleChange = () => {
|
|
onChange(editor.document);
|
|
};
|
|
|
|
// Subscribe to document changes
|
|
const unsubscribe = editor.onChange(handleChange);
|
|
|
|
return () => {
|
|
unsubscribe();
|
|
};
|
|
}, [editor, onChange]);
|
|
|
|
// Renders the editor instance
|
|
return <BlockNoteView editor={editor} />;
|
|
}
|