Parcourir la source

feat(core): Add `ProductOption.group` field & resolver

Relates to #378
Michael Bromley il y a 5 ans
Parent
commit
f20e108684

+ 1 - 0
packages/admin-ui/src/lib/core/src/common/generated-types.ts

@@ -2730,6 +2730,7 @@ export type ProductOption = Node & {
   code: Scalars['String'];
   code: Scalars['String'];
   name: Scalars['String'];
   name: Scalars['String'];
   groupId: Scalars['ID'];
   groupId: Scalars['ID'];
+  group: ProductOptionGroup;
   translations: Array<ProductOptionTranslation>;
   translations: Array<ProductOptionTranslation>;
   customFields?: Maybe<Scalars['JSON']>;
   customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 1 - 0
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts

@@ -2604,6 +2604,7 @@ export type ProductOption = Node & {
     code: Scalars['String'];
     code: Scalars['String'];
     name: Scalars['String'];
     name: Scalars['String'];
     groupId: Scalars['ID'];
     groupId: Scalars['ID'];
+    group: ProductOptionGroup;
     translations: Array<ProductOptionTranslation>;
     translations: Array<ProductOptionTranslation>;
     customFields?: Maybe<Scalars['JSON']>;
     customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 1 - 0
packages/common/src/generated-shop-types.ts

@@ -1803,6 +1803,7 @@ export type ProductOption = Node & {
     code: Scalars['String'];
     code: Scalars['String'];
     name: Scalars['String'];
     name: Scalars['String'];
     groupId: Scalars['ID'];
     groupId: Scalars['ID'];
+    group: ProductOptionGroup;
     translations: Array<ProductOptionTranslation>;
     translations: Array<ProductOptionTranslation>;
     customFields?: Maybe<Scalars['JSON']>;
     customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 1 - 0
packages/common/src/generated-types.ts

@@ -2690,6 +2690,7 @@ export type ProductOption = Node & {
   code: Scalars['String'];
   code: Scalars['String'];
   name: Scalars['String'];
   name: Scalars['String'];
   groupId: Scalars['ID'];
   groupId: Scalars['ID'];
+  group: ProductOptionGroup;
   translations: Array<ProductOptionTranslation>;
   translations: Array<ProductOptionTranslation>;
   customFields?: Maybe<Scalars['JSON']>;
   customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 1 - 0
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -2604,6 +2604,7 @@ export type ProductOption = Node & {
     code: Scalars['String'];
     code: Scalars['String'];
     name: Scalars['String'];
     name: Scalars['String'];
     groupId: Scalars['ID'];
     groupId: Scalars['ID'];
+    group: ProductOptionGroup;
     translations: Array<ProductOptionTranslation>;
     translations: Array<ProductOptionTranslation>;
     customFields?: Maybe<Scalars['JSON']>;
     customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 1 - 0
packages/core/e2e/graphql/generated-e2e-shop-types.ts

@@ -1803,6 +1803,7 @@ export type ProductOption = Node & {
     code: Scalars['String'];
     code: Scalars['String'];
     name: Scalars['String'];
     name: Scalars['String'];
     groupId: Scalars['ID'];
     groupId: Scalars['ID'];
+    group: ProductOptionGroup;
     translations: Array<ProductOptionTranslation>;
     translations: Array<ProductOptionTranslation>;
     customFields?: Maybe<Scalars['JSON']>;
     customFields?: Maybe<Scalars['JSON']>;
 };
 };

+ 2 - 0
packages/core/src/api/api-internal-modules.ts

@@ -46,6 +46,7 @@ import {
     ProductAdminEntityResolver,
     ProductAdminEntityResolver,
     ProductEntityResolver,
     ProductEntityResolver,
 } from './resolvers/entity/product-entity.resolver';
 } from './resolvers/entity/product-entity.resolver';
+import { ProductOptionEntityResolver } from './resolvers/entity/product-option-entity.resolver';
 import { ProductOptionGroupEntityResolver } from './resolvers/entity/product-option-group-entity.resolver';
 import { ProductOptionGroupEntityResolver } from './resolvers/entity/product-option-group-entity.resolver';
 import {
 import {
     ProductVariantAdminEntityResolver,
     ProductVariantAdminEntityResolver,
@@ -105,6 +106,7 @@ export const entityResolvers = [
     OrderLineEntityResolver,
     OrderLineEntityResolver,
     PaymentEntityResolver,
     PaymentEntityResolver,
     ProductEntityResolver,
     ProductEntityResolver,
+    ProductOptionEntityResolver,
     ProductOptionGroupEntityResolver,
     ProductOptionGroupEntityResolver,
     ProductVariantEntityResolver,
     ProductVariantEntityResolver,
     RefundEntityResolver,
     RefundEntityResolver,

+ 28 - 0
packages/core/src/api/resolvers/entity/product-option-entity.resolver.ts

@@ -0,0 +1,28 @@
+import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
+import { Permission } from '@vendure/common/lib/generated-types';
+
+import { Translated } from '../../../common/types/locale-types';
+import { assertFound } from '../../../common/utils';
+import { ProductOptionGroup } from '../../../entity/product-option-group/product-option-group.entity';
+import { ProductOption } from '../../../entity/product-option/product-option.entity';
+import { ProductOptionGroupService } from '../../../service/services/product-option-group.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
+
+@Resolver('ProductOption')
+export class ProductOptionEntityResolver {
+    constructor(private productOptionGroupService: ProductOptionGroupService) {}
+
+    @ResolveField()
+    @Allow(Permission.ReadCatalog, Permission.Public)
+    async group(
+        @Ctx() ctx: RequestContext,
+        @Parent() option: Translated<ProductOption>,
+    ): Promise<ProductOptionGroup> {
+        if (option.group) {
+            return option.group;
+        }
+        return assertFound(this.productOptionGroupService.findOne(ctx, option.groupId));
+    }
+}

+ 1 - 0
packages/core/src/api/schema/type/product-option-group.type.graphql

@@ -25,6 +25,7 @@ type ProductOption implements Node {
     code: String!
     code: String!
     name: String!
     name: String!
     groupId: ID!
     groupId: ID!
+    group: ProductOptionGroup!
     translations: [ProductOptionTranslation!]!
     translations: [ProductOptionTranslation!]!
 }
 }
 
 

+ 1 - 0
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts

@@ -2604,6 +2604,7 @@ export type ProductOption = Node & {
     code: Scalars['String'];
     code: Scalars['String'];
     name: Scalars['String'];
     name: Scalars['String'];
     groupId: Scalars['ID'];
     groupId: Scalars['ID'];
+    group: ProductOptionGroup;
     translations: Array<ProductOptionTranslation>;
     translations: Array<ProductOptionTranslation>;
     customFields?: Maybe<Scalars['JSON']>;
     customFields?: Maybe<Scalars['JSON']>;
 };
 };

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
schema-admin.json


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
schema-shop.json


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff