Implement eager load relations on graphqlQueries (#4391)
* Implement eager load relations on graphqlQueries * Fix tests * Fixes * Fixes
This commit is contained in:
@ -0,0 +1,37 @@
|
||||
import { isUndefined } from '@sniptt/guards';
|
||||
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapFieldMetadataToGraphQLQuery } from '@/object-metadata/utils/mapFieldMetadataToGraphQLQuery';
|
||||
import { shouldFieldBeQueried } from '@/object-metadata/utils/shouldFieldBeQueried';
|
||||
|
||||
export const mapObjectMetadataToGraphQLQuery = ({
|
||||
objectMetadataItems,
|
||||
objectMetadataItem,
|
||||
depth = 1,
|
||||
eagerLoadedRelations,
|
||||
}: {
|
||||
objectMetadataItems: ObjectMetadataItem[];
|
||||
objectMetadataItem: Pick<ObjectMetadataItem, 'fields'>;
|
||||
depth?: number;
|
||||
eagerLoadedRelations?: Record<string, any>;
|
||||
}): any => {
|
||||
return `{
|
||||
__typename
|
||||
${(objectMetadataItem?.fields ?? [])
|
||||
.filter((field) => field.isActive)
|
||||
.filter((field) =>
|
||||
shouldFieldBeQueried({ field, depth, eagerLoadedRelations }),
|
||||
)
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery({
|
||||
objectMetadataItems,
|
||||
field,
|
||||
relationFieldDepth: depth,
|
||||
relationFieldEagerLoad: isUndefined(eagerLoadedRelations)
|
||||
? undefined
|
||||
: eagerLoadedRelations[field.name] ?? undefined,
|
||||
}),
|
||||
)
|
||||
.join('\n')}
|
||||
}`;
|
||||
};
|
||||
Reference in New Issue
Block a user