Fix multiple UI/UX issues and invite token migration

Fixes:
- Round edit: Add cache invalidation for voting dates
- Criteria weights: Replace number input with visual slider
- Member invite: Per-member expertise tags with suggestions
  - Tags now added per member, not globally
  - Comma key support for quick tag entry
  - Suggested tags based on ocean/business expertise
- Accept-invite: Add Suspense boundary for useSearchParams
- Add missing inviteToken columns migration

The invite token columns were accidentally skipped in prototype1
migration. This adds them with IF NOT EXISTS checks.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-03 15:25:28 +01:00
parent 3986da172f
commit 8be740a4fb
5 changed files with 272 additions and 133 deletions

View File

@@ -6,6 +6,7 @@ import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import { Textarea } from '@/components/ui/textarea'
import { Switch } from '@/components/ui/switch'
import { Slider } from '@/components/ui/slider'
import { Badge } from '@/components/ui/badge'
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'
import {
@@ -236,24 +237,29 @@ export function EvaluationFormBuilder({
<div className="space-y-2">
<Label htmlFor={`weight-${criterion.id}`}>
Weight (optional)
Weight: {editDraft.weight ?? 1}x
</Label>
<Input
id={`weight-${criterion.id}`}
type="number"
min={0}
step={0.1}
value={editDraft.weight ?? ''}
onChange={(e) =>
updateDraft({
weight: e.target.value
? parseFloat(e.target.value)
: undefined,
})
}
placeholder="1"
disabled={disabled}
/>
<div className="flex items-center gap-3">
<span className="text-xs text-muted-foreground w-4">0.5</span>
<Slider
id={`weight-${criterion.id}`}
min={0.5}
max={3}
step={0.5}
value={[editDraft.weight ?? 1]}
onValueChange={(v) => updateDraft({ weight: v[0] })}
disabled={disabled}
className="flex-1"
/>
<span className="text-xs text-muted-foreground w-4">3</span>
</div>
<p className="text-xs text-muted-foreground">
{(editDraft.weight ?? 1) === 1
? 'Normal importance'
: (editDraft.weight ?? 1) < 1
? 'Lower importance'
: 'Higher importance'}
</p>
</div>
<div className="space-y-2">