Просмотр исходного кода

fix(core): Fix custom field resolver for eager translatable relation (#2457)

Fixes #2453
armitjs 2 лет назад
Родитель
Сommit
09dd7df5e3

+ 8 - 0
packages/core/src/api/common/custom-field-relation-resolver.service.ts

@@ -55,6 +55,14 @@ export class CustomFieldRelationResolverService {
 
 
         const result = fieldDef.list ? await qb.getMany() : await qb.getOne();
         const result = fieldDef.list ? await qb.getMany() : await qb.getOne();
 
 
+        return await this.translateEntity(ctx, result, fieldDef);
+    }
+
+    async translateEntity(
+        ctx: RequestContext,
+        result: VendureEntity | VendureEntity[] | null,
+        fieldDef: RelationCustomFieldConfig,
+    ) {
         if (fieldDef.entity === ProductVariant) {
         if (fieldDef.entity === ProductVariant) {
             if (Array.isArray(result)) {
             if (Array.isArray(result)) {
                 await Promise.all(result.map(r => this.applyVariantPrices(ctx, r as any)));
                 await Promise.all(result.map(r => this.applyVariantPrices(ctx, r as any)));

+ 5 - 3
packages/core/src/api/config/generate-resolvers.ts

@@ -207,10 +207,12 @@ function generateCustomFieldRelationResolvers(
                 args: any,
                 args: any,
                 context: any,
                 context: any,
             ) => {
             ) => {
-                if (source[fieldDef.name] != null) {
-                    return source[fieldDef.name];
-                }
                 const ctx: RequestContext = context.req[REQUEST_CONTEXT_KEY];
                 const ctx: RequestContext = context.req[REQUEST_CONTEXT_KEY];
+                const eagerEntity = source[fieldDef.name];
+                // If the relation is eager-loaded, we can simply try to translate this relation entity if they have translations
+                if (eagerEntity != null) {
+                    return customFieldRelationResolverService.translateEntity(ctx, eagerEntity, fieldDef);
+                }
                 const entityId = source[ENTITY_ID_KEY];
                 const entityId = source[ENTITY_ID_KEY];
                 return customFieldRelationResolverService.resolveRelation({
                 return customFieldRelationResolverService.resolveRelation({
                     ctx,
                     ctx,