import config from "@payload-config";
import { headers as nextHeaders } from "next/headers";
import { redirect } from "next/navigation";
import { getPayload } from "payload";
import type { Ticket } from "@/payload-types";
import { TicketsView } from "@/components/frontend/helpdesk/TicketsView";
import { hasPermission } from "@/utils/access-control/hasPermission";
import { LifeBuoyIcon } from "lucide-react";
import { getTicketVoteSummaries } from "@/lib/tickets/voteState";
export const metadata = {
title: "Helpdesk: Polaris Task Force",
};
function HelpdeskDisabled() {
return (
Helpdesk
The Helpdesk is currently disabled by a unit admin.
);
}
export default async function HelpdeskPage() {
const headers = await nextHeaders();
const payload = await getPayload({ config });
const { user } = await payload.auth({
headers,
canSetHeaders: false,
});
if (!user) {
const pathname = headers.get("x-invoke-path") || "/helpdesk";
redirect(`/login?returnTo=${encodeURIComponent(pathname)}`);
}
const { helpdeskEnabled } = await payload.findGlobal({ slug: "game-rules" });
if (!helpdeskEnabled) {
return ;
}
const ticketsRes = await payload.find({
collection: "tickets",
sort: "-updatedAt",
limit: 200,
depth: 2,
});
const tickets = ticketsRes.docs as unknown as Ticket[];
const [isStaff, voteSummaries] = await Promise.all([
hasPermission(payload, user, "tickets:staff"),
getTicketVoteSummaries(
payload,
user.id,
tickets.map((ticket) => ticket.id),
),
]);
return (
Helpdesk
Submit and track support requests.
);
}