import React, { DependencyList, useEffect, useState } from "react"; import { Spinner } from "@patternfly/react-core"; import { useErrorHandler } from "react-error-boundary"; import { asyncStateFetch } from "../../context/auth/AdminClient"; type DataLoaderProps = { loader: () => Promise; deps?: DependencyList; children: ((arg: T) => any) | React.ReactNode; }; export function DataLoader(props: DataLoaderProps) { const [data, setData] = useState(); const handleError = useErrorHandler(); useEffect(() => { return asyncStateFetch( () => props.loader(), (result) => setData(result), handleError ); }, props.deps || []); if (data) { if (props.children instanceof Function) { return props.children(data); } return props.children; } return (
); }