]> Untitled Git - lemmy-ui.git/blob - src/shared/components/private_message/private-message-report.tsx
Merge branch 'LemmyNet:main' into multiple-images-upload
[lemmy-ui.git] / src / shared / components / private_message / private-message-report.tsx
1 import { Component, linkEvent } from "inferno";
2 import { T } from "inferno-i18next-dess";
3 import {
4   PrivateMessageReportView,
5   ResolvePrivateMessageReport,
6 } from "lemmy-js-client";
7 import { i18n } from "../../i18next";
8 import { WebSocketService } from "../../services";
9 import { auth, mdToHtml, wsClient } from "../../utils";
10 import { Icon } from "../common/icon";
11 import { PersonListing } from "../person/person-listing";
12
13 interface Props {
14   report: PrivateMessageReportView;
15 }
16
17 export class PrivateMessageReport extends Component<Props, any> {
18   constructor(props: any, context: any) {
19     super(props, context);
20   }
21
22   render() {
23     let r = this.props.report;
24     let pmr = r.private_message_report;
25     let tippyContent = i18n.t(
26       r.private_message_report.resolved ? "unresolve_report" : "resolve_report"
27     );
28
29     return (
30       <div>
31         <div>
32           {i18n.t("creator")}:{" "}
33           <PersonListing person={r.private_message_creator} />
34         </div>
35         <div>
36           {i18n.t("message")}:
37           <div
38             className="md-div"
39             dangerouslySetInnerHTML={mdToHtml(pmr.original_pm_text)}
40           />
41         </div>
42         <div>
43           {i18n.t("reporter")}: <PersonListing person={r.creator} />
44         </div>
45         <div>
46           {i18n.t("reason")}: {pmr.reason}
47         </div>
48         {r.resolver.match({
49           some: resolver => (
50             <div>
51               {pmr.resolved ? (
52                 <T i18nKey="resolved_by">
53                   #
54                   <PersonListing person={resolver} />
55                 </T>
56               ) : (
57                 <T i18nKey="unresolved_by">
58                   #
59                   <PersonListing person={resolver} />
60                 </T>
61               )}
62             </div>
63           ),
64           none: <></>,
65         })}
66         <button
67           className="btn btn-link btn-animate text-muted py-0"
68           onClick={linkEvent(this, this.handleResolveReport)}
69           data-tippy-content={tippyContent}
70           aria-label={tippyContent}
71         >
72           <Icon
73             icon="check"
74             classes={`icon-inline ${
75               pmr.resolved ? "text-success" : "text-danger"
76             }`}
77           />
78         </button>
79       </div>
80     );
81   }
82
83   handleResolveReport(i: PrivateMessageReport) {
84     let pmr = i.props.report.private_message_report;
85     let form = new ResolvePrivateMessageReport({
86       report_id: pmr.id,
87       resolved: !pmr.resolved,
88       auth: auth().unwrap(),
89     });
90     WebSocketService.Instance.send(wsClient.resolvePrivateMessageReport(form));
91   }
92 }