// src/components/LogoOverridesManager.tsx import { useState, useMemo, useEffect } from 'react'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import Select from 'react-select'; import { getMunicipiosForAdmin, getAgrupaciones, getLogos, updateLogos } from '../services/apiService'; import type { MunicipioSimple, AgrupacionPolitica, LogoAgrupacionCategoria } from '../types'; // --- AÑADIMOS LAS CATEGORÍAS PARA EL SELECTOR --- const CATEGORIAS_OPTIONS = [ { value: 5, label: 'Senadores' }, { value: 6, label: 'Diputados' }, { value: 7, label: 'Concejales' } ]; export const LogoOverridesManager = () => { const queryClient = useQueryClient(); const { data: municipios = [] } = useQuery({ queryKey: ['municipiosForAdmin'], queryFn: getMunicipiosForAdmin }); const { data: agrupaciones = [] } = useQuery({ queryKey: ['agrupaciones'], queryFn: getAgrupaciones }); const { data: logos = [] } = useQuery({ queryKey: ['logos'], queryFn: getLogos }); // --- NUEVO ESTADO PARA LA CATEGORÍA --- const [selectedCategoria, setSelectedCategoria] = useState<{ value: number; label: string } | null>(null); const [selectedMunicipio, setSelectedMunicipio] = useState<{ value: string; label: string } | null>(null); const [selectedAgrupacion, setSelectedAgrupacion] = useState<{ value: string; label: string } | null>(null); const [logoUrl, setLogoUrl] = useState(''); const municipioOptions = useMemo(() => [{ value: 'general', label: 'General (Todas las secciones)' }, ...municipios.map(m => ({ value: m.id, label: m.nombre }))] , [municipios]); const agrupacionOptions = useMemo(() => agrupaciones.map(a => ({ value: a.id, label: a.nombre })), [agrupaciones]); const currentLogo = useMemo(() => { // La búsqueda ahora depende de los 3 selectores if (!selectedMunicipio || !selectedAgrupacion || !selectedCategoria) return ''; return logos.find(l => l.ambitoGeograficoId === parseInt(selectedMunicipio.value) && l.agrupacionPoliticaId === selectedAgrupacion.value && l.categoriaId === selectedCategoria.value )?.logoUrl || ''; }, [logos, selectedMunicipio, selectedAgrupacion, selectedCategoria]); useEffect(() => { setLogoUrl(currentLogo) }, [currentLogo]); const handleSave = async () => { if (!selectedMunicipio || !selectedAgrupacion || !selectedCategoria) return; const newLogoEntry: LogoAgrupacionCategoria = { id: 0, agrupacionPoliticaId: selectedAgrupacion.value, categoriaId: selectedCategoria.value, ambitoGeograficoId: parseInt(selectedMunicipio.value), logoUrl: logoUrl || null }; try { await updateLogos([newLogoEntry]); queryClient.invalidateQueries({ queryKey: ['logos'] }); alert('Override de logo guardado.'); } catch { alert('Error al guardar.'); } }; return (

Overrides de Logos por Municipio y Categoría

Configure una imagen específica para un partido en un municipio y categoría determinados.

setLogoUrl(e.target.value)} style={{ width: '100%' }} disabled={!selectedMunicipio || !selectedAgrupacion || !selectedCategoria} />
); };