web: mapfixes: rename all occurrences of submission with mapfix

This commit is contained in:
Quaternions 2025-04-01 14:24:36 -07:00
parent 97180ab263
commit 146d627534
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131
7 changed files with 63 additions and 63 deletions

@ -1,4 +1,4 @@
import type { SubmissionInfo } from "@/app/ts/Submission";
import type { MapfixInfo } from "@/app/ts/Mapfix";
import { Button } from "@mui/material"
import Window from "./_window";
import SendIcon from '@mui/icons-material/Send';
@ -9,10 +9,10 @@ interface CommentersProps {
}
interface CreatorAndReviewStatus {
asset_id: SubmissionInfo["AssetID"],
creator: SubmissionInfo["DisplayName"],
review: SubmissionInfo["StatusID"],
status_message: SubmissionInfo["StatusMessage"],
asset_id: MapfixInfo["AssetID"],
creator: MapfixInfo["DisplayName"],
review: MapfixInfo["StatusID"],
status_message: MapfixInfo["StatusMessage"],
comments: Comment[],
name: string
}

@ -1,7 +1,7 @@
import { SubmissionInfo } from "@/app/ts/Submission"
import { MapfixInfo } from "@/app/ts/Mapfix"
interface AssetID {
id: SubmissionInfo["AssetID"]
id: MapfixInfo["AssetID"]
}
function MapImage() {
@ -11,4 +11,4 @@ function MapImage() {
export {
type AssetID,
MapImage
}
}

@ -7,17 +7,17 @@ type Review = Actions | "Accept" | "Validate" | "Upload" | "Reset Uploading
interface ReviewButton {
name: Review,
action: ApiActions,
submissionId: string,
mapfixId: string,
color: ButtonOwnProps["color"]
}
interface ReviewId {
submissionId: string
mapfixId: string
}
async function ReviewButtonClicked(action: ApiActions, submissionId: string) {
async function ReviewButtonClicked(action: ApiActions, mapfixId: string) {
try {
const response = await fetch(`/api/submissions/${submissionId}/status/${action}`, {
const response = await fetch(`/api/mapfixes/${mapfixId}/status/${action}`, {
method: "POST",
headers: {
"Content-type": "application/json",
@ -33,7 +33,7 @@ async function ReviewButtonClicked(action: ApiActions, submissionId: string) {
window.location.reload();
} catch (error) {
console.error("Error updating submission status:", error);
console.error("Error updating mapfix status:", error);
}
}
@ -41,11 +41,11 @@ function ReviewButton(props: ReviewButton) {
return <Button
color={props.color}
variant="contained"
onClick={() => { ReviewButtonClicked(props.action, props.submissionId) }}>{props.name}</Button>
onClick={() => { ReviewButtonClicked(props.action, props.mapfixId) }}>{props.name}</Button>
}
export default function ReviewButtons(props: ReviewId) {
const submissionId = props.submissionId
const mapfixId = props.mapfixId
// When is each button visible?
// Multiple buttons can be visible at once.
// Action | Role | When Current Status is One of:
@ -61,14 +61,14 @@ export default function ReviewButtons(props: ReviewId) {
// ResetUploading | MapAdmin | Uploading
return (
<section className="review-set">
<ReviewButton color="info" name="Submit" action="submit" submissionId={submissionId}/>
<ReviewButton color="info" name="Revoke" action="revoke" submissionId={submissionId}/>
<ReviewButton color="info" name="Accept" action="trigger-validate" submissionId={submissionId}/>
<ReviewButton color="info" name="Validate" action="retry-validate" submissionId={submissionId}/>
<ReviewButton color="error" name="Reject" action="reject" submissionId={submissionId}/>
<ReviewButton color="info" name="Upload" action="trigger-upload" submissionId={submissionId}/>
<ReviewButton color="error" name="Reset Uploading (fix softlocked status)" action="reset-uploading" submissionId={submissionId}/>
<ReviewButton color="error" name="Reset Validating (fix softlocked status)" action="reset-validating" submissionId={submissionId}/>
<ReviewButton color="info" name="Submit" action="submit" mapfixId={mapfixId}/>
<ReviewButton color="info" name="Revoke" action="revoke" mapfixId={mapfixId}/>
<ReviewButton color="info" name="Accept" action="trigger-validate" mapfixId={mapfixId}/>
<ReviewButton color="info" name="Validate" action="retry-validate" mapfixId={mapfixId}/>
<ReviewButton color="error" name="Reject" action="reject" mapfixId={mapfixId}/>
<ReviewButton color="info" name="Upload" action="trigger-upload" mapfixId={mapfixId}/>
<ReviewButton color="error" name="Reset Uploading (fix softlocked status)" action="reset-uploading" mapfixId={mapfixId}/>
<ReviewButton color="error" name="Reset Validating (fix softlocked status)" action="reset-validating" mapfixId={mapfixId}/>
</section>
)
}

@ -1,6 +1,6 @@
"use client"
import { SubmissionInfo, SubmissionStatusToString } from "@/app/ts/Submission";
import { MapfixInfo, MapfixStatusToString } from "@/app/ts/Mapfix";
import type { CreatorAndReviewStatus } from "./_comments";
import { MapImage } from "./_map";
import { useParams } from "next/navigation";
@ -15,7 +15,7 @@ import { useState, useEffect } from "react";
import "./(styles)/page.scss";
interface ReviewId {
submissionId: string
mapfixId: string
}
function Ratings() {
@ -39,20 +39,20 @@ function Ratings() {
)
}
function RatingArea(submission: ReviewId) {
function RatingArea(mapfix: ReviewId) {
return (
<aside className="review-area">
<section className="map-image-area">
<MapImage/>
</section>
<Ratings/>
<ReviewButtons submissionId={submission.submissionId}/>
<ReviewButtons mapfixId={mapfix.mapfixId}/>
</aside>
)
}
function TitleAndComments(stats: CreatorAndReviewStatus) {
const Review = SubmissionStatusToString(stats.review)
const Review = MapfixStatusToString(stats.review)
// TODO: hide status message when status is not "Accepted"
return (
@ -72,22 +72,22 @@ function TitleAndComments(stats: CreatorAndReviewStatus) {
)
}
export default function SubmissionInfoPage() {
const dynamicId = useParams<{submissionId: string}>()
export default function MapfixInfoPage() {
const dynamicId = useParams<{mapfixId: string}>()
const [submission, setSubmission] = useState<SubmissionInfo | null>(null)
const [mapfix, setMapfix] = useState<MapfixInfo | null>(null)
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}`)
async function getMapfix() {
const res = await fetch(`/api/mapfixes/${dynamicId.mapfixId}`)
if (res.ok) {
setSubmission(await res.json())
setMapfix(await res.json())
}
}
getSubmission()
}, [dynamicId.submissionId])
getMapfix()
}, [dynamicId.mapfixId])
if (!submission) {
if (!mapfix) {
return <Webpage>
{/* TODO: Add skeleton loading thingy ? Maybe ? (https://mui.com/material-ui/react-skeleton/) */}
</Webpage>
@ -96,8 +96,8 @@ export default function SubmissionInfoPage() {
<Webpage>
<main className="map-page-main">
<section className="review-section">
<RatingArea submissionId={dynamicId.submissionId}/>
<TitleAndComments name={submission.DisplayName} creator={submission.Creator} review={submission.StatusID} status_message={submission.StatusMessage} asset_id={submission.AssetID} comments={[]}/>
<RatingArea mapfixId={dynamicId.mapfixId}/>
<TitleAndComments name={mapfix.DisplayName} creator={mapfix.Creator} review={mapfix.StatusID} status_message={mapfix.StatusMessage} asset_id={mapfix.AssetID} comments={[]}/>
</section>
</main>
</Webpage>

@ -38,4 +38,4 @@ export default function SubmissionCard(props: SubmissionCardProps) {
</div>
</Link>
);
}
}

@ -1,20 +1,20 @@
'use client'
import React, { useState, useEffect } from "react";
import { SubmissionInfo } from "../ts/Submission";
import SubmissionCard from "./_card";
import { MapfixInfo } from "../ts/Mapfix";
import MapfixCard from "./_card";
import Webpage from "@/app/_components/webpage";
import "./(styles)/page.scss";
export default function SubmissionInfoPage() {
const [submissions, setSubmissions] = useState<SubmissionInfo[]>([])
export default function MapfixInfoPage() {
const [mapfixes, setMapfixes] = useState<MapfixInfo[]>([])
const [currentPage, setCurrentPage] = useState(0);
const cardsPerPage = 24; // built to fit on a 1920x1080 monitor
const totalPages = Math.ceil(submissions.length / cardsPerPage);
const totalPages = Math.ceil(mapfixes.length / cardsPerPage);
const currentCards = submissions.slice(
const currentCards = mapfixes.slice(
currentPage * cardsPerPage,
(currentPage + 1) * cardsPerPage
);
@ -32,19 +32,19 @@ export default function SubmissionInfoPage() {
};
useEffect(() => {
async function fetchSubmissions() {
const res = await fetch('/api/submissions?Page=1&Limit=100')
async function fetchMapfixes() {
const res = await fetch('/api/mapfixes?Page=1&Limit=100')
if (res.ok) {
setSubmissions(await res.json())
setMapfixes(await res.json())
}
}
setTimeout(() => {
fetchSubmissions()
fetchMapfixes()
}, 50);
}, [])
if (!submissions) {
if (!mapfixes) {
return <Webpage>
<main>
Loading...
@ -52,10 +52,10 @@ export default function SubmissionInfoPage() {
</Webpage>
}
if (submissions && submissions.length == 0) {
if (mapfixes && mapfixes.length == 0) {
return <Webpage>
<main>
Submissions list is empty.
Mapfixes list is empty.
</main>
</Webpage>
}
@ -93,14 +93,14 @@ export default function SubmissionInfoPage() {
<button onClick={nextPage} disabled={currentPage === totalPages - 1}>&gt;</button>
</div>
<div className="grid">
{currentCards.map((submission) => (
<SubmissionCard
key={submission.ID}
id={submission.ID}
assetId={submission.AssetID}
displayName={submission.DisplayName}
author={submission.Creator}
rating={submission.StatusID}
{currentCards.map((mapfix) => (
<MapfixCard
key={mapfix.ID}
id={mapfix.ID}
assetId={mapfix.AssetID}
displayName={mapfix.DisplayName}
author={mapfix.Creator}
rating={mapfix.StatusID}
/>
))}
</div>

@ -27,8 +27,8 @@ interface MapfixInfo {
readonly StatusMessage: string,
}
function MapfixStatusToString(submission_status: MapfixStatus): string {
switch (submission_status) {
function MapfixStatusToString(mapfix_status: MapfixStatus): string {
switch (mapfix_status) {
case MapfixStatus.Rejected:
return "REJECTED"
case MapfixStatus.Uploading: