diff --git a/src/app/(admin)/admin/competitions/[competitionId]/assignments/page.tsx b/src/app/(admin)/admin/competitions/[competitionId]/assignments/page.tsx index fc070c4..4991a1f 100644 --- a/src/app/(admin)/admin/competitions/[competitionId]/assignments/page.tsx +++ b/src/app/(admin)/admin/competitions/[competitionId]/assignments/page.tsx @@ -30,9 +30,16 @@ export default function AssignmentsDashboardPage() { id: competitionId, }) + const { data: selectedRound } = trpc.round.getById.useQuery( + { id: selectedRoundId }, + { enabled: !!selectedRoundId } + ) + + const requiredReviews = (selectedRound?.configJson as Record)?.requiredReviewsPerProject as number || 3 + const { data: unassignedQueue, isLoading: isLoadingQueue } = trpc.roundAssignment.unassignedQueue.useQuery( - { roundId: selectedRoundId, requiredReviews: 3 }, + { roundId: selectedRoundId, requiredReviews }, { enabled: !!selectedRoundId } ) @@ -111,7 +118,7 @@ export default function AssignmentsDashboardPage() { - + @@ -119,7 +126,7 @@ export default function AssignmentsDashboardPage() { Unassigned Projects - Projects with fewer than 3 assignments + Projects with fewer than {requiredReviews} assignments @@ -143,7 +150,7 @@ export default function AssignmentsDashboardPage() {

- {project.assignmentCount || 0} / 3 assignments + {project.assignmentCount || 0} / {requiredReviews} assignments
))} @@ -162,6 +169,7 @@ export default function AssignmentsDashboardPage() { roundId={selectedRoundId} open={previewSheetOpen} onOpenChange={setPreviewSheetOpen} + requiredReviews={requiredReviews} /> )} diff --git a/src/app/(admin)/admin/juries/[groupId]/page.tsx b/src/app/(admin)/admin/juries/[groupId]/page.tsx index c1ece75..54efaac 100644 --- a/src/app/(admin)/admin/juries/[groupId]/page.tsx +++ b/src/app/(admin)/admin/juries/[groupId]/page.tsx @@ -33,7 +33,6 @@ import { DialogTitle, } from '@/components/ui/dialog' import { Textarea } from '@/components/ui/textarea' -import { Switch } from '@/components/ui/switch' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Table, @@ -523,11 +522,6 @@ function SettingsForm({ group, onSave, isPending }: SettingsFormProps) { name: group.name, description: group.description || '', defaultMaxAssignments: group.defaultMaxAssignments, - defaultCapMode: group.defaultCapMode, - softCapBuffer: group.softCapBuffer, - categoryQuotasEnabled: group.categoryQuotasEnabled, - allowJurorCapAdjustment: group.allowJurorCapAdjustment, - allowJurorRatioAdjustment: group.allowJurorRatioAdjustment, }) const handleSubmit = (e: React.FormEvent) => { @@ -562,99 +556,20 @@ function SettingsForm({ group, onSave, isPending }: SettingsFormProps) { /> -
-
- - - setFormData({ ...formData, defaultMaxAssignments: parseInt(e.target.value, 10) }) - } - /> -
- -
- - -
-
- - {formData.defaultCapMode === 'SOFT' && ( -
- - - setFormData({ ...formData, softCapBuffer: parseInt(e.target.value, 10) }) - } - /> -

- Number of assignments allowed above the cap when in soft mode -

-
- )} - -
-
-
- -

- Enable category-based assignment quotas -

-
- - setFormData({ ...formData, categoryQuotasEnabled: checked }) - } - /> -
- -
-
- -

- Allow jurors to set their own assignment cap during onboarding -

-
- - setFormData({ ...formData, allowJurorCapAdjustment: checked }) - } - /> -
- -
-
- -

- Allow jurors to set their own startup/concept ratio during onboarding -

-
- - setFormData({ ...formData, allowJurorRatioAdjustment: checked }) - } - /> -
+
+ + + setFormData({ ...formData, defaultMaxAssignments: parseInt(e.target.value, 10) || 15 }) + } + /> +

+ Suggested cap for new members. Per-member overrides and juror self-service preferences take priority. +

+ {autosaveStatus === 'saving' && ( + + + Saving... + + )} + {autosaveStatus === 'saved' && ( + + + Saved + + )} + {autosaveStatus === 'error' && ( + + + Save failed + )}
+
+ + +