{
"version": 3,
"sources": ["src/app/services/error.service.ts", "src/app/services/detailseite/detailseite-navigation/detailseite-navigation.service.ts", "src/app/services/detailseite/detailseite-navigation/impl/detailseite-navigation-by-merkliste.service.ts"],
"sourcesContent": ["import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport interface SprafErrorEvent {\n statusCode: number;\n text: string;\n}\n\n/**\n * Service, an den globale Fehler gesendet werden können und der es erlaubt, auf die Fehler zu subscriben.\n *\n * Wurde übernommen aus der WBSUCHE\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorService {\n private errorEventSubject$: Subject = new Subject();\n public errorEvent$: Observable = this.errorEventSubject$.asObservable();\n\n public setErrorEvent(error: SprafErrorEvent): void {\n this.errorEventSubject$.next(error);\n }\n}\n", "import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Beinhaltet Informationen, wie viele Detailseite vorher\n * bzw. nachfolgenden angezeigt werden können.\n */\nexport interface PaginationInformation {\n vorherige: number;\n folgende: number;\n}\n\nexport const DETAILSEITE_NAVIGATION_SERVICE = new InjectionToken('DETAILSEITE_NAVIGATION_SERVICE');\n\n/**\n * Abstraktion für einen Service zur Navigation zwischen Detailseiten.\n */\nexport interface DetailseiteNavigationService {\n /**\n * Erhalte Informationen darüber, wie viele Detailseite vorher\n * bzw. nachfolgenden angezeigt werden können.\n */\n pageInfo$: Observable;\n\n /**\n * Wahr gdw. eine Vor- und Zurück-Navigation ermöglicht werden kann.\n *\n * Ist i. R. false, wenn der Suchkontext abgelaufen ist, also nach einer\n * neuen Replikation mit veränderten Terminen.\n */\n isNavigationPossible$: Observable;\n\n /**\n * Navigiere zur vorherigen Detailseite\n */\n navigateToPrevious: () => Promise<{ id: number; nextPage?: number }>;\n\n /**\n * Navigiere zur nächsten Detailseite\n */\n navigateToNext: () => Promise<{ id: number; nextPage?: number }>;\n}\n", "import { Injectable } from '@angular/core';\nimport { ReplaySubject, Subject, combineLatest } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { MerklistService } from '../../../merkliste/merklist.service';\nimport { NavigationService } from '../../../navigation.service';\nimport {\n DetailseiteNavigationService,\n PaginationInformation\n} from '../detailseite-navigation.service';\n\n/**\n * Diese Implementierung basiert die Navigation zwischen den Detailseiten\n * auf der Merkliste.\n */\n@Injectable()\nexport class DetailseiteNavigationByMerklisteService implements DetailseiteNavigationService {\n public pageInfo$ = new ReplaySubject(1);\n /**\n * Zeige die Navigation nur an, wenn die Merkliste Termine enthält.\n */\n isNavigationPossible$ = this.merklisteService.merkListTerminIds$.pipe(\n map((ids) => ids.length > 0)\n );\n private ngUnsubscribe = new Subject();\n private aktuelleId: number;\n private merkListTerminIds: string[] = [];\n private indexOfIdInMerkliste: number;\n\n constructor(\n navigationService: NavigationService,\n private merklisteService: MerklistService\n ) {\n navigationService.letztesAngebot$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((id) => (this.aktuelleId = id));\n\n combineLatest([navigationService.letztesAngebot$, this.merklisteService.merkListTerminIds$])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([id, merkListTerminIds]) => {\n const indexOfId = merkListTerminIds.indexOf(id.toString());\n const terminInDerMerkliste: boolean = indexOfId >= 0;\n\n // Ist der Termin nicht auf der Merkliste,\n // wurde er also entfernt, dann frieren wir die den Status quo\n // bis zur nächsten Navigation ein.\n if (terminInDerMerkliste) {\n this.merkListTerminIds = merkListTerminIds;\n this.indexOfIdInMerkliste = indexOfId;\n this.pageInfo$.next({\n vorherige: indexOfId,\n folgende: merkListTerminIds.length - indexOfId - 1\n });\n }\n // Ist dies ein direkter Einsprung auf eine Detailseite,\n // die nicht auf der Merkliste enthalten ist,\n // so ermöglichen wir die Navigation zu den anderen Terminen\n // auf der Merkliste\n else if (this.indexOfIdInMerkliste === undefined) {\n // Wir simulieren, vor dem ersten Element der Merkliste zu sein\n this.indexOfIdInMerkliste = -1;\n this.merkListTerminIds = merkListTerminIds;\n this.pageInfo$.next({\n vorherige: 0,\n folgende: merkListTerminIds.length\n });\n }\n });\n }\n\n async navigateToNext(): Promise<{ id: number }> {\n return await this.navigationZuElement(1);\n }\n\n async navigateToPrevious(): Promise<{ id: number }> {\n return await this.navigationZuElement(-1);\n }\n\n private async navigationZuElement(offset: number): Promise<{ id: number }> {\n const nextId: string = this.merkListTerminIds[this.indexOfIdInMerkliste + offset];\n\n return {\n id: Number.parseInt(nextId)\n };\n }\n}\n"],
"mappings": "gLAgBA,IAAaA,GAAY,IAAA,CAAnB,IAAOA,EAAP,MAAOA,CAAY,CAHzBC,aAAA,CAIU,KAAAC,mBAA+C,IAAIC,EACpD,KAAAC,YAA2C,KAAKF,mBAAmBG,aAAY,EAE/EC,cAAcC,EAAsB,CACzC,KAAKL,mBAAmBM,KAAKD,CAAK,CACpC,yCANWP,EAAY,wBAAZA,EAAYS,QAAZT,EAAYU,UAAAC,WAFX,MAAM,CAAA,EAEd,IAAOX,EAAPY,SAAOZ,CAAY,GAAA,ECJlB,IAAMa,EAAiC,IAAIC,EAAe,gCAAgC,ECGjG,IAAaC,GAAuC,IAAA,CAA9C,IAAOA,EAAP,MAAOA,CAAuC,CAalDC,YACEC,EACQC,EAAiC,CAAjC,KAAAA,iBAAAA,EAdH,KAAAC,UAAY,IAAIC,EAAqC,CAAC,EAI7D,KAAAC,sBAAwB,KAAKH,iBAAiBI,mBAAmBC,KAC/DC,EAAKC,GAAQA,EAAIC,OAAS,CAAC,CAAC,EAEtB,KAAAC,cAAgB,IAAIC,EAEpB,KAAAC,kBAA8B,CAAA,EAOpCZ,EAAkBa,gBACfP,KAAKQ,EAAU,KAAKJ,aAAa,CAAC,EAClCK,UAAWC,GAAQ,KAAKC,WAAaD,CAAG,EAE3CE,EAAc,CAAClB,EAAkBa,gBAAiB,KAAKZ,iBAAiBI,kBAAkB,CAAC,EACxFC,KAAKQ,EAAU,KAAKJ,aAAa,CAAC,EAClCK,UAAU,CAAC,CAACC,EAAIJ,CAAiB,IAAK,CACrC,IAAMO,EAAYP,EAAkBQ,QAAQJ,EAAGK,SAAQ,CAAE,EACnBF,GAAa,GAMjD,KAAKP,kBAAoBA,EACzB,KAAKU,qBAAuBH,EAC5B,KAAKjB,UAAUqB,KAAK,CAClBC,UAAWL,EACXM,SAAUb,EAAkBH,OAASU,EAAY,EAClD,GAMM,KAAKG,uBAAyBI,SAErC,KAAKJ,qBAAuB,GAC5B,KAAKV,kBAAoBA,EACzB,KAAKV,UAAUqB,KAAK,CAClBC,UAAW,EACXC,SAAUb,EAAkBH,OAC7B,EAEL,CAAC,CACL,CAEMkB,gBAAc,QAAAC,EAAA,sBAClB,OAAO,MAAM,KAAKC,oBAAoB,CAAC,CACzC,GAEMC,oBAAkB,QAAAF,EAAA,sBACtB,OAAO,MAAM,KAAKC,oBAAoB,EAAE,CAC1C,GAEcA,oBAAoBE,EAAc,QAAAH,EAAA,sBAC9C,IAAMI,EAAiB,KAAKpB,kBAAkB,KAAKU,qBAAuBS,CAAM,EAEhF,MAAO,CACLf,GAAIiB,OAAOC,SAASF,CAAM,EAE9B,2CApEWlC,GAAuCqC,EAAAC,CAAA,EAAAD,EAAAE,CAAA,CAAA,CAAA,wBAAvCvC,EAAuCwC,QAAvCxC,EAAuCyC,SAAA,CAAA,EAA9C,IAAOzC,EAAP0C,SAAO1C,CAAuC,GAAA",
"names": ["ErrorService", "constructor", "errorEventSubject$", "Subject", "errorEvent$", "asObservable", "setErrorEvent", "error", "next", "factory", "\u0275fac", "providedIn", "_ErrorService", "DETAILSEITE_NAVIGATION_SERVICE", "InjectionToken", "DetailseiteNavigationByMerklisteService", "constructor", "navigationService", "merklisteService", "pageInfo$", "ReplaySubject", "isNavigationPossible$", "merkListTerminIds$", "pipe", "map", "ids", "length", "ngUnsubscribe", "Subject", "merkListTerminIds", "letztesAngebot$", "takeUntil", "subscribe", "id", "aktuelleId", "combineLatest", "indexOfId", "indexOf", "toString", "indexOfIdInMerkliste", "next", "vorherige", "folgende", "undefined", "navigateToNext", "__async", "navigationZuElement", "navigateToPrevious", "offset", "nextId", "Number", "parseInt", "\u0275\u0275inject", "NavigationService", "MerklistService", "factory", "\u0275fac", "_DetailseiteNavigationByMerklisteService"]
}