diff --git a/web/src/components/ManageFeedsModal.tsx b/web/src/components/ManageFeedsModal.tsx new file mode 100644 index 0000000..da874e8 --- /dev/null +++ b/web/src/components/ManageFeedsModal.tsx @@ -0,0 +1,125 @@ +import { useEffect, useState } from 'react'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { feedsApi, type Feed } from '../api/feeds'; + +interface ManageFeedsModalProps { + onClose: () => void; + /** Called when the currently selected feed is deleted. */ + onDeleted: (id: string) => void; +} + +function FeedRow({ feed, onDeleted }: { feed: Feed; onDeleted: (id: string) => void }) { + const qc = useQueryClient(); + const [editing, setEditing] = useState(false); + const [title, setTitle] = useState(feed.title); + + const rename = useMutation({ + mutationFn: (t: string) => feedsApi.update(feed.id, t), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ['feeds'] }); + setEditing(false); + }, + }); + const remove = useMutation({ + mutationFn: () => feedsApi.delete(feed.id), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ['feeds'] }); + qc.invalidateQueries({ queryKey: ['articles'] }); + onDeleted(feed.id); + }, + }); + + return ( +
{feed.title}
++ {feed.fetch_error ? `Erreur : ${feed.fetch_error}` : feed.url} +
+Aucun flux. Ajoutez-en un avec le bouton +.
+ )} +{user.email}
} + + setMenuOpen(false)} + > + Exporter en OPML + + +