Prep for Hotfix (#2362)
This commit is contained in:
parent
0cf760ecd3
commit
30f1cd20a0
11 changed files with 252 additions and 72 deletions
|
@ -1,4 +1,4 @@
|
|||
import {Component, DestroyRef, HostListener, inject, Inject, OnInit} from '@angular/core';
|
||||
import {ChangeDetectorRef, Component, DestroyRef, HostListener, inject, Inject, OnInit} from '@angular/core';
|
||||
import {NavigationStart, Router, RouterOutlet} from '@angular/router';
|
||||
import {map, shareReplay, take} from 'rxjs/operators';
|
||||
import { AccountService } from './_services/account.service';
|
||||
|
@ -26,8 +26,10 @@ export class AppComponent implements OnInit {
|
|||
|
||||
private readonly destroyRef = inject(DestroyRef);
|
||||
private readonly offcanvas = inject(NgbOffcanvas);
|
||||
public readonly navService = inject(NavService);
|
||||
public readonly cdRef = inject(ChangeDetectorRef);
|
||||
|
||||
constructor(private accountService: AccountService, public navService: NavService,
|
||||
constructor(private accountService: AccountService,
|
||||
private libraryService: LibraryService,
|
||||
private router: Router, private ngbModal: NgbModal, ratingConfig: NgbRatingConfig,
|
||||
@Inject(DOCUMENT) private document: Document, private themeService: ThemeService) {
|
||||
|
@ -88,7 +90,7 @@ export class AppComponent implements OnInit {
|
|||
if (user) {
|
||||
// Bootstrap anything that's needed
|
||||
this.themeService.getThemes().subscribe();
|
||||
this.libraryService.getLibraryNames().pipe(take(1), shareReplay()).subscribe();
|
||||
this.libraryService.getLibraryNames().pipe(take(1), shareReplay({refCount: true, bufferSize: 1})).subscribe();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,37 +121,37 @@ export class MetadataFilterComponent implements OnInit {
|
|||
this.loadFromPresetsAndSetup();
|
||||
}
|
||||
|
||||
loadSavedFilter(event: Select2UpdateEvent<any>) {
|
||||
// Load the filter from the backend and update the screen
|
||||
if (event.value === undefined || typeof(event.value) === 'string') return;
|
||||
const smartFilter = event.value as SmartFilter;
|
||||
this.filterV2 = this.filterUtilitiesService.decodeSeriesFilter(smartFilter.filter);
|
||||
this.cdRef.markForCheck();
|
||||
console.log('update event: ', event);
|
||||
}
|
||||
|
||||
createFilterValue(event: Select2AutoCreateEvent<any>) {
|
||||
// Create a new name and filter
|
||||
if (!this.filterV2) return;
|
||||
this.filterV2.name = event.value;
|
||||
this.filterService.saveFilter(this.filterV2).subscribe(() => {
|
||||
|
||||
const item = {
|
||||
value: {
|
||||
filter: this.filterUtilitiesService.encodeSeriesFilter(this.filterV2!),
|
||||
name: event.value,
|
||||
} as SmartFilter,
|
||||
label: event.value
|
||||
};
|
||||
this.smartFilters.push(item);
|
||||
this.sortGroup.get('name')?.setValue(item);
|
||||
this.cdRef.markForCheck();
|
||||
this.toastr.success(translate('toasts.smart-filter-updated'));
|
||||
this.apply();
|
||||
});
|
||||
|
||||
console.log('create event: ', event);
|
||||
}
|
||||
// loadSavedFilter(event: Select2UpdateEvent<any>) {
|
||||
// // Load the filter from the backend and update the screen
|
||||
// if (event.value === undefined || typeof(event.value) === 'string') return;
|
||||
// const smartFilter = event.value as SmartFilter;
|
||||
// this.filterV2 = this.filterUtilitiesService.decodeSeriesFilter(smartFilter.filter);
|
||||
// this.cdRef.markForCheck();
|
||||
// console.log('update event: ', event);
|
||||
// }
|
||||
//
|
||||
// createFilterValue(event: Select2AutoCreateEvent<any>) {
|
||||
// // Create a new name and filter
|
||||
// if (!this.filterV2) return;
|
||||
// this.filterV2.name = event.value;
|
||||
// this.filterService.saveFilter(this.filterV2).subscribe(() => {
|
||||
//
|
||||
// const item = {
|
||||
// value: {
|
||||
// filter: this.filterUtilitiesService.encodeSeriesFilter(this.filterV2!),
|
||||
// name: event.value,
|
||||
// } as SmartFilter,
|
||||
// label: event.value
|
||||
// };
|
||||
// this.smartFilters.push(item);
|
||||
// this.sortGroup.get('name')?.setValue(item);
|
||||
// this.cdRef.markForCheck();
|
||||
// this.toastr.success(translate('toasts.smart-filter-updated'));
|
||||
// this.apply();
|
||||
// });
|
||||
//
|
||||
// console.log('create event: ', event);
|
||||
// }
|
||||
|
||||
|
||||
close() {
|
||||
|
|
|
@ -209,9 +209,9 @@ export class FilterUtilitiesService {
|
|||
}
|
||||
|
||||
decodeFilterStatements(encodedStatements: string): FilterStatement[] {
|
||||
const statementStrings = decodeURIComponent(encodedStatements).split(',');
|
||||
const statementStrings = decodeURIComponent(encodedStatements).split(',').map(s => decodeURIComponent(s));
|
||||
return statementStrings.map(statementString => {
|
||||
const parts = statementString.split('&');
|
||||
const parts = statementString.split(',');
|
||||
if (parts === null || parts.length < 3) return null;
|
||||
|
||||
const comparisonStartToken = parts.find(part => part.startsWith('comparison='));
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<ng-container [ngSwitch]="navStream.streamType">
|
||||
<ng-container *ngSwitchCase="SideNavStreamType.Library">
|
||||
<app-side-nav-item [link]="'/library/' + navStream.libraryId + '/'"
|
||||
[icon]="getLibraryTypeIcon(navStream.library!.type)" [imageUrl]="getLibraryImage(navStream.library!)" [title]="navStream.name" [comparisonMethod]="'startsWith'">
|
||||
[icon]="getLibraryTypeIcon(navStream.library!.type)" [imageUrl]="getLibraryImage(navStream.library!)" [title]="navStream.library!.name" [comparisonMethod]="'startsWith'">
|
||||
<ng-container actions>
|
||||
<app-card-actionables [actions]="actions" [labelBy]="navStream.name" iconClass="fa-ellipsis-v"
|
||||
(actionHandler)="performAction($event, navStream.library!)"></app-card-actionables>
|
||||
|
|
|
@ -8,7 +8,7 @@ import {
|
|||
} from '@angular/core';
|
||||
import { NavigationEnd, Router } from '@angular/router';
|
||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||
import {distinctUntilChanged, filter, map, shareReplay, take, tap} from 'rxjs/operators';
|
||||
import {distinctUntilChanged, filter, map, take, tap} from 'rxjs/operators';
|
||||
import { ImportCblModalComponent } from 'src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component';
|
||||
import { ImageService } from 'src/app/_services/image.service';
|
||||
import { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';
|
||||
|
@ -17,7 +17,6 @@ import { Library, LibraryType } from '../../../_models/library';
|
|||
import { AccountService } from '../../../_services/account.service';
|
||||
import { Action, ActionFactoryService, ActionItem } from '../../../_services/action-factory.service';
|
||||
import { ActionService } from '../../../_services/action.service';
|
||||
import { LibraryService } from '../../../_services/library.service';
|
||||
import { NavService } from '../../../_services/nav.service';
|
||||
import {takeUntilDestroyed} from "@angular/core/rxjs-interop";
|
||||
import {BehaviorSubject, merge, Observable, of, ReplaySubject, startWith, switchMap} from "rxjs";
|
||||
|
@ -56,7 +55,18 @@ export class SideNavComponent implements OnInit {
|
|||
}
|
||||
showAll: boolean = false;
|
||||
totalSize = 0;
|
||||
|
||||
protected readonly SideNavStreamType = SideNavStreamType;
|
||||
private readonly router = inject(Router);
|
||||
private readonly utilityService = inject(UtilityService);
|
||||
private readonly messageHub = inject(MessageHubService);
|
||||
private readonly actionService = inject(ActionService);
|
||||
public readonly navService = inject(NavService);
|
||||
private readonly cdRef = inject(ChangeDetectorRef);
|
||||
private readonly ngbModal = inject(NgbModal);
|
||||
private readonly imageService = inject(ImageService);
|
||||
public readonly accountService = inject(AccountService);
|
||||
|
||||
|
||||
private showAllSubject = new BehaviorSubject<boolean>(false);
|
||||
showAll$ = this.showAllSubject.asObservable();
|
||||
|
@ -111,25 +121,22 @@ export class SideNavComponent implements OnInit {
|
|||
takeUntilDestroyed(this.destroyRef),
|
||||
);
|
||||
|
||||
collapseSideNavOnMobileNav$ = this.router.events.pipe(
|
||||
filter(event => event instanceof NavigationEnd),
|
||||
takeUntilDestroyed(this.destroyRef),
|
||||
map(evt => evt as NavigationEnd),
|
||||
filter(() => this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet),
|
||||
switchMap(() => this.navService.sideNavCollapsed$),
|
||||
take(1),
|
||||
filter(collapsed => !collapsed)
|
||||
);
|
||||
|
||||
constructor(
|
||||
public utilityService: UtilityService, private messageHub: MessageHubService,
|
||||
private actionService: ActionService,
|
||||
public navService: NavService, private router: Router, private readonly cdRef: ChangeDetectorRef,
|
||||
private ngbModal: NgbModal, private imageService: ImageService, public readonly accountService: AccountService) {
|
||||
|
||||
this.router.events.pipe(
|
||||
filter(event => event instanceof NavigationEnd),
|
||||
takeUntilDestroyed(this.destroyRef),
|
||||
map(evt => evt as NavigationEnd),
|
||||
filter(() => this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet),
|
||||
switchMap(() => this.navService.sideNavCollapsed$),
|
||||
take(1),
|
||||
filter(collapsed => !collapsed)
|
||||
).subscribe(() => {
|
||||
constructor() {
|
||||
this.collapseSideNavOnMobileNav$.subscribe(() => {
|
||||
this.navService.toggleSideNav();
|
||||
this.cdRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue