All checks were successful
Build and Push Docker Image / build (push) Successful in 8m41s
- Fix dashboard default round selection to target active round instead of R1 - Move edition selector from dashboard header to hamburger menu via shared context - Add observer-friendly status labels (Not Reviewed / Under Review / Reviewed) - Fix pipeline completion: closed rounds show 100%, cap all rates at 100% - Round badge on projects list shows furthest round reached - Hide scores/evals for projects with zero evaluations - Enhance project detail round history with pass/reject indicators from ProjectRoundState - Remove irrelevant fields (Org Type, Budget, Duration) from project detail - Clickable juror workload with expandable project assignments - Humanize activity feed with icons and readable messages - Fix jurors table: responsive card layout on mobile - Fix criteria chart: horizontal bars for readable labels on mobile - Animate hamburger menu open/close with CSS grid transition Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
'use client'
|
|
|
|
import { BarChart3, Home, FolderKanban } from 'lucide-react'
|
|
import { RoleNav, type NavItem, type RoleNavUser } from '@/components/layouts/role-nav'
|
|
import { useEditionContext } from '@/components/observer/observer-edition-context'
|
|
import {
|
|
Select,
|
|
SelectContent,
|
|
SelectItem,
|
|
SelectTrigger,
|
|
SelectValue,
|
|
} from '@/components/ui/select'
|
|
|
|
interface ObserverNavProps {
|
|
user: RoleNavUser
|
|
}
|
|
|
|
function EditionSelector() {
|
|
const { programs, selectedProgramId, setSelectedProgramId } = useEditionContext()
|
|
|
|
if (programs.length <= 1) return null
|
|
|
|
return (
|
|
<Select value={selectedProgramId} onValueChange={setSelectedProgramId}>
|
|
<SelectTrigger className="w-full md:w-[180px]">
|
|
<SelectValue placeholder="Select edition" />
|
|
</SelectTrigger>
|
|
<SelectContent>
|
|
{programs.map((p) => (
|
|
<SelectItem key={p.id} value={p.id}>
|
|
{p.year ? `${p.year} Edition` : p.name ?? p.id}
|
|
</SelectItem>
|
|
))}
|
|
</SelectContent>
|
|
</Select>
|
|
)
|
|
}
|
|
|
|
export function ObserverNav({ user }: ObserverNavProps) {
|
|
const navigation: NavItem[] = [
|
|
{
|
|
name: 'Dashboard',
|
|
href: '/observer',
|
|
icon: Home,
|
|
},
|
|
{
|
|
name: 'Projects',
|
|
href: '/observer/projects',
|
|
icon: FolderKanban,
|
|
},
|
|
{
|
|
name: 'Reports',
|
|
href: '/observer/reports',
|
|
icon: BarChart3,
|
|
},
|
|
]
|
|
|
|
return (
|
|
<RoleNav
|
|
navigation={navigation}
|
|
roleName="Observer"
|
|
user={user}
|
|
basePath="/observer"
|
|
editionSelector={<EditionSelector />}
|
|
/>
|
|
)
|
|
}
|