Fix: Fix Library selection wont show after server connected

This commit is contained in:
2025-12-06 15:20:10 +09:00
parent 06f4c0683a
commit fcbf534f5d
2 changed files with 14 additions and 8 deletions
+13 -7
View File
@@ -35,10 +35,12 @@ const ConnectionModal: React.FC<ConnectionModalProps> = ({ isOpen, onClose, onCo
const [selectedLibraryId, setSelectedLibraryId] = useState<string>(''); const [selectedLibraryId, setSelectedLibraryId] = useState<string>('');
const abortControllerRef = useRef<AbortController | null>(null); const abortControllerRef = useRef<AbortController | null>(null);
const prevIsOpenRef = useRef(isOpen);
// Reset state when opening // Reset state when opening
useEffect(() => { useEffect(() => {
if (isOpen) { // Only execute reset logic when modal opens (isOpen changes from false to true)
if (isOpen && !prevIsOpenRef.current) {
setError(null); setError(null);
setConnectedServerInfo(null); setConnectedServerInfo(null);
setLibraries([]); setLibraries([]);
@@ -54,12 +56,15 @@ const ConnectionModal: React.FC<ConnectionModalProps> = ({ isOpen, onClose, onCo
})); }));
} }
} }
return () => {
// Cleanup any pending request if modal closes // Cleanup when closing
if (!isOpen && prevIsOpenRef.current) {
if (abortControllerRef.current) { if (abortControllerRef.current) {
abortControllerRef.current.abort(); abortControllerRef.current.abort();
} }
}; }
prevIsOpenRef.current = isOpen;
}, [isOpen, initialSettings]); }, [isOpen, initialSettings]);
if (!isOpen) return null; if (!isOpen) return null;
@@ -139,10 +144,11 @@ const ConnectionModal: React.FC<ConnectionModalProps> = ({ isOpen, onClose, onCo
onShowMessage(`Successfully connected to ${info.name || 'Plex Server'}`); onShowMessage(`Successfully connected to ${info.name || 'Plex Server'}`);
const libs = info.libraries || []; const libs = info.libraries || [];
setLibraries(libs); const musicLibraries = libs.filter((lib) => lib.type === 'artist').sort((a, b) => a.title.localeCompare(b.title));
if (libs.length > 0) { setLibraries(musicLibraries);
if (musicLibraries.length > 0) {
const preferred = info.libraryName || formData.libraryName; const preferred = info.libraryName || formData.libraryName;
const defaultLib = libs.find(lib => lib.title === preferred) || libs[0]; const defaultLib = musicLibraries.find(lib => lib.title === preferred) || musicLibraries[0];
setSelectedLibraryId(defaultLib.id); setSelectedLibraryId(defaultLib.id);
setFormData(prev => ({ ...prev, libraryName: defaultLib.title })); setFormData(prev => ({ ...prev, libraryName: defaultLib.title }));
onConnectSuccess({ onConnectSuccess({
+1 -1
View File
@@ -38,7 +38,7 @@ const mapPlaylist = (item: any): Playlist => ({
const mapLibrary = (item: any): PlexLibrary => ({ const mapLibrary = (item: any): PlexLibrary => ({
id: item.id ?? item.title, id: item.id ?? item.title,
title: item.title ?? item.id, title: item.title ?? item.id,
type: item.type ?? 'artist', type: item.type || item.libraryType || item.library_type || item.section?.type || '',
}); });
// Helper function to map raw rules array to ReplacementRule[] // Helper function to map raw rules array to ReplacementRule[]