1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-02-23 16:55:23 +01:00
slate/site/examples/huge-document.js
Ian Storm Taylor 6552da940a
Add format_text command, and editor.marks state (#3308)
* add format_text command, refactor command extensions

* update onChange to not receive selection

* update docs

* fix tests
2019-12-12 15:37:55 -05:00

44 lines
1.1 KiB
JavaScript

import React, { useState, useMemo, useCallback } from 'react'
import faker from 'faker'
import { createEditor } from 'slate'
import { Slate, Editable, withReact } from 'slate-react'
const HEADINGS = 100
const PARAGRAPHS = 7
const initialValue = []
for (let h = 0; h < HEADINGS; h++) {
initialValue.push({
type: 'heading',
children: [{ text: faker.lorem.sentence() }],
})
for (let p = 0; p < PARAGRAPHS; p++) {
initialValue.push({
children: [{ text: faker.lorem.paragraph() }],
})
}
}
const HugeDocumentExample = () => {
const [value, setValue] = useState(initialValue)
const renderElement = useCallback(props => <Element {...props} />, [])
const editor = useMemo(() => withReact(createEditor()), [])
return (
<Slate editor={editor} value={value} onChange={value => setValue(value)}>
<Editable renderElement={renderElement} spellCheck autoFocus />
</Slate>
)
}
const Element = ({ attributes, children, element }) => {
switch (element.type) {
case 'heading':
return <h1 {...attributes}>{children}</h1>
default:
return <p {...attributes}>{children}</p>
}
}
export default HugeDocumentExample