File

src/app/modals/modal-nueva/modal-nueva.page.ts

Implements

OnInit

Metadata

selector app-modal-nueva
styleUrls ./modal-nueva.page.scss
templateUrl ./modal-nueva.page.html

Index

Properties
Methods

Constructor

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 :
Name Type Optional Description
modalController ModalController No

Controlador de la ventana modal

formBuilder FormBuilder No

Constructor del formulario

loadingController LoadingController No

Controlador del loading

nuevaS NuevaServiceService No

Servicio propio para interactuar con Firebase

afa AngularFireAuth No

Módulo de autenticación de angular

alertCtrl AlertController No

Controlador de los alerts

translate TranslateService No

Módulo de traducción

Methods

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 : {}

Properties

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

Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""