]> Untitled Git - lemmy-ui.git/blob - src/shared/components/private_message/private-message-report.tsx
Make comment depth easier to track visually
[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 { mdToHtml, myAuth, 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 && (
49           <div>
50             {pmr.resolved ? (
51               <T i18nKey="resolved_by">
52                 #
53                 <PersonListing person={r.resolver} />
54               </T>
55             ) : (
56               <T i18nKey="unresolved_by">
57                 #
58                 <PersonListing person={r.resolver} />
59               </T>
60             )}
61           </div>
62         )}
63         <button
64           className="btn btn-link btn-animate text-muted py-0"
65           onClick={linkEvent(this, this.handleResolveReport)}
66           data-tippy-content={tippyContent}
67           aria-label={tippyContent}
68         >
69           <Icon
70             icon="check"
71             classes={`icon-inline ${
72               pmr.resolved ? "text-success" : "text-danger"
73             }`}
74           />
75         </button>
76       </div>
77     );
78   }
79
80   handleResolveReport(i: PrivateMessageReport) {
81     let pmr = i.props.report.private_message_report;
82     let auth = myAuth();
83     if (auth) {
84       let form: ResolvePrivateMessageReport = {
85         report_id: pmr.id,
86         resolved: !pmr.resolved,
87         auth,
88       };
89       WebSocketService.Instance.send(
90         wsClient.resolvePrivateMessageReport(form)
91       );
92     }
93   }
94 }