Add AI eligibility toggle and include-submitted filter for awards

- Add useAiEligibility boolean to SpecialAward schema (default true)
- Toggle on creation form lets admins disable AI for feeling-based awards
- Detail page shows "Load All Projects" when AI is off vs "Run AI Eligibility"
- Include Submitted toggle lets admins include SUBMITTED-status projects
- Fix perPage: 200 → 100 to match user.list validation max
- Fix edition display on award detail page
- Add migration for new column

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-02 20:02:58 +01:00
parent e34cafebbf
commit 8931da98ba
5 changed files with 85 additions and 21 deletions

View File

@@ -22,6 +22,7 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
import { Switch } from '@/components/ui/switch'
import { toast } from 'sonner'
import { ArrowLeft, Save, Loader2 } from 'lucide-react'
@@ -33,6 +34,7 @@ export default function CreateAwardPage() {
const [scoringMode, setScoringMode] = useState<
'PICK_WINNER' | 'RANKED' | 'SCORED'
>('PICK_WINNER')
const [useAiEligibility, setUseAiEligibility] = useState(true)
const [maxRankedPicks, setMaxRankedPicks] = useState('3')
const [programId, setProgramId] = useState('')
@@ -47,6 +49,7 @@ export default function CreateAwardPage() {
name: name.trim(),
description: description.trim() || undefined,
criteriaText: criteriaText.trim() || undefined,
useAiEligibility,
scoringMode,
maxRankedPicks:
scoringMode === 'RANKED' ? parseInt(maxRankedPicks) : undefined,
@@ -140,6 +143,21 @@ export default function CreateAwardPage() {
</p>
</div>
<div className="flex items-center justify-between rounded-lg border p-4">
<div className="space-y-0.5">
<Label htmlFor="ai-toggle">AI Eligibility</Label>
<p className="text-xs text-muted-foreground">
Use AI to automatically evaluate project eligibility based on the criteria above.
Turn off for awards decided by feeling or manual selection.
</p>
</div>
<Switch
id="ai-toggle"
checked={useAiEligibility}
onCheckedChange={setUseAiEligibility}
/>
</div>
<div className="grid gap-4 sm:grid-cols-2">
<div className="space-y-2">
<Label htmlFor="scoring">Scoring Mode</Label>