* feat(#1643): add grid set filter, amend filters in orders table * feat(#1643): strictly type variables in orders data provider * feat(#1643): add date range param to orders query * feat(#1643): add date range filter * feat(#1643): handle data provider updates after variables change in ag-grid infinite row model * feat(#1643): fix unit tests * feat(#1643): use DateRangeFilter in positions table instead of agDateColumnFilter * feat(#1643): add date range filter support to orders data provider * feat(#1643): fix update functions * feat(#1643): remove sortable from orders list columns * chore: remove console.log
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { Splash } from '../splash';
|
|
import type { ReactNode } from 'react';
|
|
import { t } from '@vegaprotocol/react-helpers';
|
|
|
|
interface AsyncRendererProps<T> {
|
|
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<T = object>({
|
|
loading,
|
|
loadingMessage,
|
|
error,
|
|
errorMessage,
|
|
data,
|
|
noDataMessage,
|
|
noDataCondition,
|
|
children,
|
|
render,
|
|
}: AsyncRendererProps<T>) {
|
|
if (error) {
|
|
return (
|
|
<Splash>
|
|
{errorMessage
|
|
? errorMessage
|
|
: t(`Something went wrong: ${error.message}`)}
|
|
</Splash>
|
|
);
|
|
}
|
|
|
|
if (loading) {
|
|
return <Splash>{loadingMessage ? loadingMessage : t('Loading...')}</Splash>;
|
|
}
|
|
|
|
if (!data || (noDataCondition && noDataCondition(data))) {
|
|
return <Splash>{noDataMessage ? noDataMessage : t('No data')}</Splash>;
|
|
}
|
|
// eslint-disable-next-line react/jsx-no-useless-fragment
|
|
return <>{render ? render(data) : children}</>;
|
|
}
|