diff --git a/.changeset/brave-emus-refuse.md b/.changeset/brave-emus-refuse.md new file mode 100644 index 000000000..f8623a4e3 --- /dev/null +++ b/.changeset/brave-emus-refuse.md @@ -0,0 +1,5 @@ +--- +'slate-react': patch +--- + +Add origin event type to setFragmentData to be able to distinguish copy, cut and drag diff --git a/docs/libraries/slate-react.md b/docs/libraries/slate-react.md index 8d8d1d284..55d0784ec 100644 --- a/docs/libraries/slate-react.md +++ b/docs/libraries/slate-react.md @@ -148,7 +148,7 @@ Insert fragment data from a `DataTransfer` into the editor. Returns true if some 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, originEvent?: 'drag' | 'copy' | 'cut')` Sets data from the currently selected fragment on a `DataTransfer`. diff --git a/packages/slate-react/src/components/android/android-editable.tsx b/packages/slate-react/src/components/android/android-editable.tsx index b46f7c8d7..0e66f0a8d 100644 --- a/packages/slate-react/src/components/android/android-editable.tsx +++ b/packages/slate-react/src/components/android/android-editable.tsx @@ -340,7 +340,7 @@ export const AndroidEditable = (props: EditableProps): JSX.Element => { !isEventHandled(event, attributes.onCopy) ) { event.preventDefault() - ReactEditor.setFragmentData(editor, event.clipboardData) + ReactEditor.setFragmentData(editor, event.clipboardData, 'copy') } }, [attributes.onCopy] @@ -353,7 +353,7 @@ export const AndroidEditable = (props: EditableProps): JSX.Element => { !isEventHandled(event, attributes.onCut) ) { event.preventDefault() - ReactEditor.setFragmentData(editor, event.clipboardData) + ReactEditor.setFragmentData(editor, event.clipboardData, 'cut') const { selection } = editor if (selection) { diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx index 2cdf472c9..c1092ca4b 100644 --- a/packages/slate-react/src/components/editable.tsx +++ b/packages/slate-react/src/components/editable.tsx @@ -867,7 +867,7 @@ export const Editable = (props: EditableProps) => { !isEventHandled(event, attributes.onCopy) ) { event.preventDefault() - ReactEditor.setFragmentData(editor, event.clipboardData) + ReactEditor.setFragmentData(editor, event.clipboardData, 'copy') } }, [attributes.onCopy] @@ -880,7 +880,7 @@ export const Editable = (props: EditableProps) => { !isEventHandled(event, attributes.onCut) ) { event.preventDefault() - ReactEditor.setFragmentData(editor, event.clipboardData) + ReactEditor.setFragmentData(editor, event.clipboardData, 'cut') const { selection } = editor if (selection) { @@ -937,7 +937,7 @@ export const Editable = (props: EditableProps) => { state.isDraggingInternally = true - ReactEditor.setFragmentData(editor, event.dataTransfer) + ReactEditor.setFragmentData(editor, event.dataTransfer, 'drag') } }, [readOnly, attributes.onDragStart] diff --git a/packages/slate-react/src/plugin/react-editor.ts b/packages/slate-react/src/plugin/react-editor.ts index 470d2210d..027e981d5 100644 --- a/packages/slate-react/src/plugin/react-editor.ts +++ b/packages/slate-react/src/plugin/react-editor.ts @@ -34,7 +34,10 @@ export interface ReactEditor extends BaseEditor { insertData: (data: DataTransfer) => void insertFragmentData: (data: DataTransfer) => boolean insertTextData: (data: DataTransfer) => boolean - setFragmentData: (data: DataTransfer) => void + setFragmentData: ( + data: DataTransfer, + originEvent?: 'drag' | 'copy' | 'cut' + ) => void hasRange: (editor: ReactEditor, range: Range) => boolean } @@ -253,8 +256,12 @@ export const ReactEditor = { * Sets data from the currently selected fragment on a `DataTransfer`. */ - setFragmentData(editor: ReactEditor, data: DataTransfer): void { - editor.setFragmentData(data) + setFragmentData( + editor: ReactEditor, + data: DataTransfer, + originEvent?: 'drag' | 'copy' | 'cut' + ): void { + editor.setFragmentData(data, originEvent) }, /**