import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { ConfigureProgram } from '@core/typings/program.typing'; import { BudgetService } from '@features/budgets/budget.service'; import { BudgetResolver } from '@features/budgets/resolvers/budget.resolver'; import { PaymentProcessingService } from '@features/payment-processing/payment-processing.service'; import { ProgramService } from '@features/programs/program.service'; import { I18nService } from '@yourcause/common/i18n'; import { LogService } from '@yourcause/common/logging'; import { NotifierService } from '@yourcause/common/notifier'; import { AllProgramsResolver } from './all-programs.resolver'; @Injectable({ providedIn: 'root' }) export class CreateEditProgramResolver implements Resolve { constructor ( private logger: LogService, private notifier: NotifierService, private i18n: I18nService, private programService: ProgramService, private paymentProcessingService: PaymentProcessingService, private budgetService: BudgetService, private allProgramsResolver: AllProgramsResolver, private budgetResolver: BudgetResolver ) { } async resolve (next: ActivatedRouteSnapshot) { const id = +next.params.id; const map = this.programService.get('configureProgramMap'); let program: ConfigureProgram; await Promise.all([ this.allProgramsResolver.resolve(), this.budgetResolver.resolve() ]); try { program = await this.programService.getProgramForEdit( id, this.paymentProcessingService.processorType, this.budgetService.budgets ); } catch (e) { this.logger.error(e); this.notifier.error(this.i18n.translate( 'PROGRAM:textErrorLoadingProgram', {}, 'There was an error loading the program' )); throw e; } this.programService.setConfigureProgramMap({ ...map, [id]: program }); this.programService.setActiveProgramId('' + id); } }