mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 07:15:47 +00:00
b9b8f3fc15
- AlbumTrackList: extract TrackRow as React.memo, selection state moved to
selectionStore (Zustand) for O(1) re-renders per toggle; Ctrl/Cmd+Click
enters select mode; drag selected tracks as {type:'songs'} payload;
selection clears on outside click or song-list change
- QueuePanel: handle 'songs' multi-track drop type; whitelist drag types to
suppress drop feedback for non-queue drags (lyrics grip etc.)
- AlbumDetail + PlaylistDetail: filter/sort toolbar (title/artist, natural
order); disc grouping bypassed when sorted; playlist reorder DnD disabled
while filter active
- useTracklistColumns: 'known' field auto-shows newly added columns for
existing users
- PlayerBar: mute/unmute restores previous volume via premuteVolumeRef
instead of hardcoded 0.7
- Settings/Input: reset buttons restyled as RotateCcw icon above card,
matching HomeCustomizer layout
- i18n: filterSongs, sortNatural, sortByTitle, sortByArtist keys across
all 7 locales
- components.css: album-card-title/artist nowrap to keep playlist grid
cards uniform height
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
14 lines
431 B
TypeScript
14 lines
431 B
TypeScript
import { create } from 'zustand';
|
|
|
|
interface SelectionState {
|
|
selectedIds: Set<string>;
|
|
setSelectedIds: (update: (prev: Set<string>) => Set<string>) => void;
|
|
clearAll: () => void;
|
|
}
|
|
|
|
export const useSelectionStore = create<SelectionState>((set) => ({
|
|
selectedIds: new Set<string>(),
|
|
setSelectedIds: (update) => set((s) => ({ selectedIds: update(s.selectedIds) })),
|
|
clearAll: () => set({ selectedIds: new Set() }),
|
|
}));
|