import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { ApplicantForDash } from '@core/typings/applicant.typing'; import { ApplicantManagerService } from '@features/applicant/applicant-manager.service'; import { APIResult, DebounceFactory, PaginationOptions, SimpleDebounceFactory, TableCSVFactory, TableDataFactory, TopLevelFilter } from '@yourcause/common'; import { I18nService } from '@yourcause/common/i18n'; @Component({ selector: 'gc-applicants-list', templateUrl: './applicants-list.component.html', styleUrls: ['./applicants-list.component.scss'] }) export class ApplicantsListComponent implements OnInit, OnChanges { @Input() cycleIds: number[]; @Input() key = ''; applicantListFilters: TopLevelFilter[] = []; applicantListFactory: TableDataFactory; applicantListCsvFactory: TableCSVFactory; constructor ( private i18n: I18nService, private applicantManagerService: ApplicantManagerService ) { } get isNomination () { return location.pathname.includes('nomination'); } ngOnInit () { this.setApplicantListFactoryAndFilters(); } ngOnChanges () { if (this.applicantListFactory) { this.applicantListFactory.reset.emit(); } } setApplicantListFactoryAndFilters () { this.applicantListFilters = [ new TopLevelFilter( 'text', 'applicantInfo.fullName', '', this.i18n.translate( this.isNomination ? 'APPLICANT:textSearchByNominatorNameOrRequestAmt' : 'APPLICANT:textSearchByApplicantNameOrRequestAmt', {}, `Search by ${ this.isNomination ? 'nominator' : 'applicant' } name or request amount` ), undefined, undefined, [{ column: 'applicantInfo.fullName', filterType: 'cn' }, { column: 'amountRequested', filterType: 'eq' }] ) ]; this.applicantListFactory = this.getApplicantListFactory(false); this.applicantListCsvFactory = this.getApplicantListFactory(true); } getApplicantListFactory ( isCsv: C ): SimpleDebounceFactory< PaginationOptions, C extends true ? string : APIResult> { return DebounceFactory.createSimple( async (options: PaginationOptions) => { options.rowsPerPage = 10; return this.applicantManagerService.getApplicantListForInsights( options, this.cycleIds, isCsv ); } ); } }