pago-tarjeta.component.ts 2.16 KB
import { Component, OnInit, TemplateRef, OnDestroy, ViewChild } from '@angular/core';
import { ArticuloService } from 'src/app/services/articulo/articulo.service';
import { Router, ActivatedRoute } from '@angular/router';
import { BsModalService } from 'ngx-bootstrap/modal';
import { ErrorFormaPagoComponent } from 'src/app/shared/error-forma-pago/error-forma-pago.component';
import { Subscription } from 'rxjs';

@Component({
  selector: 'app-pago-tarjeta',
  templateUrl: './pago-tarjeta.component.html',
  styleUrls: ['./pago-tarjeta.component.scss']
})
export class PagoTarjetaComponent implements OnInit, OnDestroy {
  timer: any;
  @ViewChild('template', { static: true }) public template: TemplateRef<any>;
  subscription: Subscription;

  constructor(
    private articuloService: ArticuloService,
    private router: Router,
    private route: ActivatedRoute,
    private modalService: BsModalService,
  ) { }

  ngOnInit() {
    if (!this.articuloService.carrito.length) {
      this.router.navigate(['']);
      return;
    }
    const dataPago = {
      pedidoAnombreDe: '',
      contactLess: this.route.snapshot.params.contactLess
    };
    this.openModalEspera(this.template);
    this.subscription = this.articuloService.pay(dataPago)
      .subscribe((res: any) => {
        this.articuloService.idComanda = res.data;
        this.router.navigate(['mensaje-final']);
      }, (err) => {
        this.modalService.show(ErrorFormaPagoComponent, {
          class: 'modal-lg modal-dialog-centered',
          ignoreBackdropClick: true,
        });
      });
    this.mediaPantalla();
  }

  ngOnDestroy() {
    if (this.subscription) this.subscription.unsubscribe();
    if (this.timer) clearTimeout(this.timer);
    for (let i = 1; i <= this.modalService.getModalsCount(); i++) {
      this.modalService.hide(i);
    }
  }

  mediaPantalla() {
    if ($('body').hasClass('media-pantalla')) {
      $('.pago-tarjeta').addClass('media-pantalla');
    }
  }

  openModalEspera(templateRef: TemplateRef<any>) {
    const modalRef = this.modalService.show(templateRef, { class: 'modal-lg modal-dialog-centered' });
    this.timer = setTimeout(() => {
      modalRef.hide();
    }, 6000);
  }
}