Select Git revision
bitbucket-pipelines.yml
aktenzeichen-edit-dialog.component.ts 3.13 KiB
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { AktenzeichenEditDialogData } from './aktenzeichen-edit-dialog.data';
import { AktenzeichenEditDialogFormservice } from './aktenzeichen-edit-dialog.formservice';
import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { COMMAND_ERROR_MESSAGES, CommandResource, hasError, isSuccessfulDone } from '@alfa-client/command-shared';
import { createEmptyStateResource, hasContent, isClipboardReadSupported, StateResource } from '@alfa-client/tech-shared';
import { map, Observable, of, startWith, tap } from 'rxjs';
import { SnackBarService } from '@alfa-client/ui';
import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message';
@Component({
selector: 'alfa-aktenzeichen-edit-dialog',
templateUrl: './aktenzeichen-edit-dialog.component.html',
styleUrls: ['./aktenzeichen-edit-dialog.component.scss'],
providers: [AktenzeichenEditDialogFormservice]
})
export class AktenzeichenEditDialogComponent implements OnInit {
vorgang: VorgangWithEingangResource;
public setAktenzeichenPending$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>());
public hasAktenzeichen$: Observable<boolean>;
public isPasteSupported = false;
protected readonly AktenzeichenEditDialogFormservice = AktenzeichenEditDialogFormservice;
constructor(
public formService: AktenzeichenEditDialogFormservice,
private readonly snackbarService: SnackBarService,
private readonly vorgangService: VorgangService,
public dialogRef: MatDialogRef<AktenzeichenEditDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: AktenzeichenEditDialogData,
) {
this.vorgang = data.vorgang;
}
ngOnInit(): void {
this.isPasteSupported = isClipboardReadSupported();
this.formService.setAktenzeichen(this.vorgang.aktenzeichen);
this.hasAktenzeichen$ = this.formService.valueChanges()
.pipe(startWith(this.vorgang.aktenzeichen))
.pipe(map(hasContent));
}
public onCancel(): void {
this.dialogRef.close();
}
public onSubmit(): void {
this.formService.setVorgangWithEingangResource(this.vorgang);
this.setAktenzeichenPending$ = this.formService.submit()
.pipe(startWith(createEmptyStateResource<CommandResource>(true)))
.pipe(tap((commandStateResource: StateResource<CommandResource>) => this.onResponse(commandStateResource.resource)));
}
onResponse(commandResource: CommandResource) {
if (commandResource && hasError(commandResource)) {
this.showSnackbar(commandResource);
} else if (isSuccessfulDone(commandResource)) {
this.vorgangService.reloadCurrentVorgang();
this.dialogRef.close();
}
}
private showSnackbar(commandResource: CommandResource): void {
if (hasError(commandResource)) {
this.snackbarService.showError(this.getErrorMessage(commandResource));
}
}
private getErrorMessage(commandResource: CommandResource): string {
return COMMAND_ERROR_MESSAGES[commandResource.errorMessage] || AktenzeichenEditDialogMessages.SET_FAILED;
}
paste(clipboardContent: string) {
this.formService.setAktenzeichen(clipboardContent);
}
}