import { ApolloError, ApolloQueryResult, MaybeMasked, OperationVariables, useQuery } from '@apollo/client'; import { DocumentNode } from 'graphql'; interface UsePaginatedQueryProps { query: DocumentNode; input: { [key: string]: any; // for the custom inputs filter: { terms?: string | null; offset?: number | null; size?: number | null; }; }; } interface UsePaginatedQueryReturn { data?: MaybeMasked | undefined; loading: boolean; error: ApolloError | undefined; refetch: ( variables?: Partial | undefined ) => Promise>>; } export function usePaginatedQuery(props: UsePaginatedQueryProps): UsePaginatedQueryReturn { const { data, loading, error, refetch } = useQuery(props.query, { variables: { input: props.input } }); return { data, loading, error, refetch }; }