diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js index b376fd5b2c..3e55a6be9e 100644 --- a/src/components/views/context_menus/MessageContextMenu.js +++ b/src/components/views/context_menus/MessageContextMenu.js @@ -26,7 +26,6 @@ import { _t } from '../../../languageHandler'; import Modal from '../../../Modal'; import Resend from '../../../Resend'; import SettingsStore from '../../../settings/SettingsStore'; -import {makeEventPermalink} from '../../../matrix-to'; import { isUrlPermitted } from '../../../HtmlUtils'; module.exports = React.createClass({ @@ -197,6 +196,7 @@ module.exports = React.createClass({ const ShareDialog = sdk.getComponent("dialogs.ShareDialog"); Modal.createTrackedDialog('share room message dialog', '', ShareDialog, { target: this.props.mxEvent, + permalinkCreator: this.props.permalinkCreator, }); this.closeMenu(); }, @@ -305,10 +305,17 @@ module.exports = React.createClass({ } } + let permalink; + if (this.props.permalinkCreator) { + permalink = this.props.permalinkCreator.forEvent( + this.props.mxEvent.getRoomId(), + this.props.mxEvent.getId(), + ); + } // XXX: if we use room ID, we should also include a server where the event can be found (other than in the domain of the event ID) const permalinkButton = (
- { mxEvent.isRedacted() || mxEvent.getType() !== 'm.room.message' ? _t('Share Permalink') : _t('Share Message') } diff --git a/src/components/views/dialogs/ShareDialog.js b/src/components/views/dialogs/ShareDialog.js index 3a0b00adf2..13d8e99258 100644 --- a/src/components/views/dialogs/ShareDialog.js +++ b/src/components/views/dialogs/ShareDialog.js @@ -20,7 +20,7 @@ import {Room, User, Group, RoomMember, MatrixEvent} from 'matrix-js-sdk'; import sdk from '../../../index'; import { _t } from '../../../languageHandler'; import QRCode from 'qrcode-react'; -import {makeEventPermalink, makeGroupPermalink, makeRoomPermalink, makeUserPermalink} from "../../../matrix-to"; +import {RoomPermalinkCreator, makeGroupPermalink, makeUserPermalink} from "../../../matrix-to"; import * as ContextualMenu from "../../structures/ContextualMenu"; const socials = [ @@ -123,6 +123,14 @@ export default class ShareDialog extends React.Component { }); } + componentWillMount() { + if (this.props.target instanceof Room) { + const permalinkCreator = new RoomPermalinkCreator(this.props.target); + permalinkCreator.load(); + this.setState({permalinkCreator}); + } + } + render() { let title; let matrixToUrl; @@ -146,9 +154,9 @@ export default class ShareDialog extends React.Component { } if (this.state.linkSpecificEvent) { - matrixToUrl = makeEventPermalink(this.props.target.roomId, events[events.length - 1].getId()); + matrixToUrl = this.state.permalinkCreator.forEvent(events[events.length - 1].getId()); } else { - matrixToUrl = makeRoomPermalink(this.props.target.roomId); + matrixToUrl = this.state.permalinkCreator.forRoom(); } } else if (this.props.target instanceof User || this.props.target instanceof RoomMember) { title = _t('Share User'); @@ -169,9 +177,9 @@ export default class ShareDialog extends React.Component {
; if (this.state.linkSpecificEvent) { - matrixToUrl = makeEventPermalink(this.props.target.getRoomId(), this.props.target.getId()); + matrixToUrl = this.props.permalinkCreator.forEvent(this.props.target.getId()); } else { - matrixToUrl = makeRoomPermalink(this.props.target.getRoomId()); + matrixToUrl = this.props.permalinkCreator.forRoom(); } } diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index c543db5262..17d272fa36 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -328,6 +328,7 @@ module.exports = withMatrixClient(React.createClass({ mxEvent: this.props.mxEvent, left: x, top: y, + permalinkCreator: this.props.permalinkCreator, eventTileOps: tile && tile.getEventTileOps ? tile.getEventTileOps() : undefined, collapseReplyThread: replyThread && replyThread.canCollapse() ? replyThread.collapse : undefined, e2eInfoCallback: e2eInfoCallback,