import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { TranslationService } from '@core/services/translation.service'; import { ProgramApplicantType, ProgramDashboardDetail, ProgramDetailFromApi } from '@core/typings/program.typing'; import { ClientSettingsService } from '@features/client-settings/client-settings.service'; import { CyclesService } from '@features/cycles/cycles.service'; import { ProgramService } from '@features/programs/program.service'; import { SelectOption, Tab, TypeSafeFormBuilder, TypeSafeFormGroup } from '@yourcause/common'; interface ProgramDashGroup { cycleIds: number[]; } @Component({ selector: 'gc-program-dashboard-page', templateUrl: './program-dashboard-page.component.html', styleUrls: ['./program-dashboard-page.component.scss'] }) export class ProgramDashboardPageComponent implements OnInit { id: number; tabs: Tab[] = []; formGroup: TypeSafeFormGroup; cycleIds: number[] = []; cycleOptions: SelectOption[] = []; clientDefaultTz = this.clientSettingsService.clientSettings.defaultTimezone; constructor ( private activatedRoute: ActivatedRoute, private programService: ProgramService, private formBuilder: TypeSafeFormBuilder, private translationService: TranslationService, private clientSettingsService: ClientSettingsService, private cycleService: CyclesService ) { } get programMap (): ProgramDashboardDetail { return this.programService.get('programDashboardMap')[this.id] || {} as ProgramDashboardDetail; } get program (): ProgramDetailFromApi { return this.programMap.detail || {} as ProgramDetailFromApi; } get programStats () { return this.programMap.stats; } get isNomination () { return location.pathname.includes('nomination'); } ngOnInit () { this.id = +this.activatedRoute.snapshot.params.id; this.cycleIds = this.getDefaultCycleIds(); this.programService.setProgramDashCycleIdsMap(this.cycleIds); this.setCycleOptions(); this.formGroup = this.formBuilder.group({ cycleIds: [this.cycleIds] }); this.setTabs(); } setCycleOptions () { this.cycleOptions = this.program.cycles.map((cycle) => { const translation = this.translationService.viewTranslations.Grant_Program_Cycle[ cycle.id ]; return { label: translation && translation.Name ? translation.Name : cycle.name, value: +cycle.id }; }); } getDefaultCycleIds () { const helpers = this.cycleService.getCycleDateHelpers(this.program.cycles); const cycle = helpers.currentCycle || helpers.lastCycle || helpers.nextCycle; return cycle ? [cycle.id] : this.program.cycles.map((c) => { return +c.id; }); } onCycleChange (cycleIds: number[] = []) { this.cycleIds = cycleIds; this.programService.setProgramDashCycleIdsMap(this.cycleIds); } setTabs () { const programChunk = this.isNomination ? 'nomination-program' : 'program'; const base = `/management/insights/program-manager/${programChunk}/${this.id}`; this.tabs = [{ link: `${base}/applications`, labelKey: this.isNomination ? 'common:hdrNominations' : 'common:hdrApplications', label: this.isNomination ? 'Nominations' : 'Applications' }, { link: `${base}/applicants`, labelKey: this.isNomination ? 'common:lblNominators' : 'common:lblApplicants', label: this.isNomination ? 'Nominators' : 'Applicants' }, this.program.programApplicantType === ProgramApplicantType.ORGS ? { link: `${base}/organizations`, labelKey: 'common:lblOrganizations', label: 'Organizations' } : null, !this.isNomination ? { link: `${base}/awards`, labelKey: 'common:hdrAwards', label: 'Awards' } : null, !this.isNomination ? { link: `${base}/payments`, labelKey: 'common:hdrPayments', label: 'Payments' } : null].filter((link) => !!link); } }