From 8fc6638d6e972f1ac9fc00b36207c92727e42216 Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Tue, 8 Apr 2025 10:08:00 +0100 Subject: [PATCH] Allow reporting a room when rejecting an invite. (#29570) * Add report room dialog button/dialog. * Update copy * fixup tests / lint * Fix title in test. * update snapshot * Add unit tests for dialog * lint * First pass at adding a report room on invite. * Use a single line input field for reason to avoid bumping the layout. * Fixups * Embed reason to make it clear on grouping * Revert accidental commit * lint * Add some playwright tests. * tweaks * Make ignored users list more accessible. * i18n * Fix sliding sync test. * Add unit test * Even more unit tests. * move test * Update to match designs. * remove console statements * fix css * tidy up * improve comments * fix css * updates --- playwright/e2e/room/invites.spec.ts | 67 ++++++++ .../e2e/sliding-sync/sliding-sync.spec.ts | 4 +- .../room-report-dialog-linux.png | Bin 26881 -> 26721 bytes .../Invites-reject-dialog-linux.png | Bin 0 -> 34053 bytes .../Invites-room-view-linux.png | Bin 0 -> 18083 bytes res/css/views/dialogs/_ReportRoomDialog.pcss | 24 ++- .../tabs/user/_SecurityUserSettingsTab.pcss | 6 + src/components/structures/MatrixChat.tsx | 30 ---- src/components/structures/RoomView.tsx | 96 ++++++----- .../dialogs/DeclineAndBlockInviteDialog.tsx | 82 ++++++++++ .../views/elements/LabelledToggleSwitch.tsx | 84 +++++----- src/components/views/rooms/RoomPreviewBar.tsx | 37 +++-- .../views/rooms/RoomPreviewCard.tsx | 2 +- .../tabs/user/SecurityUserSettingsTab.tsx | 45 ++++-- src/i18n/strings/en_EN.json | 16 +- test/test-utils/test-utils.ts | 4 +- .../components/structures/RoomView-test.tsx | 60 ++++++- .../__snapshots__/RoomView-test.tsx.snap | 85 +++++++++- .../ConfirmRejectInviteDialog-test.tsx | 52 ++++++ .../ConfirmRejectInviteDialog-test.tsx.snap | 151 ++++++++++++++++++ .../ReportRoomDialog-test.tsx.snap | 6 +- .../LocationShareMenu-test.tsx.snap | 4 +- .../views/rooms/RoomPreviewBar-test.tsx | 40 ++--- .../RoomPreviewBar-test.tsx.snap | 60 +------ .../__snapshots__/Notifications-test.tsx.snap | 16 +- .../Notifications2-test.tsx.snap | 132 +++++++-------- .../user/SecurityUserSettingsTab-test.tsx | 36 ++++- .../SecurityUserSettingsTab-test.tsx.snap | 26 +++ .../SpaceSettingsVisibilityTab-test.tsx.snap | 6 +- 29 files changed, 844 insertions(+), 327 deletions(-) create mode 100644 playwright/e2e/room/invites.spec.ts create mode 100644 playwright/snapshots/room/invites.spec.ts/Invites-reject-dialog-linux.png create mode 100644 playwright/snapshots/room/invites.spec.ts/Invites-room-view-linux.png create mode 100644 src/components/views/dialogs/DeclineAndBlockInviteDialog.tsx create mode 100644 test/unit-tests/components/views/dialogs/ConfirmRejectInviteDialog-test.tsx create mode 100644 test/unit-tests/components/views/dialogs/__snapshots__/ConfirmRejectInviteDialog-test.tsx.snap diff --git a/playwright/e2e/room/invites.spec.ts b/playwright/e2e/room/invites.spec.ts new file mode 100644 index 0000000000..d81fb13de1 --- /dev/null +++ b/playwright/e2e/room/invites.spec.ts @@ -0,0 +1,67 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { test, expect } from "../../element-web-test"; + +test.describe("Invites", () => { + test.use({ + displayName: "Alice", + botCreateOpts: { + displayName: "Bob", + }, + }); + + test("should render an invite view", { tag: "@screenshot" }, async ({ page, homeserver, user, bot, app }) => { + const roomId = await bot.createRoom({ is_direct: true }); + await bot.inviteUser(roomId, user.userId); + await app.viewRoomByName("Bob"); + await expect(page.locator(".mx_RoomView")).toMatchScreenshot("Invites_room_view.png"); + }); + + test("should be able to decline an invite", async ({ page, homeserver, user, bot, app }) => { + const roomId = await bot.createRoom({ is_direct: true }); + await bot.inviteUser(roomId, user.userId); + await app.viewRoomByName("Bob"); + await page.getByRole("button", { name: "Decline", exact: true }).click(); + await expect(page.getByRole("heading", { name: "Welcome Alice", exact: true })).toBeVisible(); + await expect( + page.getByRole("tree", { name: "Rooms" }).getByRole("treeitem", { name: "Bob", exact: true }), + ).not.toBeVisible(); + }); + + test( + "should be able to decline an invite, report the room and ignore the user", + { tag: "@screenshot" }, + async ({ page, homeserver, user, bot, app }) => { + const roomId = await bot.createRoom({ is_direct: true }); + await bot.inviteUser(roomId, user.userId); + await app.viewRoomByName("Bob"); + await page.getByRole("button", { name: "Decline and block" }).click(); + await page.getByLabel("Ignore user").click(); + await page.getByLabel("Report room").click(); + await page.getByLabel("Reason").fill("Do not want the room"); + const roomReported = page.waitForRequest( + (req) => + req.url().endsWith(`/_matrix/client/v3/rooms/${encodeURIComponent(roomId)}/report`) && + req.method() === "POST", + ); + await expect(page.getByRole("dialog", { name: "Decline invitation" })).toMatchScreenshot( + "Invites_reject_dialog.png", + ); + await page.getByRole("button", { name: "Decline invite" }).click(); + + // Check room was reported. + await roomReported; + + // Check user is ignored. + await app.settings.openUserSettings("Security & Privacy"); + const ignoredUsersList = page.getByRole("list", { name: "Ignored users" }); + await ignoredUsersList.scrollIntoViewIfNeeded(); + await expect(ignoredUsersList.getByRole("listitem", { name: bot.credentials.userId })).toBeVisible(); + }, + ); +}); diff --git a/playwright/e2e/sliding-sync/sliding-sync.spec.ts b/playwright/e2e/sliding-sync/sliding-sync.spec.ts index 118bd4585e..b540cd11d5 100644 --- a/playwright/e2e/sliding-sync/sliding-sync.spec.ts +++ b/playwright/e2e/sliding-sync/sliding-sync.spec.ts @@ -255,8 +255,8 @@ test.describe("Sliding Sync", () => { // Select the room to reject await page.getByRole("treeitem", { name: "Room to Reject" }).click(); - // Reject the invite - await page.locator(".mx_RoomView").getByRole("button", { name: "Reject", exact: true }).click(); + // Decline the invite + await page.locator(".mx_RoomView").getByRole("button", { name: "Decline", exact: true }).click(); await expect( page.getByRole("group", { name: "Invites" }).locator(".mx_RoomSublist_tiles").getByRole("treeitem"), diff --git a/playwright/snapshots/right-panel/right-panel.spec.ts/room-report-dialog-linux.png b/playwright/snapshots/right-panel/right-panel.spec.ts/room-report-dialog-linux.png index bfaf0e909ec6c6c2e41906d194c583a417101ef0..3beae421d4de1d226bbb60598b088eabaf62c8ac 100644 GIT binary patch literal 26721 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 Lw4atMzkK^Yt-w;{ diff --git a/playwright/snapshots/room/invites.spec.ts/Invites-reject-dialog-linux.png b/playwright/snapshots/room/invites.spec.ts/Invites-reject-dialog-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..71f3e420abaab800238f23f24353d8618230abc8 GIT binary patch literal 34053 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 literal 0 HcmV?d00001 diff --git a/playwright/snapshots/room/invites.spec.ts/Invites-room-view-linux.png b/playwright/snapshots/room/invites.spec.ts/Invites-room-view-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..8466ecab00c88b7f3805733a8ff4b063739b0527 GIT binary patch literal 18083 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∓ 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 literal 0 HcmV?d00001 diff --git a/res/css/views/dialogs/_ReportRoomDialog.pcss b/res/css/views/dialogs/_ReportRoomDialog.pcss index fc9d087de1..b656638d9c 100644 --- a/res/css/views/dialogs/_ReportRoomDialog.pcss +++ b/res/css/views/dialogs/_ReportRoomDialog.pcss @@ -5,7 +5,8 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ -.mx_ReportRoomDialog { +.mx_ReportRoomDialog, +.mx_DeclineAndBlockInviteDialog { textarea { font: var(--cpd-font-body-md-regular); border: 1px solid var(--cpd-color-border-interactive-primary); @@ -14,7 +15,26 @@ Please see LICENSE files in the repository root for full details. padding: var(--cpd-space-3x) var(--cpd-space-4x); } - label { + /* + Workaround to fix labels appearing with the wrong color. + + .mx_Dialog (in res/css/_common.pcss) redefines the body color + as $light-fg-color rather than the standard primary color. + + This forces the colour to match the Compound style, but + in the future the Dialogs should not force a color. + */ + form label { + color: var(--cpd-color-text-primary); + } +} + +.mx_DeclineAndBlockInviteDialog { + div[aria-disabled="true"] > label { + color: var(--cpd-color-text-secondary); + } + + .mx_SettingsFlag_label { color: var(--cpd-color-text-primary); font-weight: var(--cpd-font-weight-semibold); } diff --git a/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss index cb5d1fbc94..82f839042b 100644 --- a/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss @@ -11,6 +11,12 @@ Please see LICENSE files in the repository root for full details. column-gap: $spacing-8; } +.mx_SecurityUserSettingsTab_ignoredUsers { + padding-left: 0; + margin: 0; + list-style: none; +} + .mx_SecurityUserSettingsTab_ignoredUser { margin-bottom: $spacing-4; } diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 0f722ae53d..3c7941bd4c 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -711,36 +711,6 @@ export default class MatrixChat extends React.PureComponent { case "copy_room": this.copyRoom(payload.room_id); break; - case "reject_invite": - Modal.createDialog(QuestionDialog, { - title: _t("reject_invitation_dialog|title"), - description: _t("reject_invitation_dialog|confirmation"), - onFinished: (confirm) => { - if (confirm) { - // FIXME: controller shouldn't be loading a view :( - const modal = Modal.createDialog(Spinner, undefined, "mx_Dialog_spinner"); - - MatrixClientPeg.safeGet() - .leave(payload.room_id) - .then( - () => { - modal.close(); - if (this.state.currentRoomId === payload.room_id) { - dis.dispatch({ action: Action.ViewHomePage }); - } - }, - (err) => { - modal.close(); - Modal.createDialog(ErrorDialog, { - title: _t("reject_invitation_dialog|failed"), - description: err.toString(), - }); - }, - ); - } - }, - }); - break; case "view_user_info": this.viewUser(payload.userId, payload.subAction); break; diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index b86e7937e8..3426ef7e97 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -134,6 +134,7 @@ import { onView3pidInvite } from "../../stores/right-panel/action-handlers"; import RoomSearchAuxPanel from "../views/rooms/RoomSearchAuxPanel"; import { PinnedMessageBanner } from "../views/rooms/PinnedMessageBanner"; import { ScopedRoomContextProvider, useScopedRoomContext } from "../../contexts/ScopedRoomContext"; +import { DeclineAndBlockInviteDialog } from "../views/dialogs/DeclineAndBlockInviteDialog"; const DEBUG = false; const PREVENT_MULTIPLE_JITSI_WITHIN = 30_000; @@ -1732,48 +1733,61 @@ export class RoomView extends React.Component { }); }; - private onRejectButtonClicked = (): void => { - const roomId = this.getRoomId(); - if (!roomId) return; + private onDeclineAndBlockButtonClicked = async (): Promise => { + if (!this.state.room || !this.context.client) return; + const [shouldReject, ignoreUser, reportRoom] = await Modal.createDialog(DeclineAndBlockInviteDialog, { + roomName: this.state.room.name, + }).finished; + if (!shouldReject) { + return; + } + this.setState({ rejecting: true, }); - this.context.client?.leave(roomId).then( - () => { - defaultDispatcher.dispatch({ action: Action.ViewHomePage }); - this.setState({ - rejecting: false, - }); - }, - (error) => { - logger.error(`Failed to reject invite: ${error}`); - const msg = error.message ? error.message : JSON.stringify(error); - Modal.createDialog(ErrorDialog, { - title: _t("room|failed_reject_invite"), - description: msg, - }); + const actions: Promise[] = []; - this.setState({ - rejecting: false, - }); - }, - ); + if (ignoreUser) { + const myMember = this.state.room.getMember(this.context.client!.getSafeUserId()); + const inviteEvent = myMember!.events.member; + const ignoredUsers = this.context.client.getIgnoredUsers(); + ignoredUsers.push(inviteEvent!.getSender()!); // de-duped internally in the js-sdk + actions.push(this.context.client.setIgnoredUsers(ignoredUsers)); + } + + if (reportRoom !== false) { + actions.push(this.context.client.reportRoom(this.state.room.roomId, reportRoom)); + } + + actions.push(this.context.client.leave(this.state.room.roomId)); + try { + await Promise.all(actions); + defaultDispatcher.dispatch({ action: Action.ViewHomePage }); + this.setState({ + rejecting: false, + }); + } catch (error) { + logger.error(`Failed to reject invite: ${error}`); + + const msg = error instanceof Error ? error.message : JSON.stringify(error); + Modal.createDialog(ErrorDialog, { + title: _t("room|failed_reject_invite"), + description: msg, + }); + + this.setState({ + rejecting: false, + }); + } }; - private onRejectAndIgnoreClick = async (): Promise => { - this.setState({ - rejecting: true, - }); - + private onDeclineButtonClicked = async (): Promise => { + if (!this.state.room || !this.context.client) { + return; + } try { - const myMember = this.state.room!.getMember(this.context.client!.getSafeUserId()); - const inviteEvent = myMember!.events.member; - const ignoredUsers = this.context.client!.getIgnoredUsers(); - ignoredUsers.push(inviteEvent!.getSender()!); // de-duped internally in the js-sdk - await this.context.client!.setIgnoredUsers(ignoredUsers); - - await this.context.client!.leave(this.state.roomId!); + await this.context.client.leave(this.state.room.roomId); defaultDispatcher.dispatch({ action: Action.ViewHomePage }); this.setState({ rejecting: false, @@ -2126,7 +2140,7 @@ export class RoomView extends React.Component { { ; @@ -2196,8 +2210,9 @@ export class RoomView extends React.Component { { { onRejectButtonClicked={ this.props.threepidInvite ? this.onRejectThreepidInviteButtonClicked - : this.onRejectButtonClicked + : this.onDeclineButtonClicked } /> ); diff --git a/src/components/views/dialogs/DeclineAndBlockInviteDialog.tsx b/src/components/views/dialogs/DeclineAndBlockInviteDialog.tsx new file mode 100644 index 0000000000..a10dfbe42b --- /dev/null +++ b/src/components/views/dialogs/DeclineAndBlockInviteDialog.tsx @@ -0,0 +1,82 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import React, { type ChangeEventHandler, useCallback, useState } from "react"; +import { Field, Label, Root } from "@vector-im/compound-web"; + +import { _t } from "../../../languageHandler"; +import BaseDialog from "./BaseDialog"; +import DialogButtons from "../elements/DialogButtons"; +import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; + +interface IProps { + onFinished: (shouldReject: boolean, ignoreUser: boolean, reportRoom: false | string) => void; + roomName: string; +} + +export const DeclineAndBlockInviteDialog: React.FunctionComponent = ({ onFinished, roomName }) => { + const [shouldReport, setShouldReport] = useState(false); + const [ignoreUser, setIgnoreUser] = useState(false); + + const [reportReason, setReportReason] = useState(""); + const reportReasonChanged = useCallback>( + (e) => setReportReason(e.target.value), + [setReportReason], + ); + + const onCancel = useCallback(() => onFinished(false, false, false), [onFinished]); + const onOk = useCallback( + () => onFinished(true, ignoreUser, shouldReport ? reportReason : false), + [onFinished, ignoreUser, shouldReport, reportReason], + ); + + return ( + + +

{_t("decline_invitation_dialog|confirm", { roomName })}

+ + + + + + +
+ + + + +
+ +
+
+
+
+`; diff --git a/test/unit-tests/components/views/dialogs/__snapshots__/ReportRoomDialog-test.tsx.snap b/test/unit-tests/components/views/dialogs/__snapshots__/ReportRoomDialog-test.tsx.snap index 63f6f3ee10..44edfa9130 100644 --- a/test/unit-tests/components/views/dialogs/__snapshots__/ReportRoomDialog-test.tsx.snap +++ b/test/unit-tests/components/views/dialogs/__snapshots__/ReportRoomDialog-test.tsx.snap @@ -43,7 +43,7 @@ exports[`ReportRoomDialog displays admin message 1`] = ` /> Report this room to your account provider. If the messages are encrypted, your admin will not be able to read them. @@ -71,7 +71,7 @@ exports[`ReportRoomDialog displays admin message 1`] = ` class="mx_SettingsFlag_label" >
Leave room
@@ -79,7 +79,7 @@ exports[`ReportRoomDialog displays admin message 1`] = `
with live location disabled goes to labs flag scr class="mx_SettingsFlag_label" >
Enable live location sharing
@@ -34,7 +34,7 @@ exports[` with live location disabled goes to labs flag scr
", () => { }); it("renders join and reject action buttons correctly", () => { - const component = getComponent({ inviterName, room, onJoinClick, onRejectClick }); - expect(getActions(component)).toMatchSnapshot(); - }); - - it("renders reject and ignore action buttons when handler is provided", () => { - const onRejectAndIgnoreClick = jest.fn(); - const component = getComponent({ - inviterName, - room, - onJoinClick, - onRejectClick, - onRejectAndIgnoreClick, - }); + const component = getComponent({ inviterName, room, onJoinClick, onDeclineClick: onRejectClick }); expect(getActions(component)).toMatchSnapshot(); }); it("renders join and reject action buttons in reverse order when room can previewed", () => { // when room is previewed action buttons are rendered left to right, with primary on the right - const component = getComponent({ inviterName, room, onJoinClick, onRejectClick, canPreview: true }); + const component = getComponent({ + inviterName, + room, + onJoinClick, + onDeclineClick: onRejectClick, + canPreview: true, + }); expect(getActions(component)).toMatchSnapshot(); }); it("joins room on primary button click", () => { - const component = getComponent({ inviterName, room, onJoinClick, onRejectClick }); + const component = getComponent({ inviterName, room, onJoinClick, onDeclineClick: onRejectClick }); fireEvent.click(getPrimaryActionButton(component)!); expect(onJoinClick).toHaveBeenCalled(); }); it("rejects invite on secondary button click", () => { - const component = getComponent({ inviterName, room, onJoinClick, onRejectClick }); + const component = getComponent({ inviterName, room, onJoinClick, onDeclineClick: onRejectClick }); fireEvent.click(getSecondaryActionButton(component)!); expect(onRejectClick).toHaveBeenCalled(); @@ -337,18 +331,6 @@ describe("", () => { const component = getComponent({ inviterName, room }); expect(getMessage(component)).toMatchSnapshot(); }); - - it("renders join and reject action buttons with correct labels", () => { - const onRejectAndIgnoreClick = jest.fn(); - const component = getComponent({ - inviterName, - room, - onJoinClick, - onRejectAndIgnoreClick, - onRejectClick, - }); - expect(getActions(component)).toMatchSnapshot(); - }); }); }); @@ -364,7 +346,7 @@ describe("", () => { async () => { const onJoinClick = jest.fn(); const onRejectClick = jest.fn(); - const component = getComponent({ ...props, onJoinClick, onRejectClick }); + const component = getComponent({ ...props, onJoinClick, onDeclineClick: onRejectClick }); await waitFor(() => expect(getPrimaryActionButton(component)).toBeTruthy()); if (expectSecondaryButton) expect(getSecondaryActionButton(component)).toBeFalsy(); fireEvent.click(getPrimaryActionButton(component)!); diff --git a/test/unit-tests/components/views/rooms/__snapshots__/RoomPreviewBar-test.tsx.snap b/test/unit-tests/components/views/rooms/__snapshots__/RoomPreviewBar-test.tsx.snap index e89552dd85..dc44db8d21 100644 --- a/test/unit-tests/components/views/rooms/__snapshots__/RoomPreviewBar-test.tsx.snap +++ b/test/unit-tests/components/views/rooms/__snapshots__/RoomPreviewBar-test.tsx.snap @@ -339,34 +339,6 @@ exports[` with an invite without an invited email for a dm roo
`; -exports[` with an invite without an invited email for a dm room renders join and reject action buttons with correct labels 1`] = ` -
-
- Start chatting -
-
- Reject & Ignore user -
-
- Reject -
-
-`; - exports[` with an invite without an invited email for a non-dm room renders invite message 1`] = `
with an invite without an invited email for a non-dm role="button" tabindex="0" > - Reject + Decline
`; @@ -435,7 +407,7 @@ exports[` with an invite without an invited email for a non-dm role="button" tabindex="0" > - Reject + Decline
with an invite without an invited email for a non-dm
`; - -exports[` with an invite without an invited email for a non-dm room renders reject and ignore action buttons when handler is provided 1`] = ` -
-
- Accept -
-
- Reject & Ignore user -
-
- Reject -
-
-`; diff --git a/test/unit-tests/components/views/settings/__snapshots__/Notifications-test.tsx.snap b/test/unit-tests/components/views/settings/__snapshots__/Notifications-test.tsx.snap index 25d06ffc23..f6fcc63262 100644 --- a/test/unit-tests/components/views/settings/__snapshots__/Notifications-test.tsx.snap +++ b/test/unit-tests/components/views/settings/__snapshots__/Notifications-test.tsx.snap @@ -10,22 +10,22 @@ exports[` main notification switches renders only enable notifi class="mx_SettingsFlag_label" >
Enable notifications for this account
Turn off to disable notifications on all your devices and sessions
main notification switches renders only enable notifi >