/ components / SlideNav.tsx
SlideNav.tsx
 1  import { MessageSquarePlus, Presentation, ChevronLeft, ChevronRight } from 'lucide-react';
 2  import { Button } from '@/components/ui/button';
 3  import { Badge } from '@/components/ui/badge';
 4  import { Progress } from '@/components/ui/progress';
 5  import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
 6  
 7  interface Props {
 8    current: number;
 9    total: number;
10    onPrev: () => void;
11    onNext: () => void;
12    commentCount?: number;
13    onSubmitReview?: () => void;
14  }
15  
16  export function SlideNav({ current, total, onPrev, onNext, commentCount = 0, onSubmitReview }: Props) {
17    const isOverview = current === 0;
18    const progress = isOverview ? 0 : total > 1 ? ((current - 1) / (total - 1)) * 100 : 100;
19  
20    return (
21      <div className="border-t">
22        <Progress value={progress} className="h-1 rounded-none" />
23        <div className="flex items-center justify-between px-6 py-4">
24          <Tooltip>
25            <TooltipTrigger asChild>
26              <Button variant="outline" onClick={onPrev} disabled={isOverview} size="sm" className="gap-1">
27                <ChevronLeft className="h-4 w-4" />
28                Prev
29              </Button>
30            </TooltipTrigger>
31            <TooltipContent>Previous slide (←)</TooltipContent>
32          </Tooltip>
33  
34          <span className="text-sm text-muted-foreground flex items-center gap-1.5">
35            <Presentation className="h-3.5 w-3.5" />
36            {isOverview ? 'Overview' : `${current} / ${total}`}
37          </span>
38  
39          <div className="flex items-center gap-2">
40            {onSubmitReview && (
41              <Button variant="outline" size="sm" onClick={onSubmitReview} className="gap-1.5">
42                <MessageSquarePlus className="h-3.5 w-3.5" />
43                Submit review
44                {commentCount > 0 && (
45                  <Badge variant="secondary" className="ml-0.5 h-5 min-w-[20px] px-1.5 text-xs">
46                    {commentCount}
47                  </Badge>
48                )}
49              </Button>
50            )}
51            <Tooltip>
52              <TooltipTrigger asChild>
53                <Button variant="outline" onClick={onNext} disabled={current >= total} size="sm" className="gap-1">
54                  Next
55                  <ChevronRight className="h-4 w-4" />
56                </Button>
57              </TooltipTrigger>
58              <TooltipContent>Next slide (→)</TooltipContent>
59            </Tooltip>
60          </div>
61        </div>
62      </div>
63    );
64  }