diff --git a/src/app/app.component.ts b/src/app/app.component.ts index fbfd165c..bcc6023a 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; import { environment } from '../environments/environment'; import { StorageKeys, StorageService } from './services/storage.service'; +import { PreviousRouteService } from './services/previous-route.service'; @Component({ selector: 'app-root', @@ -10,8 +11,11 @@ import { StorageKeys, StorageService } from './services/storage.service'; export class AppComponent { envQA = environment.qa; title = 'ops-web'; - constructor(private storageService: StorageService) { + + constructor(private storageService: StorageService, + private previousRouteService: PreviousRouteService) { this.checkAppVersion(); + this.previousRouteService.init(); } checkAppVersion() { diff --git a/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.html b/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.html index b302426b..55b8c3ce 100755 --- a/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.html +++ b/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.html @@ -29,10 +29,15 @@

- ULTIMO SALDO: {{ saldo | currency:'ARS':'symbol':'1.0-2' }} + ÚLTIMO SALDO: {{ saldo | currency:'ARS':'symbol':'1.0-2' }}
- + + + - -
+
@@ -69,14 +70,14 @@

- +
Movimientos
{{ r.fecha | date:'dd/MM/yyyy HH:mm' }} - + {{ helper.tipoComprobanteLabel(r.tipoComprobante) }} Nº {{ r.serie }}-{{ r.numero }} @@ -104,8 +105,9 @@

-
Sin Movimientos.
- Sin Movimientos.
+ diff --git a/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.ts b/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.ts index f0b50db8..24ce08bf 100644 --- a/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.ts +++ b/src/app/components/cuenta-corriente-cliente/cuenta-corriente-cliente.component.ts @@ -4,15 +4,14 @@ import {CuentasCorrientesService} from '../../services/cuentas-corrientes.servic import {LoadingOverlayService} from '../../services/loading-overlay.service'; import {CuentaCorrienteCliente} from '../../models/cuenta-corriente'; import {MensajeService} from '../../services/mensaje.service'; -import {DatePipe, Location} from '@angular/common'; +import {DatePipe} from '@angular/common'; import {MensajeModalType} from '../mensaje-modal/mensaje-modal.component'; import {finalize} from 'rxjs/operators'; import {RenglonCuentaCorriente} from '../../models/renglon-cuenta-corriente'; import {TipoDeComprobante} from '../../models/tipo-de-comprobante'; import {ConfiguracionesSucursalService} from '../../services/configuraciones-sucursal.service'; import {NotasService} from '../../services/notas.service'; -import {combineLatest, Observable} from 'rxjs'; -import {FacturasVentaService} from '../../services/facturas-venta.service'; +import {Observable} from 'rxjs'; import {RecibosService} from '../../services/recibos.service'; import {RemitosService} from '../../services/remitos.service'; import {saveAs} from 'file-saver'; @@ -38,6 +37,10 @@ import {NotaDebitoVentaDetalleReciboModalComponent} from '../nota-debito-venta-d import {HelperService} from '../../services/helper.service'; import {SucursalesService} from '../../services/sucursales.service'; import {ReciboClienteModalComponent} from '../recibo-cliente-modal/recibo-cliente-modal.component'; +import { ListadoDirective } from 'src/app/directives/listado.directive'; +import { PreviousRouteService } from 'src/app/services/previous-route.service'; + +const ssCCCPreviousUrlKey = 'CCC_PREVIOUS_URL'; @Component({ selector: 'app-cuenta-corriente-cliente', @@ -45,17 +48,12 @@ import {ReciboClienteModalComponent} from '../recibo-cliente-modal/recibo-client styleUrls: ['./cuenta-corriente-cliente.component.scss'], providers: [DatePipe] }) -export class CuentaCorrienteClienteComponent implements OnInit { +export class CuentaCorrienteClienteComponent extends ListadoDirective implements OnInit { ccc: CuentaCorrienteCliente; - renglones: RenglonCuentaCorriente[] = []; - saldo = 0; + saldo = 0; displayPage = 1; - page = 0; - totalElements = 0; - totalPages = 0; - size = 0; tc = TipoDeComprobante; @@ -98,21 +96,22 @@ export class CuentaCorrienteClienteComponent implements OnInit { helper = HelperService; - constructor(private route: ActivatedRoute, - private router: Router, - public loadingOverlayService: LoadingOverlayService, - private mensajeService: MensajeService, - private location: Location, + constructor(protected route: ActivatedRoute, + protected router: Router, + protected sucursalesService: SucursalesService, + protected loadingOverlayService: LoadingOverlayService, + protected mensajeService: MensajeService, + private previousRouteService: PreviousRouteService, private cuentasCorrientesService: CuentasCorrientesService, private configuracionesSucursalService: ConfiguracionesSucursalService, private notasService: NotasService, - private facturasVentaService: FacturasVentaService, private recibosService: RecibosService, private remitosService: RemitosService, private modalService: NgbModal, private authService: AuthService, - private datePipe: DatePipe, - private sucursalesService: SucursalesService) { } + private datePipe: DatePipe) { + super(route, router, sucursalesService, loadingOverlayService, mensajeService); + } ngOnInit() { if (this.route.snapshot.paramMap.has('id')) { @@ -120,16 +119,28 @@ export class CuentaCorrienteClienteComponent implements OnInit { this.loadingOverlayService.activate(); this.cuentasCorrientesService.getCuentaCorrienteCliente(id) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - ccc => { + .subscribe({ + next: ccc => { this.ccc = ccc; - this.getRenglones(); + super.ngOnInit(); + this.loadingOverlayService.activate(); + this.cuentasCorrientesService.getCuentaCorrienteClienteSaldo(this.ccc.cliente.idCliente) + .pipe(finalize(() => this.loadingOverlayService.deactivate())) + .subscribe({ + next: saldo => this.saldo = saldo, + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }); + this.router.navigate(['/clientes']); + } + }) + ; }, - err => { + error: err => { this.mensajeService.msg(err.error, MensajeModalType.ERROR); this.router.navigate(['/clientes']); }, - ) + }) ; } else { this.mensajeService.msg('Se debe especificar un id de cliente.', MensajeModalType.ERROR); @@ -140,43 +151,52 @@ export class CuentaCorrienteClienteComponent implements OnInit { this.hasRoleToVerDetalle = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToVerDetalle); this.hasRoleToCrearNota = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToCrearNota); this.hasRoleToCrearRecibo = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToCrearRecibo); + + this.subscription.add(this.previousRouteService.previousRoute$.subscribe(url => { + const urlHaveToBeStored = /(^\/clientes$|^\/clientes\?[a-zA-Z0-9=&]+$)/.test(url); + if (urlHaveToBeStored) { + sessionStorage.setItem(ssCCCPreviousUrlKey, url); + } + })); } - getRenglones() { - this.loadingOverlayService.activate(); + /* reescrito de la base para que funcione en esta vista */ + getItemsFromQueryParams(params = null) { + super.getItemsFromQueryParams(params); + this.displayPage = this.page + 1; + } - const obvs = [ - this.cuentasCorrientesService.getCuentaCorrienteClienteSaldo(this.ccc.cliente.idCliente), - this.cuentasCorrientesService.getCuentaCorrienteRenglones(this.ccc.idCuentaCorriente, this.page) - ]; + loadPage(page) { + this.page = page - 1; + const qParams = this.getFormValues() as { [key: string]: any }; + qParams.p = this.page + 1; + this.router.navigate([], { relativeTo: this.route, queryParams: qParams }); + } - // this.cuentasCorrientesService.getCuentaCorrienteRenglones(this.ccc.idCuentaCorriente, this.page) - combineLatest(obvs) - .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - (data: [number, Pagination]) => { - this.saldo = data[0]; - this.renglones = data[1].content; - this.totalElements = data[1].totalElements; - this.totalPages = data[1].totalPages; - this.size = data[1].size; - }, - err => { - this.mensajeService.msg(err.error, MensajeModalType.ERROR); - this.router.navigate(['/clientes']); - } - ) - ; + populateFilterForm(params) { + /*No hace nada ya que no existe formulario de filtro */ } - volverAlListado() { - this.location.back(); + getTerminosFromQueryParams(params) { + return { + pagina: this.page, + }; } - loadPage(page) { - this.displayPage = page; - this.page = page - 1; - this.getRenglones(); + createFilterForm() { /* No hace nada ya que no existe formulario de filtro */ } + resetFilterForm() { /* No hace nada ya que no existe formulario de filtro */ } + + getAppliedFilters() { this.appliedFilters = []; }; + getFormValues() { return {} }; + + getItemsObservableMethod(terminos): Observable { + return this.cuentasCorrientesService.getCuentaCorrienteRenglones(this.ccc.idCuentaCorriente, terminos.pagina); + }; + + + volverAlListado() { + const backUrl = sessionStorage.getItem(ssCCCPreviousUrlKey) || '/clientes'; + this.router.navigateByUrl(backUrl); } autorizar(r: RenglonCuentaCorriente) { @@ -197,25 +217,32 @@ export class CuentaCorrienteClienteComponent implements OnInit { this.loadingOverlayService.activate(); this.configuracionesSucursalService.isFacturaElectronicaHabilitada() .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - habilitada => { + .subscribe({ + next: habilitada => { if (habilitada) { this.loadingOverlayService.activate(); this.notasService.autorizar(idMovimiento) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - () => this.mensajeService.msg('La Nota fue autorizada por AFIP correctamente!', MensajeModalType.INFO) - .then(() => callback()), - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - .then(() => callback()), - ) + .subscribe({ + next: () => { + this.mensajeService.msg('La Nota fue autorizada por AFIP correctamente!', MensajeModalType.INFO) + .then(() => callback()) + }, + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => callback()) + }, + }) ; } else { this.mensajeService.msg('La funcionalidad de Factura Electronica no se encuentra habilitada.', MensajeModalType.ERROR); } }, - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), - ); + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }); + }, + }); } verDetalle(r: RenglonCuentaCorriente) { @@ -241,7 +268,7 @@ export class CuentaCorrienteClienteComponent implements OnInit { TipoDeComprobante.FACTURA_X, TipoDeComprobante.FACTURA_Y, TipoDeComprobante.PRESUPUESTO, - ]; + ]; if (notasDeDebito.indexOf(r.tipoComprobante) >= 0) { this.router.navigate(['/notas-debito-venta/ver', r.idMovimiento]); @@ -253,24 +280,23 @@ export class CuentaCorrienteClienteComponent implements OnInit { return; } - if (facturas.indexOf(r.tipoComprobante) >= 0) { + if (facturas.indexOf(r.tipoComprobante) >= 0) { this.router.navigate(['/facturas-venta/ver', r.idMovimiento]); - return; + return; } - if (r.tipoComprobante === TipoDeComprobante.RECIBO) { + if (r.tipoComprobante === TipoDeComprobante.RECIBO) { this.router.navigate(['/recibos/ver', r.idMovimiento]); - return; + return; } - if (r.tipoComprobante === TipoDeComprobante.REMITO) { + if (r.tipoComprobante === TipoDeComprobante.REMITO) { this.router.navigate(['/remitos/ver', r.idMovimiento]); - return; } } exportar() { - if (this.ccc && this.ccc.cliente && this.ccc.cliente) { + if (this.ccc?.cliente) { const options: OPOption[] = [{ value: 'xlsx', text: 'Excel'}, { value: 'pdf', text: 'Pdf' }]; const modalRef = this.modalService.open(OptionPickerModalComponent); modalRef.componentInstance.options = options; @@ -284,14 +310,17 @@ export class CuentaCorrienteClienteComponent implements OnInit { this.loadingOverlayService.activate(); this.cuentasCorrientesService.getReporte(criteria, formato) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - (res) => { + .subscribe({ + next: (res) => { const mimeType = formato === 'xlsx' ? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'application/pdf'; const file = new Blob([res], {type: mimeType}); saveAs(file, `CuentaCorrienteCliente.${formato}`); }, - () => this.mensajeService.msg('Error al generar el reporte', MensajeModalType.ERROR), - ) + error: () => { + this.mensajeService.msg('Error al generar el reporte', MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }) + }, + }) ; }); } @@ -328,10 +357,13 @@ export class CuentaCorrienteClienteComponent implements OnInit { this.loadingOverlayService.activate(); obvs .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - () => this.loadPage(this.page + 1), - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), - ) + .subscribe({ + next: () => this.loadPage(this.page + 1), + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }); + }, + }) ; } }); diff --git a/src/app/directives/recibos.directive.ts b/src/app/directives/recibos.directive.ts index 6f2aaba5..b851328f 100644 --- a/src/app/directives/recibos.directive.ts +++ b/src/app/directives/recibos.directive.ts @@ -305,4 +305,18 @@ export abstract class RecibosDirective extends ListadoDirective implements OnIni ; } } + + // No se porque tuve que redefinir estos metodos en esta directive + // Daba el error de que no existian en las clases que las heredan + reset() { + super.reset(); + } + + filter() { + super.filter(); + } + + loadPage(page: any): void { + super.loadPage(page); + } } diff --git a/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.html b/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.html index d9bf546f..2c028b08 100755 --- a/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.html +++ b/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.html @@ -6,7 +6,7 @@

- Cuenta Corriente: {{ ccp.proveedor.razonSocial }} + Cuenta Corriente

- SALDO: {{ saldo | currency:'ARS':'symbol':'1.0-2' }} + ÚLTIMO SALDO: {{ saldo | currency:'ARS':'symbol':'1.0-2' }}
- - - + - -
+
@@ -65,7 +61,7 @@

- + @@ -100,7 +96,7 @@

Movimientos
@@ -78,7 +74,7 @@

Nº {{ r.serie }}-{{ r.numero }}

-
Suc: {{ r.nombreSucursal }}
+
Sucursal: {{ r.nombreSucursal }}
Detalle: {{ r.descripcion }}
-
Sin Movimientos.
+
Sin Movimientos.
diff --git a/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.ts b/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.ts index c919c8b7..300df4ef 100755 --- a/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.ts +++ b/src/app/feature-modules/cuentas-corrientes-proveedor/components/cuenta-corriente-proveedor/cuenta-corriente-proveedor.component.ts @@ -2,12 +2,12 @@ import { Component, OnInit } from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; import {LoadingOverlayService} from '../../../../services/loading-overlay.service'; import {MensajeService} from '../../../../services/mensaje.service'; -import {DatePipe, Location} from '@angular/common'; +import {DatePipe} from '@angular/common'; import {CuentasCorrientesService} from '../../../../services/cuentas-corrientes.service'; import {finalize} from 'rxjs/operators'; import {CuentaCorrienteProveedor} from '../../../../models/cuenta-corriente'; import {MensajeModalType} from '../../../../components/mensaje-modal/mensaje-modal.component'; -import {combineLatest, Observable} from 'rxjs'; +import {Observable} from 'rxjs'; import {Pagination} from '../../../../models/pagination'; import {RenglonCuentaCorriente} from '../../../../models/renglon-cuenta-corriente'; import {HelperService} from '../../../../services/helper.service'; @@ -33,6 +33,11 @@ import {NuevaNotaDebitoDeRecibo} from '../../../../models/nueva-nota-debito-de-r import {NotaDebitoCompraDetalleReciboModalComponent} from '../nota-debito-compra-detalle-recibo-modal/nota-debito-compra-detalle-recibo-modal.component'; import {ReciboProveedorModalComponent} from '../../../../components/recibo-proveedor-modal/recibo-proveedor-modal.component'; import {RecibosService} from '../../../../services/recibos.service'; +import { ListadoDirective } from 'src/app/directives/listado.directive'; +import { SucursalesService } from 'src/app/services/sucursales.service'; +import { PreviousRouteService } from 'src/app/services/previous-route.service'; + +const ssCCPPreviousUrlKey = 'CCP_PREVIOUS_URL'; @Component({ selector: 'app-cuenta-corriente-proveedor', @@ -40,16 +45,12 @@ import {RecibosService} from '../../../../services/recibos.service'; styleUrls: ['./cuenta-corriente-proveedor.component.scss'], providers: [DatePipe] }) -export class CuentaCorrienteProveedorComponent implements OnInit { +export class CuentaCorrienteProveedorComponent extends ListadoDirective implements OnInit { ccp: CuentaCorrienteProveedor; renglones: RenglonCuentaCorriente[] = []; saldo = 0; displayPage = 1; - page = 0; - totalElements = 0; - totalPages = 0; - size = 0; helper = HelperService; @@ -86,17 +87,20 @@ export class CuentaCorrienteProveedorComponent implements OnInit { TipoDeComprobante.RECIBO ]; - constructor(private route: ActivatedRoute, - private router: Router, - public loadingOverlayService: LoadingOverlayService, - private mensajeService: MensajeService, - private location: Location, + constructor(protected route: ActivatedRoute, + protected router: Router, + protected sucursalesService: SucursalesService, + protected loadingOverlayService: LoadingOverlayService, + protected mensajeService: MensajeService, + private previousRouteService: PreviousRouteService, private cuentasCorrientesService: CuentasCorrientesService, private modalService: NgbModal, private authService: AuthService, private notasService: NotasService, private recibosService: RecibosService, - private datePipe: DatePipe) { } + private datePipe: DatePipe) { + super(route, router, sucursalesService, loadingOverlayService, mensajeService); + } ngOnInit(): void { if (this.route.snapshot.paramMap.has('id')) { @@ -107,7 +111,19 @@ export class CuentaCorrienteProveedorComponent implements OnInit { .subscribe({ next: (ccp: CuentaCorrienteProveedor) => { this.ccp = ccp; - this.getRenglones(); + super.ngOnInit(); + this.loadingOverlayService.activate(); + this.cuentasCorrientesService.getCuentaCorrienteProveedorSaldo(this.ccp.proveedor.idProveedor) + .pipe(finalize(() => this.loadingOverlayService.deactivate())) + .subscribe({ + next: saldo => this.saldo = saldo, + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }); + this.router.navigate(['/proveedores']); + } + }) + ; }, error: (err) => { this.mensajeService.msg(err.error, MensajeModalType.ERROR); @@ -123,42 +139,50 @@ export class CuentaCorrienteProveedorComponent implements OnInit { this.hasRoleToCrearNota = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToCrearNota); this.hasRoleToVerDetalle = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToVerDetalle); this.hasRoleToCrearRecibo = this.authService.userHasAnyOfTheseRoles(this.allowedRolesToCrearRecibo); + this.subscription.add(this.previousRouteService.previousRoute$.subscribe(url => { + const urlHaveToBeStored = /(^\/proveedores$|^\/proveedores\?[a-zA-Z0-9=&]+$)/.test(url); + console.log(urlHaveToBeStored); + if (urlHaveToBeStored) { + sessionStorage.setItem(ssCCPPreviousUrlKey, url); + } + })); } volverAlListado() { - this.location.back(); + const backUrl = sessionStorage.getItem(ssCCPPreviousUrlKey) || '/proveedores'; + this.router.navigateByUrl(backUrl); } - getRenglones() { - this.loadingOverlayService.activate(); - - const obvs = [ - this.cuentasCorrientesService.getCuentaCorrienteProveedorSaldo(this.ccp.proveedor.idProveedor), - this.cuentasCorrientesService.getCuentaCorrienteRenglones(this.ccp.idCuentaCorriente, this.page) - ]; - - combineLatest(obvs) - .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe({ - next: (data: [number, Pagination]) => { - this.saldo = data[0]; - this.renglones = data[1].content; - this.totalElements = data[1].totalElements; - this.totalPages = data[1].totalPages; - this.size = data[1].size; - }, - error: err => { - this.mensajeService.msg(err.error, MensajeModalType.ERROR); - this.router.navigate(['/proveedores']); - } - }) - ; + getItemsFromQueryParams(params = null) { + super.getItemsFromQueryParams(params); + this.displayPage = this.page + 1; } loadPage(page) { - this.displayPage = page; this.page = page - 1; - this.getRenglones(); + const qParams = this.getFormValues() as { [key: string]: any }; + qParams.p = this.page + 1; + this.router.navigate([], { relativeTo: this.route, queryParams: qParams }); + } + + populateFilterForm(params) { + /*No hace nada ya que no existe formulario de filtro */ + } + + getTerminosFromQueryParams(params) { + return { + pagina: this.page, + }; + } + + createFilterForm() { /* No hace nada ya que no existe formulario de filtro */ } + resetFilterForm() { /* No hace nada ya que no existe formulario de filtro */ } + + getAppliedFilters() { this.appliedFilters = []; }; + getFormValues() { return {} }; + + getItemsObservableMethod(terminos): Observable { + return this.cuentasCorrientesService.getCuentaCorrienteRenglones(this.ccp.idCuentaCorriente, terminos.pagina) } nuevaNotaCredito() { @@ -340,7 +364,10 @@ export class CuentaCorrienteProveedorComponent implements OnInit { .pipe(finalize(() => this.loadingOverlayService.deactivate())) .subscribe({ next: () => this.loadPage(this.page + 1), - error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), + error: err => { + this.mensajeService.msg(err.error, MensajeModalType.ERROR) + .then(() => { return; }, () => { return; }); + }, }) ; } diff --git a/src/app/services/previous-route.service.ts b/src/app/services/previous-route.service.ts new file mode 100644 index 00000000..bac4cfbd --- /dev/null +++ b/src/app/services/previous-route.service.ts @@ -0,0 +1,27 @@ +import { Router, RoutesRecognized } from '@angular/router'; +import { Injectable } from '@angular/core'; +import { BehaviorSubject, filter, map, pairwise } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class PreviousRouteService { + + public previousRoute$ = new BehaviorSubject(''); + + constructor(private router: Router) {} + + /** + * Debe llamarse una sola vez en el AppComponent + */ + init() { + this.router.events.pipe( + filter((e) => e instanceof RoutesRecognized), + pairwise(), + map((e: [RoutesRecognized, RoutesRecognized]) => { + const url = e[0].url; + if (url !== '') { this.previousRoute$.next(url) }; + }) + ).subscribe(); + } +}