diff --git a/frontend/src/pages/Discover.tsx b/frontend/src/pages/Discover.tsx index 8431fc9..3444fb5 100644 --- a/frontend/src/pages/Discover.tsx +++ b/frontend/src/pages/Discover.tsx @@ -1,9 +1,9 @@ -import { useState, useCallback } from 'react'; +import { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { discoveryService, DiscoveryPodcast } from '../services/discoveryService'; import { podcastService } from '../services/podcastService'; import Header from '../components/Header'; -import { Search, Plus, Loader } from 'lucide-react'; +import { Search, Plus, Loader, Rss } from 'lucide-react'; import { authService } from '../services/authService'; export default function Discover() { @@ -12,6 +12,10 @@ export default function Discover() { const [searchQuery, setSearchQuery] = useState(''); const [selectedTab, setSelectedTab] = useState<'search' | 'trending'>('trending'); const [subscribingId, setSubscribingId] = useState(null); + const [rssUrl, setRssUrl] = useState(''); + const [rssLoading, setRssLoading] = useState(false); + const [rssError, setRssError] = useState(null); + const [rssSuccess, setRssSuccess] = useState(null); // Load user useState(() => { @@ -69,6 +73,24 @@ export default function Discover() { } }; + const handleRssSubscribe = async (e: React.FormEvent) => { + e.preventDefault(); + if (!rssUrl.trim()) return; + setRssLoading(true); + setRssError(null); + setRssSuccess(null); + try { + const result = await podcastService.subscribe(rssUrl.trim()); + setRssSuccess(`"${result.podcast.title}" ajouté à vos abonnements !`); + setRssUrl(''); + queryClient.invalidateQueries({ queryKey: ['podcasts', 'subscriptions'] }); + } catch (error: any) { + setRssError(error.response?.data?.message || 'Impossible d\'ajouter ce podcast'); + } finally { + setRssLoading(false); + } + }; + const handleLogout = async () => { try { await authService.logout(); @@ -106,6 +128,33 @@ export default function Discover() { + {/* RSS URL Section */} +
+
+ +

Ajouter via URL RSS

+
+
+ { setRssUrl(e.target.value); setRssError(null); setRssSuccess(null); }} + className="flex-1 px-4 py-2.5 rounded-xl border border-light-200 bg-white focus:border-blue-500 focus:ring-1 focus:ring-blue-500 transition-colors" + /> + +
+ {rssError &&

{rssError}

} + {rssSuccess &&

{rssSuccess}

} +
+ {/* Tabs */}