From 7edfe3853fc38c1bd3df477e90aec826a9e5a1d0 Mon Sep 17 00:00:00 2001 From: Evan Morikawa Date: Mon, 15 Feb 2016 16:34:23 -0500 Subject: [PATCH] fix(messages): fix jumping message list on draft focus We were erroneously jumping to an individual message when you focused on it. --- .../composer/lib/composer-editor.jsx | 2 +- .../contenteditable/contenteditable.cjsx | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/internal_packages/composer/lib/composer-editor.jsx b/internal_packages/composer/lib/composer-editor.jsx index 56177adf8..42ffaacba 100644 --- a/internal_packages/composer/lib/composer-editor.jsx +++ b/internal_packages/composer/lib/composer-editor.jsx @@ -272,7 +272,7 @@ class ComposerEditor extends Component { value={this.props.body} onChange={this.props.onBodyChanged} onFilePaste={this.props.onFilePaste} - onSelectionChanged={this._ensureSelectionVisible} + onSelectionRestored={this._ensureSelectionVisible} initialSelectionSnapshot={this.props.initialSelectionSnapshot} extensions={[this._coreExtension].concat(this.state.extensions)} /> ); diff --git a/src/components/contenteditable/contenteditable.cjsx b/src/components/contenteditable/contenteditable.cjsx index 68ec4c1cd..93b525fc6 100644 --- a/src/components/contenteditable/contenteditable.cjsx +++ b/src/components/contenteditable/contenteditable.cjsx @@ -63,7 +63,7 @@ class Contenteditable extends React.Component extensions: [] spellcheck: true floatingToolbar: true - onSelectionChanged: => + onSelectionRestored: => coreServices: [MouseService, ClipboardService] @@ -153,7 +153,9 @@ class Contenteditable extends React.Component previousExportedSelection: @innerState.exportedSelection componentDidUpdate: => - @_restoreSelection() if @_shouldRestoreSelectionOnUpdate() + if @_shouldRestoreSelectionOnUpdate() + @_restoreSelection() + @_notifyOfSelectionRestoration() @_refreshServices() @_mutationObserver.disconnect() @_mutationObserver.observe(@_editableNode(), @_mutationConfig()) @@ -533,9 +535,15 @@ class Contenteditable extends React.Component selection = new ExtendedSelection(@_editableNode()) selection.importSelection(@innerState.exportedSelection) if selection.isInScope() - @_onSelectionChanged(selection) + # The bounding client rect has changed + @setInnerState editableNode: @_editableNode() @_setupNonMutationListeners() + _notifyOfSelectionRestoration: => + selection = new ExtendedSelection(@_editableNode()) + if selection.isInScope() + @props.onSelectionRestored(selection, @_editableNode()) + # When the component updates, the selection may have changed from our # last known saved position. This can happen for a couple of reasons: # @@ -547,9 +555,4 @@ class Contenteditable extends React.Component (document.activeElement is @_editableNode() or not @_editableNode().parentNode.contains(document.activeElement)) - _onSelectionChanged: (selection) -> - @props.onSelectionChanged(selection, @_editableNode()) - # The bounding client rect has changed - @setInnerState editableNode: @_editableNode() - module.exports = Contenteditable