From ff0330ec1b5c7149e982f6dfcdb1f1f23323612d Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Thu, 23 Feb 2023 17:52:47 +0100 Subject: [PATCH] feat(modal): add report success modal (also allows blocking user) --- external/lang | 2 +- src/controllers/modals/ModalController.tsx | 2 + src/controllers/modals/components/Report.tsx | 11 ++++ .../modals/components/ReportSuccess.tsx | 65 +++++++++++++++++++ src/controllers/modals/types.ts | 4 ++ 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/controllers/modals/components/ReportSuccess.tsx diff --git a/external/lang b/external/lang index 98592389..a8c77596 160000 --- a/external/lang +++ b/external/lang @@ -1 +1 @@ -Subproject commit 98592389def635f69f54afeef0a576405239a902 +Subproject commit a8c77596457bcc6f24d0a764c308df74e12633af diff --git a/src/controllers/modals/ModalController.tsx b/src/controllers/modals/ModalController.tsx index cd97cf49..bb3a80f7 100644 --- a/src/controllers/modals/ModalController.tsx +++ b/src/controllers/modals/ModalController.tsx @@ -42,6 +42,7 @@ import ModifyAccount from "./components/ModifyAccount"; import OutOfDate from "./components/OutOfDate"; import PendingFriendRequests from "./components/PendingFriendRequests"; import ReportContent from "./components/Report"; +import ReportSuccess from "./components/ReportSuccess"; import ServerIdentity from "./components/ServerIdentity"; import ServerInfo from "./components/ServerInfo"; import ShowToken from "./components/ShowToken"; @@ -278,4 +279,5 @@ export const modalController = new ModalControllerExtended({ user_picker: UserPicker, user_profile: UserProfile, report: ReportContent, + report_success: ReportSuccess, }); diff --git a/src/controllers/modals/components/Report.tsx b/src/controllers/modals/components/Report.tsx index d2c5175d..f3441e74 100644 --- a/src/controllers/modals/components/Report.tsx +++ b/src/controllers/modals/components/Report.tsx @@ -8,6 +8,7 @@ import { ModalForm, Row } from "@revoltchat/ui"; import Message from "../../../components/common/messaging/Message"; import UserShort from "../../../components/common/user/UserShort"; import { useClient } from "../../client/ClientController"; +import { modalController } from "../ModalController"; import { ModalProps } from "../types"; const CONTENT_REASONS: API.ContentReportReason[] = [ @@ -126,6 +127,16 @@ export default function ReportContent({ }, additional_context, }); + + modalController.push({ + type: "report_success", + user: + target instanceof MessageInterface + ? target.author + : target instanceof User + ? target + : undefined, + }); }} submit={{ children: , diff --git a/src/controllers/modals/components/ReportSuccess.tsx b/src/controllers/modals/components/ReportSuccess.tsx new file mode 100644 index 00000000..9e1afd85 --- /dev/null +++ b/src/controllers/modals/components/ReportSuccess.tsx @@ -0,0 +1,65 @@ +import { Text } from "preact-i18n"; + +import { Modal } from "@revoltchat/ui"; + +import { noopTrue } from "../../../lib/js"; + +import { ModalProps } from "../types"; + +/** + * Report success modal + */ +export default function ReportSuccess({ + user, + ...props +}: ModalProps<"report_success">) { + return ( + } + description={ + <> + + {user && ( + <> +
+
+ + + )} + + } + actions={ + user + ? [ + { + palette: "plain", + onClick: async () => { + user.blockUser(); + return true; + }, + children: ( + + ), + }, + { + palette: "plain-secondary", + onClick: noopTrue, + children: ( + + ), + }, + ] + : [ + { + palette: "plain", + onClick: noopTrue, + children: ( + + ), + }, + ] + } + /> + ); +} diff --git a/src/controllers/modals/types.ts b/src/controllers/modals/types.ts index e09736a2..8cdfa375 100644 --- a/src/controllers/modals/types.ts +++ b/src/controllers/modals/types.ts @@ -183,6 +183,10 @@ export type Modal = { type: "report"; target: Server | User | Message; } + | { + type: "report_success"; + user?: User; + } ); export type ModalProps = Modal & { type: T } & {