import { useEffect, useState } from 'react'; import { App as AntApp } from 'antd'; import { useNavigate } from 'react-router-dom'; import { MarketplaceAPI, MarketplaceAgent } from '../../api'; export function useMarketplacePageLogic() { const [list, setList] = useState([]); const [loading, setLoading] = useState(false); const [q, setQ] = useState(''); const navigate = useNavigate(); const { message } = AntApp.useApp(); const load = async () => { setLoading(true); try { setList(await MarketplaceAPI.list()); } finally { setLoading(false); } }; useEffect(() => { load(); }, []); const filtered = q ? list.filter( (a) => a.name.includes(q) || a.description?.includes(q) || (a.ownerName || '').includes(q) ) : list; const handleFork = async (a: MarketplaceAgent) => { try { const r = await MarketplaceAPI.fork(a.id); message.success(`已复制到「${r.name}」`); navigate(`/agents/${r.id}`); } catch (e: any) { message.error(e?.response?.data?.error ?? e?.message ?? '复制失败'); } }; const isImageUrl = (url: string) => url?.startsWith('http') || url?.startsWith('/'); return { list, loading, q, filtered, setQ, load, handleFork, isImageUrl, }; } export type MarketplacePageLogicOutput = ReturnType;