import { Component, OnInit } from '@angular/core'; import { SpinnerService } from '@core/services/spinner.service'; import { DebounceFactory, PaginationOptions, TableDataFactory, TopLevelFilter } from '@yourcause/common'; import { I18nService } from '@yourcause/common/i18n'; import { ConfirmationModalComponent, ModalFactory } from '@yourcause/common/modals'; import { InvitationService } from '../invitation.service'; import { DistributionListRecord } from '../invitation.typing'; @Component({ selector: 'gc-distribution-list-tab', templateUrl: './distribution-list-tab.component.html', styleUrls: ['./distribution-list-tab.component.scss'] }) export class DistributionListTabComponent implements OnInit { tableDataFactory: TableDataFactory; topLevelFilters: TopLevelFilter[] = []; constructor ( private i18n: I18nService, private invitationService: InvitationService, private modalFactory: ModalFactory, private spinnerService: SpinnerService ) { } ngOnInit () { this.topLevelFilters = [ new TopLevelFilter( 'text', 'name', '', this.i18n.translate( 'GLOBAL:textSearchByDistributionListName', {}, 'Search by distribution list name or description' ), undefined, undefined, [{ column: 'name', filterType: 'cn' }, { column: 'description', filterType: 'cn' }] ) ]; this.tableDataFactory = DebounceFactory.createSimple( async (options: PaginationOptions) => { const result = await this.invitationService.getDistributionLists( options ); return { success: true, data: result }; } ); } async copyDistributionList (row: DistributionListRecord) { const response = await this.modalFactory.open( ConfirmationModalComponent, { modalHeader: this.i18n.translate( 'PROGRAM:hdrCopyDistributionList', {}, 'Copy Distribution List' ), modalSubHeader: row.name, confirmText: this.i18n.translate( 'PROGRAM:textAreYouSureCopyDistributionList', {}, 'This action will create a copy of the distribution list with all included applicants. Are you sure you want to copy the list?' ), confirmButtonText: this.i18n.translate( 'common:textCopy', {}, 'Copy' ) } ); if (response) { this.spinnerService.startSpinner(); await this.invitationService.handleCopyDistributionList(row.id); this.tableDataFactory.reset.emit(); this.spinnerService.stopSpinner(); } } async deleteDistributionList (row: DistributionListRecord) { const deps = { modalHeader: this.i18n.translate( 'PROGRAM:hdrDeleteDistributionList', {}, 'Delete Distribution List' ), modalSubHeader: row.name, confirmButtonText: this.i18n.translate( 'common:btnDelete', {}, 'Delete' ), confirmText: this.i18n.translate( 'PROGRAM:textDeleteDistributionListConfirm', {}, 'Are you sure you want to delete the distribution list?' ) }; const response = await this.modalFactory.open( ConfirmationModalComponent, deps ); if (response) { this.spinnerService.startSpinner(); await this.invitationService.handleDeleteDistributionList(row.id); this.tableDataFactory.reset.emit(); this.spinnerService.stopSpinner(); } } }