diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 560a3e16a..557699495 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -15,7 +15,6 @@ import { UniqueAsset } from '@ghostfolio/common/interfaces'; import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; import { Inject, Injectable, Logger } from '@nestjs/common'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; -import { data } from 'cheerio/lib/api/attributes'; import { format, isValid } from 'date-fns'; import { groupBy, isEmpty, isNumber } from 'lodash'; diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.scss b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts index de5275fab..9f475b108 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts @@ -1,8 +1,6 @@ import { ChangeDetectionStrategy, - ChangeDetectorRef, Component, - Inject, OnDestroy, OnInit } from '@angular/core'; @@ -21,37 +19,15 @@ import { AdminService } from '@ghostfolio/client/services/admin.service'; 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 { - private atLeastOneValid = ( - control: AbstractControl - ): ValidationErrors | null => { - const addSymbolControl = control.get('addSymbol'); - const searchSymbolControl = control.get('searchSymbol'); - - if (addSymbolControl.valid && searchSymbolControl.valid) { - return { atLeastOneValid: true }; - } - - if ( - !searchSymbolControl || - !addSymbolControl || - searchSymbolControl.valid || - addSymbolControl.valid - ) { - return { atLeastOneValid: false }; - } - - return { atLeastOneValid: true }; - }; - public createAssetProfileForm: FormGroup; - public selectedOption: string; + public mode: 'auto' | 'manual' = 'auto'; public constructor( public readonly adminService: AdminService, - public readonly changeDetectorRef: ChangeDetectorRef, public readonly dialogRef: MatDialogRef, public readonly formBuilder: FormBuilder ) {} @@ -59,27 +35,27 @@ export class CreateAssetProfileDialog implements OnInit, OnDestroy { public ngOnInit() { this.createAssetProfileForm = this.formBuilder.group( { - searchSymbol: new FormControl(null, [Validators.required]), - addSymbol: new FormControl(null, [Validators.required]) + addSymbol: new FormControl(null, [Validators.required]), + searchSymbol: new FormControl(null, [Validators.required]) }, { validators: this.atLeastOneValid } ); - this.selectedOption = 'auto'; + this.mode = 'auto'; } public onCancel() { this.dialogRef.close(); } - public onRadioChange(option: string) { - this.selectedOption = option; + public onRadioChange(mode: 'auto' | 'manual') { + this.mode = mode; } public onSubmit() { - this.selectedOption === 'auto' + this.mode === 'auto' ? this.dialogRef.close({ dataSource: this.createAssetProfileForm.controls['searchSymbol'].value @@ -94,4 +70,24 @@ export class CreateAssetProfileDialog implements OnInit, OnDestroy { } 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 }; + } } diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html index 29b9013dd..71679df33 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -9,30 +9,18 @@
- - - + + + - +
-
+
Name, symbol or ISIN
-
+
Symbol - +
diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts index f342137aa..2d50200c4 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.module.ts @@ -3,10 +3,9 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; -import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { MatRadioModule } from '@angular/material/radio'; - import { GfSymbolAutocompleteModule } from '@ghostfolio/ui/symbol-autocomplete'; import { CreateAssetProfileDialog } from './create-asset-profile-dialog.component';