Browse Source

refactor(forms): move validators to common utils

pull/6284/head
omkarg01 1 day ago
parent
commit
a7f64439e0
  1. 26
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  2. 15
      libs/common/src/lib/utils/form.util.ts

26
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -17,7 +17,10 @@ import {
User User
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { DateRange } from '@ghostfolio/common/types'; 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 { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor';
@ -150,7 +153,7 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit {
assetClass: new FormControl<AssetClass>(undefined), assetClass: new FormControl<AssetClass>(undefined),
assetSubClass: new FormControl<AssetSubClass>(undefined), assetSubClass: new FormControl<AssetSubClass>(undefined),
comment: '', comment: '',
countries: ['', this.jsonValidator()], countries: ['', jsonValidator()],
currency: '', currency: '',
historicalData: this.formBuilder.group({ historicalData: this.formBuilder.group({
csvString: '' csvString: ''
@ -159,14 +162,14 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit {
name: ['', Validators.required], name: ['', Validators.required],
scraperConfiguration: this.formBuilder.group({ scraperConfiguration: this.formBuilder.group({
defaultMarketPrice: null, defaultMarketPrice: null,
headers: [JSON.stringify({}), this.jsonValidator()], headers: [JSON.stringify({}), jsonValidator()],
locale: '', locale: '',
mode: '', mode: '',
selector: '', selector: '',
url: '' url: ''
}), }),
sectors: ['', this.jsonValidator()], sectors: ['', jsonValidator()],
symbolMapping: ['', this.jsonValidator()], symbolMapping: ['', jsonValidator()],
url: '' 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 };
}
};
}
} }

15
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 { FormGroup } from '@angular/forms';
import { plainToInstance } from 'class-transformer'; import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator'; import { validate } from 'class-validator';
@ -44,3 +45,17 @@ export async function validateObjectForForm<T>({
return Promise.reject(nonIgnoredErrors); 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 };
}
};
}

Loading…
Cancel
Save