diff --git a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx index e3cc4b9..5a10850 100644 --- a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx +++ b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx @@ -1,3 +1,5 @@ +import { Roles } from "@/app/ts/Roles"; +import { SubmissionStatus } from "@/app/ts/Submission"; import { Button, ButtonOwnProps } from "@mui/material"; import { useState, useEffect } from "react"; @@ -60,8 +62,8 @@ export default function ReviewButtons(props: ReviewId) { // Upload | MapAdmin | Validated // ResetUploading | MapAdmin | Uploading const { submissionId } = props; - const [roles, setRoles] = useState<string[]>([]); - const [status, setStatus] = useState<string | null>(null); + const [roles, setRoles] = useState<Roles>(Roles.Empty); + const [status, setStatus] = useState<SubmissionStatus>(SubmissionStatus.UnderConstruction); const [loading, setLoading] = useState(true); useEffect(() => { @@ -93,36 +95,37 @@ export default function ReviewButtons(props: ReviewId) { const visibleButtons: ReviewButton[] = []; - if (roles.includes("Submitter")) { - if (["UnderConstruction", "ChangesRequested"].includes(status!)) { + const is_submitter = false; // TODO: MY_USER === submission.Submitter + if (is_submitter) { + if ([SubmissionStatus.UnderConstruction, SubmissionStatus.ChangesRequested].includes(status!)) { visibleButtons.push({ name: "Submit", action: "submit", color: "info", submissionId }); } - if (["Submitted", "ChangesRequested"].includes(status!)) { + if ([SubmissionStatus.Submitted, SubmissionStatus.ChangesRequested].includes(status!)) { visibleButtons.push({ name: "Revoke", action: "revoke", color: "info", submissionId }); } } - if (roles.includes("Reviewer")) { - if (status === "Submitted") { + if (roles&Roles.SubmissionReview) { + if (status === SubmissionStatus.Submitted) { visibleButtons.push({ name: "Accept", action: "trigger-validate", color: "info", submissionId }); visibleButtons.push({ name: "Reject", action: "reject", color: "error", submissionId }); } - if (status === "Accepted") { + if (status === SubmissionStatus.Accepted) { visibleButtons.push({ name: "Validate", action: "retry-validate", color: "info", submissionId }); } - if (status === "Validating") { + if (status === SubmissionStatus.Validating) { visibleButtons.push({ name: "Reset Validating (fix softlocked status)", action: "reset-validating", color: "error", submissionId }); } - if (["Validated", "Accepted", "Submitted"].includes(status!)) { + if ([SubmissionStatus.Validated, SubmissionStatus.Accepted, SubmissionStatus.Submitted].includes(status!)) { visibleButtons.push({ name: "Request Changes", action: "request-changes", color: "error", submissionId }); } } - if (roles.includes("MapAdmin")) { - if (status === "Validated") { + if (roles&Roles.SubmissionUpload) { + if (status === SubmissionStatus.Validated) { visibleButtons.push({ name: "Upload", action: "trigger-upload", color: "info", submissionId }); } - if (status === "Uploading") { + if (status === SubmissionStatus.Uploading) { visibleButtons.push({ name: "Reset Uploading (fix softlocked status)", action: "reset-uploading", color: "error", submissionId }); } } diff --git a/web/src/app/ts/Roles.ts b/web/src/app/ts/Roles.ts new file mode 100644 index 0000000..af94e36 --- /dev/null +++ b/web/src/app/ts/Roles.ts @@ -0,0 +1,15 @@ +// Submissions roles bitflag +enum Roles { + SubmissionUpload = 1 << 6, + SubmissionReview = 1 << 5, + SubmissionRelease = 1 << 4, + ScriptWrite = 1 << 3, + MapfixUpload = 1 << 2, + MapfixReview = 1 << 1, + MapDownload = 1 << 0, + Empty = 0 +} + +export { + Roles, +}