1 import { myAuthRequired } from "@utils/app";
2 import { Component, InfernoNode, linkEvent } from "inferno";
3 import { T } from "inferno-i18next-dess";
4 import { PostReportView, PostView, ResolvePostReport } from "lemmy-js-client";
5 import { I18NextService } from "../../services";
6 import { Icon, Spinner } from "../common/icon";
7 import { PersonListing } from "../person/person-listing";
8 import { PostListing } from "./post-listing";
10 interface PostReportProps {
11 report: PostReportView;
12 onResolveReport(form: ResolvePostReport): void;
15 interface PostReportState {
19 export class PostReport extends Component<PostReportProps, PostReportState> {
20 state: PostReportState = {
24 constructor(props: any, context: any) {
25 super(props, context);
28 componentWillReceiveProps(
29 nextProps: Readonly<{ children?: InfernoNode } & PostReportProps>,
31 if (this.props !== nextProps) {
32 this.setState({ loading: false });
37 const r = this.props.report;
38 const resolver = r.resolver;
40 const tippyContent = I18NextService.i18n.t(
41 r.post_report.resolved ? "unresolve_report" : "resolve_report",
44 // Set the original post data ( a troll could change it )
45 post.name = r.post_report.original_post_name;
46 post.url = r.post_report.original_post_url;
47 post.body = r.post_report.original_post_body;
48 const pv: PostView = {
50 creator: r.post_creator,
51 community: r.community,
52 creator_banned_from_community: r.creator_banned_from_community,
54 subscribed: "NotSubscribed",
57 creator_blocked: false,
63 <div className="post-report">
67 enableDownvotes={true}
73 // All of these are unused, since its view only
76 onPostReport={() => {}}
77 onBlockPerson={() => {}}
79 onDeletePost={() => {}}
80 onRemovePost={() => {}}
82 onFeaturePost={() => {}}
83 onPurgePerson={() => {}}
84 onPurgePost={() => {}}
85 onBanPersonFromCommunity={() => {}}
86 onBanPerson={() => {}}
87 onAddModToCommunity={() => {}}
89 onTransferCommunity={() => {}}
90 onMarkPostAsRead={() => {}}
93 {I18NextService.i18n.t("reporter")}:{" "}
94 <PersonListing person={r.creator} />
97 {I18NextService.i18n.t("reason")}: {r.post_report.reason}
101 {r.post_report.resolved ? (
102 <T i18nKey="resolved_by">
104 <PersonListing person={resolver} />
107 <T i18nKey="unresolved_by">
109 <PersonListing person={resolver} />
115 className="btn btn-link btn-animate text-muted py-0"
116 onClick={linkEvent(this, this.handleResolveReport)}
117 data-tippy-content={tippyContent}
118 aria-label={tippyContent}
120 {this.state.loading ? (
125 classes={`icon-inline ${
126 r.post_report.resolved ? "text-success" : "text-danger"
135 handleResolveReport(i: PostReport) {
136 i.setState({ loading: true });
137 i.props.onResolveReport({
138 report_id: i.props.report.post_report.id,
139 resolved: !i.props.report.post_report.resolved,
140 auth: myAuthRequired(),