-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathHtmlEditor.tsx
37 lines (33 loc) · 1018 Bytes
/
HtmlEditor.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import {
createHTMLTransformer,
ProsemirrorTransformer,
} from '@aeaton/prosemirror-transformers'
import { Node as ProsemirrorNode, Schema } from 'prosemirror-model'
import { Plugin } from 'prosemirror-state'
import React, { useState } from 'react'
import { ChangeHandler } from './ChangeHandler'
import { EditorProvider } from './EditorProvider'
export const HtmlEditor: React.FC<{
schema: Schema
plugins: Plugin[]
value: string
handleChange: (value: string) => void
debounce?: number
}> = ({ schema, plugins, value, handleChange, debounce, children }) => {
const [htmlTransformer] = useState<ProsemirrorTransformer>(() =>
createHTMLTransformer(schema)
)
const [initialDoc] = useState<ProsemirrorNode>(() =>
htmlTransformer.parse(value)
)
return (
<EditorProvider plugins={plugins} doc={initialDoc}>
<ChangeHandler
transformer={htmlTransformer}
handleChange={handleChange}
debounce={debounce}
/>
{children}
</EditorProvider>
)
}