import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { SpinnerService } from '@core/services/spinner.service'; import { MyApplicationFromApi } from '@core/typings/application.typing'; import { ApplicationEligibilityService } from '@features/application-eligibility/application-eligibility.service'; import { ArrayHelpersService, AutoTableRepository, AutoTableRepositoryFactory, ValueComparisonService } from '@yourcause/common'; import { AnalyticsService, EventType } from '@yourcause/common/analytics'; import { YCModalComponent } from '@yourcause/common/modals'; import { NotifierService } from '@yourcause/common/notifier'; import { ApplicationApplicantService } from '../application-applicant.service'; interface CopyApplicationModalResponse { goBack: boolean; startNew: boolean; copyOfId: number; } @Component({ selector: 'gc-copy-application-modal', templateUrl: './copy-application-modal.component.html', styleUrls: ['./copy-application-modal.component.scss'] }) export class CopyApplicationModalComponent extends YCModalComponent< CopyApplicationModalResponse > implements OnInit { @Input() programId: number; @Input() programName: string; @Input() isNomination = false; hide = false; repository: AutoTableRepository; constructor ( private autoTableFactory: AutoTableRepositoryFactory, private applicationApplicantService: ApplicationApplicantService, private notifierService: NotifierService, private valueComparisonService: ValueComparisonService, private cdr: ChangeDetectorRef, private arrayHelper: ArrayHelpersService, private analyticsService: AnalyticsService, private spinnerService: SpinnerService, private applicationEligibilityService: ApplicationEligibilityService ) { super(); } ngOnInit () { const rows = this.arrayHelper.sort( this.applicationApplicantService.myApplications.filter((app) => { return +this.programId === +app.grantProgramId && !app.isDraft; }), 'submissionDate', true ); this.repository = this.autoTableFactory.create({ key: `AVAILABLE_TO_COPY_${this.programId}`, columns: [], notifier: this.notifierService, valueComparisonService: this.valueComparisonService, rows, cdr: this.cdr, skipAddToState: true }); } async copyApplication (application: MyApplicationFromApi) { this.spinnerService.startSpinner(); this.hide = true; const valid = await this.applicationEligibilityService.checkEligibilityForApplicantView(application); this.spinnerService.stopSpinner(); if (valid) { this.closeModal.emit({ goBack: false, startNew: false, copyOfId: application.applicationId }); } else { this.goBack(); } } startNew () { this.closeModal.emit({ goBack: false, startNew: true, copyOfId: null }); this.analyticsService.emitEvent({ eventName: 'Start new', eventType: EventType.Click, extras: null }); } goBack () { this.closeModal.emit({ goBack: true, startNew: false, copyOfId: null }); this.analyticsService.emitEvent({ eventName: 'Go back', eventType: EventType.Click, extras: null }); } }