src/app/modals/modal-nueva/modal-nueva.page.ts
| selector | app-modal-nueva |
| styleUrls | ./modal-nueva.page.scss |
| templateUrl | ./modal-nueva.page.html |
Properties |
Methods |
|
constructor(modalController: ModalController, formBuilder: FormBuilder, loadingController: LoadingController, nuevaS: NuevaServiceService, afa: AngularFireAuth, alertCtrl: AlertController, translate: TranslateService)
|
||||||||||||||||||||||||||||||||
|
Construye el formulario y pone los campos a obligatorios
Parameters :
|
| dismiss |
dismiss()
|
|
Cierra el modal
Returns :
void
|
| logForm |
logForm()
|
|
Primero recupera los datos del formulario y los engloba en data. Segundo llama al servicio para agregar la oferta, en caso de éxito muestra la confirmación y cierra el modal y en caso de error solo cierra el cargando
Returns :
void
|
| Async mostarConfirmacion |
mostarConfirmacion()
|
|
Método asíncrono que muestra un alert de confirmación
Returns :
any
|
| ngOnInit |
ngOnInit()
|
|
Returns :
void
|
| Async presentLoading |
presentLoading()
|
|
Método asíncrono que muestra el cargando...
Returns :
{}
|
| Private myLoading |
Type : any
|
| Private nueva |
Type : FormGroup
|
import {Component, OnInit} from '@angular/core';
import {AlertController, LoadingController, ModalController} from '@ionic/angular';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {NuevaServiceService} from '../../services/nueva-service.service';
import {AngularFireAuth} from 'angularfire2/auth';
import {TranslateService} from '@ngx-translate/core';
@Component({
selector: 'app-modal-nueva',
templateUrl: './modal-nueva.page.html',
styleUrls: ['./modal-nueva.page.scss'],
})
export class ModalNuevaPage implements OnInit {
private nueva: FormGroup;
private myLoading: any;
/**
* Construye el formulario y pone los campos a obligatorios
* @param modalController Controlador de la ventana modal
* @param formBuilder Constructor del formulario
* @param loadingController Controlador del loading
* @param nuevaS Servicio propio para interactuar con Firebase
* @param afa Módulo de autenticación de angular
* @param alertCtrl Controlador de los alerts
* @param translate Módulo de traducción
*/
constructor(private modalController: ModalController,
private formBuilder: FormBuilder,
private loadingController: LoadingController,
private nuevaS: NuevaServiceService,
private afa: AngularFireAuth,
private alertCtrl: AlertController,
private translate: TranslateService) {
this.nueva = this.formBuilder.group({
tipo: ['', Validators.required],
plazas: ['', Validators.required],
fecha: ['', Validators.required],
lugar: ['', Validators.required]
});
console.log('Constructor');
}
/**
* Primero recupera los datos del formulario y los engloba en data.
* Segundo llama al servicio para agregar la oferta, en caso de éxito muestra la confirmación
* y cierra el modal y en caso de error solo cierra el cargando
*/
logForm() {
console.log('Entra');
const data = {
tipo: this.nueva.get('tipo').value,
plazas: this.nueva.get('plazas').value,
fecha: this.nueva.get('fecha').value,
ofertante: this.afa.auth.currentUser.email,
lugar: this.nueva.get('lugar').value,
aceptada: []
};
// Muestra el cargando...
this.myLoading = this.presentLoading();
this.nuevaS.agregaOferta(data)
.then((docRef) => {
console.log('ID insertado (por si lo necesitamos para algo...): ', docRef.id);
// Ponemos en blanco los campos del formulario
this.nueva.setValue({
tipo: '',
plazas: '',
fecha: '',
lugar: ''
});
// Cerramos el cargando...
this.loadingController.dismiss();
this.mostarConfirmacion();
this.modalController.dismiss();
})
.catch((error) => {
console.error('Error insertando documento: ', error);
// Cerramos el cargando...
this.loadingController.dismiss();
});
}
/**
* Método asíncrono que muestra el cargando...
*/
async presentLoading() {
this.myLoading = await this.loadingController.create({
message: this.translate.instant('saving')
});
return await this.myLoading.present();
}
ngOnInit() {
}
/**
* Cierra el modal
*/
dismiss() {
this.modalController.dismiss();
}
/**
* Método asíncrono que muestra un alert de confirmación
*/
async mostarConfirmacion() {
const mensaje = await this.alertCtrl.create({
header: this.translate.instant('success'),
message: this.translate.instant('success_message'),
buttons: [
{
text: this.translate.instant('acept'),
handler: () => {
console.log('Aceptar clicked');
}
}
]
});
await mensaje.present();
}
}
<ion-header>
<ion-toolbar color="primary">
<ion-title>
{{'new_offer'|translate}}
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<form [formGroup]="nueva" (ngSubmit)="logForm()">
<ion-item>
<ion-label>{{'choose_one'|translate}}:</ion-label>
<ion-select formControlName="tipo">
<ion-select-option [value]="individual">{{'individual'|translate}}</ion-select-option>
<ion-select-option [value]="dobles">{{'double'|translate}}</ion-select-option>
</ion-select>
</ion-item>
<ion-item>
<ion-label>{{'number_of_places'|translate}}:</ion-label>
<ion-input type="number" formControlName="plazas"></ion-input>
</ion-item>
<ion-item>
<ion-label>{{'date'|translate}}:</ion-label>
<ion-input type="date" formControlName="fecha"></ion-input>
</ion-item>
<ion-item>
<ion-label>{{'place'|translate}}:</ion-label>
<ion-input type="text" formControlName="lugar"></ion-input>
</ion-item>
<ion-item float-right="">
<ion-button shape="round" color="primary" fill="outline" type="submit" [disabled]="!nueva.valid">
{{'acept'|translate}}
</ion-button>
</ion-item>
<ion-item float-right="">
<ion-button shape="round" color="primary" fill="outline" (click)="dismiss()">
{{'cancel'|translate}}
</ion-button>
</ion-item>
</form>
</ion-content>
./modal-nueva.page.scss