I'm trying to create a generic wrapper component for apollo graphql results. I want this wrapper to wait for the query to complete successfully then render a component that was passed into the props. The passed in component should have props of type QueryResult<T>.
This code snippet gives me an error on Col 66 saying
Cannot find name 'T'.ts(2304)
import React from 'react';
import { QueryResult } from 'react-apollo';
import { useSandboxContext } from 'src/js/shared/components/SandboxContext';
import { ErrorContent } from 'src/js/shared/components/ErrorContent';
import { PageSpinner } from 'src/js/shared/components/PageSpinner';
interface WrapperComponentProps<T> extends QueryResult<T> {
// TODO: figure out how to specify that the wrapped component takes the results
// Something like this `React.ReactType<QueryResult<T>>` but this causes errors
wrappedComponent: React.ReactType;
}
// Getting an error from `React.FC<WrapperComponentProps<T>>`
// `Cannot find name 'T'.ts(2304)`
export const ApolloResultWrapper: React.FC<WrapperComponentProps<T>> = <T extends object>(props: WrapperComponentProps<T>) => {
const sandbox = useSandboxContext();
if (props.error) {
sandbox.logger.error('query failed', props.error);
return <ErrorContent />
}
if (props.loading) {
return <PageSpinner />;
}
if (!props.data) {
return <ErrorContent />
}
// TODO: figure out how to spread all the props except wrappedComponent
return <props.wrappedComponent {...props} wrappedComponent={undefined} />;
}