import type { ReactNode } from 'react' import { AlertCircle, RefreshCwIcon } from 'lucide-react' import { Button } from '@evobgp/ui/components/button' import { Skeleton } from '@evobgp/ui/components/skeleton' import { EmptyState } from './empty-state' interface QueryStateProps { data: T | undefined isLoading: boolean isError: boolean error?: unknown empty?: boolean emptyTitle?: string emptyDescription?: string emptyAction?: ReactNode onRetry?: () => void skeleton?: ReactNode children: (data: T) => ReactNode } export function QueryState({ data, isLoading, isError, error, empty, emptyTitle = 'Нет данных', emptyDescription, emptyAction, onRetry, skeleton, children, }: QueryStateProps) { if (isLoading) { return <>{skeleton ?? } } if (isError) { return ( } title="Ошибка загрузки" description={error instanceof Error ? error.message : 'Не удалось загрузить данные'} action={ onRetry ? ( ) : null } /> ) } if (empty || data == null) { return } return <>{children(data)} } function DefaultSkeleton() { return (
) }