feat(mod): tickets+team tabs; retire HK writes for live ACL
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 30s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-22 21:35:35 +02:00
1 parent 084cca6ea4
commit 75cace41ea
16 files changed
+735 -1002

No files matched your search

@@ -85,18 +85,29 @@ export function AdminTicketDetail({
staffMembers,
currentUserId,
canEdit,
listHref = "/admin/tickets",
userLinkMode = "admin",
}: {
ticket: TicketInfo;
messages: TicketMessage[];
staffMembers: StaffMember[];
currentUserId: number;
canEdit: boolean;
listHref?: string;
userLinkMode?: "admin" | "public";
}) {
const [messages] = useState(initialMessages);
const [reply, setReply] = useState("");
const { run, isPending } = useServerAction();
const messagesEndRef = useRef<HTMLDivElement>(null);
function creatorHref() {
if (userLinkMode === "public") {
return `/u/${encodeURIComponent(ticket.creator.username)}`;
}
return `/admin/users/show/${ticket.creator.id}`;
}
// biome-ignore lint/correctness/useExhaustiveDependencies: explicitly chosen here, see surrounding code
useEffect(() => {
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
@@ -152,7 +163,7 @@ export function AdminTicketDetail({
<div className="space-y-6">
{/* Header */}
<div className="flex items-start gap-4">
<Link href="/admin/tickets">
<Link href={listHref}>
<Button variant="ghost" size="icon">
<ArrowLeft className="h-4 w-4" />
</Button>
@@ -382,7 +393,7 @@ export function AdminTicketDetail({
</CardHeader>
<CardContent className="space-y-2">
<Link
href={`/admin/users/show/${ticket.creator.id}`}
href={creatorHref()}
className="flex items-center gap-2 text-sm font-medium hover:text-primary"
>
<User className="h-3.5 w-3.5" />
+8 -2
View File
@@ -29,7 +29,13 @@ const STATUS_VARIANT: Record<
closed: "secondary",
};
export function TicketsTable({ data }: { data: PaginatedResult<TicketRow> }) {
export function TicketsTable({
data,
basePath = "/admin/tickets",
}: {
data: PaginatedResult<TicketRow>;
basePath?: string;
}) {
const t = useTranslations("pages.admin.tickets");
const statusLabel: Record<string, string> = {
@@ -51,7 +57,7 @@ export function TicketsTable({ data }: { data: PaginatedResult<TicketRow> }) {
#{row.id}
</span>
<Link
href={`/admin/tickets/${row.id}`}
href={`${basePath}/${row.id}`}
className="font-medium truncate hover:underline"
>
{row.subject}