Commit d0335a69929bb780a9f98e83bcb02c671b7b4264
1 parent
b9d91aaa0b
Exists in
develop
Reseteado timeout de inactividad con evento scroll
Showing
9 changed files
with
80 additions
and
22 deletions
Show diff stats
src/app/modules/admin/admin.component.ts
1 | 1 | import { Component, OnInit, HostListener, OnDestroy } from '@angular/core'; |
2 | 2 | import { Router } from '@angular/router'; |
3 | +import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service'; | |
3 | 4 | |
4 | 5 | @Component({ |
5 | 6 | selector: 'app-admin', |
... | ... | @@ -8,30 +9,22 @@ import { Router } from '@angular/router'; |
8 | 9 | }) |
9 | 10 | |
10 | 11 | export class AdminComponent implements OnInit, OnDestroy { |
11 | - timerReposo: any; | |
12 | - | |
13 | 12 | constructor( |
14 | - private router: Router, | |
13 | + private inactiveScreen: InactiveScreenService, | |
15 | 14 | ) { } |
16 | 15 | |
17 | 16 | ngOnInit() { |
18 | - this.startTimeOutInactividad(); | |
17 | + this.inactiveScreen.startTimeOutInactividad(); | |
19 | 18 | } |
20 | 19 | |
21 | 20 | ngOnDestroy() { |
22 | - clearTimeout(this.timerReposo); | |
21 | + clearTimeout(this.inactiveScreen.timerReposo); | |
23 | 22 | } |
24 | 23 | |
25 | 24 | @HostListener('document:click', ['$event']) |
26 | - documentClick(event: MouseEvent) { | |
27 | - clearTimeout(this.timerReposo); | |
28 | - this.startTimeOutInactividad(); | |
29 | - } | |
30 | - | |
31 | - startTimeOutInactividad() { | |
32 | - this.timerReposo = setTimeout(() => { | |
33 | - this.router.navigate(['cancelar-compra']); | |
34 | - }, 90000); | |
25 | + eventListener(event: Event) { | |
26 | + clearTimeout(this.inactiveScreen.timerReposo); | |
27 | + this.inactiveScreen.startTimeOutInactividad(); | |
35 | 28 | } |
36 | 29 | |
37 | 30 | } |
src/app/modules/carrito/carrito.component.html
... | ... | @@ -13,7 +13,9 @@ |
13 | 13 | </div> |
14 | 14 | |
15 | 15 | <!-- CARRITO --> |
16 | - <div class="row mx-2 mt-4 h-80 justify-content-center align-content-start scroll-y-visible"> | |
16 | + <div | |
17 | + class="row mx-2 mt-4 h-80 justify-content-center align-content-start scroll-y-visible" | |
18 | + (scroll)="scrollEvent($event)"> | |
17 | 19 | <!-- MENSAJE DE ADVERTENCIA --> |
18 | 20 | <div class="col-10 align-self-center alert alert-primary" *ngIf="!articuloService.carrito.length"> |
19 | 21 | <p class="h5 text-center">No hay artículos en el carrito</p> |
src/app/modules/carrito/carrito.component.ts
1 | -import { Component, OnInit, OnDestroy } from '@angular/core'; | |
1 | +import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; | |
2 | 2 | import { Location } from '@angular/common'; |
3 | 3 | import { ArticuloService } from 'src/app/services/articulo/articulo.service'; |
4 | 4 | import { APP_SETTINGS } from 'src/etc/AppSettings'; |
... | ... | @@ -6,6 +6,7 @@ import { trigger, state, style, transition, animate } from '@angular/animations' |
6 | 6 | import { IArticulo } from 'src/app/interfaces/IArticulo'; |
7 | 7 | import { Router } from '@angular/router'; |
8 | 8 | import { BsModalRef } from 'ngx-bootstrap/modal/public_api'; |
9 | +import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service'; | |
9 | 10 | |
10 | 11 | @Component({ |
11 | 12 | selector: 'app-carrito', |
... | ... | @@ -33,6 +34,7 @@ export class CarritoComponent implements OnInit, OnDestroy { |
33 | 34 | public articuloService: ArticuloService, |
34 | 35 | private location: Location, |
35 | 36 | private router: Router, |
37 | + private inactiveScreen: InactiveScreenService, | |
36 | 38 | ) { } |
37 | 39 | |
38 | 40 | ngOnInit() { |
... | ... | @@ -67,4 +69,10 @@ export class CarritoComponent implements OnInit, OnDestroy { |
67 | 69 | this.location.back(); |
68 | 70 | } |
69 | 71 | |
72 | + @HostListener('document:click', ['$event']) | |
73 | + eventListener(event: Event) { | |
74 | + clearTimeout(this.inactiveScreen.timerReposo); | |
75 | + this.inactiveScreen.startTimeOutInactividad(); | |
76 | + } | |
77 | + | |
70 | 78 | } |
src/app/modules/seleccion-articulos/seleccion-articulos.component.html
... | ... | @@ -33,7 +33,8 @@ |
33 | 33 | <!-- CATEGORIAS --> |
34 | 34 | <div |
35 | 35 | #templateCategorias |
36 | - class="col-12 px-0 box-categorias border border-primary border-left-0 rounded-right scroll-y"> | |
36 | + class="col-12 px-0 box-categorias border border-primary border-left-0 rounded-right scroll-y" | |
37 | + (scroll)="scrollEvent($event)"> | |
37 | 38 | <div |
38 | 39 | class="row mx-4 mb-2 h-32 justify-content-center tab" |
39 | 40 | [ngClass]="{ 'active': allActive, 'border-bottom-effect': !allActive }" |
... | ... | @@ -75,7 +76,9 @@ |
75 | 76 | </div> |
76 | 77 | </div> |
77 | 78 | <!-- LISTA DE ARTICULOS --> |
78 | - <div class="col-7 col-sm-9 col-xl-10 pb-3 h-80 align-self-center scroll-y-visible"> | |
79 | + <div | |
80 | + class="col-7 col-sm-9 col-xl-10 pb-3 h-80 align-self-center scroll-y-visible" | |
81 | + (scroll)="scrollEvent($event)"> | |
79 | 82 | <div class="row row-cols-1 row-cols-sm-3 row-cols-xl-6"> |
80 | 83 | <!-- ARTICULO --> |
81 | 84 | <div |
... | ... | @@ -159,7 +162,10 @@ |
159 | 162 | </div> |
160 | 163 | <!-- CARRITO --> |
161 | 164 | <div class="col-6 col-sm-8 col-md-9 col-lg-10 h-100"> |
162 | - <div #templateCarrito class="row flex-row flex-nowrap h-100 mx-0 my-2 scroll-x"> | |
165 | + <div | |
166 | + #templateCarrito | |
167 | + class="row flex-row flex-nowrap h-100 mx-0 my-2 scroll-x" | |
168 | + (scroll)="scrollEvent($event)"> | |
163 | 169 | <!-- MENSAJE DE ADVERTENCIA --> |
164 | 170 | <div *ngIf="!articuloService.carrito.length" class="col h-100"> |
165 | 171 | <p class="text-center py-5">No hay articulos en el carrito</p> |
src/app/modules/seleccion-articulos/seleccion-articulos.component.ts
1 | -import { Component, OnInit, TemplateRef, OnDestroy } from '@angular/core'; | |
1 | +import { Component, OnInit, TemplateRef, OnDestroy, HostListener } from '@angular/core'; | |
2 | 2 | import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; |
3 | 3 | import { ArticuloService } from 'src/app/services/articulo/articulo.service'; |
4 | 4 | import { IArticulo } from 'src/app/interfaces/IArticulo'; |
... | ... | @@ -7,6 +7,7 @@ import { ICategoria } from 'src/app/interfaces/ICategoria'; |
7 | 7 | import { CategoriaService } from 'src/app/services/categoria/categoria.service'; |
8 | 8 | import { PromocionService } from 'src/app/services/promocion/promocion.service'; |
9 | 9 | import { PromocionComponent } from 'src/app/shared/promocion/promocion.component'; |
10 | +import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service'; | |
10 | 11 | |
11 | 12 | @Component({ |
12 | 13 | selector: 'app-seleccion-articulos', |
... | ... | @@ -33,6 +34,7 @@ export class SeleccionArticulosComponent implements OnInit, OnDestroy { |
33 | 34 | public articuloService: ArticuloService, |
34 | 35 | private categoriaService: CategoriaService, |
35 | 36 | private modalService: BsModalService, |
37 | + private inactiveScreen: InactiveScreenService, | |
36 | 38 | ) { } |
37 | 39 | |
38 | 40 | ngOnInit() { |
... | ... | @@ -156,6 +158,12 @@ export class SeleccionArticulosComponent implements OnInit, OnDestroy { |
156 | 158 | this.showQuantity += 100; |
157 | 159 | } |
158 | 160 | |
161 | + @HostListener("scroll", ['$event']) | |
162 | + scrollEvent(event: Event) { | |
163 | + clearTimeout(this.inactiveScreen.timerReposo); | |
164 | + this.inactiveScreen.startTimeOutInactividad(); | |
165 | + } | |
166 | + | |
159 | 167 | mouseup() { |
160 | 168 | if (!this.timeoutHandler) return; |
161 | 169 | clearInterval(this.timeoutHandler); |
src/app/services/inactive-screen/inactive-screen.service.spec.ts
... | ... | @@ -0,0 +1,12 @@ |
1 | +import { TestBed } from '@angular/core/testing'; | |
2 | + | |
3 | +import { InactiveScreenService } from './inactive-screen.service'; | |
4 | + | |
5 | +describe('InactiveScreenService', () => { | |
6 | + beforeEach(() => TestBed.configureTestingModule({})); | |
7 | + | |
8 | + it('should be created', () => { | |
9 | + const service: InactiveScreenService = TestBed.get(InactiveScreenService); | |
10 | + expect(service).toBeTruthy(); | |
11 | + }); | |
12 | +}); |
src/app/services/inactive-screen/inactive-screen.service.ts
... | ... | @@ -0,0 +1,19 @@ |
1 | +import { Injectable } from '@angular/core'; | |
2 | +import { Router } from '@angular/router'; | |
3 | + | |
4 | +@Injectable({ | |
5 | + providedIn: 'root' | |
6 | +}) | |
7 | +export class InactiveScreenService { | |
8 | + timerReposo: any; | |
9 | + | |
10 | + constructor( | |
11 | + private router: Router, | |
12 | + ) { } | |
13 | + | |
14 | + startTimeOutInactividad() { | |
15 | + this.timerReposo = setTimeout(() => { | |
16 | + this.router.navigate(['cancelar-compra']); | |
17 | + }, 90000); | |
18 | + } | |
19 | +} |
src/app/shared/promocion/promocion.component.html
... | ... | @@ -38,7 +38,9 @@ |
38 | 38 | class="card-img-top img-fluid rounded-circle"> |
39 | 39 | </div> |
40 | 40 | </div> |
41 | - <div class="row mx-0 lista-promociones scroll-y-visible"> | |
41 | + <div | |
42 | + class="row mx-0 lista-promociones scroll-y-visible" | |
43 | + (scroll)="scrollEvent($event)"> | |
42 | 44 | <div class="col-12"> |
43 | 45 | <div *ngFor="let promo of promociones"> |
44 | 46 | <div class="mx-0 mb-2 bg-white badge-pill text-primary" (click)="elegirPromo(promo)"> |
src/app/shared/promocion/promocion.component.ts
1 | -import { Component, OnInit } from '@angular/core'; | |
1 | +import { Component, OnInit, HostListener } from '@angular/core'; | |
2 | 2 | import { BsModalRef } from 'ngx-bootstrap/modal'; |
3 | 3 | import { IArticulo } from 'src/app/interfaces/IArticulo'; |
4 | 4 | import { ArticuloService } from 'src/app/services/articulo/articulo.service'; |
5 | 5 | import { PromocionService } from 'src/app/services/promocion/promocion.service'; |
6 | 6 | import { Subject } from 'rxjs'; |
7 | 7 | import { APP_SETTINGS } from 'src/etc/AppSettings'; |
8 | +import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service'; | |
8 | 9 | |
9 | 10 | @Component({ |
10 | 11 | selector: 'app-promocion', |
... | ... | @@ -22,6 +23,7 @@ export class PromocionComponent implements OnInit { |
22 | 23 | public modalRef: BsModalRef, |
23 | 24 | private articuloService: ArticuloService, |
24 | 25 | private promocionService: PromocionService, |
26 | + private inactiveScreen: InactiveScreenService, | |
25 | 27 | ) { |
26 | 28 | this.onClose = new Subject(); |
27 | 29 | } |
... | ... | @@ -49,4 +51,10 @@ export class PromocionComponent implements OnInit { |
49 | 51 | }, error => { console.error(error); }); |
50 | 52 | } |
51 | 53 | |
54 | + @HostListener('document:click', ['$event']) | |
55 | + eventListener(event: Event) { | |
56 | + clearTimeout(this.inactiveScreen.timerReposo); | |
57 | + this.inactiveScreen.startTimeOutInactividad(); | |
58 | + } | |
59 | + | |
52 | 60 | } |