import { Component, OnDestroy, OnInit } from '@angular/core'; import { Program, ProgramApplicantType, ProgramTypes } from '@core/typings/program.typing'; import { BulkAction } from '@yourcause/common'; import { Subscription } from 'rxjs'; import { ProgramService } from '../program.service'; @Component({ selector: 'gc-grant-program-step', templateUrl: './grant-program-step.component.html', styleUrls: ['./grant-program-step.component.scss'] }) export class GrantProgramStepComponent implements OnInit, OnDestroy { forOrgs: boolean; programs: Program[] = []; bulkActions: BulkAction[] = [{ label: '', disabled: () => false, exec: () => true }]; bulkSelected: Program[]; showRequiredAlert = false; sub = new Subscription(); constructor ( private programService: ProgramService ) { this.sub.add(this.programService.changesTo$('configureProgramMap').subscribe(() => { this.updateValidation(); })); } get programMap () { return this.programService.get('configureProgramMap'); } get activeProgramId () { return this.programService.get('activeProgramId'); } get program () { return this.programMap[this.activeProgramId]; } ngOnInit () { const programs = this.programService.allPublishedActivePrograms; this.programs = (programs || []).filter((prog) => { const type = prog.programApplicantType; return prog.programType === ProgramTypes.GRANT && (type === ProgramApplicantType.ORGS ? [ ProgramApplicantType.ORGS, ProgramApplicantType.ORGS_WITH_BUCKET ].includes(this.program.applicantType) : this.program.applicantType === ProgramApplicantType.INDIVIDUAL); }); this.forOrgs = (this.program.applicantType === ProgramApplicantType.ORGS) || (this.program.applicantType === ProgramApplicantType.ORGS_WITH_BUCKET); this.setBulkSelected(); } setBulkSelected () { const eligPrograms = this.programService.allPublishedPrograms.filter((prog) => { return this.forOrgs ? prog.programApplicantType === ProgramApplicantType.ORGS : ProgramApplicantType.INDIVIDUAL; }); this.bulkSelected = (this.program.grantPrograms || []).map((prog) => { const found = eligPrograms.find((p) => +p.grantProgramId === +prog); return found; }).filter((prog) => !!prog); } bulkSelectedChanged (programs: Program[]) { this.bulkSelected = programs; const bulkSelected = programs.map((prog) => +prog.grantProgramId); this.programService.setMapProperty( this.activeProgramId, 'grantPrograms', bulkSelected ); } updateValidation () { let showAlert = false; if (this.program.publishedValidityAlert) { if (!this.program.grantPrograms || !this.program.grantPrograms.length) { showAlert = true; } } this.showRequiredAlert = showAlert; } ngOnDestroy () { this.sub.unsubscribe(); } }