From 7d7a6f3d9c904874c352470d658b981196b3c8c9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 14 Jun 2018 13:35:35 +0100 Subject: [PATCH] ShareDialog share Message, link to timestamp and permalink in ctx menu Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/context_menus/MessageContextMenu.js | 11 ++++++++++- src/components/views/dialogs/ShareDialog.js | 7 +++++-- src/components/views/rooms/EventTile.js | 15 +++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js index 99ec493ced..bdd267c4ee 100644 --- a/src/components/views/context_menus/MessageContextMenu.js +++ b/src/components/views/context_menus/MessageContextMenu.js @@ -184,6 +184,15 @@ module.exports = React.createClass({ this.closeMenu(); }, + onPermalinkClick: function(e: Event) { + e.preventDefault(); + const ShareDialog = sdk.getComponent("dialogs.ShareDialog"); + Modal.createTrackedDialog('share room message dialog', '', ShareDialog, { + target: this.props.mxEvent, + }); + this.closeMenu(); + }, + onReplyClick: function() { dis.dispatch({ action: 'reply_to_event', @@ -290,7 +299,7 @@ module.exports = React.createClass({ const permalinkButton = (
{ _t('Permalink') } + target="_blank" rel="noopener" onClick={this.onPermalinkClick}>{ _t('Share Message') }
); diff --git a/src/components/views/dialogs/ShareDialog.js b/src/components/views/dialogs/ShareDialog.js index 97d496adbc..12efc8b919 100644 --- a/src/components/views/dialogs/ShareDialog.js +++ b/src/components/views/dialogs/ShareDialog.js @@ -16,7 +16,7 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {Room, User, Group, RoomMember} from 'matrix-js-sdk'; +import {Room, User, Group, RoomMember, MatrixEvent} from 'matrix-js-sdk'; import sdk from '../../../index'; import { _t } from '../../../languageHandler'; import QRCode from 'qrcode-react'; @@ -59,7 +59,7 @@ export default class ShareDialog extends React.Component { PropTypes.instanceOf(User), PropTypes.instanceOf(Group), PropTypes.instanceOf(RoomMember), - // PropTypes.instanceOf(MatrixEvent), + PropTypes.instanceOf(MatrixEvent), ]).isRequired, }; @@ -155,6 +155,9 @@ export default class ShareDialog extends React.Component { } else if (this.props.target instanceof Group) { title = _t('Share Community'); matrixToUrl = makeGroupPermalink(this.props.target.groupId); + } else if (this.props.target instanceof MatrixEvent) { + title = _t('Share Room Message'); + matrixToUrl = makeEventPermalink(this.props.target.roomId, this.props.target.eventId); } const encodedUrl = encodeURIComponent(matrixToUrl); diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 589524bb9e..1160c7c886 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -438,6 +438,17 @@ module.exports = withMatrixClient(React.createClass({ }); }, + onPermalinkShareClicked: function(e) { + // These permalinks are like above, can be opened in new tab/window to matrix.to + // but otherwise fire the ShareDialog as it makes little sense to click permalink + // whilst it is in the current room + e.preventDefault(); + const ShareDialog = sdk.getComponent("dialogs.ShareDialog"); + Modal.createTrackedDialog('share room event dialog', '', ShareDialog, { + target: this.props.mxEvent, + }); + }, + _renderE2EPadlock: function() { const ev = this.props.mxEvent; const props = {onClick: this.onCryptoClicked}; @@ -667,7 +678,7 @@ module.exports = withMatrixClient(React.createClass({ { avatar } { sender }
- + { timestamp } { this._renderE2EPadlock() } @@ -694,7 +705,7 @@ module.exports = withMatrixClient(React.createClass({ { avatar } { sender }
- + { timestamp } { this._renderE2EPadlock() }