'use client' import { TrendingUp, TrendingDown } from 'lucide-react' import { Card } from '@/components/ui/card' interface StatCardProps { title: string icon: React.ComponentType<{ className?: string }> current: number change: number description: string onClick?: () => void // ЭТАП 1: Добавляем прибыло/убыло arrived?: number departed?: number showMovements?: boolean // ЭТАП 3: Добавляем индикатор загрузки isLoading?: boolean } export function StatCard({ title, icon: Icon, current, change, description, onClick, // ЭТАП 1: Добавляем прибыло/убыло arrived = 0, departed = 0, showMovements = false, // ЭТАП 3: Добавляем индикатор загрузки isLoading = false, }: StatCardProps) { const formatNumber = (num: number): string => { if (num === 0) return '0' return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') } // ЭТАП 2: Расчёт процентного изменения const getPercentageChange = (): string => { if (current === 0 || change === 0) return '' const percentage = Math.round((Math.abs(change) / current) * 100) return `${change > 0 ? '+' : '-'}${percentage}%` } return (

{title}

{/* ЭТАП 3: Скелетон при загрузке или реальные данные */} {isLoading ? (
) : (

{formatNumber(current)}

)} {/* ОТКАТ ЭТАП 3: Убрать индикатор загрузки */} {/*

{formatNumber(current)}

*/}
{change !== 0 && (
0 ? 'text-green-400' : 'text-red-400' }`}>
{change > 0 ? ( ) : ( )} {Math.abs(change)}
{/* ЭТАП 2: Отображение процентного изменения */} {getPercentageChange() && (
{getPercentageChange()}
)}
)} {/* ОТКАТ ЭТАП 2: Убрать процентное изменение */} {/* {change !== 0 && (
0 ? 'text-green-400' : 'text-red-400' }`}> {change > 0 ? ( ) : ( )} {Math.abs(change)}
)} */}
{/* ЭТАП 1: Отображение прибыло/убыло */} {showMovements && (
{/* ЭТАП 3: Скелетон для движений при загрузке */} {isLoading ? ( <>
|
) : ( <> +{formatNumber(arrived)} | -{formatNumber(departed)} )} {/* ОТКАТ ЭТАП 3: Убрать скелетон для движений */} {/* +{formatNumber(arrived)} | -{formatNumber(departed)} */}
)}

{description}

{/* ОТКАТ ЭТАП 1: Убрать прибыло/убыло */} {/*

{description}

*/}
) }