diff --git a/web/src/app/mapfixes/[mapfixId]/page.tsx b/web/src/app/mapfixes/[mapfixId]/page.tsx index 0422a11..97bd0a1 100644 --- a/web/src/app/mapfixes/[mapfixId]/page.tsx +++ b/web/src/app/mapfixes/[mapfixId]/page.tsx @@ -86,9 +86,16 @@ export default function MapfixInfoPage() { }, [mapfixId]) const comments:Comment[] = auditEvents.map((auditEvent) => { + let user = auditEvent.User.toString(); + if (auditEvent.User == 9223372036854776000) { + user = "[Validator]"; + } + if (mapfix && auditEvent.User == mapfix.Submitter) { + user = "[Submitter]"; + } return { date: auditEvent.CreatedAt, - name: auditEvent.User.toString(), + name: user, comment: auditEventMessage(auditEvent), } }) diff --git a/web/src/app/submissions/[submissionId]/_comments.tsx b/web/src/app/submissions/[submissionId]/_comments.tsx index ce82c92..722194c 100644 --- a/web/src/app/submissions/[submissionId]/_comments.tsx +++ b/web/src/app/submissions/[submissionId]/_comments.tsx @@ -51,7 +51,7 @@ function LeaveAComment() { ) } -export default function Comments(stats: CommentersProps) { +export function Comments(stats: CommentersProps) { return (<>
{stats.comments_data.comments.length===0 @@ -65,5 +65,6 @@ export default function Comments(stats: CommentersProps) { } export { - type CreatorAndReviewStatus + type CreatorAndReviewStatus, + type Comment, } diff --git a/web/src/app/submissions/[submissionId]/page.tsx b/web/src/app/submissions/[submissionId]/page.tsx index 62b4e30..2a0b83e 100644 --- a/web/src/app/submissions/[submissionId]/page.tsx +++ b/web/src/app/submissions/[submissionId]/page.tsx @@ -5,7 +5,8 @@ import type { CreatorAndReviewStatus } from "./_comments"; import { MapImage } from "./_mapImage"; import { useParams } from "next/navigation"; import ReviewButtons from "./_reviewButtons"; -import Comments from "./_comments"; +import { Comments, Comment } from "./_comments"; +import { AuditEvent, decodeAuditEvent as auditEventMessage } from "@/app/ts/AuditEvent"; import Webpage from "@/app/_components/webpage"; import Link from "next/link"; import { useState, useEffect } from "react"; @@ -53,19 +54,42 @@ function TitleAndComments(stats: CreatorAndReviewStatus) { } export default function SubmissionInfoPage() { - const dynamicId = useParams<{submissionId: string}>() + const { submissionId } = useParams < { submissionId: string } >() const [submission, setSubmission] = useState(null) + const [auditEvents, setAuditEvents] = useState([]) useEffect(() => { // needs to be client sided since server doesn't have a session, nextjs got mad at me for exporting an async function: (https://nextjs.org/docs/messages/no-async-client-component) async function getSubmission() { - const res = await fetch(`/api/submissions/${dynamicId.submissionId}`) + const res = await fetch(`/api/submissions/${submissionId}`) if (res.ok) { setSubmission(await res.json()) } } - getSubmission() - }, [dynamicId.submissionId]) + async function getAuditEvents() { + const res = await fetch(`/api/submissions/${submissionId}/audit-events?Page=1&Limit=100`) + if (res.ok) { + setAuditEvents(await res.json()) + } + } + getSubmission() + getAuditEvents() + }, [submissionId]) + + const comments:Comment[] = auditEvents.map((auditEvent) => { + let user = auditEvent.User.toString(); + if (auditEvent.User == 9223372036854776000) { + user = "[Validator]"; + } + if (submission && auditEvent.User == submission.Submitter) { + user = "[Submitter]"; + } + return { + date: auditEvent.CreatedAt, + name: user, + comment: auditEventMessage(auditEvent), + } + }) if (!submission) { return @@ -76,8 +100,8 @@ export default function SubmissionInfoPage() {
- - + +
diff --git a/web/src/app/ts/AuditEvent.ts b/web/src/app/ts/AuditEvent.ts index eabcaff..089f468 100644 --- a/web/src/app/ts/AuditEvent.ts +++ b/web/src/app/ts/AuditEvent.ts @@ -1,3 +1,5 @@ +import { SubmissionStatusToString } from "./Submission"; + // Shared audit event types export enum AuditEventType { Action = 0, @@ -65,16 +67,16 @@ export function decodeAuditEvent(event: AuditEvent): string { switch (event.EventType) { case AuditEventType.Action:{ const data = event.EventData as AuditEventDataAction; - return `status changed to ${data.target_status}`; + return `Changed status to ${SubmissionStatusToString(data.target_status)}`; }case AuditEventType.Comment:{ const data = event.EventData as AuditEventDataComment; return data.comment; }case AuditEventType.ChangeModel:{ const data = event.EventData as AuditEventDataChangeModel; - return `model changed to asset id = ${data.new_model_id}`; + return `Model changed to asset id = ${data.new_model_id}`; }case AuditEventType.ChangeValidatedModel:{ const data = event.EventData as AuditEventDataChangeValidatedModel; - return `model validated as asset id = ${data.validated_model_id}`; + return `Model validated as asset id = ${data.validated_model_id}`; }case AuditEventType.ChangeDisplayName:{ const data = event.EventData as AuditEventDataChangeName; return `DisplayName changed to ${data.new_name}`;