From a90bd6cd4f077b78912d180936bc5871464130b1 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 13 Apr 2018 12:28:58 +0100 Subject: [PATCH] Allow collapsing ReplyThread from MessageContextMenu Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/elements/ReplyThread.js | 14 ++++++++++++-- src/components/views/rooms/EventTile.js | 12 ++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/components/views/elements/ReplyThread.js b/src/components/views/elements/ReplyThread.js index de6ff46610..6796e2bcc7 100644 --- a/src/components/views/elements/ReplyThread.js +++ b/src/components/views/elements/ReplyThread.js @@ -52,6 +52,8 @@ export default class ReplyThread extends React.Component { }; this.onQuoteClick = this.onQuoteClick.bind(this); + this.canCollapse = this.canCollapse.bind(this); + this.collapse = this.collapse.bind(this); } componentWillMount() { @@ -64,6 +66,14 @@ export default class ReplyThread extends React.Component { this.unmounted = true; } + canCollapse() { + return this.state.events.length > 1; + } + + collapse() { + this.initialize(); + } + async initialize() { const {parentEv} = this.props; const inReplyTo = ReplyThread.getInReplyTo(parentEv); @@ -227,11 +237,11 @@ export default class ReplyThread extends React.Component { }; } - static getQuote(parentEv, onWidgetLoad) { + static getThread(parentEv, onWidgetLoad, ref) { if (!SettingsStore.isFeatureEnabled("feature_rich_quoting") || !ReplyThread.getInReplyTo(parentEv)) { return
; } - return ; + return ; } render() { diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index c754f7ceeb..50c0e29ed4 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -18,7 +18,7 @@ limitations under the License. 'use strict'; -import Reply from "../elements/ReplyThread"; +import ReplyThread from "../elements/ReplyThread"; const React = require('react'); import PropTypes from 'prop-types'; @@ -302,12 +302,16 @@ module.exports = withMatrixClient(React.createClass({ const x = buttonRect.right + window.pageXOffset; const y = (buttonRect.top + (buttonRect.height / 2) + window.pageYOffset) - 19; const self = this; + + const {tile, replyThread} = this.refs; + ContextualMenu.createMenu(MessageContextMenu, { chevronOffset: 10, mxEvent: this.props.mxEvent, left: x, top: y, - eventTileOps: this.refs.tile && this.refs.tile.getEventTileOps ? this.refs.tile.getEventTileOps() : undefined, + eventTileOps: tile && tile.getEventTileOps ? tile.getEventTileOps() : undefined, + collapseReplyThread: replyThread && replyThread.canCollapse() ? replyThread.collapse : undefined, onFinished: function() { self.setState({menu: false}); }, @@ -662,7 +666,7 @@ module.exports = withMatrixClient(React.createClass({ { this._renderE2EPadlock() } { this.props.tileShape === 'reply_preview' - && Reply.getQuote(this.props.mxEvent, this.props.onWidgetLoad) + && ReplyThread.getThread(this.props.mxEvent, this.props.onWidgetLoad, 'replyThread') } { this._renderE2EPadlock() } - { Reply.getQuote(this.props.mxEvent, this.props.onWidgetLoad) } + { ReplyThread.getThread(this.props.mxEvent, this.props.onWidgetLoad, 'replyThread') }