use new permalink class in share dialog & context menu

This commit is contained in:
Bruno Windels 2019-02-25 15:35:09 +01:00
parent f7ea9cfeb2
commit 31dda34e6b
3 changed files with 23 additions and 7 deletions

View file

@ -26,7 +26,6 @@ import { _t } from '../../../languageHandler';
import Modal from '../../../Modal'; import Modal from '../../../Modal';
import Resend from '../../../Resend'; import Resend from '../../../Resend';
import SettingsStore from '../../../settings/SettingsStore'; import SettingsStore from '../../../settings/SettingsStore';
import {makeEventPermalink} from '../../../matrix-to';
import { isUrlPermitted } from '../../../HtmlUtils'; import { isUrlPermitted } from '../../../HtmlUtils';
module.exports = React.createClass({ module.exports = React.createClass({
@ -197,6 +196,7 @@ module.exports = React.createClass({
const ShareDialog = sdk.getComponent("dialogs.ShareDialog"); const ShareDialog = sdk.getComponent("dialogs.ShareDialog");
Modal.createTrackedDialog('share room message dialog', '', ShareDialog, { Modal.createTrackedDialog('share room message dialog', '', ShareDialog, {
target: this.props.mxEvent, target: this.props.mxEvent,
permalinkCreator: this.props.permalinkCreator,
}); });
this.closeMenu(); 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) // 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 = ( const permalinkButton = (
<div className="mx_MessageContextMenu_field"> <div className="mx_MessageContextMenu_field">
<a href={makeEventPermalink(mxEvent.getRoomId(), mxEvent.getId())} <a href={permalink}
target="_blank" rel="noopener" onClick={this.onPermalinkClick}> target="_blank" rel="noopener" onClick={this.onPermalinkClick}>
{ mxEvent.isRedacted() || mxEvent.getType() !== 'm.room.message' { mxEvent.isRedacted() || mxEvent.getType() !== 'm.room.message'
? _t('Share Permalink') : _t('Share Message') } ? _t('Share Permalink') : _t('Share Message') }

View file

@ -20,7 +20,7 @@ import {Room, User, Group, RoomMember, MatrixEvent} from 'matrix-js-sdk';
import sdk from '../../../index'; import sdk from '../../../index';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import QRCode from 'qrcode-react'; 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"; import * as ContextualMenu from "../../structures/ContextualMenu";
const socials = [ 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() { render() {
let title; let title;
let matrixToUrl; let matrixToUrl;
@ -146,9 +154,9 @@ export default class ShareDialog extends React.Component {
} }
if (this.state.linkSpecificEvent) { 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 { } else {
matrixToUrl = makeRoomPermalink(this.props.target.roomId); matrixToUrl = this.state.permalinkCreator.forRoom();
} }
} else if (this.props.target instanceof User || this.props.target instanceof RoomMember) { } else if (this.props.target instanceof User || this.props.target instanceof RoomMember) {
title = _t('Share User'); title = _t('Share User');
@ -169,9 +177,9 @@ export default class ShareDialog extends React.Component {
</div>; </div>;
if (this.state.linkSpecificEvent) { if (this.state.linkSpecificEvent) {
matrixToUrl = makeEventPermalink(this.props.target.getRoomId(), this.props.target.getId()); matrixToUrl = this.props.permalinkCreator.forEvent(this.props.target.getId());
} else { } else {
matrixToUrl = makeRoomPermalink(this.props.target.getRoomId()); matrixToUrl = this.props.permalinkCreator.forRoom();
} }
} }

View file

@ -328,6 +328,7 @@ module.exports = withMatrixClient(React.createClass({
mxEvent: this.props.mxEvent, mxEvent: this.props.mxEvent,
left: x, left: x,
top: y, top: y,
permalinkCreator: this.props.permalinkCreator,
eventTileOps: tile && tile.getEventTileOps ? tile.getEventTileOps() : undefined, eventTileOps: tile && tile.getEventTileOps ? tile.getEventTileOps() : undefined,
collapseReplyThread: replyThread && replyThread.canCollapse() ? replyThread.collapse : undefined, collapseReplyThread: replyThread && replyThread.canCollapse() ? replyThread.collapse : undefined,
e2eInfoCallback: e2eInfoCallback, e2eInfoCallback: e2eInfoCallback,