[enhancement]: Support toggling Album/Track view for gneres (#591)

* [enhancement]: Support toggling Album/Track view for gneres

The _primary_ purpose of this PR is to enable viewing tracks OR albums for genres.
This has a few requirements:
1. Ability to set default route for genres, **except** when already on song/album page
2. Ability to toggle between album and genre view
3. Fixed refresh for genre ID

Additionally, there was some refactoring:
- Since the *-list-headers had very similar functions for search, export that as a hook instead

* also use hook for album artist

* support switching albumartist tracks/albums

* remove toggle on song/album list, simplify logic
This commit is contained in:
Kendall Garner 2024-04-20 06:14:31 +00:00 committed by GitHub
parent 595eba152a
commit ba531505af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 336 additions and 158 deletions

View file

@ -171,6 +171,11 @@ export enum BindingActions {
ZOOM_OUT = 'zoomOut',
}
export enum GenreTarget {
ALBUM = 'album',
TRACK = 'track',
}
export interface SettingsState {
discord: {
clientId: string;
@ -192,6 +197,7 @@ export interface SettingsState {
defaultFullPlaylist: boolean;
externalLinks: boolean;
followSystemTheme: boolean;
genreTarget: GenreTarget;
homeItems: SortableItem<HomeItem>[];
language: string;
passwordStore?: string;
@ -311,6 +317,7 @@ const initialState: SettingsState = {
defaultFullPlaylist: true,
externalLinks: true,
followSystemTheme: false,
genreTarget: GenreTarget.TRACK,
homeItems,
language: 'en',
passwordStore: undefined,
@ -604,6 +611,11 @@ export const useSettingsStore = create<SettingsSlice>()(
state.playback.mpvProperties.audioSampleRateHz = 0;
});
},
setGenreBehavior: (target: GenreTarget) => {
set((state) => {
state.general.genreTarget = target;
});
},
setHomeItems: (items: SortableItem<HomeItem>[]) => {
set((state) => {
state.general.homeItems = items;