Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

5 місяці тому
5 місяці тому
6 місяці тому
5 місяці тому
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use client'
  2. import {
  3. createContext,
  4. memo,
  5. useRef,
  6. } from 'react'
  7. import { LexicalComposer } from '@lexical/react/LexicalComposer'
  8. import { LinkNode } from '@lexical/link'
  9. import {
  10. ListItemNode,
  11. ListNode,
  12. } from '@lexical/list'
  13. import { createNoteEditorStore } from './store'
  14. import theme from './theme'
  15. type NoteEditorStore = ReturnType<typeof createNoteEditorStore>
  16. const NoteEditorContext = createContext<NoteEditorStore | null>(null)
  17. type NoteEditorContextProviderProps = {
  18. value: string
  19. children: React.JSX.Element | string | (React.JSX.Element | string)[]
  20. editable?: boolean
  21. }
  22. export const NoteEditorContextProvider = memo(({
  23. value,
  24. children,
  25. editable = true,
  26. }: NoteEditorContextProviderProps) => {
  27. const storeRef = useRef<NoteEditorStore | undefined>(undefined)
  28. if (!storeRef.current)
  29. storeRef.current = createNoteEditorStore()
  30. let initialValue = null
  31. try {
  32. initialValue = JSON.parse(value)
  33. }
  34. catch {
  35. }
  36. const initialConfig = {
  37. namespace: 'note-editor',
  38. nodes: [
  39. LinkNode,
  40. ListNode,
  41. ListItemNode,
  42. ],
  43. editorState: !initialValue?.root.children.length ? null : JSON.stringify(initialValue),
  44. onError: (error: Error) => {
  45. throw error
  46. },
  47. theme,
  48. editable,
  49. }
  50. return (
  51. <NoteEditorContext.Provider value={storeRef.current}>
  52. <LexicalComposer initialConfig={{ ...initialConfig }}>
  53. {children}
  54. </LexicalComposer>
  55. </NoteEditorContext.Provider>
  56. )
  57. })
  58. NoteEditorContextProvider.displayName = 'NoteEditorContextProvider'
  59. export default NoteEditorContext