diff --git a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue index d81eb2080bf..bccfbf38a6f 100644 --- a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue +++ b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue @@ -15,8 +15,8 @@ :class="{ '!w-fit': collapsed, locked: isLockedByOther, - 'right-4': settings.get(moderationSettings.General.ChecklistPosition) === 'right', - 'left-4': settings.get(moderationSettings.General.ChecklistPosition) === 'left', + 'right-4': settings.get(moderationSettings.Checklist.Position) === 'right', + 'left-4': settings.get(moderationSettings.Checklist.Position) === 'left', }" >
@@ -1321,7 +1321,7 @@ onMounted(async () => { window.addEventListener('keydown', handleKeybinds) window.addEventListener('beforeunload', handleBeforeUnload) document.addEventListener('visibilitychange', handleVisibilityChange) - if (settings.value.get(moderationSettings.General.ChecklistPosition) === 'right') { + if (settings.value.get(moderationSettings.Checklist.Position) === 'right') { notifications.setNotificationLocation('left') } @@ -1618,7 +1618,13 @@ if (finishedId === projectV2.value.id) { localStorage.removeItem('moderation-checklist-finished') hasNextProject.value = moderationQueue.queueLength > 0 done.value = true -} else if (projectV2.value.status !== 'processing' && !reviewedAnyway.value) { +} else if ( + !reviewedAnyway.value && + !isEligibleQueueCandidate({ + isProcessing: projectV2.value.status === 'processing', + locked: false, + }) +) { alreadyReviewed.value = true } diff --git a/apps/frontend/src/pages/[type]/[project].vue b/apps/frontend/src/pages/[type]/[project].vue index cced1257560..efe1c348de4 100644 --- a/apps/frontend/src/pages/[type]/[project].vue +++ b/apps/frontend/src/pages/[type]/[project].vue @@ -2486,7 +2486,7 @@ function handleKeybinds(event) { if (!isStaff(auth.value.user)) return if ( !showModerationChecklist.value && - !modSettings.value.get(moderationSettings.General.ProjectKeybinds) + !modSettings.value.get(moderationSettings.Checklist.AlwaysAllowKeybinds) ) return diff --git a/apps/frontend/src/services/moderation/queue-eligibility.ts b/apps/frontend/src/services/moderation/queue-eligibility.ts index d6211697976..fe084a4b154 100644 --- a/apps/frontend/src/services/moderation/queue-eligibility.ts +++ b/apps/frontend/src/services/moderation/queue-eligibility.ts @@ -1,4 +1,5 @@ import type { AbstractModrinthClient } from '@modrinth/api-client' +import { moderationSettings } from '@modrinth/moderation' import type { ModerationQueueService } from './queue.ts' @@ -21,7 +22,12 @@ export interface EligibleQueueProject { const BATCH_SIZE = 5 export function isEligibleQueueCandidate(result: QueueCandidateCheck | undefined): boolean { - if (!result?.isProcessing) return false + if ( + !result || + (!result.isProcessing && + !useModerationSettings().value.get(moderationSettings.Checklist.IgnoreConditions)) + ) + return false return !result.locked || !!result.expired || !!result.isOwnLock } diff --git a/packages/moderation/src/data/settings.ts b/packages/moderation/src/data/settings.ts index 4e351979723..0737fabc755 100644 --- a/packages/moderation/src/data/settings.ts +++ b/packages/moderation/src/data/settings.ts @@ -2,24 +2,6 @@ import { setting } from '../types/settings.ts' const settings = { General: { - ChecklistPosition: setting.asEnum({ - type: 'enum', - id: 'checklist-position', - title: 'Checklist position', - description: 'Where the checklist should be displayed on the page', - entries: [ - { value: 'left', label: 'Left' }, - { value: 'right', label: 'Right' }, - ], - default: 'right', - }), - ProjectKeybinds: setting.asToggle({ - type: 'toggle', - id: 'project-keybinds', - title: 'Enable project keybinds', - description: 'Weather certain keybinds should work without the checklist visible.', - default: false, - }), PrivateMessageHighlight: setting.asToggle({ type: 'toggle', id: 'private-message-highlight', @@ -56,6 +38,33 @@ const settings = { default: null, }), }, + Checklist: { + Position: setting.asEnum({ + type: 'enum', + id: 'checklist-position', + title: 'Position', + description: 'Where the checklist should be displayed on the page', + entries: [ + { value: 'left', label: 'Left' }, + { value: 'right', label: 'Right' }, + ], + default: 'right', + }), + AlwaysAllowKeybinds: setting.asToggle({ + type: 'toggle', + id: 'checklist-always-allow-keybinds', + title: 'Always allow project keybinds', + description: 'Whether certain keybinds should work without the checklist visible.', + default: false, + }), + IgnoreConditions: setting.asToggle({ + type: 'toggle', + id: 'checklist-ignore-conditions', + title: 'Ignore checklist conditions', + description: 'Allow moderating projects the checklist normally auto skips.', + default: false, + }), + }, } as const export default settings diff --git a/packages/moderation/src/handles/settings.ts b/packages/moderation/src/handles/settings.ts index 35105e37a8f..ae682a38f5f 100644 --- a/packages/moderation/src/handles/settings.ts +++ b/packages/moderation/src/handles/settings.ts @@ -33,7 +33,7 @@ export class Settings { export function getMarginTarget(settings: Settings): string { return settings.get(moderationSettings.General.AdjustPageAlignment) == 'always' - ? settings.get(moderationSettings.General.ChecklistPosition) == 'right' + ? settings.get(moderationSettings.Checklist.Position) == 'right' ? 'r' : 'l' : 'x'