import { Component, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { SpinnerService } from '@core/services/spinner.service'; import { ApplicationActivityForUi, ApplicationActivityFromApi, GrantActivityTypes } from '@features/application-activity/activity.typing'; import { ApplicationActivityService } from '@features/application-activity/application-activity.service'; import { ClientSettingsService } from '@features/client-settings/client-settings.service'; import { DebounceFactory, PaginationOptions, TableDataFactory, TypeToken } from '@yourcause/common'; import { skip, Subscription } from 'rxjs'; import { ApplicationViewService } from '../application-view.service'; @Component({ selector: 'gc-activity-tab', templateUrl: './activity-tab.component.html', styleUrls: ['./activity-tab.component.scss'] }) export class ActivityTabComponent implements OnInit, OnDestroy { applicationId = +this.activatedRoute.parent.snapshot.params.id; activityListFactory: TableDataFactory; defaultCurrency = this.clientSettingsService.defaultCurrency; sub = new Subscription(); $activityTypeId = new TypeToken(); constructor ( private activatedRoute: ActivatedRoute, private applicationViewService: ApplicationViewService, private clientSettingsService: ClientSettingsService, private spinnerService: SpinnerService, private applicationActivityService: ApplicationActivityService ) { this.sub.add( this.applicationViewService.changesTo$('applicationViewMap') .subscribe(() => { this.updatePanel(); }) ); this.sub.add( this.applicationViewService.changesTo$('triggerActivityTabUpdate') .pipe(skip(1)).subscribe(() => { this.updatePanel(); }) ); } get applicationViewMap () { return this.applicationViewService.applicationViewMap; } get application () { return this.applicationViewMap[this.applicationId]?.application; } get activityMap () { return this.applicationActivityService.activityMap; } get isNomination () { return location.pathname.includes('nomination'); } ngOnInit () { this.activityListFactory = DebounceFactory.createSimple( (options: PaginationOptions) => { return this.applicationActivityService.getAppActivity(this.applicationId, options); } ); } async updatePanel () { this.spinnerService.startSpinner(); if (this.activityListFactory) { this.activityListFactory.reset.emit(); } this.spinnerService.stopSpinner(); } ngOnDestroy () { this.sub.unsubscribe(); } }