From 85a88661095ad6cb4e12f7d6a2252d306b3a5e43 Mon Sep 17 00:00:00 2001 From: Michael Bromley Date: Wed, 30 Aug 2023 10:59:43 +0200 Subject: [PATCH] fix(admin-ui): Use appropriate default values for custom fields Fixes #2362 --- .../asset-detail/asset-detail.component.ts | 5 ++- .../collection-detail.component.ts | 6 ++-- .../facet-detail/facet-detail.component.ts | 5 ++- .../product-detail.component.ts | 8 ++--- .../product-variant-detail.component.ts | 5 ++- .../stock-location-detail.component.ts | 5 ++- .../utilities/create-updated-translatable.ts | 27 +++----------- .../utilities/custom-field-default-value.ts | 36 +++++++++++++++++++ .../admin-ui/src/lib/core/src/public_api.ts | 1 + .../customer-detail.component.ts | 6 ++-- .../customer-group-detail-dialog.component.ts | 8 ++--- .../customer-group-detail.component.ts | 5 ++- .../promotion-detail.component.ts | 5 ++- .../order-detail/order-detail.component.ts | 5 ++- .../admin-detail/admin-detail.component.ts | 6 ++-- .../channel-detail.component.ts | 12 ++----- .../country-detail.component.ts | 5 ++- .../global-settings.component.ts | 5 ++- .../payment-method-detail.component.ts | 5 ++- .../components/profile/profile.component.ts | 5 ++- .../seller-detail/seller-detail.component.ts | 5 ++- .../shipping-method-detail.component.ts | 6 ++-- .../tax-category-detail.component.ts | 5 ++- .../tax-rate-detail.component.ts | 6 ++-- .../zone-detail/zone-detail.component.ts | 5 ++- 25 files changed, 87 insertions(+), 105 deletions(-) create mode 100644 packages/admin-ui/src/lib/core/src/common/utilities/custom-field-default-value.ts diff --git a/packages/admin-ui/src/lib/catalog/src/components/asset-detail/asset-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/asset-detail/asset-detail.component.ts index d105a5ce18..38d68736ed 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/asset-detail/asset-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/asset-detail/asset-detail.component.ts @@ -6,6 +6,7 @@ import { AssetDetailQueryDocument, AssetDetailQueryQuery, DataService, + getCustomFieldsDefaults, LanguageCode, NotificationService, TAG_FRAGMENT, @@ -40,9 +41,7 @@ export class AssetDetailComponent detailForm = new FormGroup({ name: new FormControl(''), tags: new FormControl([] as string[]), - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); constructor( diff --git a/packages/admin-ui/src/lib/catalog/src/components/collection-detail/collection-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/collection-detail/collection-detail.component.ts index a4ff62218d..fd94bbbe78 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/collection-detail/collection-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/collection-detail/collection-detail.component.ts @@ -10,7 +10,6 @@ import { FormBuilder, UntypedFormArray, UntypedFormControl, Validators } from '@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Asset, - Collection, COLLECTION_FRAGMENT, CollectionDetailQueryDocument, CollectionFragment, @@ -23,6 +22,7 @@ import { encodeConfigArgValue, findTranslation, getConfigArgValue, + getCustomFieldsDefaults, LanguageCode, LocalStorageService, ModalService, @@ -66,9 +66,7 @@ export class CollectionDetailComponent visible: false, inheritFilters: true, filters: this.formBuilder.array([]), - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); assetChanges: { assets?: Asset[]; featuredAsset?: Asset } = {}; filters: ConfigurableOperation[] = []; diff --git a/packages/admin-ui/src/lib/catalog/src/components/facet-detail/facet-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/facet-detail/facet-detail.component.ts index ddfdc91144..789ff0447d 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/facet-detail/facet-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/facet-detail/facet-detail.component.ts @@ -16,6 +16,7 @@ import { FACET_WITH_VALUES_FRAGMENT, FacetWithValuesFragment, findTranslation, + getCustomFieldsDefaults, GetFacetDetailDocument, LanguageCode, ModalService, @@ -57,9 +58,7 @@ export class FacetDetailComponent code: ['', Validators.required], name: '', visible: true, - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }), values: this.formBuilder.array<{ id: string; diff --git a/packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.ts index 0adabca7c8..07d030d4e1 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.ts @@ -4,17 +4,15 @@ import { ActivatedRoute, Router } from '@angular/router'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Asset, - BaseDetailComponent, CreateProductInput, createUpdatedTranslatable, DataService, findTranslation, getChannelCodeFromUserStatus, - getDefaultUiLanguage, + getCustomFieldsDefaults, GetProductDetailDocument, GetProductDetailQuery, GetProductWithVariantsQuery, - ItemOf, LanguageCode, ModalService, NotificationService, @@ -84,9 +82,7 @@ export class ProductDetailComponent slug: ['', unicodePatternValidator(/^[\p{Letter}0-9._-]+$/)], description: '', facetValueIds: [[] as string[]], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); assetChanges: SelectedAssets = {}; productChannels$: Observable; diff --git a/packages/admin-ui/src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.ts index d64601807e..c6c19f67ec 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/product-variant-detail/product-variant-detail.component.ts @@ -8,6 +8,7 @@ import { CurrencyCode, DataService, findTranslation, + getCustomFieldsDefaults, GetProductVariantDetailDocument, GetProductVariantDetailQuery, GlobalFlag, @@ -83,9 +84,7 @@ export class ProductVariantDetailComponent outOfStockThreshold: 0, trackInventory: GlobalFlag.TRUE, facetValueIds: [], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); stockLevelsForm = this.formBuilder.array< FormGroup<{ diff --git a/packages/admin-ui/src/lib/catalog/src/components/stock-location-detail/stock-location-detail.component.ts b/packages/admin-ui/src/lib/catalog/src/components/stock-location-detail/stock-location-detail.component.ts index 0669c1ebfa..e43317d399 100644 --- a/packages/admin-ui/src/lib/catalog/src/components/stock-location-detail/stock-location-detail.component.ts +++ b/packages/admin-ui/src/lib/catalog/src/components/stock-location-detail/stock-location-detail.component.ts @@ -5,6 +5,7 @@ import { CreateStockLocationDocument, CreateStockLocationInput, DataService, + getCustomFieldsDefaults, GetStockLocationDetailDocument, NotificationService, StockLocationDetailFragment, @@ -66,9 +67,7 @@ export class StockLocationDetailComponent detailForm = this.formBuilder.group({ name: ['', Validators.required], description: [''], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); constructor( diff --git a/packages/admin-ui/src/lib/core/src/common/utilities/create-updated-translatable.ts b/packages/admin-ui/src/lib/core/src/common/utilities/create-updated-translatable.ts index 69009754ec..c85a61b57b 100644 --- a/packages/admin-ui/src/lib/core/src/common/utilities/create-updated-translatable.ts +++ b/packages/admin-ui/src/lib/core/src/common/utilities/create-updated-translatable.ts @@ -1,9 +1,9 @@ import { CustomFieldsObject, CustomFieldType } from '@vendure/common/lib/shared-types'; -import { assertNever } from '@vendure/common/lib/shared-utils'; import { CustomFieldConfig, LanguageCode } from '../generated-types'; import { findTranslation } from './find-translation'; +import { getDefaultValue } from './custom-field-default-value'; export interface TranslatableUpdateOptions { translatable: T; @@ -39,7 +39,9 @@ export function createUpdatedTranslatable; +} { + return customFieldConfig.reduce( + (hash, field) => ({ + ...hash, + [field.name]: getDefaultValue(field.type as CustomFieldType, field.nullable ?? undefined), + }), + {}, + ); +} + +export function getDefaultValue(type: CustomFieldType, isNullable?: boolean) { + switch (type) { + case 'localeString': + case 'string': + case 'text': + case 'localeText': + return ''; + case 'boolean': + return false; + case 'float': + case 'int': + return isNullable ? null : 0; + case 'datetime': + return isNullable ? null : new Date(); + case 'relation': + return null; + default: + assertNever(type); + } +} diff --git a/packages/admin-ui/src/lib/core/src/public_api.ts b/packages/admin-ui/src/lib/core/src/public_api.ts index 7bcd09f0c8..9170dc94f8 100644 --- a/packages/admin-ui/src/lib/core/src/public_api.ts +++ b/packages/admin-ui/src/lib/core/src/public_api.ts @@ -16,6 +16,7 @@ export * from './common/title-setter'; export * from './common/utilities/bulk-action-utils'; export * from './common/utilities/configurable-operation-utils'; export * from './common/utilities/create-updated-translatable'; +export * from './common/utilities/custom-field-default-value'; export * from './common/utilities/find-translation'; export * from './common/utilities/get-default-ui-language'; export * from './common/utilities/interpolate-description'; diff --git a/packages/admin-ui/src/lib/customer/src/components/customer-detail/customer-detail.component.ts b/packages/admin-ui/src/lib/customer/src/components/customer-detail/customer-detail.component.ts index 607f4edd83..a5292acf87 100644 --- a/packages/admin-ui/src/lib/customer/src/components/customer-detail/customer-detail.component.ts +++ b/packages/admin-ui/src/lib/customer/src/components/customer-detail/customer-detail.component.ts @@ -5,7 +5,6 @@ import { CreateAddressInput, CreateCustomerAddressMutation, CreateCustomerInput, - Customer, CUSTOMER_FRAGMENT, CustomerDetailQueryDocument, CustomerDetailQueryQuery, @@ -14,6 +13,7 @@ import { EditNoteDialogComponent, GetAvailableCountriesQuery, GetCustomerHistoryQuery, + getCustomFieldsDefaults, ModalService, NotificationService, SortOrder, @@ -90,9 +90,7 @@ export class CustomerDetailComponent phoneNumber: '', emailAddress: ['', [Validators.required, Validators.email]], password: '', - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }), addresses: new UntypedFormArray([]), }); diff --git a/packages/admin-ui/src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.ts b/packages/admin-ui/src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.ts index 7debd34798..01251a4349 100644 --- a/packages/admin-ui/src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.ts +++ b/packages/admin-ui/src/lib/customer/src/components/customer-group-detail-dialog/customer-group-detail-dialog.component.ts @@ -1,11 +1,11 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; -import { FormControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { CreateCustomerGroupInput, CustomFieldConfig, Dialog, + getCustomFieldsDefaults, ServerConfigService, - UpdateCustomerGroupInput, } from '@vendure/admin-ui/core'; @Component({ @@ -27,9 +27,7 @@ export class CustomerGroupDetailDialogComponent implements Dialog ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); if (this.customFields.length) { const customFieldsGroup = this.form.get('customFields') as UntypedFormGroup; diff --git a/packages/admin-ui/src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.ts b/packages/admin-ui/src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.ts index d3c6796491..1b4ad58091 100644 --- a/packages/admin-ui/src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.ts +++ b/packages/admin-ui/src/lib/customer/src/components/customer-group-detail/customer-group-detail.component.ts @@ -5,6 +5,7 @@ import { ResultOf } from '@graphql-typed-document-node/core'; import { DataService, GetCustomerGroupDetailDocument, + getCustomFieldsDefaults, ModalService, NotificationService, TypedBaseDetailComponent, @@ -38,9 +39,7 @@ export class CustomerGroupDetailComponent customFields = this.getCustomFieldConfig('CustomerGroup'); detailForm = this.formBuilder.group({ name: '', - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); constructor( diff --git a/packages/admin-ui/src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts b/packages/admin-ui/src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts index 3cf52a24bb..4e40dc9378 100644 --- a/packages/admin-ui/src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts +++ b/packages/admin-ui/src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts @@ -11,6 +11,7 @@ import { encodeConfigArgValue, findTranslation, getConfigArgValue, + getCustomFieldsDefaults, getDefaultConfigArgValue, GetPromotionDetailDocument, LanguageCode, @@ -54,9 +55,7 @@ export class PromotionDetailComponent endsAt: null, conditions: this.formBuilder.array([]), actions: this.formBuilder.array([]), - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); conditions: ConfigurableOperation[] = []; actions: ConfigurableOperation[] = []; diff --git a/packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts b/packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts index e1f123026e..f206421353 100644 --- a/packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts +++ b/packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts @@ -5,6 +5,7 @@ import { DataService, EditNoteDialogComponent, FulfillmentFragment, + getCustomFieldsDefaults, GetOrderHistoryQuery, GetOrderQuery, ModalService, @@ -54,9 +55,7 @@ export class OrderDetailComponent customFields = this.getCustomFieldConfig('Order'); orderLineCustomFields = this.getCustomFieldConfig('OrderLine'); detailForm = new FormGroup({ - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); history$: Observable['history']['items'] | undefined>; nextStates$: Observable; diff --git a/packages/admin-ui/src/lib/settings/src/components/admin-detail/admin-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/admin-detail/admin-detail.component.ts index d0efd54970..48f852af54 100644 --- a/packages/admin-ui/src/lib/settings/src/components/admin-detail/admin-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/admin-detail/admin-detail.component.ts @@ -3,11 +3,11 @@ import { FormBuilder, Validators } from '@angular/forms'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ResultOf } from '@graphql-typed-document-node/core'; import { - Administrator, ADMINISTRATOR_FRAGMENT, CreateAdministratorInput, DataService, GetAdministratorDetailDocument, + getCustomFieldsDefaults, LanguageCode, NotificationService, Permission, @@ -58,9 +58,7 @@ export class AdminDetailComponent ResultOf['administrator'] >['user']['roles'], ], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); permissionDefinitions: PermissionDefinition[]; allRoles$: Observable; diff --git a/packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.ts index a0c23fbd1d..fcb75aee28 100644 --- a/packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.ts @@ -1,19 +1,15 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder, Validators } from '@angular/forms'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { - BaseDetailComponent, CHANNEL_FRAGMENT, ChannelFragment, CreateChannelInput, CurrencyCode, - CustomFieldConfig, DataService, GetChannelDetailDocument, + getCustomFieldsDefaults, GetSellersQuery, - GetZoneListQuery, - ItemOf, LanguageCode, NotificationService, Permission, @@ -60,9 +56,7 @@ export class ChannelDetailComponent defaultLanguageCode: [undefined as LanguageCode | undefined], defaultTaxZoneId: ['', Validators.required], sellerId: ['', Validators.required], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); availableLanguageCodes$: Observable; diff --git a/packages/admin-ui/src/lib/settings/src/components/country-detail/country-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/country-detail/country-detail.component.ts index 41bce7d11e..9a7efc0727 100644 --- a/packages/admin-ui/src/lib/settings/src/components/country-detail/country-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/country-detail/country-detail.component.ts @@ -8,6 +8,7 @@ import { DataService, findTranslation, GetCountryDetailDocument, + getCustomFieldsDefaults, LanguageCode, NotificationService, Permission, @@ -42,9 +43,7 @@ export class CountryDetailComponent code: ['', Validators.required], name: ['', Validators.required], enabled: [true], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry]; diff --git a/packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.ts b/packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.ts index 83eb3e35b3..e8a07c35a0 100644 --- a/packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.ts @@ -3,6 +3,7 @@ import { FormBuilder, Validators } from '@angular/forms'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DataService, + getCustomFieldsDefaults, GetGlobalSettingsDetailDocument, GlobalSettings, LanguageCode, @@ -44,9 +45,7 @@ export class GlobalSettingsComponent availableLanguages: [[] as LanguageCode[]], trackInventory: false, outOfStockThreshold: [0, Validators.required], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); languageCodes = Object.values(LanguageCode); readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings]; diff --git a/packages/admin-ui/src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts index 96639b532e..9838ed87fa 100644 --- a/packages/admin-ui/src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts @@ -10,6 +10,7 @@ import { DataService, findTranslation, getConfigArgValue, + getCustomFieldsDefaults, GetPaymentMethodDetailDocument, GetPaymentMethodDetailQuery, LanguageCode, @@ -53,9 +54,7 @@ export class PaymentMethodDetailComponent enabled: [true, Validators.required], checker: {} as NonNullable['checker'], handler: {} as NonNullable['handler'], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); checkers: ConfigurableOperationDefinition[] = []; handlers: ConfigurableOperationDefinition[] = []; diff --git a/packages/admin-ui/src/lib/settings/src/components/profile/profile.component.ts b/packages/admin-ui/src/lib/settings/src/components/profile/profile.component.ts index fa1487b07d..73c215559b 100644 --- a/packages/admin-ui/src/lib/settings/src/components/profile/profile.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/profile/profile.component.ts @@ -4,6 +4,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Administrator, DataService, + getCustomFieldsDefaults, GetProfileDetailDocument, LanguageCode, NotificationService, @@ -50,9 +51,7 @@ export class ProfileComponent firstName: ['', Validators.required], lastName: ['', Validators.required], password: [''], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); constructor( diff --git a/packages/admin-ui/src/lib/settings/src/components/seller-detail/seller-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/seller-detail/seller-detail.component.ts index 5160f58be9..7bacbcc408 100644 --- a/packages/admin-ui/src/lib/settings/src/components/seller-detail/seller-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/seller-detail/seller-detail.component.ts @@ -4,6 +4,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { CreateSellerInput, DataService, + getCustomFieldsDefaults, GetSellerDetailDocument, LanguageCode, NotificationService, @@ -42,9 +43,7 @@ export class SellerDetailComponent customFields = this.getCustomFieldConfig('Seller'); detailForm = this.formBuilder.group({ name: ['', Validators.required], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateSeller, Permission.CreateSeller]; diff --git a/packages/admin-ui/src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts index a0eb5f3999..5282e39e5f 100644 --- a/packages/admin-ui/src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts @@ -11,13 +11,13 @@ import { findTranslation, GetActiveChannelQuery, getConfigArgValue, + getCustomFieldsDefaults, GetShippingMethodDetailDocument, GetShippingMethodDetailQuery, LanguageCode, NotificationService, Permission, SHIPPING_METHOD_FRAGMENT, - ShippingMethod, ShippingMethodFragment, TestShippingMethodInput, TestShippingMethodResult, @@ -60,9 +60,7 @@ export class ShippingMethodDetailComponent fulfillmentHandler: ['', Validators.required], checker: {} as NonNullable['checker'], calculator: {} as NonNullable['calculator'], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); checkers: ConfigurableOperationDefinition[] = []; calculators: ConfigurableOperationDefinition[] = []; diff --git a/packages/admin-ui/src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts index 50560d7e6c..d1fc9a8737 100644 --- a/packages/admin-ui/src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts @@ -4,6 +4,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { CreateTaxCategoryInput, DataService, + getCustomFieldsDefaults, GetTaxCategoryDetailDocument, LanguageCode, NotificationService, @@ -39,9 +40,7 @@ export class TaxCategoryDetailComponent detailForm = this.formBuilder.group({ name: ['', Validators.required], isDefault: false, - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory]; diff --git a/packages/admin-ui/src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts index bb063fd464..7f6b107db9 100644 --- a/packages/admin-ui/src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts @@ -5,13 +5,13 @@ import { CreateTaxRateInput, CustomerGroup, DataService, + getCustomFieldsDefaults, GetTaxRateDetailDocument, LanguageCode, NotificationService, Permission, TAX_RATE_FRAGMENT, TaxCategoryFragment, - TaxRate, TaxRateFragment, TypedBaseDetailComponent, UpdateTaxRateInput, @@ -47,9 +47,7 @@ export class TaxRateDetailComponent taxCategoryId: ['', Validators.required], zoneId: ['', Validators.required], customerGroupId: [''], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); taxCategories$: Observable; groups$: Observable; diff --git a/packages/admin-ui/src/lib/settings/src/components/zone-detail/zone-detail.component.ts b/packages/admin-ui/src/lib/settings/src/components/zone-detail/zone-detail.component.ts index eaf4bfce04..79a278a09c 100644 --- a/packages/admin-ui/src/lib/settings/src/components/zone-detail/zone-detail.component.ts +++ b/packages/admin-ui/src/lib/settings/src/components/zone-detail/zone-detail.component.ts @@ -4,6 +4,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { CreateZoneInput, DataService, + getCustomFieldsDefaults, GetZoneDetailDocument, GetZoneDetailQuery, LanguageCode, @@ -42,9 +43,7 @@ export class ZoneDetailComponent customFields = this.getCustomFieldConfig('Zone'); detailForm = this.formBuilder.group({ name: ['', Validators.required], - customFields: this.formBuilder.group( - this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}), - ), + customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)), }); readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateZone];