1
0
Fork 0

feat: group reports by author if not urgent

lea-dev
Paul Makles 2023-10-26 00:20:19 +01:00
parent 8246232461
commit bbaff35812
1 changed files with 60 additions and 17 deletions

View File

@ -3,30 +3,73 @@ import { CardLink } from "@/components/common/CardLink";
import { Input } from "@/components/ui/input";
import { fetchOpenReports } from "@/lib/db";
import { PizzaIcon } from "lucide-react";
import { Report } from "revolt-api";
export default async function Reports() {
const reports = (await fetchOpenReports())
.reverse()
.sort((b, _) => (b.content.report_reason.includes("Illegal") ? -1 : 0));
return (
<div className="flex flex-col gap-2">
<Input placeholder="Search for reports..." disabled />
{reports.length
? reports.map((report) => (
<CardLink key={report._id} href={`/panel/reports/${report._id}`}>
<ReportCard report={report} />
</CardLink>
))
: (<>
<h2 className="mt-8 flex justify-center">
<PizzaIcon className="text-gray-400" />
</h2>
<h3 className="text-xs text-center pb-2 text-gray-400">
You&lsquo;ve caught up for now.
</h3>
</>)
const byCategory: Record<string, Report[]> = {
Urgent: [],
All: [],
};
const keyOrder = ["Urgent", "All"];
const countsByAuthor: Record<string, number> = {};
for (const report of reports) {
if (report.content.report_reason.includes("Illegal")) {
byCategory.Urgent.push(report);
} else {
countsByAuthor[report.author_id] =
(countsByAuthor[report.author_id] || 0) + 1;
}
}
for (const report of reports) {
if (!report.content.report_reason.includes("Illegal")) {
if (countsByAuthor[report.author_id] > 1) {
if (!keyOrder.includes(report.author_id)) {
keyOrder.push(report.author_id);
byCategory[report.author_id] = [];
}
byCategory[report.author_id].push(report);
} else {
byCategory.All.push(report);
}
}
}
return (
<div className="flex flex-col gap-8">
{/*<Input placeholder="Search for reports..." disabled />*/}
{reports.length ? (
keyOrder.map((key) => {
return (
<div key={key} className="flex flex-col gap-2">
<h1 className="text-2xl">{key}</h1>
{byCategory[key].map((report) => (
<CardLink
key={report._id}
href={`/panel/reports/${report._id}`}
>
<ReportCard report={report} />
</CardLink>
))}{" "}
</div>
);
})
) : (
<>
<h2 className="mt-8 flex justify-center">
<PizzaIcon className="text-gray-400" />
</h2>
<h3 className="text-xs text-center pb-2 text-gray-400">
You&lsquo;ve caught up for now.
</h3>
</>
)}
</div>
);
}