console/packages/web/app/src/components/v2/data-wrapper.tsx
2024-05-17 14:30:10 +02:00

29 lines
805 B
TypeScript

import { Component, ReactNode } from 'react';
import { AnyVariables, UseQueryState } from 'urql';
import { QueryError } from '@/components/ui/query-error';
export class DataWrapper<TData, TVariables extends AnyVariables> extends Component<{
query: UseQueryState<TData, TVariables>;
showStale?: boolean;
organizationId: string | null;
children(props: { data: TData }): ReactNode;
spinnerComponent?: ReactNode;
}> {
render() {
const { query, children, spinnerComponent } = this.props;
const { fetching, error, data } = query;
if (fetching) {
return spinnerComponent;
}
if (error) {
return <QueryError organizationId={this.props.organizationId} error={error} />;
}
if (!data) {
return spinnerComponent;
}
return children({ data });
}
}