1 import { None } from "@sniptt/monads";
2 import { Component, linkEvent } from "inferno";
3 import { T } from "inferno-i18next-dess";
9 } from "lemmy-js-client";
10 import { i18n } from "../../i18next";
11 import { WebSocketService } from "../../services";
12 import { auth, wsClient } from "../../utils";
13 import { Icon } from "../common/icon";
14 import { PersonListing } from "../person/person-listing";
15 import { PostListing } from "./post-listing";
17 interface PostReportProps {
18 report: PostReportView;
21 export class PostReport extends Component<PostReportProps, any> {
22 constructor(props: any, context: any) {
23 super(props, context);
27 let r = this.props.report;
29 let tippyContent = i18n.t(
30 r.post_report.resolved ? "unresolve_report" : "resolve_report"
33 // Set the original post data ( a troll could change it )
34 post.name = r.post_report.original_post_name;
35 post.url = r.post_report.original_post_url;
36 post.body = r.post_report.original_post_body;
39 creator: r.post_creator,
40 community: r.community,
41 creator_banned_from_community: r.creator_banned_from_community,
43 subscribed: SubscribedType.NotSubscribed,
46 creator_blocked: false,
59 enableDownvotes={true}
67 {i18n.t("reporter")}: <PersonListing person={r.creator} />
70 {i18n.t("reason")}: {r.post_report.reason}
75 {r.post_report.resolved ? (
76 <T i18nKey="resolved_by">
78 <PersonListing person={resolver} />
81 <T i18nKey="unresolved_by">
83 <PersonListing person={resolver} />
91 className="btn btn-link btn-animate text-muted py-0"
92 onClick={linkEvent(this, this.handleResolveReport)}
93 data-tippy-content={tippyContent}
94 aria-label={tippyContent}
98 classes={`icon-inline ${
99 r.post_report.resolved ? "text-success" : "text-danger"
107 handleResolveReport(i: PostReport) {
108 let form = new ResolvePostReport({
109 report_id: i.props.report.post_report.id,
110 resolved: !i.props.report.post_report.resolved,
111 auth: auth().unwrap(),
113 WebSocketService.Instance.send(wsClient.resolvePostReport(form));