diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index 53345131c..b82719995 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -17,7 +17,10 @@ import { User } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; -import { validateObjectForForm } from '@ghostfolio/common/utils'; +import { + validateObjectForForm, + jsonValidator +} from '@ghostfolio/common/utils/form.util'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; @@ -150,7 +153,7 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { assetClass: new FormControl(undefined), assetSubClass: new FormControl(undefined), comment: '', - countries: ['', this.jsonValidator()], + countries: ['', jsonValidator()], currency: '', historicalData: this.formBuilder.group({ csvString: '' @@ -159,14 +162,14 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { name: ['', Validators.required], scraperConfiguration: this.formBuilder.group({ defaultMarketPrice: null, - headers: [JSON.stringify({}), this.jsonValidator()], + headers: [JSON.stringify({}), jsonValidator()], locale: '', mode: '', selector: '', url: '' }), - sectors: ['', this.jsonValidator()], - symbolMapping: ['', this.jsonValidator()], + sectors: ['', jsonValidator()], + symbolMapping: ['', jsonValidator()], url: '' }); @@ -722,17 +725,4 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { }; } } - - private jsonValidator() { - return (control: AbstractControl): ValidationErrors | null => { - try { - if (control.value) { - JSON.parse(control.value); - } - return null; - } catch { - return { invalidJson: true }; - } - }; - } } diff --git a/libs/common/src/lib/utils/form.util.ts b/libs/common/src/lib/utils/form.util.ts index 425aa4699..eff18f8fc 100644 --- a/libs/common/src/lib/utils/form.util.ts +++ b/libs/common/src/lib/utils/form.util.ts @@ -1,3 +1,4 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; import { FormGroup } from '@angular/forms'; import { plainToInstance } from 'class-transformer'; import { validate } from 'class-validator'; @@ -44,3 +45,17 @@ export async function validateObjectForForm({ return Promise.reject(nonIgnoredErrors); } + +export function jsonValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) { + return null; + } + + try { + JSON.parse(control.value); + } catch { + return { invalidJson: true }; + } + }; +}