1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-03-06 13:59:47 +01:00

117 lines
2.7 KiB
Markdown
Raw Normal View History

# Utils
```js
2017-10-16 18:58:31 -07:00
import {
findDOMNode,
findDOMRange,
findNode,
findRange,
getEventRange,
getEventTransfer,
setEventTransfer,
2017-10-16 18:58:31 -07:00
} from 'slate-react'
```
React-specific utility functions for Slate that may be useful in certain use cases.
## Functions
### `findDOMNode`
`findDOMNode(node: Node) => DOMElement`
2017-10-16 18:58:31 -07:00
Find the DOM node from a Slate [`Node`](../slate/node.md). Modelled after React's built-in `findDOMNode` helper.
2017-10-17 18:49:02 -07:00
```js
function componentDidUpdate() {
const { node } = this.props
const element = findDOMNode(node)
// Do something with the DOM `element`...
}
```
2017-10-16 18:58:31 -07:00
### `findDOMRange`
`findDOMRange(range: Range) => DOMRange`
Find the DOM range from a Slate [`Range`](../slate/range.md).
2017-10-17 18:49:02 -07:00
```js
function onChange(change) {
const { state } = change
const range = findDOMRange(state.selection)
// Do something with the DOM `range`...
}
```
2017-10-16 18:58:31 -07:00
### `findNode`
`findNode(element: DOMElement, state: State) => Node`
Find the Slate node from a DOM `element` and Slate `state`.
2017-10-17 18:49:02 -07:00
```js
function onSomeNativeEvent(event) {
const node = fidnNode(event.target)
// Do something with `node`...
}
```
2017-10-16 18:58:31 -07:00
### `findRange`
`findRange(selection: DOMSelection, state: State) => Range`
`findRange(range: DOMRange, state: State) => Range`
Find the Slate range from a DOM `range` or `selection` and a Slate `state`.
2017-10-17 18:49:02 -07:00
```js
function onSomeNativeEvent() {
// You can find a range from a native DOM selection...
const nativeSelection = window.getSelection()
const range = findRange(nativeSelection, state)
// ...or from a native DOM range...
const nativeRange = nativeSelection.getRangeAt(0)
const range = findRange(nativeRange, state)
}
```
2017-10-16 18:58:31 -07:00
### `getEventRange`
2017-10-17 18:49:02 -07:00
`getEventRange(event: DOMEvent|ReactEvent, state: State) => Range`
2017-10-16 18:58:31 -07:00
Get the affected Slate range from a DOM `event` and Slate `state`.
2017-10-16 18:58:31 -07:00
2017-10-17 18:49:02 -07:00
```js
function onDrop(event, change, editor) {
const targetRange = getEventRange(event)
// Do something at the drop `targetRange`...
}
```
2017-10-16 18:58:31 -07:00
### `getEventTransfer`
2017-10-17 18:49:02 -07:00
`getEventTransfer(event: DOMEvent|ReactEvent) => Object`
2017-10-16 18:58:31 -07:00
Get the Slate-related data from a DOM `event` and Slate `state`.
```js
function onDrop(event, change, editor) {
const transfer = getEventTransfer(event)
const { type, node } = transfer
if (type == 'node') {
// Do something with `node`...
}
}
```
### `setEventTransfer`
2017-10-17 18:49:02 -07:00
`setEventTransfer(event: DOMEvent|ReactEvent, type: String, data: Any)`
Sets the Slate-related `data` with `type` on an `event`. The `type` must be one of the types Slate recognizes: `'fragment'`, `'html'`, `'node'`, `'rich'`, or `'text'`.
```js
function onDragStart(event, change, editor) {
const { state } = change
const { startNode } = state
setEventTransfer(event, 'node', startNode)
}
```