Răsfoiți Sursa

feat(core): Support for custom fields on Asset entity

Relates to #684
Michael Bromley 4 ani în urmă
părinte
comite
60b6171253

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

@@ -1118,6 +1118,7 @@ export type Asset = Node & {
   source: Scalars['String'];
   preview: Scalars['String'];
   focalPoint?: Maybe<Coordinate>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type MimeTypeError = ErrorResult & {
@@ -1142,6 +1143,7 @@ export type AssetListOptions = {
 export type CreateAssetInput = {
   file: Scalars['Upload'];
   tags?: Maybe<Array<Scalars['String']>>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type CoordinateInput = {
@@ -1166,6 +1168,7 @@ export type UpdateAssetInput = {
   name?: Maybe<Scalars['String']>;
   focalPoint?: Maybe<CoordinateInput>;
   tags?: Maybe<Array<Scalars['String']>>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type AssignAssetsToChannelInput = {
@@ -4802,6 +4805,7 @@ export type CustomFields = {
   __typename?: 'CustomFields';
   Address: Array<CustomFieldConfig>;
   Administrator: Array<CustomFieldConfig>;
+  Asset: Array<CustomFieldConfig>;
   Channel: Array<CustomFieldConfig>;
   Collection: Array<CustomFieldConfig>;
   Customer: Array<CustomFieldConfig>;

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

@@ -932,6 +932,7 @@ export type Asset = Node & {
     source: Scalars['String'];
     preview: Scalars['String'];
     focalPoint?: Maybe<Coordinate>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type MimeTypeError = ErrorResult & {
@@ -955,6 +956,7 @@ export type AssetListOptions = {
 export type CreateAssetInput = {
     file: Scalars['Upload'];
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type CoordinateInput = {
@@ -979,6 +981,7 @@ export type UpdateAssetInput = {
     name?: Maybe<Scalars['String']>;
     focalPoint?: Maybe<CoordinateInput>;
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type AssignAssetsToChannelInput = {
@@ -4513,6 +4516,7 @@ export type NativeAuthInput = {
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Administrator: Array<CustomFieldConfig>;
+    Asset: Array<CustomFieldConfig>;
     Channel: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;
     Customer: Array<CustomFieldConfig>;

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

@@ -326,6 +326,7 @@ export type Asset = Node & {
     source: Scalars['String'];
     preview: Scalars['String'];
     focalPoint?: Maybe<Coordinate>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type Coordinate = {

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

@@ -1081,6 +1081,7 @@ export type Asset = Node & {
   source: Scalars['String'];
   preview: Scalars['String'];
   focalPoint?: Maybe<Coordinate>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type MimeTypeError = ErrorResult & {
@@ -1105,6 +1106,7 @@ export type AssetListOptions = {
 export type CreateAssetInput = {
   file: Scalars['Upload'];
   tags?: Maybe<Array<Scalars['String']>>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type CoordinateInput = {
@@ -1129,6 +1131,7 @@ export type UpdateAssetInput = {
   name?: Maybe<Scalars['String']>;
   focalPoint?: Maybe<CoordinateInput>;
   tags?: Maybe<Array<Scalars['String']>>;
+  customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type AssignAssetsToChannelInput = {
@@ -4764,6 +4767,7 @@ export type CustomFields = {
   __typename?: 'CustomFields';
   Address: Array<CustomFieldConfig>;
   Administrator: Array<CustomFieldConfig>;
+  Asset: Array<CustomFieldConfig>;
   Channel: Array<CustomFieldConfig>;
   Collection: Array<CustomFieldConfig>;
   Customer: Array<CustomFieldConfig>;

+ 1 - 0
packages/core/e2e/custom-field-relations.e2e-spec.ts

@@ -126,6 +126,7 @@ describe('Custom field relations', () => {
             'height',
             'source',
             'preview',
+            'customFields',
         ]);
     });
 

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

@@ -932,6 +932,7 @@ export type Asset = Node & {
     source: Scalars['String'];
     preview: Scalars['String'];
     focalPoint?: Maybe<Coordinate>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type MimeTypeError = ErrorResult & {
@@ -955,6 +956,7 @@ export type AssetListOptions = {
 export type CreateAssetInput = {
     file: Scalars['Upload'];
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type CoordinateInput = {
@@ -979,6 +981,7 @@ export type UpdateAssetInput = {
     name?: Maybe<Scalars['String']>;
     focalPoint?: Maybe<CoordinateInput>;
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type AssignAssetsToChannelInput = {
@@ -4513,6 +4516,7 @@ export type NativeAuthInput = {
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Administrator: Array<CustomFieldConfig>;
+    Asset: Array<CustomFieldConfig>;
     Channel: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;
     Customer: Array<CustomFieldConfig>;

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

@@ -322,6 +322,7 @@ export type Asset = Node & {
     source: Scalars['String'];
     preview: Scalars['String'];
     focalPoint?: Maybe<Coordinate>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type Coordinate = {

+ 1 - 0
packages/core/src/config/custom-field/custom-field-types.ts

@@ -185,6 +185,7 @@ export type CustomFieldConfig =
 export interface CustomFields {
     Address?: CustomFieldConfig[];
     Administrator?: CustomFieldConfig[];
+    Asset?: CustomFieldConfig[];
     Channel?: CustomFieldConfig[];
     Collection?: CustomFieldConfig[];
     Customer?: CustomFieldConfig[];

+ 1 - 0
packages/core/src/config/default-config.ts

@@ -147,6 +147,7 @@ export const defaultConfig: RuntimeVendureConfig = {
     customFields: {
         Address: [],
         Administrator: [],
+        Asset: [],
         Channel: [],
         Collection: [],
         Customer: [],

+ 8 - 6
packages/core/src/entity/asset/asset.entity.ts

@@ -1,14 +1,13 @@
 import { AssetType } from '@vendure/common/lib/generated-types';
 import { DeepPartial } from '@vendure/common/lib/shared-types';
-import { Column, Entity, JoinColumn, JoinTable, ManyToMany, OneToMany, OneToOne } from 'typeorm';
+import { Column, Entity, JoinTable, ManyToMany } from 'typeorm';
 
-import { Channel } from '..';
 import { ChannelAware, Taggable } from '../../common/types/common-types';
-import { Address } from '../address/address.entity';
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
-import { CustomCustomerFields } from '../custom-entity-fields';
+import { Channel } from '../channel/channel.entity';
+import { CustomAssetFields } from '../custom-entity-fields';
 import { Tag } from '../tag/tag.entity';
-import { User } from '../user/user.entity';
 
 /**
  * @description
@@ -18,7 +17,7 @@ import { User } from '../user/user.entity';
  * @docsCategory entities
  */
 @Entity()
-export class Asset extends VendureEntity implements Taggable, ChannelAware {
+export class Asset extends VendureEntity implements Taggable, ChannelAware, HasCustomFields {
     constructor(input?: DeepPartial<Asset>) {
         super(input);
     }
@@ -49,4 +48,7 @@ export class Asset extends VendureEntity implements Taggable, ChannelAware {
     @ManyToMany(type => Channel)
     @JoinTable()
     channels: Channel[];
+
+    @Column(type => CustomAssetFields)
+    customFields: CustomAssetFields;
 }

+ 1 - 0
packages/core/src/entity/custom-entity-fields.ts

@@ -1,5 +1,6 @@
 export class CustomAddressFields {}
 export class CustomAdministratorFields {}
+export class CustomAssetFields {}
 export class CustomFacetFields {}
 export class CustomFacetFieldsTranslation {}
 export class CustomFacetValueFields {}

+ 2 - 0
packages/core/src/entity/register-custom-entity-fields.ts

@@ -21,6 +21,7 @@ import { VendureConfig } from '../config/vendure-config';
 import {
     CustomAddressFields,
     CustomAdministratorFields,
+    CustomAssetFields,
     CustomChannelFields,
     CustomCollectionFields,
     CustomCollectionFieldsTranslation,
@@ -214,6 +215,7 @@ function getDefault(customField: CustomFieldConfig, dbEngine: ConnectionOptions[
 export function registerCustomEntityFields(config: VendureConfig) {
     registerCustomFieldsForEntity(config, 'Address', CustomAddressFields);
     registerCustomFieldsForEntity(config, 'Administrator', CustomAdministratorFields);
+    registerCustomFieldsForEntity(config, 'Asset', CustomAssetFields);
     registerCustomFieldsForEntity(config, 'Collection', CustomCollectionFields);
     registerCustomFieldsForEntity(config, 'Collection', CustomCollectionFieldsTranslation, true);
     registerCustomFieldsForEntity(config, 'Customer', CustomCustomerFields);

+ 1 - 5
packages/dev-server/dev-config.ts

@@ -65,11 +65,7 @@ export const devConfig: VendureConfig = {
         paymentMethodHandlers: [dummyPaymentHandler],
     },
     customFields: {
-        /*Administrator: [
-            { name: 'profileLink', type: 'string' },
-            { name: 'avatar', type: 'relation', entity: Asset },
-        ],
-        Channel: [{ name: 'description', type: 'string' }],*/
+        /*Asset: [{ name: 'description', type: 'string' }],*/
     },
     logger: new DefaultLogger({ level: LogLevel.Info }),
     importExportOptions: {

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

@@ -932,6 +932,7 @@ export type Asset = Node & {
     source: Scalars['String'];
     preview: Scalars['String'];
     focalPoint?: Maybe<Coordinate>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type MimeTypeError = ErrorResult & {
@@ -955,6 +956,7 @@ export type AssetListOptions = {
 export type CreateAssetInput = {
     file: Scalars['Upload'];
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type CoordinateInput = {
@@ -979,6 +981,7 @@ export type UpdateAssetInput = {
     name?: Maybe<Scalars['String']>;
     focalPoint?: Maybe<CoordinateInput>;
     tags?: Maybe<Array<Scalars['String']>>;
+    customFields?: Maybe<Scalars['JSON']>;
 };
 
 export type AssignAssetsToChannelInput = {
@@ -4513,6 +4516,7 @@ export type NativeAuthInput = {
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Administrator: Array<CustomFieldConfig>;
+    Asset: Array<CustomFieldConfig>;
     Channel: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;
     Customer: Array<CustomFieldConfig>;

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
schema-admin.json


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
schema-shop.json


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff