feat(genre): separate persistence for Home and Favorites contexts

- Refactor genreFilterStore to support multiple contexts
- Each context (home, favorites) has independent selection state
- Separate localStorage keys: qbz_genre_filter_home, qbz_genre_filter_favorites
- GenreFilterButton/Popup accept context prop
- FavoritesView uses 'favorites' context
This commit is contained in:
vicrodh committed 2026-02-02 09:55:08 -06:00
1 parent 65b42295e9
commit 2c886fae7a
4 files changed
+164 -98

No files matched your search

@@ -19,10 +19,13 @@
import GenreFilterButton from '../GenreFilterButton.svelte';
import {
hasActiveFilter as hasGenreFilter,
getSelectedGenreNames
getSelectedGenreNames,
type GenreFilterContext
} from '$lib/stores/genreFilterStore';
import type { FavoritesPreferences, QobuzAlbum } from '$lib/types';
const GENRE_CONTEXT: GenreFilterContext = 'favorites';
interface FavoriteAlbum {
id: string;
title: string;
@@ -415,8 +418,8 @@
let albums = favoriteAlbums;
// Filter by genre
const selectedGenreNames = getSelectedGenreNames();
// Filter by genre (using favorites context)
const selectedGenreNames = getSelectedGenreNames(GENRE_CONTEXT);
if (selectedGenreNames.length > 0) {
albums = albums.filter(a =>
a.genre && selectedGenreNames.some(genreName =>
@@ -1252,7 +1255,7 @@
<div class="toolbar">
{#if activeTab === 'albums'}
<div class="toolbar-controls">
<GenreFilterButton onFilterChange={handleGenreFilterChange} />
<GenreFilterButton context={GENRE_CONTEXT} onFilterChange={handleGenreFilterChange} />
<div class="dropdown-container">
<button class="control-btn" onclick={() => (showAlbumGroupMenu = !showAlbumGroupMenu)}>
<span>