From e8e47b8680d9c5542b36658f8bd87c55d56e7d2e Mon Sep 17 00:00:00 2001 From: Paulo Pinto Date: Wed, 26 Aug 2020 14:24:18 +0100 Subject: [PATCH] Attendees Enhancments --- .../attendee-modal/attendee-modal.page.html | 23 +++++--- .../attendee-modal/attendee-modal.page.ts | 52 ++++++++++++------- .../events/attendees/attendees.page.html | 30 ++++++++--- .../pages/events/attendees/attendees.page.ts | 44 +++++++++++++--- .../event-detail/event-detail.page.html | 3 +- .../events/event-detail/event-detail.page.ts | 27 ++++++++-- src/app/services/contacts.service.spec.ts | 16 ++++++ src/app/services/contacts.service.ts | 38 ++++++++++++++ src/app/services/events.service.ts | 2 +- 9 files changed, 187 insertions(+), 48 deletions(-) create mode 100644 src/app/services/contacts.service.spec.ts create mode 100644 src/app/services/contacts.service.ts diff --git a/src/app/pages/events/attendee-modal/attendee-modal.page.html b/src/app/pages/events/attendee-modal/attendee-modal.page.html index 72b4b4337..de3ee8767 100644 --- a/src/app/pages/events/attendee-modal/attendee-modal.page.html +++ b/src/app/pages/events/attendee-modal/attendee-modal.page.html @@ -1,15 +1,26 @@ - + - attendee-modal + Adicionar intervenientes + + - - + + + +
+
+
+

{{ attendee.Name }}

+

{{ attendee.EmailAddress }}

+
+
+
+
+
diff --git a/src/app/pages/events/attendee-modal/attendee-modal.page.ts b/src/app/pages/events/attendee-modal/attendee-modal.page.ts index 9ac59ab45..47a91d791 100644 --- a/src/app/pages/events/attendee-modal/attendee-modal.page.ts +++ b/src/app/pages/events/attendee-modal/attendee-modal.page.ts @@ -1,5 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { ModalController } from '@ionic/angular'; +import { ContactsService } from 'src/app/services/contacts.service'; +import { EventPerson } from 'src/app/models/eventperson.model'; +import { ThrowStmt, removeSummaryDuplicates } from '@angular/compiler'; @Component({ selector: 'app-attendee-modal', @@ -8,42 +11,51 @@ import { ModalController } from '@ionic/angular'; }) export class AttendeeModalPage implements OnInit { - constructor(private modalCtrl: ModalController) { } + contacts: EventPerson[]; + showLoader: boolean = false; + eventPersons: EventPerson[]; + + constructor(private modalCtrl: ModalController, private contactsService: ContactsService) { } ngOnInit() { + this.fetchContacts(""); } save(){ - //this.eventService.postEvent(this.postEvent, this.postEvent.CalendarName).subscribe(); - this.modalCtrl.dismiss(); + this.modalCtrl.dismiss(this.contacts.filter(function(contact) { + return contact.IsRequired == true; + })); } close(){ - this.modalCtrl.dismiss(); + this.modalCtrl.dismiss(null); } onChange(evt: any) { - console.log(evt); + this.fetchContacts(evt.detail.value); } - searchCountry(searchbar) { - // reset countries list with initial call - //this.eventAttendees = this.eventAttendeesInitial; + selectContact(itm: EventPerson){ + itm.IsRequired = !itm.IsRequired; + } - // set q to the value of the searchbar - var q = searchbar.value; + async fetchContacts(filter: string) { + this.showLoader = true; - // if the value is an empty string don't filter the items - // if (q.trim() == '') { - // return; - // } + this.contactsService.getContacts(filter).subscribe(result => + { + this.eventPersons.forEach(attendee => { + const index: number = result.findIndex((cont) => { + return cont.EmailAddress == attendee.EmailAddress + }); - // this.eventAttendees = this.eventAttendees.filter((v) => { - // if (v.Name.toLowerCase().indexOf(q.toLowerCase()) > -1) { - // return true; - // } - // return false; - // }) + result.splice(index, 1); + }); + + this.contacts = result; + this.showLoader = false; + } + ); } } diff --git a/src/app/pages/events/attendees/attendees.page.html b/src/app/pages/events/attendees/attendees.page.html index ecbd5ce25..e795f66a2 100644 --- a/src/app/pages/events/attendees/attendees.page.html +++ b/src/app/pages/events/attendees/attendees.page.html @@ -1,9 +1,10 @@ - + - attendees + Intervenientes - - + + Adicionar intervenientes + @@ -14,10 +15,12 @@ + +
- +
@@ -32,7 +35,18 @@
- - Adicionar intervenientes - + + + + Cancelar + + + + + + Gravar + + + + \ No newline at end of file diff --git a/src/app/pages/events/attendees/attendees.page.ts b/src/app/pages/events/attendees/attendees.page.ts index 96f05f7f5..460bd40a1 100644 --- a/src/app/pages/events/attendees/attendees.page.ts +++ b/src/app/pages/events/attendees/attendees.page.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { EventPerson } from 'src/app/models/eventperson.model'; import { EventsService } from 'src/app/services/events.service'; -import { ModalController } from '@ionic/angular'; +import { ModalController, NavController } from '@ionic/angular'; import { AttendeeModalPage } from '../attendee-modal/attendee-modal.page'; @Component({ @@ -11,14 +11,15 @@ import { AttendeeModalPage } from '../attendee-modal/attendee-modal.page'; }) export class AttendeesPage implements OnInit { - eventAttendeesInitial: EventPerson[]; eventAttendees: EventPerson[]; segment:string = "required"; shouldShowCancel:boolean = true; + showAttendees: EventPerson[]; searchCountryString = ''; // initialize your searchCountryString string empty - constructor(private eventService: EventsService, private modalCtrl: ModalController) { + constructor(private eventService: EventsService, private modalCtrl: ModalController, + private navCtrl: NavController) { } @@ -31,22 +32,49 @@ export class AttendeesPage implements OnInit { } loadAttendees(){ - let isRequired: boolean = (this.segment == "required"); - this.eventAttendees = this.eventService.lastloadedevent.Attendees.filter(function(person) { - return person.IsRequired == isRequired; + let isrequired: boolean = (this.segment == "required"); + this.showAttendees = this.eventAttendees.filter(function(person) { + return person.IsRequired == isrequired; }); - this.eventAttendeesInitial = this.eventAttendees; + } + + save(){ + this.modalCtrl.dismiss(this.eventAttendees); + } + + close(){ + this.modalCtrl.dismiss(null); } async addAttendees() { const modal = await this.modalCtrl.create({ component: AttendeeModalPage, + componentProps: { + eventPersons: this.eventAttendees + }, cssClass: 'attendee-modal', backdropDismiss: false }); + await modal.present(); - modal.onDidDismiss(); + + modal.onDidDismiss().then((data) => { + let newattendees: EventPerson[] = data['data']; + + if (newattendees != null) + { + newattendees.forEach(newattendee => { + let att = { + "EmailAddress": newattendee.EmailAddress, + "Name": newattendee.Name, + "IsRequired": (this.segment == "required") + }; + this.eventAttendees.push(att); + this.showAttendees.push(att); + }); + } + }); } } \ No newline at end of file diff --git a/src/app/pages/events/event-detail/event-detail.page.html b/src/app/pages/events/event-detail/event-detail.page.html index 7ae0cdeab..b25255a4a 100644 --- a/src/app/pages/events/event-detail/event-detail.page.html +++ b/src/app/pages/events/event-detail/event-detail.page.html @@ -23,8 +23,7 @@ - + Pessoas diff --git a/src/app/pages/events/event-detail/event-detail.page.ts b/src/app/pages/events/event-detail/event-detail.page.ts index f091ce14c..25b158219 100644 --- a/src/app/pages/events/event-detail/event-detail.page.ts +++ b/src/app/pages/events/event-detail/event-detail.page.ts @@ -4,8 +4,9 @@ import { EventsService } from 'src/app/services/events.service'; import { Router } from '@angular/router'; import { Event } from '../../../models/event.model'; import { EventBody } from 'src/app/models/eventbody.model'; -import { AlertController } from '@ionic/angular'; +import { AlertController, ModalController } from '@ionic/angular'; import { EventPerson } from 'src/app/models/eventperson.model'; +import { AttendeesPage } from 'src/app/pages/events/attendees/attendees.page'; @Component({ selector: 'app-event-detail', @@ -16,7 +17,7 @@ export class EventDetailPage implements OnInit { loadedEvent: Event; - constructor(public alertController: AlertController, private router: Router, private activatedRoute: ActivatedRoute, private eventsService: EventsService) { + constructor(public alertController: AlertController, private router: Router, private activatedRoute: ActivatedRoute, private eventsService: EventsService, private modalCtrl: ModalController) { this.loadedEvent = new Event(); this.loadedEvent.Body = new EventBody(); } @@ -37,12 +38,32 @@ export class EventDetailPage implements OnInit { this.eventsService.getEvent(paramMap.get('eventId')).subscribe(response => { this.loadedEvent = response; - this.eventsService.lastloadedevent = this.loadedEvent; + //this.eventsService.lastloadedevent = this.loadedEvent; }); } ); } + async openAttendees() + { + const modal = await this.modalCtrl.create({ + component: AttendeesPage, + componentProps: { + eventAttendees: this.loadedEvent.Attendees + }, + cssClass: 'attendee', + backdropDismiss: false + }); + + await modal.present(); + + modal.onDidDismiss().then((data) => { + let newattendees: EventPerson[] = data['data']; + this.loadedEvent.Attendees = newattendees; + console.log(this.loadedEvent.Attendees); + }); +} + getEventAttendees(): EventPerson[] { return this.loadedEvent.Attendees; diff --git a/src/app/services/contacts.service.spec.ts b/src/app/services/contacts.service.spec.ts new file mode 100644 index 000000000..b64b59628 --- /dev/null +++ b/src/app/services/contacts.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ContactsService } from './contacts.service'; + +describe('ContactsService', () => { + let service: ContactsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ContactsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/contacts.service.ts b/src/app/services/contacts.service.ts new file mode 100644 index 000000000..0c98d8725 --- /dev/null +++ b/src/app/services/contacts.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { EventPerson } from '../models/eventperson.model'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; +import { AuthService } from '../services/auth.service'; +import { User } from '../models/user.model'; + +@Injectable({ + providedIn: 'root' +}) +export class ContactsService { + + authheader = {}; + loggeduser: User; + headers: HttpHeaders; + + constructor(private http: HttpClient, user: AuthService) { + this.loggeduser = user.ValidatedUser; + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Authorization', this.loggeduser.BasicAuthKey); + } + + getContacts(namefilter:string): Observable{ + const geturl = environment.apiURL + 'contacts/get'; + let params = new HttpParams(); + + params = params.set("namefilter", namefilter); + params = params.set("domain", environment.domain); + + let options = { + headers: this.headers, + params: params + }; + + return this.http.get(`${geturl}`, options); + } +} diff --git a/src/app/services/events.service.ts b/src/app/services/events.service.ts index eb2d53c57..0d324a261 100644 --- a/src/app/services/events.service.ts +++ b/src/app/services/events.service.ts @@ -15,7 +15,7 @@ export class EventsService { authheader = {}; loggeduser: User; headers: HttpHeaders; - lastloadedevent: Event; + //lastloadedevent: Event; constructor(private http: HttpClient, user: AuthService) { this.loggeduser = user.ValidatedUser;