import { Component, Input } from '@angular/core'; import { SpinnerService } from '@core/services/spinner.service'; import { CSVBooleanFactory, FileService, IsEmail, IsString, OrganizedError, Required } from '@yourcause/common'; import { AnalyticsService, EventType } from '@yourcause/common/analytics'; import { YCModalComponent } from '@yourcause/common/modals'; import { InvitationService } from '../invitation.service'; import { ApplicantFromDistributionList } from '../invitation.typing'; export class DistributionListImportValidationModel { @IsString() @Required() 'First Name': string; @IsString() @Required() 'Last Name': string; @IsEmail() @Required() 'Email': string; @CSVBooleanFactory(false)() 'Is Employee': boolean; } @Component({ selector: 'gc-distribution-list-import-modal', templateUrl: './distribution-list-import-modal.component.html', styleUrls: ['./distribution-list-import-modal.component.scss'] }) export class DistributionListImportModalComponent extends YCModalComponent { @Input() distributionListId: number; ValidationModel = DistributionListImportValidationModel; errors: OrganizedError[]; importValid: boolean; applicants: ApplicantFromDistributionList[]; constructor ( private fileService: FileService, private analyticsService: AnalyticsService, private spinnerService: SpinnerService, private invitationService: InvitationService ) { super(); } async downloadTemplate () { this.spinnerService.startSpinner(); await this.invitationService.downloadTemplateForImportDistributionList( this.distributionListId ); this.spinnerService.stopSpinner(); } contentsChange (applicants: DistributionListImportValidationModel[]) { this.applicants = applicants.map((applicant) => { return { firstName: applicant['First Name'], lastName: applicant['Last Name'], email: applicant['Email'], isEmployee: applicant['Is Employee'] }; }); } handlePrimaryClick () { const csvString = this.fileService.convertObjectArrayToCSVString(this.applicants); this.closeModal.emit(new Blob([csvString], { type: 'text/csv' })); this.analyticsService.emitEvent({ eventName: 'Import distribution list', eventType: EventType.Click, extras: null }); } downloadErrors () { const csv = this.fileService.convertObjectArrayToCSVString(this.errors); this.fileService.downloadString(csv, 'text/csv', 'ImportDistributionList_errors.csv'); this.analyticsService.emitEvent({ eventName: 'Download errors import distribution list', eventType: EventType.Click, extras: null }); } }