feat: 添加 QuarterNavigator 组件
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { ChevronLeft, ChevronRight } from 'lucide-react';
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
interface QuarterNavigatorProps {
|
||||
current: string;
|
||||
quarters: string[];
|
||||
onNavigate: (quarter: string) => void;
|
||||
}
|
||||
|
||||
export function QuarterNavigator({ current, quarters, onNavigate }: QuarterNavigatorProps) {
|
||||
const currentIndex = quarters.indexOf(current);
|
||||
const canGoPrev = currentIndex > 0;
|
||||
const canGoNext = currentIndex < quarters.length - 1;
|
||||
|
||||
return (
|
||||
<div className="flex flex-col md:flex-row items-center justify-between gap-8 mb-12">
|
||||
{/* 上一个季度按钮 */}
|
||||
<button
|
||||
disabled={!canGoPrev}
|
||||
className={cn(
|
||||
'nav-button',
|
||||
'order-2 md:order-1',
|
||||
'flex items-center justify-center',
|
||||
'w-12 h-12 md:w-16 md:h-16',
|
||||
'bg-white dark:bg-gray-800',
|
||||
'border-4 border-black',
|
||||
'shadow-hard',
|
||||
'hover:translate-y-0.5 hover:shadow-none',
|
||||
'transition-all',
|
||||
!canGoPrev && 'opacity-50 cursor-not-allowed'
|
||||
)}
|
||||
onClick={() => canGoPrev && onNavigate(quarters[currentIndex - 1])}
|
||||
aria-label="Previous quarter"
|
||||
>
|
||||
<ChevronLeft className="w-8 h-8 md:w-10 md:h-10" />
|
||||
</button>
|
||||
|
||||
{/* 当前季度显示 */}
|
||||
<div className="text-center order-1 md:order-2 flex-1">
|
||||
<div className="inline-block bg-primary border-4 border-black px-10 py-4 shadow-hard font-display font-bold text-4xl md:text-5xl mb-4 rotate-1">
|
||||
{current}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 下一个季度按钮 */}
|
||||
<button
|
||||
disabled={!canGoNext}
|
||||
className={cn(
|
||||
'nav-button',
|
||||
'order-3',
|
||||
'flex items-center justify-center',
|
||||
'w-12 h-12 md:w-16 md:h-16',
|
||||
'bg-white dark:bg-gray-800',
|
||||
'border-4 border-black',
|
||||
'shadow-hard',
|
||||
'hover:translate-y-0.5 hover:shadow-none',
|
||||
'transition-all',
|
||||
!canGoNext && 'opacity-50 cursor-not-allowed'
|
||||
)}
|
||||
onClick={() => canGoNext && onNavigate(quarters[currentIndex + 1])}
|
||||
aria-label="Next quarter"
|
||||
>
|
||||
<ChevronRight className="w-8 h-8 md:w-10 md:h-10" />
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user