mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-26 00:18:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			69 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: React.JSX.Element | string | (React.JSX.Element | string)[]
 | |
|   editable?: boolean
 | |
| }
 | |
| export const NoteEditorContextProvider = memo(({
 | |
|   value,
 | |
|   children,
 | |
|   editable = true,
 | |
| }: NoteEditorContextProviderProps) => {
 | |
|   const storeRef = useRef<NoteEditorStore | undefined>(undefined)
 | |
| 
 | |
|   if (!storeRef.current)
 | |
|     storeRef.current = createNoteEditorStore()
 | |
| 
 | |
|   let initialValue = null
 | |
|   try {
 | |
|     initialValue = JSON.parse(value)
 | |
|   }
 | |
|   catch {
 | |
| 
 | |
|   }
 | |
| 
 | |
|   const initialConfig = {
 | |
|     namespace: 'note-editor',
 | |
|     nodes: [
 | |
|       LinkNode,
 | |
|       ListNode,
 | |
|       ListItemNode,
 | |
|     ],
 | |
|     editorState: !initialValue?.root.children.length ? null : JSON.stringify(initialValue),
 | |
|     onError: (error: Error) => {
 | |
|       throw error
 | |
|     },
 | |
|     theme,
 | |
|     editable,
 | |
|   }
 | |
| 
 | |
|   return (
 | |
|     <NoteEditorContext.Provider value={storeRef.current}>
 | |
|       <LexicalComposer initialConfig={{ ...initialConfig }}>
 | |
|         {children}
 | |
|       </LexicalComposer>
 | |
|     </NoteEditorContext.Provider>
 | |
|   )
 | |
| })
 | |
| NoteEditorContextProvider.displayName = 'NoteEditorContextProvider'
 | |
| 
 | |
| export default NoteEditorContext
 | 
