diff --git a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx index a25a0f5..d721b2e 100644 --- a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx +++ b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx @@ -1,4 +1,4 @@ -import { Roles } from "@/app/ts/Roles"; +import { Roles, RolesConstants } from "@/app/ts/Roles"; import { SubmissionStatus } from "@/app/ts/Submission"; import { Button, ButtonOwnProps } from "@mui/material"; import { useState, useEffect } from "react"; @@ -65,7 +65,7 @@ export default function ReviewButtons(props: ReviewId) { // ResetUploading | MapAdmin | Uploading const { submissionId, submissionStatus } = props; const [user, setUser] = useState<number|null>(null); - const [roles, setRoles] = useState<Roles>(Roles.Empty); + const [roles, setRoles] = useState<Roles>(RolesConstants.Empty); const [loading, setLoading] = useState(true); useEffect(() => { @@ -101,7 +101,7 @@ export default function ReviewButtons(props: ReviewId) { } } - if (roles&Roles.SubmissionReview) { + if (roles&RolesConstants.SubmissionReview) { if (submissionStatus === SubmissionStatus.Submitted) { visibleButtons.push({ name: "Accept", action: "trigger-validate", color: "info", submissionId }); visibleButtons.push({ name: "Reject", action: "reject", color: "error", submissionId }); @@ -117,7 +117,7 @@ export default function ReviewButtons(props: ReviewId) { } } - if (roles&Roles.SubmissionUpload) { + if (roles&RolesConstants.SubmissionUpload) { if (submissionStatus === SubmissionStatus.Validated) { visibleButtons.push({ name: "Upload", action: "trigger-upload", color: "info", submissionId }); } diff --git a/web/src/app/ts/Roles.ts b/web/src/app/ts/Roles.ts index af94e36..57a7d9d 100644 --- a/web/src/app/ts/Roles.ts +++ b/web/src/app/ts/Roles.ts @@ -1,15 +1,25 @@ -// 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 +type Roles = number; + +// Constants +const RolesConstants = { + All: -1 as Roles, + SubmissionUpload: 1 << 6 as Roles, + SubmissionReview: 1 << 5 as Roles, + SubmissionRelease: 1 << 4 as Roles, + ScriptWrite: 1 << 3 as Roles, + MapfixUpload: 1 << 2 as Roles, + MapfixReview: 1 << 1 as Roles, + MapDownload: 1 << 0 as Roles, + Empty: 0 as Roles, +}; + +// Operations +function hasRole(flags: Roles, role: Roles): boolean { + return (flags & role) === role; } export { - Roles, -} + type Roles, + RolesConstants, + hasRole, +};