UNPKG

ngx-back-button

Version:

A library for handling a proper angular back button capability

1 lines 6.04 kB
{"version":3,"file":"ngx-back-button.mjs","sources":["../../../projects/ngx-back-button/src/lib/ngx-back-button.const.ts","../../../projects/ngx-back-button/src/lib/ngx-back-button.service.ts","../../../projects/ngx-back-button/src/lib/ngx-back-button.directive.ts","../../../projects/ngx-back-button/src/public-api.ts","../../../projects/ngx-back-button/src/ngx-back-button.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { NgxBackButtonServiceConfig } from './ngx-back-button.interface'\n\nexport const NgxBackButtonServiceProvider = new InjectionToken<NgxBackButtonServiceConfig>(\n 'NgxBackButtonServiceConfig',\n)\n","import { Location } from '@angular/common'\nimport { inject, Injectable } from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { filter, skip } from 'rxjs'\nimport { NgxBackButtonServiceProvider } from './ngx-back-button.const'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxBackButtonService {\n readonly #router = inject(Router)\n readonly #location = inject(Location)\n readonly #config = inject(NgxBackButtonServiceProvider, { optional: true })\n\n private _history: string[] = []\n private _rootUrl!: string // Default Fallback in case we do not have any navigation history\n private _fallbackPrefix!: string // Always added in case of a Fallback (Useful when used within other libraries)\n\n private _navigatingBack = false\n\n constructor() {\n this._rootUrl = this.#config?.rootUrl || ''\n this._fallbackPrefix = this.#config?.fallbackPrefix || ''\n\n this.#router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n skip(1), // Skip the first event (initial load)\n )\n .subscribe((event) => {\n if (!this._navigatingBack) this._history.push(event.urlAfterRedirects)\n\n this._navigatingBack = false\n })\n }\n\n getHistory(): string[] {\n return this._history\n }\n\n /**\n *\n * @param fallback\n * @return Boolean: True === Had an history to go back to\n */\n back(fallback?: string): boolean {\n this._navigatingBack = true\n\n const record = this._history.pop()\n\n if (this._history.length > 0) {\n this.#location.back()\n return true\n } else {\n this._navigatingBack = false // Give an element to go back to on next navigation\n\n try {\n window.history.replaceState(null, '', this._fallbackPrefix + (fallback || this._rootUrl))\n } catch (error) {\n console.error('NgxBackButton: ' + error)\n }\n\n window.history.pushState(null, '', record ?? this.#router.url)\n this.#location.back()\n return false\n }\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { NgxBackButtonService } from './ngx-back-button.service'\n\n@Directive({\n selector: '[ngxBackButton]',\n})\nexport class NgxBackButtonDirective {\n @Input() ngxBackButton?: string\n\n constructor(private _ngxBackButtonService: NgxBackButtonService) {}\n\n @HostListener('click')\n onClick(): void {\n this._ngxBackButtonService.back(this.ngxBackButton)\n }\n}\n","/*\n * Public API Surface of ngx-back-button\n */\n\nexport * from './lib/ngx-back-button.const'\nexport * from './lib/ngx-back-button.directive'\nexport * from './lib/ngx-back-button.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxBackButtonService"],"mappings":"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"}