parent
2c66403b3c
commit
1d6c9fa8da
4 changed files with 31 additions and 1 deletions
|
@ -81,4 +81,8 @@ limitations under the License.
|
||||||
.mx_MessageContextMenu_iconUnpin::before {
|
.mx_MessageContextMenu_iconUnpin::before {
|
||||||
mask-image: url('$(res)/img/element-icons/room/pin.svg');
|
mask-image: url('$(res)/img/element-icons/room/pin.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_MessageContextMenu_iconViewInRoom::before {
|
||||||
|
mask-image: url('$(res)/img/element-icons/view-in-room.svg');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
1
res/img/element-icons/view-in-room.svg
Normal file
1
res/img/element-icons/view-in-room.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="#17191C" fill-rule="evenodd" d="M1 2.75A.75.75 0 0 1 1.75 2h.005a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm2.495 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.005a.75.75 0 0 1 0 1.5h-.005a.75.75 0 0 1-.75-.75ZM1 6.75A.75.75 0 0 1 1.75 6h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 6.75ZM1 9.75A.75.75 0 0 1 1.75 9h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 1 9.75ZM1 13.75a.75.75 0 0 1 .75-.75h.005a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1-.75-.75Zm2.495 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.01a.75.75 0 0 1 0 1.5h-.01a.75.75 0 0 1-.75-.75Zm2.5 0a.75.75 0 0 1 .75-.75h.005a.75.75 0 0 1 0 1.5h-.005a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"/></svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -38,6 +38,7 @@ import { createRedactEventDialog } from '../dialogs/ConfirmRedactDialog';
|
||||||
import ShareDialog from '../dialogs/ShareDialog';
|
import ShareDialog from '../dialogs/ShareDialog';
|
||||||
import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks";
|
import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks";
|
||||||
import { IPosition, ChevronFace } from '../../structures/ContextMenu';
|
import { IPosition, ChevronFace } from '../../structures/ContextMenu';
|
||||||
|
import RoomContext, { TimelineRenderingType } from '../../../contexts/RoomContext';
|
||||||
|
|
||||||
export function canCancel(eventStatus: EventStatus): boolean {
|
export function canCancel(eventStatus: EventStatus): boolean {
|
||||||
return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT;
|
return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT;
|
||||||
|
@ -74,6 +75,8 @@ interface IState {
|
||||||
|
|
||||||
@replaceableComponent("views.context_menus.MessageContextMenu")
|
@replaceableComponent("views.context_menus.MessageContextMenu")
|
||||||
export default class MessageContextMenu extends React.Component<IProps, IState> {
|
export default class MessageContextMenu extends React.Component<IProps, IState> {
|
||||||
|
static contextType = RoomContext;
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
canRedact: false,
|
canRedact: false,
|
||||||
canPin: false,
|
canPin: false,
|
||||||
|
@ -226,6 +229,16 @@ export default class MessageContextMenu extends React.Component<IProps, IState>
|
||||||
return this.getReactions(e => e.status === EventStatus.NOT_SENT);
|
return this.getReactions(e => e.status === EventStatus.NOT_SENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private viewInRoom = () => {
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'view_room',
|
||||||
|
event_id: this.props.mxEvent.getId(),
|
||||||
|
highlighted: true,
|
||||||
|
room_id: this.props.mxEvent.getRoomId(),
|
||||||
|
});
|
||||||
|
this.closeMenu();
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
const me = cli.getUserId();
|
const me = cli.getUserId();
|
||||||
|
@ -381,8 +394,20 @@ export default class MessageContextMenu extends React.Component<IProps, IState>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { timelineRenderingType } = this.context;
|
||||||
|
const isThread = (
|
||||||
|
timelineRenderingType === TimelineRenderingType.Thread ||
|
||||||
|
timelineRenderingType === TimelineRenderingType.ThreadsList
|
||||||
|
);
|
||||||
|
const isThreadRootEvent = isThread && this.props.mxEvent?.getThread()?.rootEvent === this.props.mxEvent;
|
||||||
|
|
||||||
const commonItemsList = (
|
const commonItemsList = (
|
||||||
<IconizedContextMenuOptionList>
|
<IconizedContextMenuOptionList>
|
||||||
|
{ isThreadRootEvent && <IconizedContextMenuOption
|
||||||
|
iconClassName="mx_MessageContextMenu_iconViewInRoom"
|
||||||
|
label={_t("View in room")}
|
||||||
|
onClick={this.viewInRoom}
|
||||||
|
/> }
|
||||||
{ quoteButton }
|
{ quoteButton }
|
||||||
{ forwardButton }
|
{ forwardButton }
|
||||||
{ pinButton }
|
{ pinButton }
|
||||||
|
@ -403,7 +428,6 @@ export default class MessageContextMenu extends React.Component<IProps, IState>
|
||||||
</IconizedContextMenuOptionList>
|
</IconizedContextMenuOptionList>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IconizedContextMenu
|
<IconizedContextMenu
|
||||||
{...this.props}
|
{...this.props}
|
||||||
|
|
|
@ -2702,6 +2702,7 @@
|
||||||
"Source URL": "Source URL",
|
"Source URL": "Source URL",
|
||||||
"Collapse reply thread": "Collapse reply thread",
|
"Collapse reply thread": "Collapse reply thread",
|
||||||
"Report": "Report",
|
"Report": "Report",
|
||||||
|
"View in room": "View in room",
|
||||||
"Add space": "Add space",
|
"Add space": "Add space",
|
||||||
"Manage & explore rooms": "Manage & explore rooms",
|
"Manage & explore rooms": "Manage & explore rooms",
|
||||||
"Clear status": "Clear status",
|
"Clear status": "Clear status",
|
||||||
|
|
Loading…
Reference in a new issue