diff --git a/apps/web/src/components/review/ReviewHeader.tsx b/apps/web/src/components/review/ReviewHeader.tsx index d0b19d3..44e55fc 100644 --- a/apps/web/src/components/review/ReviewHeader.tsx +++ b/apps/web/src/components/review/ReviewHeader.tsx @@ -25,6 +25,7 @@ interface PhaseOption { } interface ReviewHeaderProps { + ref?: React.Ref; phases: PhaseOption[]; activePhaseId: string | null; isReadOnly?: boolean; @@ -44,6 +45,7 @@ interface ReviewHeaderProps { } export function ReviewHeader({ + ref, phases, activePhaseId, isReadOnly, @@ -95,7 +97,7 @@ export function ReviewHeader({ const total = totalCount ?? 0; return ( -
+
{/* Phase selector row */} {phases.length > 1 && (
diff --git a/apps/web/src/components/review/ReviewTab.tsx b/apps/web/src/components/review/ReviewTab.tsx index b44a1ef..4c4fa13 100644 --- a/apps/web/src/components/review/ReviewTab.tsx +++ b/apps/web/src/components/review/ReviewTab.tsx @@ -323,11 +323,10 @@ export function ReviewTab({ initiativeId }: ReviewTabProps) { } return ( -
+
{/* Header: phase selector + toolbar */} -
-
({ id: p.id, name: p.name, status: p.status }))} activePhaseId={activePhaseId} isReadOnly={isActivePhaseCompleted} @@ -345,11 +344,9 @@ export function ReviewTab({ initiativeId }: ReviewTabProps) { viewedCount={viewedFiles.size} totalCount={allFiles.length} /> -
-
{/* Main content area — sidebar always rendered to preserve state */} -
+
{/* Left: Sidebar — sticky to viewport, scrolls independently */}