From 03b56afc920f45bdc0e20e9bc72ca6d77868b1d9 Mon Sep 17 00:00:00 2001 From: kveld9 Date: Wed, 15 Apr 2026 15:26:56 -0300 Subject: [PATCH] bug fixes --- src/pages/AdvancedSearch.tsx | 6 +- src/pages/Favorites.tsx | 44 +++++++------- src/pages/PlaylistDetail.tsx | 113 ++++++++++------------------------- 3 files changed, 59 insertions(+), 104 deletions(-) diff --git a/src/pages/AdvancedSearch.tsx b/src/pages/AdvancedSearch.tsx index 00003609..8ee5c83c 100644 --- a/src/pages/AdvancedSearch.tsx +++ b/src/pages/AdvancedSearch.tsx @@ -36,9 +36,6 @@ export default function AdvancedSearch() { const qFromUrl = params.get('q') ?? ''; const navigate = useNavigate(); const psyDrag = useDragDrop(); - const total = results - ? results.artists.length + results.albums.length + results.songs.length - : 0; const { playTrack, openContextMenu } = usePlayerStore( useShallow(s => ({ @@ -61,6 +58,9 @@ export default function AdvancedSearch() { const [resultType, setResultType] = useState('all'); const [genres, setGenres] = useState([]); const [results, setResults] = useState(null); + const total = results + ? results.artists.length + results.albums.length + results.songs.length + : 0; const [loading, setLoading] = useState(false); const [hasSearched, setHasSearched] = useState(false); const [genreNote, setGenreNote] = useState(false); diff --git a/src/pages/Favorites.tsx b/src/pages/Favorites.tsx index fdc840ad..fa1bd8e0 100644 --- a/src/pages/Favorites.tsx +++ b/src/pages/Favorites.tsx @@ -472,6 +472,30 @@ export default function Favorites() { )} + {/* Column visibility picker */} +
+
+ + {pickerOpen && ( +
+
{t('albumDetail.columns')}
+ {FAV_COLUMNS.filter(c => !c.required).map(c => { + const label = c.i18nKey ? t(`albumDetail.${c.i18nKey}`) : c.key; + const isOn = colVisible.has(c.key); + return ( + + ); + })} +
+ )} +
+
+
{visibleCols.map((colDef, colIndex) => { @@ -551,26 +575,6 @@ export default function Favorites() { ); })}
-
- - {pickerOpen && ( -
-
{t('albumDetail.columns')}
- {FAV_COLUMNS.filter(c => !c.required).map(c => { - const label = c.i18nKey ? t(`albumDetail.${c.i18nKey}`) : c.key; - const isOn = colVisible.has(c.key); - return ( - - ); - })} -
- )} -
{visibleSongs.map((song, i) => { const track = songToTrack(song); diff --git a/src/pages/PlaylistDetail.tsx b/src/pages/PlaylistDetail.tsx index 69436b28..3d007254 100644 --- a/src/pages/PlaylistDetail.tsx +++ b/src/pages/PlaylistDetail.tsx @@ -385,11 +385,6 @@ export default function PlaylistDetail() { const [suggestions, setSuggestions] = useState([]); const [loadingSuggestions, setLoadingSuggestions] = useState(false); - // ── Column picker portal dropdown state ──────────────────────────────────── - const [pickerPos, setPickerPos] = useState<{ top: number; right: number } | null>(null); - const pickerBtnRef = useRef(null); - const pickerMenuRef = useRef(null); - // ── Column resize/visibility ────────────────────────────────────────────── const { colVisible, visibleCols, gridStyle, @@ -404,41 +399,6 @@ export default function PlaylistDetail() { if (!contextMenuOpen) setContextMenuSongId(null); }, [contextMenuOpen]); - // Click-outside handler for column picker portal dropdown - useEffect(() => { - if (!pickerOpen) return; - const handler = (e: MouseEvent) => { - const target = e.target as Node; - if ( - pickerBtnRef.current?.contains(target) || - pickerRef.current?.contains(target) || - pickerMenuRef.current?.contains(target) - ) { - return; - } - setPickerOpen(false); - }; - document.addEventListener('mousedown', handler); - return () => document.removeEventListener('mousedown', handler); - }, [pickerOpen, setPickerOpen]); - - // Update picker position on resize/scroll while open - useEffect(() => { - if (!pickerOpen) return; - const updatePos = () => { - if (pickerBtnRef.current) { - const rect = pickerBtnRef.current.getBoundingClientRect(); - setPickerPos({ top: rect.bottom + 4, right: window.innerWidth - rect.right }); - } - }; - window.addEventListener('resize', updatePos); - window.addEventListener('scroll', updatePos, true); - return () => { - window.removeEventListener('resize', updatePos); - window.removeEventListener('scroll', updatePos, true); - }; - }, [pickerOpen]); - // ── Load ───────────────────────────────────────────────────── const lastModified = usePlaylistStore(s => (id ? s.lastModified[id] : undefined)); @@ -1432,6 +1392,38 @@ export default function PlaylistDetail() { )} + {/* Column visibility picker */} +
+
+ + {pickerOpen && ( +
+
{t('albumDetail.columns')}
+ {PL_COLUMNS.filter(c => !c.required).map(c => { + const label = c.i18nKey ? t(`albumDetail.${c.i18nKey}`) : c.key; + const isOn = colVisible.has(c.key); + return ( + + ); + })} +
+ )} +
+
+ {/* Header */}
@@ -1543,47 +1535,6 @@ export default function PlaylistDetail() { ); })}
-
- - {pickerOpen && pickerPos && createPortal( -
-
{t('albumDetail.columns')}
- {PL_COLUMNS.filter(c => !c.required).map(c => { - const label = c.i18nKey ? t(`albumDetail.${c.i18nKey}`) : c.key; - const isOn = colVisible.has(c.key); - return ( - - ); - })} -
, - document.body - )} -
{songs.length === 0 && (