feat(filters+nav): author navigation end-to-end — arrays on every media response, deep-linkable bookshelf filters, clickable authors
Completes the A2c acceptance scenario: click an author on a book detail page -> land on the bookshelf filtered to everything that author wrote (including their share of co-authored books). - Media detail + unscoped list resolved maps expose subtitle, explicit, authors, publishers (the library-scoped raw branch and the search endpoint already did — raw rows follow the SELECT). - SearchMediaItemsUnified SELECT carries the new columns; the search endpoint serializes the row directly, so clients get them there too. - book_detail.templ renders each author as a link to /bookshelf?author_filter=<name>. - Bookshelf honors filter params in the URL on load (author_filter, series_filter, genre_filter, publisher_filter, tags_filter, narrator_filter, language_filter): pre-fills the form, applies it to the first grid load. Comma-joined values are multi-select via the server-side string_to_array split. Filtered views are shareable. Pins widened: search rows (+7 keys), resolved keys (+4); changelog entries in docs/contract_pins.md. Android follow-up plan written to ~/.opencode/plan/bookhoard-app-v2-compat.md.
This commit is contained in:
1 parent
f94e7472b4
commit
7537063cb7
8 files changed
+851
-728
No files matched your search
@@ -68,7 +68,13 @@ templ BookDetail(user User, book handlers.MediaDetail, errorMessage string, tomb
|
||||
}
|
||||
if len(book.Authors) > 0 {
|
||||
<h2 class="text-lg md:text-xl mb-5" style="color: var(--text-secondary)">
|
||||
by { strings.Join(book.Authors, ", ") }
|
||||
by
|
||||
for i, authorName := range book.Authors {
|
||||
if i > 0 {
|
||||
<span>, </span>
|
||||
}
|
||||
<a href={ "/bookshelf?author_filter=" + url.QueryEscape(authorName) } class="hover:underline" style="color: var(--text-secondary);">{ authorName }</a>
|
||||
}
|
||||
</h2>
|
||||
} else if book.Author.Valid && book.Author.String != "" {
|
||||
<h2 class="text-lg md:text-xl mb-5" style="color: var(--text-secondary)">
|
||||
|
||||
+744
-715
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user