mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +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 |