mirror of
https://github.com/langgenius/dify.git
synced 2025-07-11 11:13:35 +00:00
66 lines
1.5 KiB
TypeScript
66 lines
1.5 KiB
TypeScript
![]() |
'use client'
|
||
|
|
||
|
import {
|
||
|
createContext,
|
||
|
memo,
|
||
|
useRef,
|
||
|
} from 'react'
|
||
|
import { LexicalComposer } from '@lexical/react/LexicalComposer'
|
||
|
import { LinkNode } from '@lexical/link'
|
||
|
import {
|
||
|
ListItemNode,
|
||
|
ListNode,
|
||
|
} from '@lexical/list'
|
||
|
import { createNoteEditorStore } from './store'
|
||
|
import theme from './theme'
|
||
|
|
||
|
type NoteEditorStore = ReturnType<typeof createNoteEditorStore>
|
||
|
const NoteEditorContext = createContext<NoteEditorStore | null>(null)
|
||
|
|
||
|
type NoteEditorContextProviderProps = {
|
||
|
value: string
|
||
|
children: JSX.Element | string | (JSX.Element | string)[]
|
||
|
}
|
||
|
export const NoteEditorContextProvider = memo(({
|
||
|
value,
|
||
|
children,
|
||
|
}: NoteEditorContextProviderProps) => {
|
||
|
const storeRef = useRef<NoteEditorStore>()
|
||
|
|
||
|
if (!storeRef.current)
|
||
|
storeRef.current = createNoteEditorStore()
|
||
|
|
||
|
let initialValue = null
|
||
|
try {
|
||
|
initialValue = JSON.parse(value)
|
||
|
}
|
||
|
catch (e) {
|
||
|
|
||
|
}
|
||
|
|
||
|
const initialConfig = {
|
||
|
namespace: 'note-editor',
|
||
|
nodes: [
|
||
|
LinkNode,
|
||
|
ListNode,
|
||
|
ListItemNode,
|
||
|
],
|
||
|
editorState: !initialValue?.root.children.length ? null : JSON.stringify(initialValue),
|
||
|
onError: (error: Error) => {
|
||
|
throw error
|
||
|
},
|
||
|
theme,
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
<NoteEditorContext.Provider value={storeRef.current}>
|
||
|
<LexicalComposer initialConfig={{ ...initialConfig }}>
|
||
|
{children}
|
||
|
</LexicalComposer>
|
||
|
</NoteEditorContext.Provider>
|
||
|
)
|
||
|
})
|
||
|
NoteEditorContextProvider.displayName = 'NoteEditorContextProvider'
|
||
|
|
||
|
export default NoteEditorContext
|