- @if (book?.metadata!.seriesName) {
-
{{ book?.metadata!.seriesName }} #{{ book?.metadata!.seriesNumber }}
+ @if (book?.metadata?.seriesName) {
+
+ {{ book?.metadata?.seriesName }}
+ @if (book?.metadata?.seriesNumber) {
+ #{{ book?.metadata?.seriesNumber }}
+ }
+
}
{{ book?.metadata!.title }}
@@ -163,7 +168,16 @@
-
Publisher: {{ book?.metadata!.publisher || '-' }}
+
+ Publisher:
+ @if (book?.metadata?.publisher) {
+
+ {{ book?.metadata?.publisher }}
+
+ } @else {
+ -
+ }
+
Published: {{ book?.metadata!.publishedDate || '-' }}
Language: {{ book?.metadata!.language || '-' }}
ISBN 10: {{ book?.metadata!.isbn10 || '-' }}
@@ -311,12 +325,12 @@
@if (book.metadata!.description && book.metadata!.description.length > 100) {
}
diff --git a/booklore-ui/src/app/book/metadata/book-metadata-center/metadata-viewer/metadata-viewer.component.ts b/booklore-ui/src/app/book/metadata/book-metadata-center/metadata-viewer/metadata-viewer.component.ts
index b22c3733f..bde55c22c 100644
--- a/booklore-ui/src/app/book/metadata/book-metadata-center/metadata-viewer/metadata-viewer.component.ts
+++ b/booklore-ui/src/app/book/metadata/book-metadata-center/metadata-viewer/metadata-viewer.component.ts
@@ -374,47 +374,42 @@ export class MetadataViewerComponent implements OnInit, OnChanges {
}
goToAuthorBooks(author: string): void {
- if (this.metadataCenterViewMode === 'dialog') {
- this.dialogRef?.close();
- setTimeout(() => this.navigateToAuthorBooks(author), 200);
- } else {
- this.navigateToAuthorBooks(author);
- }
- }
-
- private navigateToAuthorBooks(author: string): void {
- this.router.navigate(['/all-books'], {
- queryParams: {
- view: 'grid',
- sort: 'title',
- direction: 'asc',
- sidebar: true,
- filter: `author:${author}`
- }
- });
+ this.handleMetadataClick('author', author);
}
goToCategory(category: string): void {
- if (this.metadataCenterViewMode === 'dialog') {
- this.dialogRef?.close();
- setTimeout(() => this.navigateToCategory(category), 200);
- } else {
- this.navigateToCategory(category);
- }
+ this.handleMetadataClick('category', category);
}
- private navigateToCategory(category: string): void {
+ goToSeries(seriesName: string): void {
+ this.handleMetadataClick('series', seriesName);
+ }
+
+ goToPublisher(publisher: string): void {
+ this.handleMetadataClick('publisher', publisher);
+ }
+
+ private navigateToFilteredBooks(filterKey: string, filterValue: string): void {
this.router.navigate(['/all-books'], {
queryParams: {
view: 'grid',
sort: 'title',
direction: 'asc',
sidebar: true,
- filter: `category:${category}`
+ filter: `${filterKey}:${filterValue}`
}
});
}
+ private handleMetadataClick(filterKey: string, filterValue: string): void {
+ if (this.metadataCenterViewMode === 'dialog') {
+ this.dialogRef?.close();
+ setTimeout(() => this.navigateToFilteredBooks(filterKey, filterValue), 200);
+ } else {
+ this.navigateToFilteredBooks(filterKey, filterValue);
+ }
+ }
+
getStatusSeverity(status: string): 'success' | 'secondary' | 'info' | 'warn' | 'danger' | undefined {
const normalized = status?.toUpperCase();
if (['UNREAD', 'PAUSED'].includes(normalized)) return 'secondary';