promocion.component.ts 3.01 KB
import { Component, OnInit, HostListener } from '@angular/core';
import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';
import { IArticulo } from 'src/app/interfaces/IArticulo';
import { ArticuloService } from 'src/app/services/articulo/articulo.service';
import { PromocionService } from 'src/app/services/promocion/promocion.service';
import { Subject } from 'rxjs';
import { APP_SETTINGS } from 'src/etc/AppSettings';
import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service';
import { SinonimoService } from 'src/app/services/sinonimo/sinonimo.service';
import { ISinonimo } from 'src/app/interfaces/ISinonimo';
import { SinonimoComponent } from '../sinonimo/sinonimo.component';

@Component({
  selector: 'app-promocion',
  templateUrl: './promocion.component.html',
  styleUrls: ['./promocion.component.scss']
})
export class PromocionComponent implements OnInit {
  articulosPromo: IArticulo[] = [];
  promociones: IArticulo[] = [];
  onClose: Subject<any>;
  urlImagenes = `${APP_SETTINGS.apiDeboSuite}/imagenes/`;

  constructor(
    public modalPromocion: BsModalRef,
    private modalService: BsModalService,
    private articuloService: ArticuloService,
    private promocionService: PromocionService,
    private sinonimoService: SinonimoService,
    private inactiveScreen: InactiveScreenService,
  ) {
    this.onClose = new Subject();
  }

  ngOnInit() {
    this.getPromociones();
  }

  selectPromo(promo: IArticulo) {
    this.sinonimoService.getSinonimos(promo.CodSec, promo.CodArt)
      .subscribe((res: ISinonimo[]) => {
        if (res.length) {
          this.openModalSinonimos(res);
        } else {
          promo.cantidad = 1;
          this.articuloService.setArticulo(promo);
          this.modalPromocion.hide();
        }
      }, err => console.error(err));
    this.mediaPantalla();
  }

  openModalSinonimos(sinonimosData: ISinonimo[]) {
    const modalSinonimo = this.modalService.show(SinonimoComponent, {
      initialState: { sinonimos: sinonimosData },
      class: 'modal-promo modal-dialog-centered'
    });

    modalSinonimo.content.onClose
      .subscribe((articulo: IArticulo) => {
        this.articuloService.setArticulo(articulo);
        this.modalPromocion.hide();
      });
  }

  getPromociones() {
    const sector = this.articulosPromo[0].CodSec;
    const codigo = this.articulosPromo[0].CodArt;
    this.promocionService.getPromociones(sector, codigo)
      .subscribe((res: IArticulo[]) => {
        this.promociones = res;
      }, error => { console.error(error); });
  }

  @HostListener('document:click', ['$event'])
  eventListener(event: Event) {
    clearTimeout(this.inactiveScreen.timerReposo);
    this.inactiveScreen.startTimeOutInactividad();
  }

  @HostListener('scroll', ['$event'])
  scrollEvent(event: Event) {
    clearTimeout(this.inactiveScreen.timerReposo);
    this.inactiveScreen.startTimeOutInactividad();
  }

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