From 2ac27480f19adf8a04b68571c2bed557aaab7ca8 Mon Sep 17 00:00:00 2001 From: KenTandrian Date: Mon, 23 Mar 2026 10:50:40 +0700 Subject: [PATCH] fix(client): resolve type errors --- apps/client/src/app/app.component.ts | 53 +++++++++++++++------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 4e83268a4..e5a20fd42 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -22,6 +22,7 @@ import { Title } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, + Params, PRIMARY_OUTLET, Router, RouterLink, @@ -36,10 +37,15 @@ import { filter } from 'rxjs/operators'; import { GfFooterComponent } from './components/footer/footer.component'; import { GfHeaderComponent } from './components/header/header.component'; import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component'; -import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces'; import { ImpersonationStorageService } from './services/impersonation-storage.service'; import { UserService } from './services/user/user.service'; +export interface GfAppQueryParams extends Params { + dataSource?: DataSource; + holdingDetailDialog?: string; + symbol?: string; +} + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [GfFooterComponent, GfHeaderComponent, RouterLink, RouterOutlet], @@ -48,10 +54,6 @@ import { UserService } from './services/user/user.service'; templateUrl: './app.component.html' }) export class GfAppComponent implements OnInit { - @HostBinding('class.has-info-message') get getHasMessage() { - return this.hasInfoMessage; - } - public canCreateAccount: boolean; public currentRoute: string; public currentSubRoute: string; @@ -66,7 +68,7 @@ export class GfAppComponent implements OnInit { public pageTitle: string; public routerLinkRegister = publicRoutes.register.routerLink; public showFooter = false; - public user: User; + public user: User | undefined; public constructor( private changeDetectorRef: ChangeDetectorRef, @@ -87,15 +89,12 @@ export class GfAppComponent implements OnInit { this.route.queryParams .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((params) => { - if ( - params['dataSource'] && - params['holdingDetailDialog'] && - params['symbol'] - ) { + .subscribe((params: GfAppQueryParams) => { + const { dataSource, holdingDetailDialog, symbol } = params; + if (dataSource && holdingDetailDialog && symbol) { this.openHoldingDetailDialog({ - dataSource: params['dataSource'], - symbol: params['symbol'] + dataSource, + symbol }); } }); @@ -103,6 +102,10 @@ export class GfAppComponent implements OnInit { addIcons({ openOutline }); } + @HostBinding('class.has-info-message') get getHasMessage() { + return this.hasInfoMessage; + } + public ngOnInit() { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.info = this.dataService.fetchInfo(); @@ -128,7 +131,7 @@ export class GfAppComponent implements OnInit { !this.currentSubRoute) || (this.currentRoute === internalRoutes.home.path && this.currentSubRoute === - internalRoutes.home.subRoutes.holdings.path) || + internalRoutes.home.subRoutes?.holdings.path) || (this.currentRoute === internalRoutes.portfolio.path && !this.currentSubRoute)) && this.user?.settings?.viewMode !== 'ZEN' @@ -223,11 +226,16 @@ export class GfAppComponent implements OnInit { } public onClickSystemMessage() { - if (this.user.systemMessage.routerLink) { - this.router.navigate(this.user.systemMessage.routerLink); + const systemMessage = this.user?.systemMessage; + if (!systemMessage) { + return; + } + + if (systemMessage.routerLink) { + void this.router.navigate(systemMessage.routerLink); } else { this.notificationService.alert({ - title: this.user.systemMessage.message + title: systemMessage.message }); } } @@ -269,10 +277,7 @@ export class GfAppComponent implements OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open< - GfHoldingDetailDialogComponent, - HoldingDetailDialogParams - >(GfHoldingDetailDialogComponent, { + const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, { autoFocus: false, data: { dataSource, @@ -313,7 +318,7 @@ export class GfAppComponent implements OnInit { .afterClosed() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { - this.router.navigate([], { + void this.router.navigate([], { queryParams: { dataSource: null, holdingDetailDialog: null, @@ -339,6 +344,6 @@ export class GfAppComponent implements OnInit { this.document .querySelector('meta[name="theme-color"]') - .setAttribute('content', themeColor); + ?.setAttribute('content', themeColor); } }