Implement eager load relations on graphqlQueries (#4391)
* Implement eager load relations on graphqlQueries * Fix tests * Fixes * Fixes
This commit is contained in:
@ -1,50 +0,0 @@
|
||||
import { useApolloClient } from '@apollo/client/react/hooks/useApolloClient';
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
import { useMapFieldMetadataToGraphQLQuery } from '@/object-metadata/hooks/useMapFieldMetadataToGraphQLQuery';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { QueryMethodName } from '@/object-metadata/types/QueryMethodName';
|
||||
|
||||
export const useCachedRootQuery = ({
|
||||
objectMetadataItem,
|
||||
queryMethodName,
|
||||
}: {
|
||||
objectMetadataItem: ObjectMetadataItem | undefined;
|
||||
queryMethodName: QueryMethodName;
|
||||
}) => {
|
||||
const mapFieldMetadataToGraphQLQuery = useMapFieldMetadataToGraphQLQuery();
|
||||
const apolloClient = useApolloClient();
|
||||
|
||||
if (!objectMetadataItem) {
|
||||
return { cachedRootQuery: null };
|
||||
}
|
||||
|
||||
const buildRecordFieldsFragment = () => {
|
||||
return objectMetadataItem.fields
|
||||
.filter((field) => field.type !== 'RELATION')
|
||||
.map((field) => mapFieldMetadataToGraphQLQuery({ field }))
|
||||
.join(' \n');
|
||||
};
|
||||
|
||||
const cacheReadFragment = gql`
|
||||
fragment RootQuery on Query {
|
||||
${
|
||||
QueryMethodName.FindMany === queryMethodName
|
||||
? objectMetadataItem.namePlural
|
||||
: objectMetadataItem.nameSingular
|
||||
} {
|
||||
${QueryMethodName.FindMany === queryMethodName ? 'edges { node { ' : ''}
|
||||
${buildRecordFieldsFragment()}
|
||||
${QueryMethodName.FindMany === queryMethodName ? '}}' : ''}
|
||||
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const cachedRootQuery = apolloClient.readFragment({
|
||||
id: 'ROOT_QUERY',
|
||||
fragment: cacheReadFragment,
|
||||
});
|
||||
|
||||
return { cachedRootQuery };
|
||||
};
|
||||
Reference in New Issue
Block a user