From 85a284a3a938735063fc12ba5f4f35936f1871f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sun, 5 Jun 2022 19:01:49 +0200 Subject: [PATCH 1/9] Disable redacting reactions if we don't have sufficient permissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../views/messages/ReactionsRowButton.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index d3fcb2faa62..069b7b8413f 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -24,6 +24,13 @@ import dis from "../../../dispatcher/dispatcher"; import ReactionsRowButtonTooltip from "./ReactionsRowButtonTooltip"; import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import { MatrixClientPeg } from "../../../MatrixClientPeg"; + +const canRedact = (roomId: string, mxEvent: MatrixEvent): boolean => { + const client = MatrixClientPeg.get(); + const room = client.getRoom(roomId); + return room.currentState.maySendRedactionForEvent(mxEvent, client.getUserId()); +}; interface IProps { // The event we're displaying reactions for @@ -47,6 +54,7 @@ interface IState { export default class ReactionsRowButton extends React.PureComponent { static contextType = MatrixClientContext; + public context!: React.ContextType; state = { tooltipRendered: false, @@ -56,8 +64,11 @@ export default class ReactionsRowButton extends React.PureComponent { const { mxEvent, myReactionEvent, content } = this.props; if (myReactionEvent) { + const roomId = mxEvent.getRoomId(); + if (!canRedact(roomId, myReactionEvent)) return; + this.context.redactEvent( - mxEvent.getRoomId(), + roomId, myReactionEvent.getId(), ); } else { @@ -126,7 +137,7 @@ export default class ReactionsRowButton extends React.PureComponent From 1ff3bde1e7b661e54bd9a7786353ab7f1389e236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Mon, 6 Jun 2022 20:12:45 +0200 Subject: [PATCH 2/9] Export `canRedact()` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/messages/ReactionsRowButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index 069b7b8413f..5a12c3de7f7 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -26,7 +26,7 @@ import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; -const canRedact = (roomId: string, mxEvent: MatrixEvent): boolean => { +export const canRedact = (roomId: string, mxEvent: MatrixEvent): boolean => { const client = MatrixClientPeg.get(); const room = client.getRoom(roomId); return room.currentState.maySendRedactionForEvent(mxEvent, client.getUserId()); From aca02bec309e55e63b5970dcf5fadbaf012a3c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Mon, 6 Jun 2022 20:15:27 +0200 Subject: [PATCH 3/9] Disable redacting in `ReactionPicker` without sufficient permissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- res/css/views/emojipicker/_EmojiPicker.scss | 4 ++++ src/components/views/emojipicker/Category.tsx | 2 ++ src/components/views/emojipicker/Emoji.tsx | 2 ++ .../views/emojipicker/EmojiPicker.tsx | 2 ++ .../views/emojipicker/ReactionPicker.tsx | 18 +++++++++++++++--- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/res/css/views/emojipicker/_EmojiPicker.scss b/res/css/views/emojipicker/_EmojiPicker.scss index 2a59310cf75..9d2b16ca41e 100644 --- a/res/css/views/emojipicker/_EmojiPicker.scss +++ b/res/css/views/emojipicker/_EmojiPicker.scss @@ -159,6 +159,10 @@ limitations under the License. list-style: none; width: 38px; cursor: pointer; + + &.mx_AccessibleButton_disabled { + cursor: not-allowed; + } } .mx_EmojiPicker_item { diff --git a/src/components/views/emojipicker/Category.tsx b/src/components/views/emojipicker/Category.tsx index d4ea4e89ffb..e77dfeacae6 100644 --- a/src/components/views/emojipicker/Category.tsx +++ b/src/components/views/emojipicker/Category.tsx @@ -45,6 +45,7 @@ interface IProps { onClick(emoji: IEmoji): void; onMouseEnter(emoji: IEmoji): void; onMouseLeave(emoji: IEmoji): void; + isEmojiDisabled?: (unicode: string) => boolean; } class Category extends React.PureComponent { @@ -60,6 +61,7 @@ class Category extends React.PureComponent { onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} + disabled={this.props.isEmojiDisabled(emoji.unicode)} /> )) }); diff --git a/src/components/views/emojipicker/Emoji.tsx b/src/components/views/emojipicker/Emoji.tsx index 91eada12b36..e36bd9ff5c7 100644 --- a/src/components/views/emojipicker/Emoji.tsx +++ b/src/components/views/emojipicker/Emoji.tsx @@ -26,6 +26,7 @@ interface IProps { onClick(emoji: IEmoji): void; onMouseEnter(emoji: IEmoji): void; onMouseLeave(emoji: IEmoji): void; + disabled?: boolean; } class Emoji extends React.PureComponent { @@ -40,6 +41,7 @@ class Emoji extends React.PureComponent { onMouseLeave={() => onMouseLeave(emoji)} className="mx_EmojiPicker_item_wrapper" label={emoji.unicode} + disabled={this.props.disabled} >
{ emoji.unicode } diff --git a/src/components/views/emojipicker/EmojiPicker.tsx b/src/components/views/emojipicker/EmojiPicker.tsx index 461ef4f079a..e32f20b78b6 100644 --- a/src/components/views/emojipicker/EmojiPicker.tsx +++ b/src/components/views/emojipicker/EmojiPicker.tsx @@ -37,6 +37,7 @@ interface IProps { selectedEmojis?: Set; showQuickReactions?: boolean; onChoose(unicode: string): boolean; + isEmojiDisabled?: (unicode: string) => boolean; } interface IState { @@ -261,6 +262,7 @@ class EmojiPicker extends React.Component { onClick={this.onClickEmoji} onMouseEnter={this.onHoverEmoji} onMouseLeave={this.onHoverEmojiEnd} + isEmojiDisabled={this.props.isEmojiDisabled} selectedEmojis={this.props.selectedEmojis} /> ); diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx index 4a0d15b7292..29b3586b986 100644 --- a/src/components/views/emojipicker/ReactionPicker.tsx +++ b/src/components/views/emojipicker/ReactionPicker.tsx @@ -26,6 +26,7 @@ import dis from "../../../dispatcher/dispatcher"; import { Action } from '../../../dispatcher/actions'; import RoomContext from "../../../contexts/RoomContext"; import { FocusComposerPayload } from '../../../dispatcher/payloads/FocusComposerPayload'; +import { canRedact } from "../messages/ReactionsRowButton"; interface IProps { mxEvent: MatrixEvent; @@ -73,7 +74,7 @@ class ReactionPicker extends React.Component { } } - private getReactions() { + private getReactions(): Record { if (!this.props.reactions) { return {}; } @@ -81,7 +82,7 @@ class ReactionPicker extends React.Component { const myAnnotations = this.props.reactions.getAnnotationsBySender()[userId] || []; return Object.fromEntries([...myAnnotations] .filter(event => !event.isRedacted()) - .map(event => [event.getRelation().key, event.getId()])); + .map(event => [event.getRelation().key, event])); } private onReactionsChange = () => { @@ -93,9 +94,12 @@ class ReactionPicker extends React.Component { private onChoose = (reaction: string) => { this.componentWillUnmount(); this.props.onFinished(); + const roomId = this.props.mxEvent.getRoomId(); const myReactions = this.getReactions(); if (myReactions.hasOwnProperty(reaction)) { - MatrixClientPeg.get().redactEvent(this.props.mxEvent.getRoomId(), myReactions[reaction]); + if (!canRedact(roomId, myReactions[reaction])) return; + + MatrixClientPeg.get().redactEvent(roomId, myReactions[reaction].getId()); dis.dispatch({ action: Action.FocusAComposer, context: this.context.timelineRenderingType, @@ -119,9 +123,17 @@ class ReactionPicker extends React.Component { } }; + private isEmojiDisabled = (unicode: string): boolean => { + const reaction = this.getReactions()[unicode]; + + if (!reaction) return false; + return !canRedact(this.props.mxEvent.getRoomId(), reaction); + }; + render() { return Date: Wed, 8 Jun 2022 20:43:04 +0200 Subject: [PATCH 4/9] Move `canRedact()` to `EventUtils` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/emojipicker/ReactionPicker.tsx | 2 +- src/components/views/messages/ReactionsRowButton.tsx | 8 +------- src/utils/EventUtils.ts | 6 ++++++ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx index 29b3586b986..b7af3310384 100644 --- a/src/components/views/emojipicker/ReactionPicker.tsx +++ b/src/components/views/emojipicker/ReactionPicker.tsx @@ -26,7 +26,7 @@ import dis from "../../../dispatcher/dispatcher"; import { Action } from '../../../dispatcher/actions'; import RoomContext from "../../../contexts/RoomContext"; import { FocusComposerPayload } from '../../../dispatcher/payloads/FocusComposerPayload'; -import { canRedact } from "../messages/ReactionsRowButton"; +import { canRedact } from "../../../utils/EventUtils"; interface IProps { mxEvent: MatrixEvent; diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index 5a12c3de7f7..78dd7e6b5b0 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -24,13 +24,7 @@ import dis from "../../../dispatcher/dispatcher"; import ReactionsRowButtonTooltip from "./ReactionsRowButtonTooltip"; import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; -import { MatrixClientPeg } from "../../../MatrixClientPeg"; - -export const canRedact = (roomId: string, mxEvent: MatrixEvent): boolean => { - const client = MatrixClientPeg.get(); - const room = client.getRoom(roomId); - return room.currentState.maySendRedactionForEvent(mxEvent, client.getUserId()); -}; +import { canRedact } from "../../../utils/EventUtils"; interface IProps { // The event we're displaying reactions for diff --git a/src/utils/EventUtils.ts b/src/utils/EventUtils.ts index 32708e295bb..0c1989eaead 100644 --- a/src/utils/EventUtils.ts +++ b/src/utils/EventUtils.ts @@ -288,3 +288,9 @@ export function canForward(event: MatrixEvent): boolean { export function hasThreadSummary(event: MatrixEvent): boolean { return event.isThreadRoot && event.getThread()?.length && !!event.getThread().replyToEvent; } + +export function canRedact(roomId: string, mxEvent: MatrixEvent): boolean { + const client = MatrixClientPeg.get(); + const room = client.getRoom(roomId); + return room.currentState.maySendRedactionForEvent(mxEvent, client.getUserId()); +} From edfd70a1d25c3167a20d0109657a0f8fa032637f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 9 Jun 2022 21:12:19 +0200 Subject: [PATCH 5/9] Add `canSelfRedact` to `RoomContext` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/structures/RoomView.tsx | 10 ++++++++-- src/contexts/RoomContext.ts | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index ed5f60d3572..b0f3341e7af 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -168,6 +168,7 @@ export interface IRoomState { searchInProgress?: boolean; callState?: CallState; canPeek: boolean; + canSelfRedact: boolean; showApps: boolean; isPeeking: boolean; showRightPanel: boolean; @@ -251,6 +252,7 @@ export class RoomView extends React.Component { searchResults: null, callState: null, canPeek: false, + canSelfRedact: false, showApps: false, isPeeking: false, showRightPanel: false, @@ -1165,10 +1167,14 @@ export class RoomView extends React.Component { private updatePermissions(room: Room) { if (room) { const me = this.context.getUserId(); - const canReact = room.getMyMembership() === "join" && room.currentState.maySendEvent("m.reaction", me); + const canReact = ( + room.getMyMembership() === "join" && + room.currentState.maySendEvent(EventType.Reaction, me) + ); const canSendMessages = room.maySendMessage(); + const canSelfRedact = room.currentState.maySendEvent(EventType.RoomRedaction, me); - this.setState({ canReact, canSendMessages }); + this.setState({ canReact, canSendMessages, canSelfRedact }); } } diff --git a/src/contexts/RoomContext.ts b/src/contexts/RoomContext.ts index 6dd705870a1..6ca5ed60c22 100644 --- a/src/contexts/RoomContext.ts +++ b/src/contexts/RoomContext.ts @@ -43,6 +43,7 @@ const RoomContext = createContext({ showTopUnreadMessagesBar: false, statusBarVisible: false, canReact: false, + canSelfRedact: false, canSendMessages: false, resizing: false, layout: Layout.Group, From 278f988f94766d039eb389803f69e47a96eb86f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 9 Jun 2022 21:12:42 +0200 Subject: [PATCH 6/9] Code refactor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../views/emojipicker/ReactionPicker.tsx | 17 ++++++++--------- src/components/views/messages/ReactionsRow.tsx | 5 ++++- .../views/messages/ReactionsRowButton.tsx | 8 ++------ src/utils/EventUtils.ts | 6 ------ .../views/rooms/MessageComposerButtons-test.tsx | 1 + 5 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx index b7af3310384..87dab15eee1 100644 --- a/src/components/views/emojipicker/ReactionPicker.tsx +++ b/src/components/views/emojipicker/ReactionPicker.tsx @@ -26,7 +26,6 @@ import dis from "../../../dispatcher/dispatcher"; import { Action } from '../../../dispatcher/actions'; import RoomContext from "../../../contexts/RoomContext"; import { FocusComposerPayload } from '../../../dispatcher/payloads/FocusComposerPayload'; -import { canRedact } from "../../../utils/EventUtils"; interface IProps { mxEvent: MatrixEvent; @@ -74,7 +73,7 @@ class ReactionPicker extends React.Component { } } - private getReactions(): Record { + private getReactions(): Record { if (!this.props.reactions) { return {}; } @@ -82,7 +81,7 @@ class ReactionPicker extends React.Component { const myAnnotations = this.props.reactions.getAnnotationsBySender()[userId] || []; return Object.fromEntries([...myAnnotations] .filter(event => !event.isRedacted()) - .map(event => [event.getRelation().key, event])); + .map(event => [event.getRelation().key, event.getId()])); } private onReactionsChange = () => { @@ -94,12 +93,11 @@ class ReactionPicker extends React.Component { private onChoose = (reaction: string) => { this.componentWillUnmount(); this.props.onFinished(); - const roomId = this.props.mxEvent.getRoomId(); const myReactions = this.getReactions(); if (myReactions.hasOwnProperty(reaction)) { - if (!canRedact(roomId, myReactions[reaction])) return; + if (this.props.mxEvent.isRedacted() || !this.context.canSelfRedact) return; - MatrixClientPeg.get().redactEvent(roomId, myReactions[reaction].getId()); + MatrixClientPeg.get().redactEvent(this.props.mxEvent.getRoomId(), myReactions[reaction]); dis.dispatch({ action: Action.FocusAComposer, context: this.context.timelineRenderingType, @@ -124,10 +122,11 @@ class ReactionPicker extends React.Component { }; private isEmojiDisabled = (unicode: string): boolean => { - const reaction = this.getReactions()[unicode]; + if (!this.getReactions()[unicode]) return false; + if (this.props.mxEvent.isRedacted()) return false; + if (this.context.canSelfRedact) return false; - if (!reaction) return false; - return !canRedact(this.props.mxEvent.getRoomId(), reaction); + return true; }; render() { diff --git a/src/components/views/messages/ReactionsRow.tsx b/src/components/views/messages/ReactionsRow.tsx index 2ead0ecbbd5..d0190fd5842 100644 --- a/src/components/views/messages/ReactionsRow.tsx +++ b/src/components/views/messages/ReactionsRow.tsx @@ -183,7 +183,10 @@ export default class ReactionsRow extends React.PureComponent { mxEvent={mxEvent} reactionEvents={events} myReactionEvent={myReactionEvent} - disabled={!this.context.canReact} + disabled={ + !this.context.canReact || + (myReactionEvent && !myReactionEvent.isRedacted() && !this.context.canSelfRedact) + } />; }).filter(item => !!item); diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index 78dd7e6b5b0..9188fd2ff73 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -24,7 +24,6 @@ import dis from "../../../dispatcher/dispatcher"; import ReactionsRowButtonTooltip from "./ReactionsRowButtonTooltip"; import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; -import { canRedact } from "../../../utils/EventUtils"; interface IProps { // The event we're displaying reactions for @@ -58,11 +57,8 @@ export default class ReactionsRowButton extends React.PureComponent { const { mxEvent, myReactionEvent, content } = this.props; if (myReactionEvent) { - const roomId = mxEvent.getRoomId(); - if (!canRedact(roomId, myReactionEvent)) return; - this.context.redactEvent( - roomId, + mxEvent.getRoomId(), myReactionEvent.getId(), ); } else { @@ -131,7 +127,7 @@ export default class ReactionsRowButton extends React.PureComponent diff --git a/src/utils/EventUtils.ts b/src/utils/EventUtils.ts index 6758e292d8c..7bd4ed84471 100644 --- a/src/utils/EventUtils.ts +++ b/src/utils/EventUtils.ts @@ -292,9 +292,3 @@ export function canForward(event: MatrixEvent): boolean { export function hasThreadSummary(event: MatrixEvent): boolean { return event.isThreadRoot && event.getThread()?.length && !!event.getThread().replyToEvent; } - -export function canRedact(roomId: string, mxEvent: MatrixEvent): boolean { - const client = MatrixClientPeg.get(); - const room = client.getRoom(roomId); - return room.currentState.maySendRedactionForEvent(mxEvent, client.getUserId()); -} diff --git a/test/components/views/rooms/MessageComposerButtons-test.tsx b/test/components/views/rooms/MessageComposerButtons-test.tsx index d9f867b67e4..f0e736c032c 100644 --- a/test/components/views/rooms/MessageComposerButtons-test.tsx +++ b/test/components/views/rooms/MessageComposerButtons-test.tsx @@ -209,6 +209,7 @@ function createRoomState(room: Room, narrow: boolean): IRoomState { shouldPeek: true, membersLoaded: false, numUnreadMessages: 0, + canSelfRedact: false, canPeek: false, showApps: false, isPeeking: false, From 8fe7a0fed412a7ce837cbb02e6629c233b26ac8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 10 Jun 2022 17:01:35 +0200 Subject: [PATCH 7/9] Fix tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/emojipicker/Category.tsx | 2 +- test/components/views/rooms/SendMessageComposer-test.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/views/emojipicker/Category.tsx b/src/components/views/emojipicker/Category.tsx index e77dfeacae6..45ed7144e0d 100644 --- a/src/components/views/emojipicker/Category.tsx +++ b/src/components/views/emojipicker/Category.tsx @@ -61,7 +61,7 @@ class Category extends React.PureComponent { onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} - disabled={this.props.isEmojiDisabled(emoji.unicode)} + disabled={this.props.isEmojiDisabled?.(emoji.unicode)} /> )) }
); diff --git a/test/components/views/rooms/SendMessageComposer-test.tsx b/test/components/views/rooms/SendMessageComposer-test.tsx index 5ab7a1705e5..014f5af66ea 100644 --- a/test/components/views/rooms/SendMessageComposer-test.tsx +++ b/test/components/views/rooms/SendMessageComposer-test.tsx @@ -48,21 +48,18 @@ const WrapWithProviders: React.FC<{ ; describe('', () => { - const defaultRoomContext = { + const defaultRoomContext: IRoomState = { roomLoading: true, peekLoading: false, shouldPeek: true, membersLoaded: false, numUnreadMessages: 0, - searching: false, - guestsCanJoin: false, canPeek: false, showApps: false, isPeeking: false, showRightPanel: true, joining: false, atEndOfLiveTimeline: true, - atEndOfLiveTimelineInit: false, showTopUnreadMessagesBar: false, statusBarVisible: false, canReact: false, @@ -82,6 +79,9 @@ describe('', () => { matrixClientIsReady: false, timelineRenderingType: TimelineRenderingType.Room, liveTimeline: undefined, + canSelfRedact: false, + resizing: false, + narrow: false, }; describe("createMessageContent", () => { const permalinkCreator = jest.fn() as any; From 3d4e198de270ecc60c407907f420857fc90291cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 10 Jun 2022 18:11:26 +0200 Subject: [PATCH 8/9] Make `not-allowed` cursor default for `mx_AccessibleButton_disabled` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- res/css/views/elements/_AccessibleButton.scss | 2 +- res/css/views/emojipicker/_EmojiPicker.scss | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/res/css/views/elements/_AccessibleButton.scss b/res/css/views/elements/_AccessibleButton.scss index 021e8ffc8c1..a6fb0a7e22b 100644 --- a/res/css/views/elements/_AccessibleButton.scss +++ b/res/css/views/elements/_AccessibleButton.scss @@ -18,7 +18,7 @@ limitations under the License. cursor: pointer; &.mx_AccessibleButton_disabled { - cursor: default; + cursor: not-allowed; &.mx_AccessibleButton_kind_primary, &.mx_AccessibleButton_kind_primary_outline, diff --git a/res/css/views/emojipicker/_EmojiPicker.scss b/res/css/views/emojipicker/_EmojiPicker.scss index 9d2b16ca41e..2a59310cf75 100644 --- a/res/css/views/emojipicker/_EmojiPicker.scss +++ b/res/css/views/emojipicker/_EmojiPicker.scss @@ -159,10 +159,6 @@ limitations under the License. list-style: none; width: 38px; cursor: pointer; - - &.mx_AccessibleButton_disabled { - cursor: not-allowed; - } } .mx_EmojiPicker_item { From e313f2058c9526f9fbd2987939b88887d58fb87d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 10 Jun 2022 18:17:25 +0200 Subject: [PATCH 9/9] Remove unnecessary line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/emojipicker/ReactionPicker.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx index 87dab15eee1..464480ef5ae 100644 --- a/src/components/views/emojipicker/ReactionPicker.tsx +++ b/src/components/views/emojipicker/ReactionPicker.tsx @@ -123,7 +123,6 @@ class ReactionPicker extends React.Component { private isEmojiDisabled = (unicode: string): boolean => { if (!this.getReactions()[unicode]) return false; - if (this.props.mxEvent.isRedacted()) return false; if (this.context.canSelfRedact) return false; return true;