import { Component } from '@angular/core'; import { SpinnerService } from '@core/services/spinner.service'; import { AdminClientService } from '@features/platform-admin/clients/admin-client.service'; import { ArrayHelpersService, FileService } from '@yourcause/common'; import { I18nService } from '@yourcause/common/i18n'; import { ConfirmationModalComponent, ModalFactory } from '@yourcause/common/modals'; import { NotifierService } from '@yourcause/common/notifier'; import * as parse from 'papaparse'; import { map } from 'rxjs'; @Component({ selector: 'gc-admin-client-selector', templateUrl: './admin-client-selector.component.html', styleUrls: ['./admin-client-selector.component.scss'] }) export class AdminClientSelectorComponent { clientID: number; activeClient$ = this.adminClientService.changesTo$('activeClient').pipe( map((client) => { this.clientID = client ? client.clientId : null; return (client && client.name) || 'No client selected'; })); clients$ = this.adminClientService.changesTo$('clients').pipe( map(clients => this.arrayHelper.sort(clients, 'name'))); clearClientDataText = this.i18n.translate( 'GLOBAL:textClearClientData', {}, 'Clear client data' ); constructor ( private arrayHelper: ArrayHelpersService, private i18n: I18nService, private modalFactory: ModalFactory, private spinnerService: SpinnerService, private adminClientService: AdminClientService, private notifierService: NotifierService, private fileService: FileService ) { } async downloadClientObjects (clientId: number) { this.spinnerService.startSpinner(); const result = await this.adminClientService.getClientObjects(clientId); const csv = parse.unparse(result); this.fileService.downloadCSV(csv); this.spinnerService.stopSpinner(); } async openConfirmModal () { const deps = { confirmButtonText: this.i18n.translate( 'GLOBAL:textClearClientData', {}, 'Clear client data' ), confirmText: this.i18n.translate( 'reporting:textAreYouSureClearClientData', {}, 'Are you sure you want to clear client data? This action cannot be undone.' ), modalHeader: this.i18n.translate( 'reporting:hdrClearClientData', {}, 'Clear Client Data' ) }; const result = await this.modalFactory.open( ConfirmationModalComponent, deps ); if (result) { this.spinnerService.startSpinner(); await this.adminClientService.clearClientData(this.clientID); this.spinnerService.stopSpinner(); this.notifierService.success(this.i18n.translate( 'reporting:notificationSuccessfullyClearedClientData', {}, 'Successfully cleared client data' )); } } setActiveClient (clientId: number) { this.adminClientService.setActiveClient(clientId); } }