import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { Component, Inject, OnInit } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import { DmpUserRole } from '@app/core/common/enum/dmp-user-role'; import { DmpUserPersist } from '@app/core/model/dmp/dmp'; import { DmpService } from '@app/core/services/dmp/dmp.service'; import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; import { UserService } from '@app/core/services/user/user.service'; import { EnumUtils } from '@app/core/services/utilities/enum-utils.service'; import { BaseComponent } from '@common/base/base.component'; import { FilterService } from '@common/modules/text-filter/filter-service'; import { Guid } from '@common/types/guid'; import { TranslateService } from '@ngx-translate/core'; import { DmpEditorModel } from '../../dmp-editor-blueprint/dmp-editor.model'; import { takeUntil } from 'rxjs/operators'; import { DmpBlueprint } from '@app/core/model/dmp-blueprint/dmp-blueprint'; @Component({ selector: 'app-invitation-dialog-component', templateUrl: 'dmp-invitation-dialog.component.html', styleUrls: ['./dmp-invitation-dialog.component.scss'], }) export class DmpInvitationDialogComponent extends BaseComponent implements OnInit { dmpId: Guid; editorModel: DmpEditorModel; formGroup: UntypedFormGroup; dmpUserRoleEnum = DmpUserRole; selectedBlueprint: DmpBlueprint; readonly separatorKeysCodes: number[] = [ENTER, COMMA]; constructor( public enumUtils: EnumUtils, public route: ActivatedRoute, public router: Router, private language: TranslateService, public dialogRef: MatDialogRef, private uiNotificationService: UiNotificationService, private dmpService: DmpService, private userService: UserService, private filterService: FilterService, @Inject(MAT_DIALOG_DATA) public data: any ) { super(); this.dmpId = data.dmpId; this.editorModel = data ? new DmpEditorModel().fromModel(data) : new DmpEditorModel(); this.selectedBlueprint = data?.blueprint; } ngOnInit() { this.formGroup = this.editorModel.buildForm(); } send() { if (!this.formGroup.get("users").valid) { return; } const userFormData = this.formGroup.get("users").value as DmpUserPersist[]; this.dmpService.inviteUsers(this.dmpId, {users: userFormData}) .pipe(takeUntil(this._destroyed)) .subscribe( complete => { this.dialogRef.close(); this.onCallbackSuccess(); }, error => this.onCallbackError(error) ); } closeDialog(): void { this.dialogRef.close(); } hasValue(): boolean { return this.formGroup.get('users') && this.formGroup.get('users').value && this.formGroup.get('users').value.length > 0; } onCallbackSuccess(): void { this.uiNotificationService.snackBarNotification(this.language.instant('DMP-USER-INVITATION-DIALOG.SUCCESS'), SnackBarNotificationLevel.Success); } onCallbackError(errorResponse: any) { this.uiNotificationService.snackBarNotification(this.language.instant('DMP-USER-INVITATION-DIALOG.ERROR'), SnackBarNotificationLevel.Error); } }