From 89f22e1f5a53a90b3d3c390b49368a521bc8776f Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Fri, 17 Dec 2021 10:41:12 +0000 Subject: [PATCH 1/3] Remove the Forward and Share buttons for location messages only --- .../context_menus/MessageContextMenu.tsx | 81 ++++++++++++------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/src/components/views/context_menus/MessageContextMenu.tsx b/src/components/views/context_menus/MessageContextMenu.tsx index 019691e4c71..d5834eccfde 100644 --- a/src/components/views/context_menus/MessageContextMenu.tsx +++ b/src/components/views/context_menus/MessageContextMenu.tsx @@ -15,11 +15,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import React, { ReactElement } from 'react'; import { EventStatus, MatrixEvent } from 'matrix-js-sdk/src/models/event'; import { EventType, RelationType } from "matrix-js-sdk/src/@types/event"; import { Relations } from 'matrix-js-sdk/src/models/relations'; import { POLL_START_EVENT_TYPE } from "matrix-js-sdk/src/@types/polls"; +import { LOCATION_EVENT_TYPE } from 'matrix-js-sdk/src/@types/location'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; import dis from '../../../dispatcher/dispatcher'; @@ -82,6 +83,8 @@ interface IProps extends IPosition { interface IState { canRedact: boolean; canPin: boolean; + canForward: boolean; + canShare: boolean; } @replaceableComponent("views.context_menus.MessageContextMenu") @@ -92,6 +95,8 @@ export default class MessageContextMenu extends React.Component state = { canRedact: false, canPin: false, + canForward: false, + canShare: false, }; componentDidMount() { @@ -121,7 +126,11 @@ export default class MessageContextMenu extends React.Component // HACK: Intentionally say we can't pin if the user doesn't want to use the functionality if (!SettingsStore.getValue("feature_pinning")) canPin = false; - this.setState({ canRedact, canPin }); + const isLoc = isLocationEvent(this.props.mxEvent); + const canForward = !isLoc; + const canShare = !isLoc; + + this.setState({ canRedact, canPin, canForward, canShare }); }; private isPinned(): boolean { @@ -313,13 +322,15 @@ export default class MessageContextMenu extends React.Component } if (isContentActionable(mxEvent)) { - forwardButton = ( - - ); + if (this.state.canForward) { + forwardButton = ( + + ); + } if (this.state.canPin) { pinButton = ( @@ -352,26 +363,29 @@ export default class MessageContextMenu extends React.Component } } - let permalink; - if (this.props.permalinkCreator) { - permalink = this.props.permalinkCreator.forEvent(this.props.mxEvent.getId()); - } - const permalinkButton = ( - - ); + /> + ); + } if (this.canEndPoll(mxEvent)) { endPollButton = ( @@ -486,3 +500,14 @@ export default class MessageContextMenu extends React.Component ); } } + +function isLocationEvent(event: MatrixEvent): boolean { + const eventType = event.getType(); + return ( + LOCATION_EVENT_TYPE.matches(eventType) || + ( + eventType === "m.room.message" && + LOCATION_EVENT_TYPE.matches(event.getContent().msgtype) + ) + ); +} From 58c4ce9e3764bba98f7cd12155d1a1fc56a7b7fd Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Tue, 21 Dec 2021 10:44:11 +0000 Subject: [PATCH 2/3] Use the proper constant for m.room.message --- src/components/views/context_menus/MessageContextMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/context_menus/MessageContextMenu.tsx b/src/components/views/context_menus/MessageContextMenu.tsx index d5834eccfde..0e40d337984 100644 --- a/src/components/views/context_menus/MessageContextMenu.tsx +++ b/src/components/views/context_menus/MessageContextMenu.tsx @@ -506,7 +506,7 @@ function isLocationEvent(event: MatrixEvent): boolean { return ( LOCATION_EVENT_TYPE.matches(eventType) || ( - eventType === "m.room.message" && + eventType === EventType.RoomMessage && LOCATION_EVENT_TYPE.matches(event.getContent().msgtype) ) ); From db67c2c54b5006f090b708a41e659f7fd984b9c6 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Tue, 21 Dec 2021 12:45:24 +0000 Subject: [PATCH 3/3] Remove canForward and canShare from state --- .../context_menus/MessageContextMenu.tsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/views/context_menus/MessageContextMenu.tsx b/src/components/views/context_menus/MessageContextMenu.tsx index 0e40d337984..34782c00e2e 100644 --- a/src/components/views/context_menus/MessageContextMenu.tsx +++ b/src/components/views/context_menus/MessageContextMenu.tsx @@ -83,8 +83,6 @@ interface IProps extends IPosition { interface IState { canRedact: boolean; canPin: boolean; - canForward: boolean; - canShare: boolean; } @replaceableComponent("views.context_menus.MessageContextMenu") @@ -95,8 +93,6 @@ export default class MessageContextMenu extends React.Component state = { canRedact: false, canPin: false, - canForward: false, - canShare: false, }; componentDidMount() { @@ -126,11 +122,7 @@ export default class MessageContextMenu extends React.Component // HACK: Intentionally say we can't pin if the user doesn't want to use the functionality if (!SettingsStore.getValue("feature_pinning")) canPin = false; - const isLoc = isLocationEvent(this.props.mxEvent); - const canForward = !isLoc; - const canShare = !isLoc; - - this.setState({ canRedact, canPin, canForward, canShare }); + this.setState({ canRedact, canPin }); }; private isPinned(): boolean { @@ -322,7 +314,7 @@ export default class MessageContextMenu extends React.Component } if (isContentActionable(mxEvent)) { - if (this.state.canForward) { + if (canForward(mxEvent)) { forwardButton = ( let permalink: string | null = null; let permalinkButton: ReactElement | null = null; - if (this.state.canShare) { + if (canShare(mxEvent)) { if (this.props.permalinkCreator) { permalink = this.props.permalinkCreator.forEvent(this.props.mxEvent.getId()); } @@ -501,6 +493,14 @@ export default class MessageContextMenu extends React.Component } } +function canForward(event: MatrixEvent): boolean { + return !isLocationEvent(event); +} + +function canShare(event: MatrixEvent): boolean { + return !isLocationEvent(event); +} + function isLocationEvent(event: MatrixEvent): boolean { const eventType = event.getType(); return (