import { useCallback, useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { ArrowLeft, Link2, RefreshCw } from 'lucide-react'; import { toast } from 'sonner'; import { api } from '@/api'; import { Button } from '@/components/ui/button'; import BillModal from '@/components/BillModal'; import SubscriptionCatalogSection from '@/components/SubscriptionCatalogSection'; export default function SubscriptionCatalogPage() { const [catalogKey, setCatalogKey] = useState(0); const [subscriptions, setSubscriptions] = useState([]); const [categories, setCategories] = useState([]); const [modal, setModal] = useState(null); const refreshSubscriptions = useCallback(async () => { try { const [subscriptionData, categoryData] = await Promise.all([ api.subscriptions(), api.categories(), ]); setSubscriptions(subscriptionData?.subscriptions || []); setCategories(Array.isArray(categoryData) ? categoryData : []); } catch (err) { toast.error(err.message || 'Subscriptions could not be refreshed.'); } }, []); useEffect(() => { refreshSubscriptions(); }, [refreshSubscriptions]); function openBillEditor(billId) { const bill = subscriptions.find(item => item.id === billId) || { id: billId }; setModal({ bill }); } return (
Matching Tools
Link tracked subscriptions to known services and tune bank descriptors so future recommendations are more accurate.
This page improves matching, not discovery.
Recommendations on the Subscriptions page come from bank transactions. Use this catalog when a service needs a better descriptor or an existing bill should be linked to a known service.