mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-23 23:42:56 +02:00
Fix double insertion due to insertTextData being called when it should not (#4625)
* fix double paste due to insertTextData being called when it should not * Document return type of insertTextData and insert FragmentData * Add changeset
This commit is contained in:
5
.changeset/cool-forks-mix.md
Normal file
5
.changeset/cool-forks-mix.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'slate-react': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
insertTextData and insertFragmentData return a boolean (true if some content has been effectively inserted)
|
@@ -142,11 +142,11 @@ Insert data from a `DataTransfer` into the editor. This is a proxy method to cal
|
|||||||
|
|
||||||
### `insertFragmentData(editor: ReactEditor, data: DataTransfer)`
|
### `insertFragmentData(editor: ReactEditor, data: DataTransfer)`
|
||||||
|
|
||||||
Insert fragment data from a `DataTransfer` into the editor.
|
Insert fragment data from a `DataTransfer` into the editor. Returns true if some content has been effectively inserted.
|
||||||
|
|
||||||
### `insertTextData(editor: ReactEditor, data: DataTransfer)`
|
### `insertTextData(editor: ReactEditor, data: DataTransfer)`
|
||||||
|
|
||||||
Insert text data from a `DataTransfer` into the editor.
|
Insert text data from a `DataTransfer` into the editor. Returns true if some content has been effectively inserted.
|
||||||
|
|
||||||
### `setFragmentData(editor: ReactEditor, data: DataTransfer)`
|
### `setFragmentData(editor: ReactEditor, data: DataTransfer)`
|
||||||
|
|
||||||
|
@@ -32,8 +32,8 @@ import { IS_CHROME, IS_FIREFOX } from '../utils/environment'
|
|||||||
|
|
||||||
export interface ReactEditor extends BaseEditor {
|
export interface ReactEditor extends BaseEditor {
|
||||||
insertData: (data: DataTransfer) => void
|
insertData: (data: DataTransfer) => void
|
||||||
insertFragmentData: (data: DataTransfer) => void
|
insertFragmentData: (data: DataTransfer) => boolean
|
||||||
insertTextData: (data: DataTransfer) => void
|
insertTextData: (data: DataTransfer) => boolean
|
||||||
setFragmentData: (data: DataTransfer) => void
|
setFragmentData: (data: DataTransfer) => void
|
||||||
hasRange: (editor: ReactEditor, range: Range) => boolean
|
hasRange: (editor: ReactEditor, range: Range) => boolean
|
||||||
}
|
}
|
||||||
@@ -237,16 +237,16 @@ export const ReactEditor = {
|
|||||||
* Insert fragment data from a `DataTransfer` into the editor.
|
* Insert fragment data from a `DataTransfer` into the editor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
insertFragmentData(editor: ReactEditor, data: DataTransfer): void {
|
insertFragmentData(editor: ReactEditor, data: DataTransfer): boolean {
|
||||||
editor.insertFragmentData(data)
|
return editor.insertFragmentData(data)
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert text data from a `DataTransfer` into the editor.
|
* Insert text data from a `DataTransfer` into the editor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
insertTextData(editor: ReactEditor, data: DataTransfer): void {
|
insertTextData(editor: ReactEditor, data: DataTransfer): boolean {
|
||||||
editor.insertTextData(data)
|
return editor.insertTextData(data)
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -195,11 +195,12 @@ export const withReact = <T extends Editor>(editor: T) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
e.insertData = (data: DataTransfer) => {
|
e.insertData = (data: DataTransfer) => {
|
||||||
e.insertFragmentData(data)
|
if (!e.insertFragmentData(data)) {
|
||||||
e.insertTextData(data)
|
e.insertTextData(data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e.insertFragmentData = (data: DataTransfer) => {
|
e.insertFragmentData = (data: DataTransfer): boolean => {
|
||||||
/**
|
/**
|
||||||
* Checking copied fragment from application/x-slate-fragment or data-slate-fragment
|
* Checking copied fragment from application/x-slate-fragment or data-slate-fragment
|
||||||
*/
|
*/
|
||||||
@@ -211,11 +212,12 @@ export const withReact = <T extends Editor>(editor: T) => {
|
|||||||
const decoded = decodeURIComponent(window.atob(fragment))
|
const decoded = decodeURIComponent(window.atob(fragment))
|
||||||
const parsed = JSON.parse(decoded) as Node[]
|
const parsed = JSON.parse(decoded) as Node[]
|
||||||
e.insertFragment(parsed)
|
e.insertFragment(parsed)
|
||||||
return
|
return true
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
e.insertTextData = (data: DataTransfer) => {
|
e.insertTextData = (data: DataTransfer): boolean => {
|
||||||
const text = data.getData('text/plain')
|
const text = data.getData('text/plain')
|
||||||
|
|
||||||
if (text) {
|
if (text) {
|
||||||
@@ -230,7 +232,9 @@ export const withReact = <T extends Editor>(editor: T) => {
|
|||||||
e.insertText(line)
|
e.insertText(line)
|
||||||
split = true
|
split = true
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
e.onChange = () => {
|
e.onChange = () => {
|
||||||
|
Reference in New Issue
Block a user