change handling of event permalinks in replies

This commit is contained in:
Bruno Windels 2019-02-25 16:08:07 +01:00
parent 31dda34e6b
commit fb672ffb28
5 changed files with 13 additions and 8 deletions

View File

@ -1737,6 +1737,7 @@ module.exports = React.createClass({
showApps={this.state.showApps} showApps={this.state.showApps}
uploadAllowed={this.isFileUploadAllowed} uploadAllowed={this.isFileUploadAllowed}
e2eStatus={this.state.e2eStatus} e2eStatus={this.state.e2eStatus}
permalinkCreator={this.state.permalinkCreator}
/>; />;
} }

View File

@ -20,7 +20,7 @@ import PropTypes from 'prop-types';
import dis from '../../../dispatcher'; import dis from '../../../dispatcher';
import {wantsDateSeparator} from '../../../DateUtils'; import {wantsDateSeparator} from '../../../DateUtils';
import {MatrixEvent, MatrixClient} from 'matrix-js-sdk'; import {MatrixEvent, MatrixClient} from 'matrix-js-sdk';
import {makeEventPermalink, makeUserPermalink} from "../../../matrix-to"; import {makeUserPermalink} from "../../../matrix-to";
import SettingsStore from "../../../settings/SettingsStore"; import SettingsStore from "../../../settings/SettingsStore";
// This component does no cycle detection, simply because the only way to make such a cycle would be to // This component does no cycle detection, simply because the only way to make such a cycle would be to
@ -32,6 +32,7 @@ export default class ReplyThread extends React.Component {
parentEv: PropTypes.instanceOf(MatrixEvent), parentEv: PropTypes.instanceOf(MatrixEvent),
// called when the ReplyThread contents has changed, including EventTiles thereof // called when the ReplyThread contents has changed, including EventTiles thereof
onWidgetLoad: PropTypes.func.isRequired, onWidgetLoad: PropTypes.func.isRequired,
permalinkCreator: PropTypes.object.isRequired,
}; };
static contextTypes = { static contextTypes = {
@ -85,7 +86,7 @@ export default class ReplyThread extends React.Component {
} }
// Part of Replies fallback support // Part of Replies fallback support
static getNestedReplyText(ev) { static getNestedReplyText(ev, permalinkCreator) {
if (!ev) return null; if (!ev) return null;
let {body, formatted_body: html} = ev.getContent(); let {body, formatted_body: html} = ev.getContent();
@ -94,7 +95,7 @@ export default class ReplyThread extends React.Component {
if (html) html = this.stripHTMLReply(html); if (html) html = this.stripHTMLReply(html);
} }
const evLink = makeEventPermalink(ev.getRoomId(), ev.getId()); const evLink = permalinkCreator.forEvent(ev.getId());
const userLink = makeUserPermalink(ev.getSender()); const userLink = makeUserPermalink(ev.getSender());
const mxid = ev.getSender(); const mxid = ev.getSender();
@ -159,11 +160,12 @@ export default class ReplyThread extends React.Component {
}; };
} }
static makeThread(parentEv, onWidgetLoad, ref) { static makeThread(parentEv, onWidgetLoad, permalinkCreator, ref) {
if (!ReplyThread.getParentEventId(parentEv)) { if (!ReplyThread.getParentEventId(parentEv)) {
return <div />; return <div />;
} }
return <ReplyThread parentEv={parentEv} onWidgetLoad={onWidgetLoad} ref={ref} />; return <ReplyThread parentEv={parentEv} onWidgetLoad={onWidgetLoad}
ref={ref} permalinkCreator={permalinkCreator} />;
} }
componentWillMount() { componentWillMount() {
@ -294,6 +296,7 @@ export default class ReplyThread extends React.Component {
<EventTile mxEvent={ev} <EventTile mxEvent={ev}
tileShape="reply" tileShape="reply"
onWidgetLoad={this.props.onWidgetLoad} onWidgetLoad={this.props.onWidgetLoad}
permalinkCreator={this.props.permalinkCreator}
isTwelveHour={SettingsStore.getValue("showTwelveHourTimestamps")} /> isTwelveHour={SettingsStore.getValue("showTwelveHourTimestamps")} />
</blockquote>; </blockquote>;
}); });

View File

@ -735,7 +735,7 @@ module.exports = withMatrixClient(React.createClass({
{ timestamp } { timestamp }
</a> </a>
{ this._renderE2EPadlock() } { this._renderE2EPadlock() }
{ ReplyThread.makeThread(this.props.mxEvent, this.props.onWidgetLoad, 'replyThread') } { ReplyThread.makeThread(this.props.mxEvent, this.props.onWidgetLoad, this.props.permalinkCreator, 'replyThread') }
<EventTileType ref="tile" <EventTileType ref="tile"
mxEvent={this.props.mxEvent} mxEvent={this.props.mxEvent}
highlights={this.props.highlights} highlights={this.props.highlights}

View File

@ -415,7 +415,8 @@ export default class MessageComposer extends React.Component {
room={this.props.room} room={this.props.room}
placeholder={placeholderText} placeholder={placeholderText}
onFilesPasted={this.uploadFiles} onFilesPasted={this.uploadFiles}
onInputStateChanged={this.onInputStateChanged} />, onInputStateChanged={this.onInputStateChanged}
permalinkCreator={this.props.permalinkCreator} />,
formattingButton, formattingButton,
stickerpickerButton, stickerpickerButton,
uploadButton, uploadButton,

View File

@ -1195,7 +1195,7 @@ export default class MessageComposerInput extends React.Component {
// Part of Replies fallback support - prepend the text we're sending // Part of Replies fallback support - prepend the text we're sending
// with the text we're replying to // with the text we're replying to
const nestedReply = ReplyThread.getNestedReplyText(replyingToEv); const nestedReply = ReplyThread.getNestedReplyText(replyingToEv, this.props.permalinkCreator);
if (nestedReply) { if (nestedReply) {
if (content.formatted_body) { if (content.formatted_body) {
content.formatted_body = nestedReply.html + content.formatted_body; content.formatted_body = nestedReply.html + content.formatted_body;