web: marginally improve audit events #128

Merged
Quaternions merged 2 commits from comment into staging 2025-04-12 02:41:15 +00:00
4 changed files with 47 additions and 13 deletions

View File

@@ -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),
}
})

View File

@@ -51,7 +51,7 @@ function LeaveAComment() {
)
}
export default function Comments(stats: CommentersProps) {
export function Comments(stats: CommentersProps) {
return (<>
<section className="comments">
{stats.comments_data.comments.length===0
@@ -65,5 +65,6 @@ export default function Comments(stats: CommentersProps) {
}
export {
type CreatorAndReviewStatus
type CreatorAndReviewStatus,
type Comment,
}

View File

@@ -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<SubmissionInfo | null>(null)
const [auditEvents, setAuditEvents] = useState<AuditEvent[]>([])
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 <Webpage>
@@ -76,8 +100,8 @@ export default function SubmissionInfoPage() {
<Webpage>
<main className="map-page-main">
<section className="review-section">
<RatingArea assetId={submission.AssetID} submissionId={dynamicId.submissionId} submissionStatus={submission.StatusID} submissionSubmitter={submission.Submitter}/>
<TitleAndComments name={submission.DisplayName} creator={submission.Creator} review={submission.StatusID} asset_id={submission.AssetID} submitter={submission.Submitter} uploaded_asset_id={submission.UploadedAssetID} comments={[]}/>
<RatingArea assetId={submission.AssetID} submissionId={submissionId} submissionStatus={submission.StatusID} submissionSubmitter={submission.Submitter}/>
<TitleAndComments name={submission.DisplayName} creator={submission.Creator} review={submission.StatusID} asset_id={submission.AssetID} submitter={submission.Submitter} uploaded_asset_id={submission.UploadedAssetID} comments={comments}/>
</section>
</main>
</Webpage>

View File

@@ -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}`;