import React, { useEffect, useState } from 'react'; import { MapPin, ExternalLink, CalendarPlus, Filter } from 'lucide-react'; import toast from 'react-hot-toast'; import { getRegionalPrograms, RegionalProgram, RegionalProgramsResponse, createPipelineEntry } from '../../api/client'; interface Props { projectId?: string; compact?: boolean; } const RegionalProgramsPanel: React.FC = ({ projectId, compact = false }) => { const [programs, setPrograms] = useState([]); const [voivodeships, setVoivodeships] = useState([]); const [bipLiveCount, setBipLiveCount] = useState(0); const [bipParserVoivodeships, setBipParserVoivodeships] = useState([]); const [selectedVoivodeship, setSelectedVoivodeship] = useState(''); const [loading, setLoading] = useState(true); const load = async (voivodeship?: string) => { try { const data: RegionalProgramsResponse = await getRegionalPrograms(voivodeship || undefined); setPrograms(data.programs || []); setVoivodeships(data.voivodeships || []); setBipLiveCount(data.bip_live_count ?? 0); setBipParserVoivodeships(data.bip_parser_voivodeships || []); } catch { toast.error('Nie udało się załadować katalogu RPO'); } finally { setLoading(false); } }; useEffect(() => { setLoading(true); load(selectedVoivodeship || undefined); }, [selectedVoivodeship]); const handleAddToPipeline = async (prog: RegionalProgram) => { if (!projectId) { toast.error('Wybierz projekt, aby dodać do pipeline'); return; } try { await createPipelineEntry(projectId, { grant_name: prog.name, grant_source_id: prog.id, operator: prog.operator, status: 'planned', deadline_alert: true, notes: `RPO ${prog.voivodeship} — katalog regionalny`, }); toast.success(`„${prog.program}” dodano do pipeline`); } catch { toast.error('Błąd dodawania do pipeline'); } }; if (loading) { return

Ładowanie programów RPO…

; } return (
Katalog RPO wojewódzkich ({programs.length}) {bipLiveCount > 0 && ( BIP live: {bipLiveCount} )}
{bipParserVoivodeships.length > 0 && ( Parser BIP: {bipParserVoivodeships.join(', ')} )}
{programs.map((prog) => (
{prog.name}
{prog.operator} • {prog.voivodeship}
{prog.topics && (
{prog.topics.slice(0, 3).map((t) => ( {t} ))}
)}
{prog.url && ( )} {projectId && ( )}
))}
); }; export default RegionalProgramsPanel;