diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js
index 6b871e4f24a..3a2d057ac5c 100644
--- a/src/components/views/context_menus/MessageContextMenu.js
+++ b/src/components/views/context_menus/MessageContextMenu.js
@@ -29,9 +29,12 @@ import Modal from '../../../Modal';
import Resend from '../../../Resend';
import SettingsStore from '../../../settings/SettingsStore';
import { isUrlPermitted } from '../../../HtmlUtils';
-import { isContentActionable } from '../../../utils/EventUtils';
+import { isContentActionable, canEditContent } from '../../../utils/EventUtils';
import {MenuItem} from "../../structures/ContextMenu";
import {EventType} from "matrix-js-sdk/src/@types/event";
+import {useRovingTabIndex} from "../../../accessibility/RovingTabIndex";
+import {aboveLeftOf, ContextMenu, useContextMenu} from '../../structures/ContextMenu';
+import RoomContext from "../../../contexts/RoomContext";
function canCancel(eventStatus) {
return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT;
@@ -50,6 +53,9 @@ export default class MessageContextMenu extends React.Component {
/* callback called when the menu is dismissed */
onFinished: PropTypes.func,
+
+ /* if true show react button */
+ rightClick: PropTypes.bool,
};
state = {
@@ -57,6 +63,8 @@ export default class MessageContextMenu extends React.Component {
canPin: false,
};
+ static contextType = RoomContext;
+
componentDidMount() {
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkPermissions);
this._checkPermissions();
@@ -288,6 +296,22 @@ export default class MessageContextMenu extends React.Component {
return this._getReactions(e => e.status === EventStatus.NOT_SENT);
}
+ onEditClick = (ev) => {
+ dis.dispatch({
+ action: 'edit_event',
+ event: this.props.mxEvent,
+ });
+ this.closeMenu();
+ };
+
+ onReplyClick = (ev) => {
+ dis.dispatch({
+ action: 'reply_to_event',
+ event: this.props.mxEvent,
+ });
+ this.closeMenu();
+ };
+
render() {
const cli = MatrixClientPeg.get();
const me = cli.getUserId();
@@ -314,6 +338,9 @@ export default class MessageContextMenu extends React.Component {
let externalURLButton;
let quoteButton;
let collapseReplyThread;
+ let reactButton;
+ let replyButton;
+ let editButton;
// status is SENT before remote-echo, null after
const isSent = !eventStatus || eventStatus === EventStatus.SENT;
@@ -470,8 +497,32 @@ export default class MessageContextMenu extends React.Component {
);
}
+ if (this.props.rightClick) {
+ if (isContentActionable(this.props.mxEvent)) {
+ if (this.context.canReact) {
+ reactButton =