Added alert messages in login page, Edited event list border color, And few updates at the agenda module.

This commit is contained in:
Tiago Kayaya
2020-08-25 10:37:41 +01:00
parent 91147ef6b9
commit e6c55d26cb
8 changed files with 275 additions and 116 deletions
+159 -75
View File
@@ -4,13 +4,13 @@
</ion-toolbar> </ion-toolbar>
<ion-toolbar> <ion-toolbar>
<ion-segment [(ngModel)]="segment"> <ion-segment [(ngModel)]="segment">
<ion-segment-button value="combinada"> <ion-segment-button value="Combinada">
Combinada Combinada
</ion-segment-button> </ion-segment-button>
<ion-segment-button value="oficial"> <ion-segment-button value="Oficial">
Oficial Oficial
</ion-segment-button> </ion-segment-button>
<ion-segment-button value="pessoal"> <ion-segment-button value="Pessoal">
Pessoal Pessoal
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
@@ -31,86 +31,170 @@
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
</ion-toolbar> --> </ion-toolbar> -->
<ion-content> <ion-content>
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="refreshAgenda($event)"> <ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-refresher-content <ion-refresher-content
pullingIcon="chevron-down-circle-outline" pullingIcon="chevron-down-circle-outline"
pullingText="deslize para actualizar" pullingText="deslize para actualizar"
refreshingSpinner="circles" refreshingSpinner="circles"
refreshingText="a actualizar..."> refreshingText="A actualizar...">
</ion-refresher-content> </ion-refresher-content>
</ion-refresher> </ion-refresher>
<div [ngSwitch]="segment">
<ion-row> <div *ngSwitchCase="'Combinada'">
<!-- <ion-col size="6"> <ion-row>
<ion-button (click)="createRandomEvents()" expand="block" fill="outline"> <!-- Move back one screen of the slides -->
Add random events <ion-col size="2">
</ion-button> <ion-button fill="clear" (click)="back()">
</ion-col> <ion-icon name="arrow-back" slot="icon-only"></ion-icon>
<ion-col size="6"> </ion-button>
<ion-button (click)="removeEvents()" expand="block" fill="outline"> </ion-col>
Remove all events <!-- The title of the calendar in the middle -->
</ion-button> <ion-col size="8" class="ion-text-center">
</ion-col> <h2 class="capitaliseText">{{ viewTitle }}</h2>
<ion-col size="6"> </ion-col>
<ion-button (click)="createdEvent()" expand="block" fill="outline">
Adicionar <!-- Move forward one screen of the slides -->
</ion-button> <ion-col size="2">
</ion-col>--> <ion-button fill="clear" (click)="next()">
</ion-row> <ion-icon name="arrow-forward" slot="icon-only"></ion-icon>
</ion-button>
<ion-row> </ion-col>
<!-- Move back one screen of the slides --> </ion-row>
<ion-col size="2">
<ion-button fill="clear" (click)="back()"> <calendar
<ion-icon name="arrow-back" slot="icon-only"></ion-icon> [eventSource]="eventSource"
</ion-button> [calendarMode]="calendar.mode"
</ion-col> [currentDate]="calendar.currentDate"
<!-- The title of the calendar in the middle --> (onEventSelected)="onEventSelected($event)"
<ion-col size="8" class="ion-text-center"> (onTitleChanged)="onViewTitleChanged($event)"
<h2 class="capitaliseText">{{ viewTitle }}</h2> (onRangeChanged)="onRangeChanged($event)"
</ion-col> queryMode="remote"
startHour="6"
<!-- Move forward one screen of the slides --> endHour="20"
<ion-col size="2"> step="30"
<ion-button fill="clear" (click)="next()"> startingDayMonth="1"
<ion-icon name="arrow-forward" slot="icon-only"></ion-icon> noEventsLabel="Sem Eventos"
</ion-button> allDayLabel="Todo o dia"
</ion-col> [monthviewDisplayEventTemplate]="template"
</ion-row> >
</calendar>
<calendar
[eventSource]="eventSource"
[calendarMode]="calendar.mode"
[currentDate]="calendar.currentDate"
(onEventSelected)="onEventSelected($event)"
(onTitleChanged)="onViewTitleChanged($event)"
(onRangeChanged)="onRangeChanged($event)"
queryMode="remote"
startHour="6"
endHour="20"
step="30"
startingDayMonth="1"
noEventsLabel="Sem Eventos"
allDayLabel="Todo o dia"
[monthviewDisplayEventTemplate]="template"
>
</calendar>
<!-- Adding a customized ng-template --> <!-- Adding a customized ng-template -->
<ng-template #template let-view="view" let-row="row" let-col="col"> <ng-template #template let-view="view" let-row="row" let-col="col">
<div [class.with-event]="view.dates[row*7+col].events.length"> <div [class.with-event]="view.dates[row*7+col].events.length">
{{view.dates[row*7+col].label}} {{view.dates[row*7+col].label}}
<div class="indicator-container"> <div class="indicator-container">
<div class="event-indicator" *ngFor="let e of view.dates[row*7+col].events"></div> <div class="event-indicator" *ngFor="let e of view.dates[row*7+col].events"></div>
</div> </div>
</div>
</ng-template>
</div> </div>
</ng-template> <div *ngSwitchCase="'Pessoal'">
<ion-row>
<!-- Move back one screen of the slides -->
<ion-col size="2">
<ion-button fill="clear" (click)="back()">
<ion-icon name="arrow-back" slot="icon-only"></ion-icon>
</ion-button>
</ion-col>
<!-- The title of the calendar in the middle -->
<ion-col size="8" class="ion-text-center">
<h2 class="capitaliseText">{{ viewTitle }}</h2>
</ion-col>
<!-- Move forward one screen of the slides -->
<ion-col size="2">
<ion-button fill="clear" (click)="next()">
<ion-icon name="arrow-forward" slot="icon-only"></ion-icon>
</ion-button>
</ion-col>
</ion-row>
<calendar
[eventSource]="eventSource"
[calendarMode]="calendar.mode"
[currentDate]="calendar.currentDate"
(onEventSelected)="onEventSelected($event)"
(onTitleChanged)="onViewTitleChanged($event)"
(onRangeChanged)="onRangeChanged($event)"
queryMode="remote"
startHour="6"
endHour="20"
step="30"
startingDayMonth="1"
noEventsLabel="Sem Eventos"
allDayLabel="Todo o dia"
[monthviewDisplayEventTemplate]="template"
>
</calendar>
<ion-fab vertical="bottom" horizontal="end" slot="fixed"> <!-- Adding a customized ng-template -->
<ion-fab-button> <ng-template #template let-view="view" let-row="row" let-col="col">
<ion-icon name="add" (click)="openCalModal()"></ion-icon> <div [class.with-event]="view.dates[row*7+col].events.length">
</ion-fab-button> {{view.dates[row*7+col].label}}
</ion-fab> <div class="indicator-container">
<div class="event-indicator" *ngFor="let e of view.dates[row*7+col].events"></div>
</div>
</div>
</ng-template>
</div>
<div *ngSwitchCase="'Oficial'">
<ion-row>
<!-- Move back one screen of the slides -->
<ion-col size="2">
<ion-button fill="clear" (click)="back()">
<ion-icon name="arrow-back" slot="icon-only"></ion-icon>
</ion-button>
</ion-col>
<!-- The title of the calendar in the middle -->
<ion-col size="8" class="ion-text-center">
<h2 class="capitaliseText">{{ viewTitle }}</h2>
</ion-col>
<!-- Move forward one screen of the slides -->
<ion-col size="2">
<ion-button fill="clear" (click)="next()">
<ion-icon name="arrow-forward" slot="icon-only"></ion-icon>
</ion-button>
</ion-col>
</ion-row>
<calendar
[eventSource]="eventSource"
[calendarMode]="calendar.mode"
[currentDate]="calendar.currentDate"
(onEventSelected)="onEventSelected($event)"
(onTitleChanged)="onViewTitleChanged($event)"
(onRangeChanged)="onRangeChanged($event)"
queryMode="remote"
startHour="6"
endHour="20"
step="30"
startingDayMonth="1"
noEventsLabel="Sem Eventos"
allDayLabel="Todo o dia"
[monthviewDisplayEventTemplate]="template"
>
</calendar>
<!-- Adding a customized ng-template -->
<ng-template #template let-view="view" let-row="row" let-col="col">
<div [class.with-event]="view.dates[row*7+col].events.length">
{{view.dates[row*7+col].label}}
<div class="indicator-container">
<div class="event-indicator" *ngFor="let e of view.dates[row*7+col].events"></div>
</div>
</div>
</ng-template>
</div>
<ion-fab vertical="bottom" horizontal="end" slot="fixed">
<ion-fab-button>
<ion-icon name="add" (click)="openCalModal()"></ion-icon>
</ion-fab-button>
</ion-fab>
</div>
</ion-content> </ion-content>
+88 -27
View File
@@ -4,10 +4,8 @@ import { AlertController, ModalController } from '@ionic/angular';
import { formatDate } from '@angular/common'; import { formatDate } from '@angular/common';
import { CalModalPage } from '../cal-modal/cal-modal.page'; import { CalModalPage } from '../cal-modal/cal-modal.page';
import { EventsService } from 'src/app/services/events.service'; import { EventsService } from 'src/app/services/events.service';
import { Observable, ObjectUnsubscribedError } from 'rxjs';
import { Event } from '../../models/event.model'; import { Event } from '../../models/event.model';
import { parse } from 'date-fns'; import { Router, NavigationEnd } from '@angular/router';
import { Router } from '@angular/router';
@Component({ @Component({
selector: 'app-agenda', selector: 'app-agenda',
@@ -33,10 +31,14 @@ export class AgendaPage implements OnInit {
segment:string; segment:string;
eventsList: Event[]; eventsList: Event[];
responseEventId:string = ''; eventsListPessoal: Event[];
eventsListOficial: Event[];
showLoader: boolean = true;
startTime: Date;
endTime: Date;
loadedEvent: Event;
eventItem: Observable<Event>;
constructor( constructor(
private alertCtrl: AlertController, private alertCtrl: AlertController,
@@ -48,7 +50,13 @@ export class AgendaPage implements OnInit {
ngOnInit() { ngOnInit() {
//Inicializar segment //Inicializar segment
this.segment = "combinada"; this.segment = "Combinada";
this.router.events.forEach((event) => {
if(event instanceof NavigationEnd && event.url == this.router.url) {
this.loading();
}
});
} }
//Go to the next view of the calendar month/week/day //Go to the next view of the calendar month/week/day
@@ -65,7 +73,6 @@ export class AgendaPage implements OnInit {
} }
//Show information of the event //Show information of the event
async onEventSelected(ev: { event: Event}){ async onEventSelected(ev: { event: Event}){
console.log(ev.event.EventId);
this.router.navigate(["/home/events", ev.event.EventId]); this.router.navigate(["/home/events", ev.event.EventId]);
} }
@@ -81,36 +88,90 @@ export class AgendaPage implements OnInit {
}); });
await modal.present(); await modal.present();
modal.onDidDismiss(); modal.onDidDismiss();
this.loading(); /* this.loading(); */
} }
async loadRangeEvents(startTime: Date, endTime: Date){ async loadRangeEvents(startTime: Date, endTime: Date){
this.eventService.getAllEvents(formatDate(startTime, 'yyyy-MM-dd HH:mm:ss', 'pt'), formatDate(endTime, 'yyyy-MM-dd HH:mm:ss', 'pt')).subscribe( this.showLoader = true;
response => { switch (this.segment)
this.eventsList = response; {
this.eventsList.forEach(element => { case "Combinada":
this.eventSource.push({ //Inicializa o array eventSource
title: element.Subject, this.eventSource=[];
startTime: new Date(element.StartDate), this.eventService.getAllEvents(formatDate(startTime, 'yyyy-MM-dd HH:mm:ss', 'pt'), formatDate(endTime, 'yyyy-MM-dd HH:mm:ss', 'pt')).subscribe(
endTime: new Date(element.EndDate), response => {
allDay: false, this.eventsList = response;
event: element this.eventsList.forEach(element => {
this.eventSource.push({
title: element.Subject,
startTime: new Date(element.StartDate),
endTime: new Date(element.EndDate),
allDay: false,
event: element
});
this.loading();
}); });
this.loading(); }
}); );
} break;
);
case "Pessoal":
//Inicializa o array eventSource
this.eventSource=[];
this.eventService.getEvents(this.segment, formatDate(startTime, 'yyyy-MM-dd HH:mm:ss', 'pt'), formatDate(endTime, 'yyyy-MM-dd HH:mm:ss', 'pt')).subscribe(
response => {
this.eventsListPessoal = response;
this.eventsListPessoal.forEach(element => {
this.eventSource.push({
title: element.Subject,
startTime: new Date(element.StartDate),
endTime: new Date(element.EndDate),
allDay: false,
event: element
});
this.loading();
});
}
);
break;
case "Oficial":
//Inicializa o array eventSource
this.eventSource=[];
this.eventService.getEvents(this.segment, formatDate(startTime, 'yyyy-MM-dd HH:mm:ss', 'pt'), formatDate(endTime, 'yyyy-MM-dd HH:mm:ss', 'pt')).subscribe(
response => {
this.eventsListOficial = response;
this.eventsListOficial.forEach(element => {
this.eventSource.push({
title: element.Subject,
startTime: new Date(element.StartDate),
endTime: new Date(element.EndDate),
allDay: false,
event: element
});
this.loading();
});
}
);
break;
}
this.showLoader = false;
} }
RefreshEvents(ev: { startTime: Date, endTime: Date }){
this.loadRangeEvents(ev.startTime, ev.endTime);
}
loading(){ loading(){
this.myCal.loadEvents(); this.myCal.loadEvents();
} }
refreshAgenda(event){ doRefresh(ev){
this.loading(); this.loading();
setTimeout(() => { setTimeout(() => {
event.target.complete(); ev.target.complete();
}, 2000); }, 2000);
} }
@@ -1,7 +1,7 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-buttons slot="start"> <ion-buttons slot="start">
<ion-back-button defaultHref="/events"></ion-back-button> <ion-back-button defaultHref="/home/events"></ion-back-button>
</ion-buttons> </ion-buttons>
<ion-title>Visualizar Evento</ion-title> <ion-title>Visualizar Evento</ion-title>
</ion-toolbar> </ion-toolbar>
@@ -31,7 +31,6 @@ export class EventDetailPage implements OnInit {
} }
const eventId = paramMap.get('eventId'); const eventId = paramMap.get('eventId');
console.log(eventId);
/* Load my event detail */ /* Load my event detail */
/* this.loadedEvent = this.eventsService.getEvent(eventId); */ /* this.loadedEvent = this.eventsService.getEvent(eventId); */
this.eventItem = this.eventsService.getEvent(eventId); this.eventItem = this.eventsService.getEvent(eventId);
+4 -4
View File
@@ -30,7 +30,7 @@
pullingIcon="chevron-down-circle-outline" pullingIcon="chevron-down-circle-outline"
pullingText="deslize para actualizar" pullingText="deslize para actualizar"
refreshingSpinner="circles" refreshingSpinner="circles"
refreshingText="a actualizar..."> refreshingText="A actualizar...">
</ion-refresher-content> </ion-refresher-content>
</ion-refresher> </ion-refresher>
<!-- TABS --> <!-- TABS -->
@@ -60,7 +60,7 @@
<div class="div-icon"> <div class="div-icon">
<ion-icon slot="start" name="reader"></ion-icon> <ion-icon slot="start" name="reader"></ion-icon>
</div> </div>
<div class="div-content-oficial"> <div class="div-content-{{event.CalendarName}}">
<h3>{{event.Subject}}</h3> <h3>{{event.Subject}}</h3>
<p>{{event.StartDate}} - {{event.EndDate}}</p> <p>{{event.StartDate}} - {{event.EndDate}}</p>
</div> </div>
@@ -93,7 +93,7 @@
<div class="div-icon"> <div class="div-icon">
<ion-icon slot="start" name="reader"></ion-icon> <ion-icon slot="start" name="reader"></ion-icon>
</div> </div>
<div class="div-content-oficial"> <div class="div-content-{{event.CalendarName}}">
<h3>{{event.Subject}}</h3> <h3>{{event.Subject}}</h3>
<p>{{event.StartDate}} - {{event.EndDate}}</p> <p>{{event.StartDate}} - {{event.EndDate}}</p>
</div> </div>
@@ -126,7 +126,7 @@
<div class="div-icon"> <div class="div-icon">
<ion-icon slot="start" name="reader"></ion-icon> <ion-icon slot="start" name="reader"></ion-icon>
</div> </div>
<div class="div-content-oficial"> <div class="div-content-{{event.CalendarName}}">
<h3>{{event.Subject}}</h3> <h3>{{event.Subject}}</h3>
<p>{{event.StartDate}} - {{event.EndDate}}</p> <p>{{event.StartDate}} - {{event.EndDate}}</p>
</div> </div>
+4 -4
View File
@@ -75,16 +75,16 @@
margin: 0 auto; margin: 0 auto;
} }
.div-content-oficial{ .div-content-Oficial{
width: 85%; width: 85%;
float: left; float: left;
border-left: 3px solid #cab0dc; border-left: 4px solid #cab0dc;
padding: 0 0 0 12px; padding: 0 0 0 12px;
} }
.div-content-pessoal{ .div-content-Pessoal{
width: 85%; width: 85%;
float: left; float: left;
border-left: 3px solid #cbeecb; border-left: 4px solid #cbeecb;
padding: 0 0 0 12px; padding: 0 0 0 12px;
} }
.div-content-oficial h3, .div-content-pessoal h3{ .div-content-oficial h3, .div-content-pessoal h3{
+18 -3
View File
@@ -4,6 +4,7 @@ import { AuthService } from 'src/app/services/auth.service';
import { User } from 'src/app/models/user.model'; import { User } from 'src/app/models/user.model';
import { ToastService } from 'src/app/services/toast.service'; import { ToastService } from 'src/app/services/toast.service';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment';
import { AlertController } from '@ionic/angular';
@Component({ @Component({
@@ -21,7 +22,8 @@ export class LoginPage implements OnInit {
constructor( constructor(
private router: Router, private router: Router,
private authService: AuthService, private authService: AuthService,
private toastService: ToastService) { } private toastService: ToastService,
public alertController: AlertController) { }
ngOnInit() { ngOnInit() {
@@ -41,6 +43,17 @@ export class LoginPage implements OnInit {
); );
} }
async presentAlert(message:string) {
const alert = await this.alertController.create({
cssClass: 'my-custom-class',
header: 'Mensagem do sistema',
message: message,
buttons: ['OK']
});
await alert.present();
}
async Login(){ async Login(){
//Go to our home in home/feed. //Go to our home in home/feed.
if(this.validateInput()){ if(this.validateInput()){
@@ -50,11 +63,13 @@ export class LoginPage implements OnInit {
} }
else else
{ {
this.toastService.presentToast('Não foi possível fazer login"'); /* this.toastService.presentToast('Não foi possível fazer login"'); */
this.presentAlert('O nome de utilizador e palavra-passe estão incorretas ou verifique a sua conexão com a internet e volte a tentar.');
} }
} }
else{ else{
this.toastService.presentToast('Preencha todos campos'); /* this.toastService.presentToast('Preencha todos campos'); */
this.presentAlert('Por favor, insira o seu nome de utilizador e palavra-passe.');
} }
} }
} }
+1 -1
View File
@@ -6,7 +6,7 @@ export const environment = {
production: false, production: false,
apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/v1/api/', apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/v1/api/',
domain: 'gabinetedigital.local', domain: 'gabinetedigital.local',
defaultuser: 'paulo.pinto', defaultuser: 'tiago.kayaya',
defaultuserpwd: 'tabteste@006' defaultuserpwd: 'tabteste@006'
}; };