From ff01bee2e086015d552eb3759bfb5a7e152547be Mon Sep 17 00:00:00 2001
From: Alf Eaton <eaton.alf@gmail.com>
Date: Fri, 1 Sep 2017 13:51:38 +0100
Subject: [PATCH] Allow onDocumentChange to be used for changes

---
 packages/xpub-edit/src/components/Editor.js   | 24 +++++++++++--------
 .../src/components/abstract/AbstractEditor.js |  2 +-
 .../src/components/note/NoteEditor.js         |  2 +-
 .../src/components/title/TitleEditor.js       |  2 +-
 4 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/packages/xpub-edit/src/components/Editor.js b/packages/xpub-edit/src/components/Editor.js
index b05ec99b5..740b76d27 100644
--- a/packages/xpub-edit/src/components/Editor.js
+++ b/packages/xpub-edit/src/components/Editor.js
@@ -47,18 +47,22 @@ class Editor extends React.Component {
   }
 
   // TODO: debouncing?
-  // TODO: only fire on onBlur or onSubmit?
-  // TODO: send an event?
-  // onDocumentChange = (document, state) => {
-  //   this.props.onChange(this.props.converter.serialize(state))
-  // }
-
-  // TODO: only fire onChange if actually changed
-  // TODO: is this appropriate?
+  onDocumentChange = (document, state) => {
+    const { converter, onDocumentChange } = this.props
+
+    if (typeof onDocumentChange === 'function') {
+      onDocumentChange(converter.serialize(state))
+    }
+  }
+
+  // TODO: only fire onChange if actually changed?
   onBlur = () => {
+    const { converter, onChange } = this.props
     const { state } = this.state
 
-    this.props.onChange(this.props.converter.serialize(state))
+    if (typeof onChange === 'function') {
+      onChange(converter.serialize(state))
+    }
   }
 
   onKeyDown = (event, { isMod, key }, state) => {
@@ -148,7 +152,7 @@ class Editor extends React.Component {
           onKeyDown={this.onKeyDown}
           onPaste={this.onReceive}
           onDrop={this.onReceive}
-          // onDocumentChange={this.onDocumentChange}
+          onDocumentChange={this.onDocumentChange}
           placeholder={placeholder}
           spellCheck
         />
diff --git a/packages/xpub-edit/src/components/abstract/AbstractEditor.js b/packages/xpub-edit/src/components/abstract/AbstractEditor.js
index 91da1b2a9..e45e42910 100644
--- a/packages/xpub-edit/src/components/abstract/AbstractEditor.js
+++ b/packages/xpub-edit/src/components/abstract/AbstractEditor.js
@@ -13,7 +13,7 @@ const AbstractEditor = ({ value, placeholder, title, onChange }) => (
     keys={keys}
     placeholder={placeholder}
     title={title}
-    onChange={onChange}
+    onDocumentChange={onChange}
   />
 )
 
diff --git a/packages/xpub-edit/src/components/note/NoteEditor.js b/packages/xpub-edit/src/components/note/NoteEditor.js
index b5d50d22d..e24026791 100644
--- a/packages/xpub-edit/src/components/note/NoteEditor.js
+++ b/packages/xpub-edit/src/components/note/NoteEditor.js
@@ -13,7 +13,7 @@ const NoteEditor = ({ value, placeholder, title, onChange }) => (
     keys={keys}
     placeholder={placeholder}
     title={title}
-    onChange={onChange}
+    onDocumentChange={onChange}
   />
 )
 
diff --git a/packages/xpub-edit/src/components/title/TitleEditor.js b/packages/xpub-edit/src/components/title/TitleEditor.js
index a3b966ac8..9c62c8ea3 100644
--- a/packages/xpub-edit/src/components/title/TitleEditor.js
+++ b/packages/xpub-edit/src/components/title/TitleEditor.js
@@ -15,7 +15,7 @@ const TitleEditor = ({ value, placeholder, title, onChange }) => (
     keys={keys}
     placeholder={placeholder}
     title={title}
-    onChange={onChange}
+    onDocumentChange={onChange}
   />
 )
 
-- 
GitLab