import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { ActivatedRoute, Router } from '@angular/router'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../core/common/base/base.component'; import { UserInvitationCriteria } from '../../../models/criteria/invitation/UserInvitationCriteria'; import { RequestItem } from '../../../models/criteria/RequestItem'; import { Invitation } from '../../../models/invitation/Invitation'; import { User } from '../../../models/invitation/User'; import { InvitationService } from '../../../services/invitation/invitation.service'; import { JsonSerializer } from '../../../utilities/JsonSerializer'; @Component({ selector: 'app-invitation-component', templateUrl: 'invitation.component.html', }) export class InvitationComponent extends BaseComponent implements OnInit { public formGroup: FormGroup; public filteredUsersAsync = false; public filteredUsers: User[]; constructor( public invitationService: InvitationService, public route: ActivatedRoute, public router: Router, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any ) { super(); } ngOnInit(): void { const invitation = new Invitation(); invitation.dataManagementPlan = this.data.dmpId; this.formGroup = invitation.buildForm(); } send(value: any) { this.invitationService.inviteUsers(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( null, null, () => this.dialogRef.close() ); } filterUsers(value: string): void { this.filteredUsers = undefined; if (value) { this.filteredUsersAsync = true; const request = new RequestItem(); request.criteria = { like: value }; this.invitationService.getUsers(request) .pipe(takeUntil(this._destroyed)) .subscribe(items => { this.filteredUsers = JsonSerializer.fromJSONArray(items, User); if (!this.filteredUsers || this.filteredUsers.length === 0) { const user = new User(); user.email = value; user.name = value; this.filteredUsers.push(user); } this.filteredUsersAsync = false; }); } } }