import { Splash } from '../splash'; import type { ReactNode } from 'react'; import { t } from '@vegaprotocol/react-helpers'; interface AsyncRendererProps { loading: boolean; loadingMessage?: string; error: Error | undefined | null; errorMessage?: string; data: T | undefined; noDataMessage?: string; children?: ReactNode | null; render?: (data: T) => ReactNode; noDataCondition?(data: T): boolean; } export function AsyncRenderer({ loading, loadingMessage, error, errorMessage, data, noDataMessage, noDataCondition, children, render, }: AsyncRendererProps) { if (error) { return ( {errorMessage ? errorMessage : t(`Something went wrong: ${error.message}`)} ); } if (loading) { return {loadingMessage ? loadingMessage : t('Loading...')}; } if (!data || (noDataCondition && noDataCondition(data))) { return {noDataMessage ? noDataMessage : t('No data')}; } // eslint-disable-next-line react/jsx-no-useless-fragment return <>{render ? render(data) : children}; }