Fix Conversión Categoria en Carousel
- Se realiza conversión del id de la categoria para que funcione la condición del selector de provincias.
This commit is contained in:
		| @@ -18,7 +18,7 @@ import styles from './HomeCarouselWidget.module.css'; | |||||||
|  |  | ||||||
| interface Props { | interface Props { | ||||||
|   eleccionId: number; |   eleccionId: number; | ||||||
|   categoriaId: number; |   categoriaId: number | string; | ||||||
|   titulo: string; |   titulo: string; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -27,11 +27,8 @@ interface OptionType { | |||||||
|   label: string; |   label: string; | ||||||
| } | } | ||||||
|  |  | ||||||
| // --- LÓGICA DE FILTRADO --- |  | ||||||
| // 1. Definimos los IDs de distrito de las provincias que renuevan senadores. |  | ||||||
| const PROVINCIAS_QUE_RENUEVAN_SENADORES = new Set(['01', '06', '08', '15', '16', '17', '22', '24']); | const PROVINCIAS_QUE_RENUEVAN_SENADORES = new Set(['01', '06', '08', '15', '16', '17', '22', '24']); | ||||||
| const CATEGORIA_SENADORES = 2; | const CATEGORIA_SENADORES = 2; | ||||||
| // --- FIN LÓGICA DE FILTRADO --- |  | ||||||
|  |  | ||||||
| const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`; | const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`; | ||||||
| const formatNumber = (num: number) => num.toLocaleString('es-AR'); | const formatNumber = (num: number) => num.toLocaleString('es-AR'); | ||||||
| @@ -51,7 +48,6 @@ const formatDateTime = (dateString: string | undefined | null) => { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| export const HomeCarouselProvincialWidget = ({ eleccionId, categoriaId, titulo }: Props) => { | export const HomeCarouselProvincialWidget = ({ eleccionId, categoriaId, titulo }: Props) => { | ||||||
|   // 2. Estado inicial nulo para que el useEffect lo establezca dinámicamente. |  | ||||||
|   const [selectedProvince, setSelectedProvince] = useState<OptionType | null>(null); |   const [selectedProvince, setSelectedProvince] = useState<OptionType | null>(null); | ||||||
|  |  | ||||||
|   const { data: provincias = [], isLoading: isLoadingProvincias } = useQuery<CatalogoItem[]>({ |   const { data: provincias = [], isLoading: isLoadingProvincias } = useQuery<CatalogoItem[]>({ | ||||||
| @@ -59,24 +55,21 @@ export const HomeCarouselProvincialWidget = ({ eleccionId, categoriaId, titulo } | |||||||
|     queryFn: getProvincias, |     queryFn: getProvincias, | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   // 3. Usamos useMemo para filtrar las opciones solo cuando sea necesario. |  | ||||||
|   const provinceOptions: OptionType[] = useMemo(() => { |   const provinceOptions: OptionType[] = useMemo(() => { | ||||||
|     const allOptions = provincias.map(p => ({ value: p.id, label: p.nombre })); |     const allOptions = provincias.map(p => ({ value: p.id, label: p.nombre })); | ||||||
|     if (categoriaId === CATEGORIA_SENADORES) { |  | ||||||
|  |     if (Number(categoriaId) === CATEGORIA_SENADORES) { | ||||||
|       return allOptions.filter(opt => PROVINCIAS_QUE_RENUEVAN_SENADORES.has(opt.value)); |       return allOptions.filter(opt => PROVINCIAS_QUE_RENUEVAN_SENADORES.has(opt.value)); | ||||||
|     } |     } | ||||||
|     return allOptions; |     return allOptions; | ||||||
|   }, [provincias, categoriaId]); |   }, [provincias, categoriaId]); | ||||||
|  |  | ||||||
|   // 4. useEffect para establecer y validar la provincia por defecto. |  | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|     if (provinceOptions.length > 0) { |     if (provinceOptions.length > 0) { | ||||||
|       // Si no hay nada seleccionado, establece el default. |  | ||||||
|       if (!selectedProvince) { |       if (!selectedProvince) { | ||||||
|         const defaultOption = provinceOptions.find(opt => opt.value === '01'); // CABA |         const defaultOption = provinceOptions.find(opt => opt.value === '01'); | ||||||
|         setSelectedProvince(defaultOption || provinceOptions[0]); // Si CABA no está, usa la primera opción. |         setSelectedProvince(defaultOption || provinceOptions[0]); | ||||||
|       } else { |       } else { | ||||||
|         // Si ya hay algo seleccionado, verifica que siga siendo válido. Si no, lo resetea. |  | ||||||
|         const isSelectedStillValid = provinceOptions.some(opt => opt.value === selectedProvince.value); |         const isSelectedStillValid = provinceOptions.some(opt => opt.value === selectedProvince.value); | ||||||
|         if (!isSelectedStillValid) { |         if (!isSelectedStillValid) { | ||||||
|           setSelectedProvince(provinceOptions[0]); |           setSelectedProvince(provinceOptions[0]); | ||||||
| @@ -87,8 +80,8 @@ export const HomeCarouselProvincialWidget = ({ eleccionId, categoriaId, titulo } | |||||||
|  |  | ||||||
|   const { data, isLoading, error } = useQuery({ |   const { data, isLoading, error } = useQuery({ | ||||||
|     queryKey: ['homeResumen', eleccionId, selectedProvince?.value, categoriaId], |     queryKey: ['homeResumen', eleccionId, selectedProvince?.value, categoriaId], | ||||||
|     queryFn: () => getHomeResumen(eleccionId, selectedProvince!.value, categoriaId), |     queryFn: () => getHomeResumen(eleccionId, selectedProvince!.value, Number(categoriaId)), | ||||||
|     enabled: !!selectedProvince, // La consulta solo se ejecuta si hay una provincia seleccionada |     enabled: !!selectedProvince, | ||||||
|     refetchInterval: 30000, |     refetchInterval: 30000, | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user