import { AdminService } from '@ghostfolio/client/services/admin.service'; import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, Validators } from '@angular/forms'; import { MatDialogRef } from '@angular/material/dialog'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'h-100' }, selector: 'gf-create-asset-profile-dialog', styleUrls: ['./create-asset-profile-dialog.component.scss'], templateUrl: 'create-asset-profile-dialog.html' }) export class CreateAssetProfileDialog implements OnInit, OnDestroy { public createAssetProfileForm: FormGroup; public mode: 'auto' | 'manual'; public constructor( public readonly adminService: AdminService, public readonly dialogRef: MatDialogRef, public readonly formBuilder: FormBuilder ) {} public ngOnInit() { this.createAssetProfileForm = this.formBuilder.group( { addSymbol: new FormControl(null, [Validators.required]), searchSymbol: new FormControl(null, [Validators.required]) }, { validators: this.atLeastOneValid } ); this.mode = 'auto'; } public onCancel() { this.dialogRef.close(); } public onRadioChange(mode: 'auto' | 'manual') { this.mode = mode; } public onSubmit() { this.mode === 'auto' ? this.dialogRef.close({ dataSource: this.createAssetProfileForm.get('searchSymbol').value.dataSource, symbol: this.createAssetProfileForm.get('searchSymbol').value.symbol }) : this.dialogRef.close({ dataSource: 'MANUAL', symbol: this.createAssetProfileForm.get('addSymbol').value }); } public ngOnDestroy() {} private atLeastOneValid(control: AbstractControl): ValidationErrors { const addSymbolControl = control.get('addSymbol'); const searchSymbolControl = control.get('searchSymbol'); if (addSymbolControl.valid && searchSymbolControl.valid) { return { atLeastOneValid: true }; } if ( addSymbolControl.valid || !addSymbolControl || searchSymbolControl.valid || !searchSymbolControl ) { return { atLeastOneValid: false }; } return { atLeastOneValid: true }; } }