{"version":3,"file":"996.326e14cf5cfde60d.js","mappings":"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","names":["ToggleService","constructor","router","this","toggleState","toggleStateSource","ReplaySubject","toggleState$","asObservable","events","pipe","filter","event","NavigationStart","subscribe","next","toggle","take","state","set","t","i0","i1","_angular_core__WEBPACK_IMPORTED_MODULE_4__","Yz7","factory","ɵfac","providedIn","t_r1","DashboardComponent_ng_container_1_ng_container_1_ng_container_1_div_1_div_1_Template","DashboardComponent_ng_container_1_ng_container_1_ng_container_1_div_1_div_2_Template","isAdmin_r12","DashboardComponent_ng_container_1_ng_container_1_ng_container_1_div_1_Template","ctx_r10","isAdmin$","DashboardComponent_ng_container_1_ng_container_1_ng_container_1_Template","libraries_r9","length","ctx_r2","isLoading","$event","_r19","ctx_r18","reloadInProgress","ctx_r20","item_r17","libraryId","ctx_r4","item_r21","_r23","$implicit","ctx_r22","handleRecentlyAddedChapterClick","seriesName","ctx_r6","imageService","getSeriesCoverImage","seriesId","count","_r26","ctx_r25","loadRecentlyAddedSeries","item_r24","ctx_r8","DashboardComponent_ng_container_1_ng_container_1_Template","_r28","ctx_r27","handleSectionClick","DashboardComponent_ng_container_1_ng_template_4_Template","ctx_r29","DashboardComponent_ng_container_1_ng_template_7_Template","ctx_r30","DashboardComponent_ng_container_1_ng_template_10_Template","ctx_r0","libraries$","inProgress","recentlyUpdatedSeries","recentlyAddedSeries","DashboardComponent","accountService","libraryService","seriesService","titleService","messageHub","cdRef","of","loadRecentlyAdded$","destroyRef","inject","DestroyRef","filterUtilityService","FilterUtilitiesService","messages$","takeUntilDestroyed","res","EVENTS","SeriesAdded","getSeries","payload","series","s","id","markForCheck","SeriesRemoved","seriesRemovedEvent","item","ScanSeries","currentUser$","map","user","hasAdminRole","shareReplay","debounceTime","loadRecentlyUpdated","ngOnInit","setTitle","getLibraries","tap","libs","reloadSeries","loadOnDeck","api","getOnDeck","updatedSeries","result","getRecentlyAdded","createSeriesV2Filter","statements","push","field","FilterField","Libraries","value","comparison","FilterComparison","Equal","getRecentlyUpdatedSeries","group","navigate","sectionTitle","toLowerCase","params","sortOptions","sortField","SortField","LastChapterAdded","isAscending","applyFilterWithParams","ReadProgress","GreaterThan","LessThan","Created","removeFromArray","arr","element","index","indexOf","splice","i2","i3","i4","i5","i6","i7","core","Xpm","selectors","inputs","standalone","features","decls","vars","consts","template","rf","ctx","DashboardComponent_ng_container_1_Template","SideNavCompanionBarComponent","NgIf","RouterLink","CarouselReelComponent","SeriesCardComponent","CardItemComponent","AsyncPipe","TranslocoDirective","changeDetection","routes","path","runGuardsAndResolvers","canActivate","AuthGuard","component","DashboardRoutingModule","oAB","cJS","RouterModule","forChild","DashboardModule","CommonModule","TranslocoModule","_r5","openExtrasDrawer","isExtrasOpen","_r8","ctx_r7","toggleService","ctx_r3","filterActive","filterOpen","SideNavCompanionBarComponent_ng_container_0_button_8_Template","SideNavCompanionBarComponent_ng_container_0_button_9_Template","hasExtras","hasFilter","navService","utilityService","offcanvasService","EventEmitter","isFilterOpen","sideNavCollapsed$","sideNavCollapsed","getActiveBreakpoint","Breakpoint","Tablet","emit","toggleFilter","undefined","extraDrawer","drawerRef","open","position","scroll","closed","dismissed","_angular_core__WEBPACK_IMPORTED_MODULE_1__","outputs","ngContentSelectors","_c1","SideNavCompanionBarComponent_ng_container_0_Template","NgbTooltip","styles","auditTime","duration","scheduler","asyncScheduler","audit","durationSelector","operate","source","subscriber","hasValue","lastValue","durationSubscriber","isComplete","endDuration","unsubscribe","complete","cleanupDuration","createOperatorSubscriber","innerFrom","timer"],"sourceRoot":"webpack:///","sources":["./src/app/_services/toggle.service.ts","./src/app/dashboard/_components/dashboard.component.html","./src/app/dashboard/_components/dashboard.component.ts","./src/app/dashboard/dashboard-routing.module.ts","./src/app/dashboard/dashboard.module.ts","./src/app/sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component.html","./src/app/sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component.ts","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { filter, ReplaySubject, take } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToggleService {\n\n toggleState: boolean = false;\n\n\n private toggleStateSource: ReplaySubject = new ReplaySubject(1);\n public toggleState$ = this.toggleStateSource.asObservable();\n\n constructor(router: Router) {\n router.events\n .pipe(filter(event => event instanceof NavigationStart))\n .subscribe((event) => {\n this.toggleState = false;\n this.toggleStateSource.next(this.toggleState);\n });\n this.toggleStateSource.next(false);\n }\n\n toggle() {\n this.toggleState = !this.toggleState;\n this.toggleStateSource.pipe(take(1)).subscribe(state => {\n this.toggleState = !state;\n this.toggleStateSource.next(this.toggleState);\n });\n \n }\n\n set(state: boolean) {\n this.toggleState = state;\n this.toggleStateSource.next(state);\n }\n}\n","\n\n\n \n \n
\n
\n

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

\n
\n
\n

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

\n
\n
\n
\n
\n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input, OnInit} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\nimport {Router, RouterLink} from '@angular/router';\nimport {Observable, of, ReplaySubject} from 'rxjs';\nimport {debounceTime, map, shareReplay, take, tap} from 'rxjs/operators';\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\nimport {SeriesAddedEvent} from 'src/app/_models/events/series-added-event';\nimport {SeriesRemovedEvent} from 'src/app/_models/events/series-removed-event';\nimport {Library} from 'src/app/_models/library';\nimport {RecentlyAddedItem} from 'src/app/_models/recently-added-item';\nimport {Series} from 'src/app/_models/series';\nimport {SortField} from 'src/app/_models/metadata/series-filter';\nimport {SeriesGroup} from 'src/app/_models/series-group';\nimport {AccountService} from 'src/app/_services/account.service';\nimport {ImageService} from 'src/app/_services/image.service';\nimport {LibraryService} from 'src/app/_services/library.service';\nimport {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service';\nimport {SeriesService} from 'src/app/_services/series.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CardItemComponent} from '../../cards/card-item/card-item.component';\nimport {SeriesCardComponent} from '../../cards/series-card/series-card.component';\nimport {CarouselReelComponent} from '../../carousel/_components/carousel-reel/carousel-reel.component';\nimport {AsyncPipe, NgIf} from '@angular/common';\nimport {\n SideNavCompanionBarComponent\n} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';\nimport {TranslocoDirective} from \"@ngneat/transloco\";\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\n\n@Component({\n selector: 'app-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [SideNavCompanionBarComponent, NgIf, RouterLink, CarouselReelComponent, SeriesCardComponent, CardItemComponent, AsyncPipe, TranslocoDirective]\n})\nexport class DashboardComponent implements OnInit {\n\n /**\n * By default, 0, but if non-zero, will limit all API calls to library id\n */\n @Input() libraryId: number = 0;\n\n libraries$: Observable = of([]);\n isLoading = true;\n\n isAdmin$: Observable = of(false);\n\n recentlyUpdatedSeries: SeriesGroup[] = [];\n inProgress: Series[] = [];\n recentlyAddedSeries: Series[] = [];\n\n /**\n * We use this Replay subject to slow the amount of times we reload the UI\n */\n private loadRecentlyAdded$: ReplaySubject = new ReplaySubject();\n private readonly destroyRef = inject(DestroyRef);\n private readonly filterUtilityService = inject(FilterUtilitiesService);\n\n constructor(public accountService: AccountService, private libraryService: LibraryService,\n private seriesService: SeriesService, private router: Router,\n private titleService: Title, public imageService: ImageService,\n private messageHub: MessageHubService, private readonly cdRef: ChangeDetectorRef) {\n\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\n if (res.event === EVENTS.SeriesAdded) {\n const seriesAddedEvent = res.payload as SeriesAddedEvent;\n\n\n this.seriesService.getSeries(seriesAddedEvent.seriesId).subscribe(series => {\n if (this.recentlyAddedSeries.filter(s => s.id === series.id).length > 0) return;\n this.recentlyAddedSeries = [series, ...this.recentlyAddedSeries];\n this.cdRef.markForCheck();\n });\n } else if (res.event === EVENTS.SeriesRemoved) {\n const seriesRemovedEvent = res.payload as SeriesRemovedEvent;\n\n this.inProgress = this.inProgress.filter(item => item.id != seriesRemovedEvent.seriesId);\n this.recentlyAddedSeries = this.recentlyAddedSeries.filter(item => item.id != seriesRemovedEvent.seriesId);\n this.recentlyUpdatedSeries = this.recentlyUpdatedSeries.filter(item => item.seriesId != seriesRemovedEvent.seriesId);\n this.cdRef.markForCheck();\n } else if (res.event === EVENTS.ScanSeries) {\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.\n this.loadRecentlyAdded$.next();\n }\n });\n\n this.isAdmin$ = this.accountService.currentUser$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(user => (user && this.accountService.hasAdminRole(user)) || false),\n shareReplay()\n );\n\n this.loadRecentlyAdded$.pipe(debounceTime(1000), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.loadRecentlyUpdated();\n this.loadRecentlyAddedSeries();\n this.cdRef.markForCheck();\n });\n }\n\n ngOnInit(): void {\n this.titleService.setTitle('Kavita - Dashboard');\n this.isLoading = true;\n this.cdRef.markForCheck();\n\n this.libraries$ = this.libraryService.getLibraries().pipe(take(1), takeUntilDestroyed(this.destroyRef), tap((libs) => {\n this.isLoading = false;\n this.cdRef.markForCheck();\n }));\n\n this.reloadSeries();\n }\n\n reloadSeries() {\n this.loadOnDeck();\n this.loadRecentlyUpdated();\n this.loadRecentlyAddedSeries();\n }\n\n reloadInProgress(series: Series | number) {\n this.loadOnDeck();\n }\n\n loadOnDeck() {\n let api = this.seriesService.getOnDeck(0, 1, 30);\n if (this.libraryId > 0) {\n api = this.seriesService.getOnDeck(this.libraryId, 1, 30);\n }\n api.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((updatedSeries) => {\n this.inProgress = updatedSeries.result;\n this.cdRef.markForCheck();\n });\n }\n\n loadRecentlyAddedSeries() {\n let api = this.seriesService.getRecentlyAdded(1, 30);\n if (this.libraryId > 0) {\n const filter = this.filterUtilityService.createSeriesV2Filter();\n filter.statements.push({field: FilterField.Libraries, value: this.libraryId + '', comparison: FilterComparison.Equal});\n api = this.seriesService.getRecentlyAdded(1, 30, filter);\n }\n api.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((updatedSeries) => {\n this.recentlyAddedSeries = updatedSeries.result;\n this.cdRef.markForCheck();\n });\n }\n\n\n loadRecentlyUpdated() {\n let api = this.seriesService.getRecentlyUpdatedSeries();\n if (this.libraryId > 0) {\n api = this.seriesService.getRecentlyUpdatedSeries();\n }\n api.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(updatedSeries => {\n this.recentlyUpdatedSeries = updatedSeries.filter(group => {\n if (this.libraryId === 0) return true;\n return group.libraryId === this.libraryId;\n });\n this.cdRef.markForCheck();\n });\n }\n\n handleRecentlyAddedChapterClick(item: RecentlyAddedItem) {\n this.router.navigate(['library', item.libraryId, 'series', item.seriesId]);\n }\n\n handleSectionClick(sectionTitle: string) {\n if (sectionTitle.toLowerCase() === 'recently updated series') {\n const params: any = {};\n params['page'] = 1;\n params['title'] = 'Recently Updated';\n const filter = this.filterUtilityService.createSeriesV2Filter();\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.LastChapterAdded;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params)\n } else if (sectionTitle.toLowerCase() === 'on deck') {\n const params: any = {};\n params['page'] = 1;\n params['title'] = 'On Deck';\n\n const filter = this.filterUtilityService.createSeriesV2Filter();\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.GreaterThan, value: '0'});\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.LessThan, value: '100'});\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.LastChapterAdded;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params)\n }else if (sectionTitle.toLowerCase() === 'newly added series') {\n const params: any = {};\n params['page'] = 1;\n params['title'] = 'Newly Added';\n const filter = this.filterUtilityService.createSeriesV2Filter();\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.Created;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params)\n }\n }\n\n removeFromArray(arr: Array, element: any) {\n const index = arr.indexOf(element);\n if (index >= 0) {\n arr.splice(index);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthGuard } from '../_guards/auth.guard';\nimport { DashboardComponent } from './_components/dashboard.component';\n\n\nconst routes: Routes = [\n {\n path: '',\n runGuardsAndResolvers: 'always',\n canActivate: [AuthGuard],\n component: DashboardComponent,\n }\n];\n\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class DashboardRoutingModule { }\n","\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DashboardRoutingModule } from './dashboard-routing.module';\n\n\nimport { DashboardComponent } from './_components/dashboard.component';\nimport {CardItemComponent} from \"../cards/card-item/card-item.component\";\nimport {SeriesCardComponent} from \"../cards/series-card/series-card.component\";\nimport {\n SideNavCompanionBarComponent\n} from \"../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component\";\nimport {TranslocoModule} from \"@ngneat/transloco\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n DashboardRoutingModule,\n CardItemComponent,\n SeriesCardComponent,\n SideNavCompanionBarComponent,\n DashboardComponent,\n TranslocoModule\n]\n})\nexport class DashboardModule { }\n","\n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n","import {\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n TemplateRef\n} from '@angular/core';\nimport {NgbOffcanvas, NgbTooltip} from '@ng-bootstrap/ng-bootstrap';\nimport { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service';\nimport { NavService } from 'src/app/_services/nav.service';\nimport { ToggleService } from 'src/app/_services/toggle.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CommonModule} from \"@angular/common\";\nimport {TranslocoDirective} from \"@ngneat/transloco\";\n\n/**\n * This should go on all pages which have the side nav present and is not Settings related.\n * Content inside [main] selector should not have any padding top or bottom, they are included in this component.\n */\n@Component({\n selector: 'app-side-nav-companion-bar',\n standalone: true,\n imports: [CommonModule, NgbTooltip, TranslocoDirective],\n templateUrl: './side-nav-companion-bar.component.html',\n styleUrls: ['./side-nav-companion-bar.component.scss']\n})\nexport class SideNavCompanionBarComponent implements OnInit {\n /**\n * If the page should show a filter\n */\n @Input() hasFilter: boolean = false;\n /**\n * If the page should show an extra section button\n */\n @Input() hasExtras: boolean = false;\n\n /**\n * This implies there is a filter in effect on the underlying page. Will show UI styles to imply this to the user.\n */\n @Input() filterActive: boolean = false;\n\n @Input() extraDrawer!: TemplateRef;\n\n\n @Output() filterOpen: EventEmitter = new EventEmitter();\n\n isFilterOpen = false;\n isExtrasOpen = false;\n\n private readonly destroyRef = inject(DestroyRef);\n\n constructor(private navService: NavService, private utilityService: UtilityService, public toggleService: ToggleService,\n private offcanvasService: NgbOffcanvas) {\n }\n\n ngOnInit(): void {\n // If user opens side nav while filter is open on mobile, then collapse filter (as it doesn't render well) TODO: Change this when we have new drawer\n this.navService.sideNavCollapsed$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(sideNavCollapsed => {\n if (this.isFilterOpen && sideNavCollapsed && this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet) {\n this.isFilterOpen = false;\n this.filterOpen.emit(this.isFilterOpen);\n }\n });\n }\n\n toggleFilter() {\n this.isFilterOpen = !this.isFilterOpen;\n this.filterOpen.emit(this.isFilterOpen);\n }\n\n openExtrasDrawer() {\n if (this.extraDrawer === undefined) return;\n\n this.isExtrasOpen = true;\n const drawerRef = this.offcanvasService.open(this.extraDrawer, {position: 'end', scroll: true});\n drawerRef.closed.subscribe(() => this.isExtrasOpen = false);\n drawerRef.dismissed.subscribe(() => this.isExtrasOpen = false);\n }\n\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nexport function auditTime(duration, scheduler = asyncScheduler) {\n return audit(() => timer(duration, scheduler));\n}\n","import { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function audit(durationSelector) {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue = null;\n let durationSubscriber = null;\n let isComplete = false;\n const endDuration = () => {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe((durationSubscriber = createOperatorSubscriber(subscriber, endDuration, cleanupDuration)));\n }\n }, () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }));\n });\n}\n"],"x_google_ignoreList":[7,8]}