diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component.ts new file mode 100644 index 000000000..5387ae178 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component.ts @@ -0,0 +1,79 @@ +import { ChangeDetectionStrategy, Component, forwardRef, Injector } from '@angular/core'; +import { AppStateService } from '@state/app-state.service'; +import { UserPreferenceService } from '@services/user-preference.service'; +import { AdminDialogService } from '../../../services/admin-dialog.service'; +import { DossierTemplate } from '@red/domain'; +import { + CircleButtonTypes, + DefaultListingServicesTmp, + EntitiesService, + IconButtonTypes, + ListingComponent, + LoadingService, + TableColumnConfig, + Toaster, +} from '@iqser/common-ui'; +import { UserService } from '@services/user.service'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { RouterHistoryService } from '@services/router-history.service'; +import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; +import { HttpStatusCode } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; + +@Component({ + templateUrl: './dossier-templates-listing-screen.component.html', + styleUrls: ['./dossier-templates-listing-screen.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + ...DefaultListingServicesTmp, + { provide: EntitiesService, useExisting: DossierTemplatesService }, + { provide: ListingComponent, useExisting: forwardRef(() => DossierTemplatesListingScreenComponent) }, + ], +}) +export class DossierTemplatesListingScreenComponent extends ListingComponent { + readonly iconButtonTypes = IconButtonTypes; + readonly circleButtonTypes = CircleButtonTypes; + readonly currentUser = this._userService.currentUser; + readonly tableHeaderLabel = _('dossier-templates-listing.table-header.title'); + readonly tableColumnConfigs: TableColumnConfig[] = [ + { label: _('dossier-templates-listing.table-col-names.name'), sortByKey: 'searchKey' }, + { label: _('dossier-templates-listing.table-col-names.created-by'), class: 'user-column' }, + { label: _('dossier-templates-listing.table-col-names.created-on'), sortByKey: 'dateAdded' }, + { label: _('dossier-templates-listing.table-col-names.modified-on'), sortByKey: 'dateModified' }, + ]; + + constructor( + private readonly _toaster: Toaster, + protected readonly _injector: Injector, + private readonly _userService: UserService, + private readonly _loadingService: LoadingService, + private readonly _appStateService: AppStateService, + private readonly _dialogService: AdminDialogService, + readonly routerHistoryService: RouterHistoryService, + readonly userPreferenceService: UserPreferenceService, + private readonly _dossierTemplatesService: DossierTemplatesService, + ) { + super(_injector); + } + + openBulkDeleteTemplatesDialog($event?: MouseEvent) { + return this._dialogService.openDialog('confirm', $event, null, () => { + this._loadingService.loadWhile(this._deleteTemplates()); + }); + } + + openAddDossierTemplateDialog() { + this._dialogService.openDialog('addEditDossierTemplate', null, null); + } + + private async _deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) { + await firstValueFrom(this._dossierTemplatesService.delete(templateIds)).catch(error => { + if (error.status === HttpStatusCode.Conflict) { + this._toaster.error(_('dossier-templates-listing.error.conflict')); + } else { + this._toaster.error(_('dossier-templates-listing.error.generic')); + } + }); + await this._appStateService.loadDictionaryData(); + } +}