Render albums for artist

This commit is contained in:
Mikko Ahlroth 2024-08-26 22:13:48 +03:00
parent f4450206b6
commit 06cc60b61c
3 changed files with 28 additions and 5 deletions

View file

@ -46,11 +46,7 @@
font-size: 2rem; font-size: 2rem;
} }
#library-list { .library-item-grid {
height: 100%;
overflow-y: auto;
padding-bottom: 0;
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-auto-flow: dense; grid-auto-flow: dense;
@ -59,6 +55,11 @@
grid-auto-rows: min-content; grid-auto-rows: min-content;
gap: var(--double-margin); gap: var(--double-margin);
}
#library-list {
height: 100%;
overflow-y: auto;
padding: var(--double-margin); padding: var(--double-margin);
} }

View file

@ -272,6 +272,7 @@ pub fn library_view(
div( div(
[ [
attribute.id("library-list"), attribute.id("library-list"),
attribute.class("library-item-grid"),
event.on("scrollend", handle_scrollend), event.on("scrollend", handle_scrollend),
scroll_to.on(ScrollRequested), scroll_to.on(ScrollRequested),
], ],

View file

@ -1,10 +1,12 @@
//// A library view to a single artist's albums and non-album tracks. //// A library view to a single artist's albums and non-album tracks.
import elekf/library.{type Library} import elekf/library.{type Library}
import elekf/library/album_utils
import elekf/library/track.{type Track} import elekf/library/track.{type Track}
import elekf/library/track_utils import elekf/library/track_utils
import elekf/web/common import elekf/web/common
import elekf/web/components/library_view import elekf/web/components/library_view
import elekf/web/components/library_views/album_item
import elekf/web/components/library_views/track_item import elekf/web/components/library_views/track_item
import elekf/web/components/track_length import elekf/web/components/track_length
import elekf/web/library_item.{type LibraryItem} import elekf/web/library_item.{type LibraryItem}
@ -92,6 +94,18 @@ fn header_view(
track_length.short_delimiters, track_length.short_delimiters,
) )
let album_items =
set.fold(albums, [], fn(acc, album_id) {
case library.get_album(library, album_id) {
Ok(album) -> [#(album_id, album), ..acc]
Error(_) -> acc
}
})
|> list.sort(fn(a, b) { album_utils.sort_by_year(a.1, b.1) })
|> list.flat_map(fn(item) {
album_item.view(library, model.settings, item)
})
[ [
div([attribute.id("library-list-stats-header")], [ div([attribute.id("library-list-stats-header")], [
h1([], [text(artist.name)]), h1([], [text(artist.name)]),
@ -105,6 +119,13 @@ fn header_view(
), ),
]), ]),
]), ]),
div(
[
attribute.id("artist-albums-list"),
attribute.class("library-item-grid"),
],
album_items,
),
] ]
} }
Error(_) -> library_view.empty_header(model, library, filter, items) Error(_) -> library_view.empty_header(model, library, filter, items)