{ "version": 3, "sources": ["src/app/_services/recommendation.service.ts", "src/app/_models/dashboard/stream-type.enum.ts", "src/app/dashboard/_components/dashboard.component.ts", "src/app/dashboard/_components/dashboard.component.html", "src/app/_routes/dashboard-routing.module.ts"], "sourcesContent": ["import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UtilityService } from '../shared/_services/utility.service';\r\nimport { PaginatedResult } from '../_models/pagination';\r\nimport { Series } from '../_models/series';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RecommendationService {\r\n\r\n private baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient, private utilityService: UtilityService) { }\r\n\r\n getQuickReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-reads?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getQuickCatchupReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-catchup-reads?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getHighlyRated(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/highly-rated?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getRediscover(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/rediscover?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getMoreIn(libraryId: number, genreId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/more-in?libraryId=' + libraryId + '&genreId=' + genreId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n}\r\n", "export enum StreamType {\r\n OnDeck = 1,\r\n RecentlyUpdated = 2,\r\n NewlyAdded = 3,\r\n SmartFilter = 4,\r\n MoreInGenre = 5\r\n}\r\n", "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, OnInit} from '@angular/core';\r\nimport {Title} from '@angular/platform-browser';\r\nimport {Router, RouterLink} from '@angular/router';\r\nimport {Observable, ReplaySubject, Subject, switchMap} from 'rxjs';\r\nimport {debounceTime, map, shareReplay, take, tap, throttleTime} from 'rxjs/operators';\r\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\r\nimport {Library} from 'src/app/_models/library/library';\r\nimport {RecentlyAddedItem} from 'src/app/_models/recently-added-item';\r\nimport {SortField} from 'src/app/_models/metadata/series-filter';\r\nimport {AccountService} from 'src/app/_services/account.service';\r\nimport {ImageService} from 'src/app/_services/image.service';\r\nimport {LibraryService} from 'src/app/_services/library.service';\r\nimport {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service';\r\nimport {SeriesService} from 'src/app/_services/series.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CardItemComponent} from '../../cards/card-item/card-item.component';\r\nimport {SeriesCardComponent} from '../../cards/series-card/series-card.component';\r\nimport {CarouselReelComponent} from '../../carousel/_components/carousel-reel/carousel-reel.component';\r\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\r\nimport {\r\n SideNavCompanionBarComponent\r\n} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';\r\nimport {translate, TranslocoDirective} from \"@jsverse/transloco\";\r\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\r\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\r\nimport {DashboardService} from \"../../_services/dashboard.service\";\r\nimport {MetadataService} from \"../../_services/metadata.service\";\r\nimport {RecommendationService} from \"../../_services/recommendation.service\";\r\nimport {Genre} from \"../../_models/metadata/genre\";\r\nimport {DashboardStream} from \"../../_models/dashboard/dashboard-stream\";\r\nimport {StreamType} from \"../../_models/dashboard/stream-type.enum\";\r\nimport {LoadingComponent} from \"../../shared/loading/loading.component\";\r\nimport {ScrobbleProvider, ScrobblingService} from \"../../_services/scrobbling.service\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {SettingsTabId} from \"../../sidenav/preference-nav/preference-nav.component\";\r\nimport {ReaderService} from \"../../_services/reader.service\";\r\nimport {QueryContext} from \"../../_models/metadata/v2/query-context\";\r\n\r\nenum StreamId {\r\n OnDeck,\r\n RecentlyUpdatedSeries,\r\n NewlyAddedSeries,\r\n MoreInGenre,\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [SideNavCompanionBarComponent, RouterLink, CarouselReelComponent, SeriesCardComponent,\r\n CardItemComponent, AsyncPipe, TranslocoDirective, NgTemplateOutlet, LoadingComponent],\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly filterUtilityService = inject(FilterUtilitiesService);\r\n private readonly metadataService = inject(MetadataService);\r\n private readonly recommendationService = inject(RecommendationService);\r\n protected readonly accountService = inject(AccountService);\r\n private readonly libraryService = inject(LibraryService);\r\n private readonly seriesService = inject(SeriesService);\r\n private readonly router = inject(Router);\r\n private readonly titleService = inject(Title);\r\n public readonly imageService = inject(ImageService);\r\n private readonly messageHub = inject(MessageHubService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly dashboardService = inject(DashboardService);\r\n private readonly scrobblingService = inject(ScrobblingService);\r\n private readonly toastr = inject(ToastrService);\r\n private readonly readerService = inject(ReaderService);\r\n\r\n libraries$: Observable = this.libraryService.getLibraries().pipe(take(1), takeUntilDestroyed(this.destroyRef))\r\n isLoadingDashboard = true;\r\n\r\n streams: Array = [];\r\n genre: Genre | undefined;\r\n refreshStreams$ = new Subject();\r\n refreshStreamsFromDashboardUpdate$ = new Subject();\r\n\r\n streamCount: number = 0;\r\n streamsLoaded: number = 0;\r\n\r\n /**\r\n * We use this Replay subject to slow the amount of times we reload the UI\r\n */\r\n private loadRecentlyAdded$: ReplaySubject = new ReplaySubject();\r\n protected readonly StreamType = StreamType;\r\n protected readonly StreamId = StreamId;\r\n\r\n constructor() {\r\n this.loadDashboard();\r\n\r\n this.refreshStreamsFromDashboardUpdate$.pipe(takeUntilDestroyed(this.destroyRef), debounceTime(1000),\r\n tap(() => {\r\n this.loadDashboard();\r\n }))\r\n .subscribe();\r\n\r\n this.refreshStreams$.pipe(takeUntilDestroyed(this.destroyRef), throttleTime(10_000),\r\n tap(() => {\r\n this.loadDashboard()\r\n }))\r\n .subscribe();\r\n\r\n\r\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\r\n // TODO: Make the event have a stream Id so I can refresh just that stream\r\n if (res.event === EVENTS.DashboardUpdate) {\r\n this.refreshStreamsFromDashboardUpdate$.next();\r\n } else if (res.event === EVENTS.SeriesAdded) {\r\n this.refreshStreams$.next();\r\n } else if (res.event === EVENTS.SeriesRemoved) {\r\n this.refreshStreams$.next();\r\n } else if (res.event === EVENTS.ScanSeries) {\r\n // We don't have events for when series are updated, but we do get events when a scan update occurs. Refresh recentlyAdded at that time.\r\n this.loadRecentlyAdded$.next();\r\n this.refreshStreams$.next();\r\n }\r\n });\r\n\r\n this.scrobblingService.hasTokenExpired(ScrobbleProvider.AniList).subscribe(hasExpired => {\r\n if (hasExpired) {\r\n this.toastr.error(translate('toasts.anilist-token-expired'));\r\n }\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.titleService.setTitle('Kavita');\r\n }\r\n\r\n\r\n loadDashboard() {\r\n this.isLoadingDashboard = true;\r\n this.streamsLoaded = 0;\r\n this.streamCount = 0;\r\n this.cdRef.markForCheck();\r\n this.dashboardService.getDashboardStreams().subscribe(streams => {\r\n this.streams = streams;\r\n this.streamCount = streams.length;\r\n this.streams.forEach(s => {\r\n switch (s.streamType) {\r\n case StreamType.OnDeck:\r\n s.api = this.seriesService.getOnDeck(0, 1, 20)\r\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.NewlyAdded:\r\n s.api = this.seriesService.getRecentlyAdded(1, 20)\r\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.RecentlyUpdated:\r\n s.api = this.seriesService.getRecentlyUpdatedSeries().pipe(tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.SmartFilter:\r\n s.api = this.filterUtilityService.decodeFilter(s.smartFilterEncoded!).pipe(\r\n switchMap(filter => {\r\n return this.seriesService.getAllSeriesV2(0, 20, filter, QueryContext.Dashboard);\r\n }))\r\n .pipe(map(d => d.result),tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.MoreInGenre:\r\n s.api = this.metadataService.getAllGenres([], QueryContext.Dashboard).pipe(\r\n map(genres => {\r\n this.genre = genres[Math.floor(Math.random() * genres.length)];\r\n return this.genre;\r\n }),\r\n switchMap(genre => this.recommendationService.getMoreIn(0, genre.id, 0, 30)),\r\n map(p => p.result),\r\n tap(() => this.increment()),\r\n takeUntilDestroyed(this.destroyRef),\r\n shareReplay({bufferSize: 1, refCount: true})\r\n );\r\n break;\r\n }\r\n });\r\n this.isLoadingDashboard = false;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n increment() {\r\n this.streamsLoaded++;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n reloadStream(streamId: number, onDeck = false) {\r\n const index = this.streams.findIndex(s => s.id === streamId);\r\n if (index < 0) return;\r\n if (onDeck) {\r\n // TODO: Need to figure out a better way to refresh just one stream\r\n this.refreshStreams$.next();\r\n this.cdRef.markForCheck();\r\n } else {\r\n this.streams[index] = {...this.streams[index]};\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n async handleRecentlyAddedChapterClick(item: RecentlyAddedItem) {\r\n await this.router.navigate(['library', item.libraryId, 'series', item.seriesId]);\r\n }\r\n\r\n async handleRecentlyAddedChapterRead(item: RecentlyAddedItem) {\r\n // Get Continue Reading point and open directly\r\n this.readerService.getCurrentChapter(item.seriesId).subscribe(chapter => {\r\n this.readerService.readChapter(item.libraryId, item.seriesId, chapter, false);\r\n });\r\n }\r\n\r\n async handleFilterSectionClick(stream: DashboardStream) {\r\n await this.router.navigateByUrl('all-series?' + stream.smartFilterEncoded);\r\n }\r\n\r\n handleSectionClick(streamId: StreamId) {\r\n if (streamId === StreamId.RecentlyUpdatedSeries) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.recently-updated-title');\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.LastChapterAdded;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.OnDeck) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.on-deck-title');\r\n\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.GreaterThan, value: '0'});\r\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.NotEqual, value: '100'});\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.LastChapterAdded;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.NewlyAddedSeries) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.recently-added-title');\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.Created;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.MoreInGenre) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.more-in-genre-title', {genre: this.genre?.title});\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n filter.statements.push({field: FilterField.Genres, value: this.genre?.id + '', comparison: FilterComparison.MustContains});\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n }\r\n }\r\n\r\n protected readonly SettingsTabId = SettingsTabId;\r\n}\r\n", "
\r\n\r\n\r\n \r\n @if (libraries$ | async; as libraries) {\r\n @if (libraries.length === 0) {\r\n @if (accountService.isAdmin$ | async; as isAdmin) {\r\n
\r\n @if (isAdmin) {\r\n
\r\n

{{t('no-libraries')}} {{t('server-settings-link')}}.

\r\n
\r\n } @else {\r\n
\r\n

{{t('not-granted')}}

\r\n
\r\n }\r\n
\r\n }\r\n }\r\n }\r\n\r\n @for(stream of streams; track stream.id) {\r\n @switch (stream.streamType) {\r\n @case (StreamType.OnDeck) {\r\n \r\n }\r\n @case (StreamType.RecentlyUpdated) {\r\n \r\n }\r\n @case (StreamType.NewlyAdded) {\r\n \r\n }\r\n @case (StreamType.SmartFilter) {\r\n \r\n }\r\n @case (StreamType.MoreInGenre) {\r\n \r\n }\r\n }\r\n\r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n }\r\n\r\n \r\n
\r\n
\r\n\r\n", "import { Routes } from '@angular/router';\r\nimport { DashboardComponent } from '../dashboard/_components/dashboard.component';\r\n\r\n\r\nexport const routes: Routes = [\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n }\r\n];\r\n"], "mappings": "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", "names": ["RecommendationService", "constructor", "httpClient", "utilityService", "baseUrl", "environment", "apiUrl", "getQuickReads", "libraryId", "pageNum", "itemsPerPage", "params", "HttpParams", "addPaginationIfExists", "get", "observe", "pipe", "map", "response", "createPaginatedResult", "getQuickCatchupReads", "getHighlyRated", "getRediscover", "getMoreIn", "genreId", "\u0275\u0275inject", "HttpClient", "UtilityService", "factory", "\u0275fac", "providedIn", "StreamType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "t_r1", "\u0275\u0275property", "ctx_r1", "SettingsTabId", "Libraries", "\u0275\u0275textInterpolate", "\u0275\u0275template", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Conditional_1_Template", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Conditional_2_Template", "\u0275\u0275conditional", "ctx", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Template", "tmp_5_0", "\u0275\u0275pipeBind1", "accountService", "isAdmin$", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Template", "length", "\u0275\u0275elementContainer", "onDeck_r4", "\u0275\u0275pureFunction1", "_c0", "stream_r3", "recentlyUpdated_r5", "newlyUpdated_r6", "smartFilter_r7", "moreInGenre_r8", "\u0275\u0275listener", "item_r11", "\u0275\u0275restoreView", "_r10", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "reloadStream", "id", "libraryId", "_r9", "handleFilterSectionClick", "DashboardComponent_ng_container_2_For_4_ng_template_5_Conditional_0_ng_template_1_Template", "\u0275\u0275templateRefExtractor", "name", "DashboardComponent_ng_container_2_For_4_ng_template_5_Conditional_0_Template", "tmp_19_0", "api", "_r13", "item_r14", "_r12", "handleSectionClick", "StreamId", "OnDeck", "DashboardComponent_ng_container_2_For_4_ng_template_7_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_7_Conditional_0_Template", "item_r17", "_r16", "handleRecentlyAddedChapterClick", "handleRecentlyAddedChapterRead", "seriesName", "imageService", "getSeriesCoverImage", "seriesId", "count", "_r15", "RecentlyUpdatedSeries", "DashboardComponent_ng_container_2_For_4_ng_template_9_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_9_Conditional_0_Template", "_r19", "item_r20", "_r18", "NewlyAddedSeries", "DashboardComponent_ng_container_2_For_4_ng_template_11_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_11_Conditional_0_Template", "_r22", "item_r23", "_r21", "MoreInGenre", "DashboardComponent_ng_container_2_For_4_ng_template_13_Conditional_0_ng_template_1_Template", "_c1", "genre", "title", "DashboardComponent_ng_container_2_For_4_ng_template_13_Conditional_0_Template", "DashboardComponent_ng_container_2_For_4_Case_0_Template", "DashboardComponent_ng_container_2_For_4_Case_1_Template", "DashboardComponent_ng_container_2_For_4_Case_2_Template", "DashboardComponent_ng_container_2_For_4_Case_3_Template", "DashboardComponent_ng_container_2_For_4_Case_4_Template", "DashboardComponent_ng_container_2_For_4_ng_template_5_Template", "DashboardComponent_ng_container_2_For_4_ng_template_7_Template", "DashboardComponent_ng_container_2_For_4_ng_template_9_Template", "DashboardComponent_ng_container_2_For_4_ng_template_11_Template", "DashboardComponent_ng_container_2_For_4_ng_template_13_Template", "tmp_17_0", "streamType", "StreamType", "RecentlyUpdated", "NewlyAdded", "SmartFilter", "\u0275\u0275elementContainerStart", "DashboardComponent_ng_container_2_Conditional_1_Template", "\u0275\u0275repeaterCreate", "DashboardComponent_ng_container_2_For_4_Template", "_forTrack0", "\u0275\u0275element", "tmp_2_0", "libraries$", "\u0275\u0275repeater", "streams", "isLoadingDashboard", "streamCount", "streamsLoaded", "DashboardComponent", "constructor", "destroyRef", "inject", "DestroyRef", "filterUtilityService", "FilterUtilitiesService", "metadataService", "MetadataService", "recommendationService", "RecommendationService", "AccountService", "libraryService", "LibraryService", "seriesService", "SeriesService", "router", "Router", "titleService", "Title", "ImageService", "messageHub", "MessageHubService", "cdRef", "ChangeDetectorRef", "dashboardService", "DashboardService", "scrobblingService", "ScrobblingService", "toastr", "ToastrService", "readerService", "ReaderService", "getLibraries", "pipe", "take", "takeUntilDestroyed", "refreshStreams$", "Subject", "refreshStreamsFromDashboardUpdate$", "loadRecentlyAdded$", "ReplaySubject", "loadDashboard", "debounceTime", "tap", "subscribe", "throttleTime", "messages$", "res", "event", "EVENTS", "DashboardUpdate", "next", "SeriesAdded", "SeriesRemoved", "ScanSeries", "hasTokenExpired", "ScrobbleProvider", "AniList", "hasExpired", "error", "translate", "markForCheck", "ngOnInit", "setTitle", "getDashboardStreams", "forEach", "s", "getOnDeck", "map", "d", "result", "increment", "shareReplay", "bufferSize", "refCount", "getRecentlyAdded", "getRecentlyUpdatedSeries", "decodeFilter", "smartFilterEncoded", "switchMap", "filter", "getAllSeriesV2", "QueryContext", "Dashboard", "getAllGenres", "genres", "Math", "floor", "random", "getMoreIn", "p", "streamId", "onDeck", "index", "findIndex", "__spreadValues", "item", "__async", "navigate", "getCurrentChapter", "chapter", "readChapter", "stream", "navigateByUrl", "params", "createSeriesV2Filter", "sortOptions", "sortField", "SortField", "LastChapterAdded", "isAscending", "applyFilterWithParams", "statements", "push", "field", "FilterField", "ReadProgress", "comparison", "FilterComparison", "GreaterThan", "value", "NotEqual", "Created", "Genres", "MustContains", "selectors", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "DashboardComponent_ng_container_2_Template", "SideNavCompanionBarComponent", "RouterLink", "CarouselReelComponent", "SeriesCardComponent", "CardItemComponent", "AsyncPipe", "TranslocoDirective", "NgTemplateOutlet", "LoadingComponent", "styles", "changeDetection", "routes", "path", "component", "DashboardComponent"] }