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

feat(core): Add "text" custom field type for storing data over 64k

Relates to #885
Michael Bromley 4 лет назад
Родитель
Сommit
00c5c43d80

+ 1 - 1
docs/content/developer-guide/customizing-models.md

@@ -5,7 +5,7 @@ showtoc: true
  
 # Customizing Models with custom fields
 
-Custom fields allow you to add your own custom data properties to many of the Vendure entities. The entities which may have custom fields defined are listed in the [CustomFields documentation]({{< relref "/docs/typescript-api/custom-fields" >}}#signature)
+Custom fields allow you to add your own custom data properties to many of the Vendure entities. The entities which may have custom fields defined are listed in the [CustomFields documentation]({{< relref "/docs/typescript-api/custom-fields" >}})
 
 They are specified in the VendureConfig:
 

Разница между файлами не показана из-за своего большого размера
+ 518 - 665
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts


Разница между файлами не показана из-за своего большого размера
+ 585 - 622
packages/common/src/generated-shop-types.ts


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

@@ -3723,13 +3723,24 @@ export type RelationCustomFieldConfig = CustomField & {
   scalarFields: Array<Scalars['String']>;
 };
 
+export type TextCustomFieldConfig = CustomField & {
+  __typename?: 'TextCustomFieldConfig';
+  name: Scalars['String'];
+  type: Scalars['String'];
+  list: Scalars['Boolean'];
+  label?: Maybe<Array<LocalizedString>>;
+  description?: Maybe<Array<LocalizedString>>;
+  readonly?: Maybe<Scalars['Boolean']>;
+  internal?: Maybe<Scalars['Boolean']>;
+};
+
 export type LocalizedString = {
   __typename?: 'LocalizedString';
   languageCode: LanguageCode;
   value: Scalars['String'];
 };
 
-export type CustomFieldConfig = StringCustomFieldConfig | LocaleStringCustomFieldConfig | IntCustomFieldConfig | FloatCustomFieldConfig | BooleanCustomFieldConfig | DateTimeCustomFieldConfig | RelationCustomFieldConfig;
+export type CustomFieldConfig = StringCustomFieldConfig | LocaleStringCustomFieldConfig | IntCustomFieldConfig | FloatCustomFieldConfig | BooleanCustomFieldConfig | DateTimeCustomFieldConfig | RelationCustomFieldConfig | TextCustomFieldConfig;
 
 export type CustomerGroup = Node & {
   __typename?: 'CustomerGroup';

+ 7 - 1
packages/common/src/shared-types.ts

@@ -82,6 +82,7 @@ export type ID = string | number;
  * -----        |---------                              |---------------
  * string       | varchar                               | String
  * localeString | varchar                               | String
+ * text         | longtext(m), text(p,s)                | String
  * int          | int                                   | Int
  * float        | double precision                      | Float
  * boolean      | tinyint (m), bool (p), boolean (s)    | Boolean
@@ -100,7 +101,8 @@ export type CustomFieldType =
     | 'float'
     | 'boolean'
     | 'datetime'
-    | 'relation';
+    | 'relation'
+    | 'text';
 
 /**
  * @description
@@ -133,6 +135,7 @@ export type DefaultFormComponentId =
     | 'product-selector-form-input'
     | 'customer-group-form-input'
     | 'text-form-input'
+    | 'textarea-form-input'
     | 'password-form-input'
     | 'relation-form-input';
 
@@ -154,6 +157,9 @@ type DefaultFormConfigHash = {
     'product-selector-form-input': {};
     'customer-group-form-input': {};
     'text-form-input': {};
+    'textarea-form-input': {
+        spellcheck?: boolean;
+    };
     'password-form-input': {};
     'relation-form-input': {};
 };

Разница между файлами не показана из-за своего большого размера
+ 518 - 665
packages/core/e2e/graphql/generated-e2e-admin-types.ts


Разница между файлами не показана из-за своего большого размера
+ 557 - 594
packages/core/e2e/graphql/generated-e2e-shop-types.ts


+ 1 - 0
packages/core/src/api/common/validate-custom-field-value.ts

@@ -47,6 +47,7 @@ export async function validateCustomFieldValue(
             break;
         case 'boolean':
         case 'relation':
+        case 'text':
             break;
         default:
             assertNever(config);

+ 2 - 0
packages/core/src/api/config/generate-resolvers.ts

@@ -62,6 +62,8 @@ export function generateResolvers(
                     return 'StringCustomFieldConfig';
                 case 'localeString':
                     return 'LocaleStringCustomFieldConfig';
+                case 'text':
+                    return 'TextCustomFieldConfig';
                 case 'int':
                     return 'IntCustomFieldConfig';
                 case 'float':

+ 2 - 0
packages/core/src/api/config/graphql-custom-fields.ts

@@ -409,6 +409,7 @@ function getFilterOperator(config: CustomFieldConfig): string | undefined {
             return 'DateOperators';
         case 'string':
         case 'localeString':
+        case 'text':
             return 'StringOperators';
         case 'boolean':
             return 'BooleanOperators';
@@ -431,6 +432,7 @@ function getGraphQlType(config: CustomFieldConfig): string {
     switch (config.type) {
         case 'string':
         case 'localeString':
+        case 'text':
             return 'String';
         case 'datetime':
             return 'DateTime';

+ 11 - 0
packages/core/src/api/schema/common/custom-field-types.graphql

@@ -99,6 +99,16 @@ type RelationCustomFieldConfig implements CustomField {
     scalarFields: [String!]!
 }
 
+type TextCustomFieldConfig implements CustomField {
+    name: String!
+    type: String!
+    list: Boolean!
+    label: [LocalizedString!]
+    description: [LocalizedString!]
+    readonly: Boolean
+    internal: Boolean
+}
+
 type LocalizedString {
     languageCode: LanguageCode!
     value: String!
@@ -112,3 +122,4 @@ union CustomFieldConfig =
     | BooleanCustomFieldConfig
     | DateTimeCustomFieldConfig
     | RelationCustomFieldConfig
+    | TextCustomFieldConfig

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

@@ -8,6 +8,7 @@ import {
     LocalizedString,
     RelationCustomFieldConfig as GraphQLRelationCustomFieldConfig,
     StringCustomFieldConfig as GraphQLStringCustomFieldConfig,
+    TextCustomFieldConfig as GraphQLTextCustomFieldConfig,
 } from '@vendure/common/lib/generated-types';
 import { CustomFieldsObject, CustomFieldType, Type } from '@vendure/common/lib/shared-types';
 
@@ -73,6 +74,7 @@ export type LocaleStringCustomFieldConfig = TypedCustomFieldConfig<
     'localeString',
     GraphQLLocaleStringCustomFieldConfig
 >;
+export type TextCustomFieldConfig = TypedCustomFieldConfig<'text', GraphQLTextCustomFieldConfig>;
 export type IntCustomFieldConfig = TypedCustomFieldConfig<'int', GraphQLIntCustomFieldConfig>;
 export type FloatCustomFieldConfig = TypedCustomFieldConfig<'float', GraphQLFloatCustomFieldConfig>;
 export type BooleanCustomFieldConfig = TypedCustomFieldConfig<'boolean', GraphQLBooleanCustomFieldConfig>;
@@ -91,6 +93,7 @@ export type RelationCustomFieldConfig = TypedCustomFieldConfig<
 export type CustomFieldConfig =
     | StringCustomFieldConfig
     | LocaleStringCustomFieldConfig
+    | TextCustomFieldConfig
     | IntCustomFieldConfig
     | FloatCustomFieldConfig
     | BooleanCustomFieldConfig

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

@@ -161,6 +161,14 @@ function getColumnType(
         case 'string':
         case 'localeString':
             return 'varchar';
+        case 'text':
+            switch (dbEngine) {
+                case 'mysql':
+                case 'mariadb':
+                    return 'longtext';
+                default:
+                    return 'text';
+            }
         case 'boolean':
             switch (dbEngine) {
                 case 'mysql':

Разница между файлами не показана из-за своего большого размера
+ 518 - 665
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
schema-admin.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
schema-shop.json


Некоторые файлы не были показаны из-за большого количества измененных файлов