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 { Button } from "@mui/material"
import Window from "./_window"; import Window from "./_window";
import SendIcon from '@mui/icons-material/Send'; import SendIcon from '@mui/icons-material/Send';
@ -9,10 +9,10 @@ interface CommentersProps {
} }
interface CreatorAndReviewStatus { interface CreatorAndReviewStatus {
asset_id: SubmissionInfo["AssetID"], asset_id: MapfixInfo["AssetID"],
creator: SubmissionInfo["DisplayName"], creator: MapfixInfo["DisplayName"],
review: SubmissionInfo["StatusID"], review: MapfixInfo["StatusID"],
status_message: SubmissionInfo["StatusMessage"], status_message: MapfixInfo["StatusMessage"],
comments: Comment[], comments: Comment[],
name: string name: string
} }

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

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

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

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

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

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