From f3f8bf23359e6e3cec5e7da221b1da0178f113a4 Mon Sep 17 00:00:00 2001 From: KenTandrian Date: Sun, 12 Jul 2026 21:51:35 +0700 Subject: [PATCH] feat(client): enforce encapsulation --- .../activities/activities-page.component.ts | 127 +++++++++--------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index 439cdaea7..8969ef944 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -31,7 +31,6 @@ import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { format, parseISO } from 'date-fns'; import { DeviceDetectorService } from 'ngx-device-detector'; -import { Subscription } from 'rxjs'; import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component'; import { CreateOrUpdateActivityDialogParams } from './create-or-update-activity-dialog/interfaces/interfaces'; @@ -51,19 +50,19 @@ import { ImportActivitiesDialogParams } from './import-activities-dialog/interfa templateUrl: './activities-page.html' }) export class GfActivitiesPageComponent implements OnInit { - public activityTypesFilter: string[] = []; - public dataSource: MatTableDataSource | undefined; - public deviceType: string; - public hasImpersonationId: boolean; - public hasPermissionToCreateActivity: boolean; - public hasPermissionToDeleteActivity: boolean; - public pageIndex = 0; - public pageSize = DEFAULT_PAGE_SIZE; - public routeQueryParams: Subscription; - public sortColumn = 'date'; - public sortDirection: SortDirection = 'desc'; - public totalItems: number | undefined; - public user: User; + protected dataSource: MatTableDataSource | undefined; + protected deviceType: string; + protected hasImpersonationId: boolean; + protected hasPermissionToCreateActivity: boolean; + protected hasPermissionToDeleteActivity: boolean; + protected pageIndex = 0; + protected pageSize = DEFAULT_PAGE_SIZE; + protected sortColumn = 'date'; + protected sortDirection: SortDirection = 'desc'; + protected totalItems: number | undefined; + protected user: User; + + private activityTypesFilter: string[] = []; public constructor( private changeDetectorRef: ChangeDetectorRef, @@ -77,7 +76,7 @@ export class GfActivitiesPageComponent implements OnInit { private router: Router, private userService: UserService ) { - this.routeQueryParams = route.queryParams + route.queryParams .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((params) => { if (params['createDialog']) { @@ -131,49 +130,13 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public fetchActivities() { - // Reset dataSource and totalItems to show loading state - this.dataSource = undefined; - this.totalItems = undefined; - - const dateRange = this.user?.settings?.dateRange; - const range = this.isCalendarYear(dateRange) ? dateRange : undefined; - - this.dataService - .fetchActivities({ - range, - activityTypes: this.activityTypesFilter.length - ? this.activityTypesFilter - : undefined, - filters: this.userService.getFilters(), - skip: this.pageIndex * this.pageSize, - sortColumn: this.sortColumn, - sortDirection: this.sortDirection, - take: this.pageSize - }) - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(({ activities, count }) => { - this.dataSource = new MatTableDataSource(activities); - this.totalItems = count; - - if ( - this.hasPermissionToCreateActivity && - this.user?.activitiesCount === 0 - ) { - this.router.navigate([], { queryParams: { createDialog: true } }); - } - - this.changeDetectorRef.markForCheck(); - }); - } - - public onChangePage(page: PageEvent) { + protected onChangePage(page: PageEvent) { this.pageIndex = page.pageIndex; this.fetchActivities(); } - public onClickActivity({ dataSource, symbol }: AssetProfileIdentifier) { + protected onClickActivity({ dataSource, symbol }: AssetProfileIdentifier) { this.router.navigate([], { queryParams: { dataSource, @@ -183,11 +146,11 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onCloneActivity(aActivity: Activity) { + protected onCloneActivity(aActivity: Activity) { this.openCreateActivityDialog(aActivity); } - public onDeleteActivities() { + protected onDeleteActivities() { this.dataService .deleteActivities({ filters: this.userService.getFilters() @@ -205,7 +168,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onDeleteActivity(aId: string) { + protected onDeleteActivity(aId: string) { this.dataService .deleteActivity(aId) .pipe(takeUntilDestroyed(this.destroyRef)) @@ -221,7 +184,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onExport(activityIds?: string[]) { + protected onExport(activityIds?: string[]) { let fetchExportParams: any = { activityIds }; if (!activityIds) { @@ -252,7 +215,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onExportDrafts(activityIds?: string[]) { + protected onExportDrafts(activityIds?: string[]) { this.dataService .fetchExport({ activityIds }) .pipe(takeUntilDestroyed(this.destroyRef)) @@ -270,7 +233,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onImport() { + protected onImport() { const dialogRef = this.dialog.open< GfImportActivitiesDialogComponent, ImportActivitiesDialogParams @@ -298,7 +261,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onImportDividends() { + protected onImportDividends() { const dialogRef = this.dialog.open< GfImportActivitiesDialogComponent, ImportActivitiesDialogParams @@ -327,7 +290,7 @@ export class GfActivitiesPageComponent implements OnInit { }); } - public onSortChanged({ active, direction }: Sort) { + protected onSortChanged({ active, direction }: Sort) { this.pageIndex = 0; this.sortColumn = active; this.sortDirection = direction; @@ -335,20 +298,56 @@ export class GfActivitiesPageComponent implements OnInit { this.fetchActivities(); } - public onTypesFilterChanged(aTypes: string[]) { + protected onTypesFilterChanged(aTypes: string[]) { this.activityTypesFilter = aTypes; this.pageIndex = 0; this.fetchActivities(); } - public onUpdateActivity(aActivity: Activity) { + protected onUpdateActivity(aActivity: Activity) { this.router.navigate([], { queryParams: { activityId: aActivity.id, editDialog: true } }); } - public openUpdateActivityDialog(aActivity: Activity) { + private fetchActivities() { + // Reset dataSource and totalItems to show loading state + this.dataSource = undefined; + this.totalItems = undefined; + + const dateRange = this.user?.settings?.dateRange; + const range = this.isCalendarYear(dateRange) ? dateRange : undefined; + + this.dataService + .fetchActivities({ + range, + activityTypes: this.activityTypesFilter.length + ? this.activityTypesFilter + : undefined, + filters: this.userService.getFilters(), + skip: this.pageIndex * this.pageSize, + sortColumn: this.sortColumn, + sortDirection: this.sortDirection, + take: this.pageSize + }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({ activities, count }) => { + this.dataSource = new MatTableDataSource(activities); + this.totalItems = count; + + if ( + this.hasPermissionToCreateActivity && + this.user?.activitiesCount === 0 + ) { + this.router.navigate([], { queryParams: { createDialog: true } }); + } + + this.changeDetectorRef.markForCheck(); + }); + } + + private openUpdateActivityDialog(aActivity: Activity) { const dialogRef = this.dialog.open< GfCreateOrUpdateActivityDialogComponent, CreateOrUpdateActivityDialogParams