vega-frontend-monorepo/libs/ui-toolkit/src/components/async-renderer/async-renderer.tsx
Bartłomiej Głownia 25699b6283
feat(#1643): orders table filtering (#2000)
* 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
2022-11-10 11:08:13 -08:00

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}</>;
}