Feat Botón Map URL Parámetro Widget Carousel
This commit is contained in:
@@ -58,25 +58,27 @@ export const DevAppLegislativas = () => {
|
|||||||
<div style={sectionStyle}>
|
<div style={sectionStyle}>
|
||||||
<h2>Widget: Carrusel de Resultados Provincias (Home)</h2>
|
<h2>Widget: Carrusel de Resultados Provincias (Home)</h2>
|
||||||
<p style={descriptionStyle}>
|
<p style={descriptionStyle}>
|
||||||
Uso: <code style={codeStyle}><HomeCarouselWidget eleccionId={2} distritoId="02" categoriaId={3} titulo="Diputados - Provincia de Buenos Aires" /></code>
|
Uso: <code style={codeStyle}><HomeCarouselWidget eleccionId={2} distritoId="02" categoriaId={3} titulo="Diputados - Provincia de Buenos Aires" mapLinkUrl={''} /></code>
|
||||||
</p>
|
</p>
|
||||||
<HomeCarouselWidget
|
<HomeCarouselWidget
|
||||||
eleccionId={2} // Nacional
|
eleccionId={2} // Nacional
|
||||||
distritoId="02" // Buenos Aires
|
distritoId="02" // Buenos Aires
|
||||||
categoriaId={3} // Diputados Nacionales
|
categoriaId={3} // Diputados Nacionales
|
||||||
titulo="Diputados - Provincia de Buenos Aires"
|
titulo="Diputados - Provincia de Buenos Aires"
|
||||||
|
mapLinkUrl={''}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={sectionStyle}>
|
<div style={sectionStyle}>
|
||||||
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
||||||
<p style={descriptionStyle}>
|
<p style={descriptionStyle}>
|
||||||
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={3} titulo="Diputados - Argentina" /></code>
|
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={3} titulo="Diputados - Argentina" mapLinkUrl={''} /></code>
|
||||||
</p>
|
</p>
|
||||||
<HomeCarouselNacionalWidget
|
<HomeCarouselNacionalWidget
|
||||||
eleccionId={2}
|
eleccionId={2}
|
||||||
categoriaId={3} // 3 para Diputados, 2 para Senadores
|
categoriaId={3} // 3 para Diputados, 2 para Senadores
|
||||||
titulo="Diputados - Total País"
|
titulo="Diputados - Total País"
|
||||||
|
mapLinkUrl={''}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -88,8 +90,7 @@ export const DevAppLegislativas = () => {
|
|||||||
<HomeCarouselNacionalWidget
|
<HomeCarouselNacionalWidget
|
||||||
eleccionId={2}
|
eleccionId={2}
|
||||||
categoriaId={2} // 3 para Diputados, 2 para Senadores
|
categoriaId={2} // 3 para Diputados, 2 para Senadores
|
||||||
titulo="Senadores - Total País"
|
titulo="Senadores - Total País" mapLinkUrl={''} />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* --- SECCIÓN PARA EL WIDGET DE TARJETAS CON EJEMPLOS --- */}
|
{/* --- SECCIÓN PARA EL WIDGET DE TARJETAS CON EJEMPLOS --- */}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { ImageWithFallback } from '../../../components/common/ImageWithFallback'
|
|||||||
import { assetBaseUrl } from '../../../apiService';
|
import { assetBaseUrl } from '../../../apiService';
|
||||||
import { Swiper, SwiperSlide } from 'swiper/react';
|
import { Swiper, SwiperSlide } from 'swiper/react';
|
||||||
import { Navigation, A11y } from 'swiper/modules';
|
import { Navigation, A11y } from 'swiper/modules';
|
||||||
|
import { FiMap } from 'react-icons/fi';
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import 'swiper/css';
|
import 'swiper/css';
|
||||||
@@ -17,6 +18,7 @@ interface Props {
|
|||||||
eleccionId: number;
|
eleccionId: number;
|
||||||
categoriaId: number;
|
categoriaId: number;
|
||||||
titulo: string;
|
titulo: string;
|
||||||
|
mapLinkUrl: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
||||||
@@ -39,7 +41,7 @@ const formatDateTime = (dateString: string | undefined | null) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const HomeCarouselNacionalWidget = ({ eleccionId, categoriaId, titulo }: Props) => {
|
export const HomeCarouselNacionalWidget = ({ eleccionId, categoriaId, titulo, mapLinkUrl }: Props) => {
|
||||||
const uniqueId = `swiper-${Math.random().toString(36).substring(2, 9)}`;
|
const uniqueId = `swiper-${Math.random().toString(36).substring(2, 9)}`;
|
||||||
const prevButtonClass = `prev-${uniqueId}`;
|
const prevButtonClass = `prev-${uniqueId}`;
|
||||||
const nextButtonClass = `next-${uniqueId}`;
|
const nextButtonClass = `next-${uniqueId}`;
|
||||||
@@ -55,7 +57,13 @@ export const HomeCarouselNacionalWidget = ({ eleccionId, categoriaId, titulo }:
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.homeCarouselWidget}>
|
<div className={styles.homeCarouselWidget}>
|
||||||
<h2 className={styles.widgetTitle}>{titulo}</h2>
|
<div className={styles.widgetHeader}>
|
||||||
|
<h2 className={styles.widgetTitle}>{titulo}</h2>
|
||||||
|
<a href={mapLinkUrl} className={styles.mapLinkButton}>
|
||||||
|
<FiMap />
|
||||||
|
<span className={styles.buttonText}>Ver Mapa</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles.carouselContainer}>
|
<div className={styles.carouselContainer}>
|
||||||
<Swiper
|
<Swiper
|
||||||
|
|||||||
@@ -30,14 +30,55 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.widgetHeader {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
margin: 0 0 0.5rem 0;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
}
|
||||||
|
|
||||||
.widgetTitle {
|
.widgetTitle {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
color: var(--primary-text);
|
color: var(--primary-text);
|
||||||
margin: 0 0 0.5rem 0;
|
margin: 0;
|
||||||
padding-bottom: 0.5rem;
|
padding: 0;
|
||||||
border-bottom: 1px solid var(--border-color);
|
border: none;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapLinkButton {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4rem;
|
||||||
|
background-color: #007bff;
|
||||||
|
color: white;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border-radius: 9999px;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
transition: background-color 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapLinkButton svg {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonText {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.mapLinkButton:hover {
|
||||||
|
background-color: #0056b3;
|
||||||
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.topStatsBar {
|
.topStatsBar {
|
||||||
@@ -262,7 +303,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.homeCarouselWidget .widgetTitle { text-align: center; font-size: 1.1rem; }
|
.homeCarouselWidget .widgetHeader {
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homeCarouselWidget .widgetTitle {
|
||||||
|
text-align: left;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapLinkButton {
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonText {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.homeCarouselWidget .topStatsBar { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.2rem; padding: 0.3rem; }
|
.homeCarouselWidget .topStatsBar { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.2rem; padding: 0.3rem; }
|
||||||
.homeCarouselWidget .topStatsBar > div { padding: 0.25rem 0.5rem; border-right: none; }
|
.homeCarouselWidget .topStatsBar > div { padding: 0.25rem 0.5rem; border-right: none; }
|
||||||
.homeCarouselWidget .topStatsBar > div:nth-child(odd) { border-right: 1px solid var(--border-color); }
|
.homeCarouselWidget .topStatsBar > div:nth-child(odd) { border-right: 1px solid var(--border-color); }
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { ImageWithFallback } from '../../../components/common/ImageWithFallback'
|
|||||||
import { assetBaseUrl } from '../../../apiService';
|
import { assetBaseUrl } from '../../../apiService';
|
||||||
import { Swiper, SwiperSlide } from 'swiper/react';
|
import { Swiper, SwiperSlide } from 'swiper/react';
|
||||||
import { Navigation, A11y } from 'swiper/modules';
|
import { Navigation, A11y } from 'swiper/modules';
|
||||||
|
import { FiMap } from 'react-icons/fi';
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import 'swiper/css';
|
import 'swiper/css';
|
||||||
@@ -18,6 +19,7 @@ interface Props {
|
|||||||
distritoId: string;
|
distritoId: string;
|
||||||
categoriaId: number;
|
categoriaId: number;
|
||||||
titulo: string;
|
titulo: string;
|
||||||
|
mapLinkUrl: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
||||||
@@ -40,7 +42,7 @@ const formatDateTime = (dateString: string | undefined | null) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const HomeCarouselWidget = ({ eleccionId, distritoId, categoriaId, titulo }: Props) => {
|
export const HomeCarouselWidget = ({ eleccionId, distritoId, categoriaId, titulo, mapLinkUrl }: Props) => {
|
||||||
const uniqueId = `swiper-${Math.random().toString(36).substring(2, 9)}`;
|
const uniqueId = `swiper-${Math.random().toString(36).substring(2, 9)}`;
|
||||||
const prevButtonClass = `prev-${uniqueId}`;
|
const prevButtonClass = `prev-${uniqueId}`;
|
||||||
const nextButtonClass = `next-${uniqueId}`;
|
const nextButtonClass = `next-${uniqueId}`;
|
||||||
@@ -56,7 +58,13 @@ export const HomeCarouselWidget = ({ eleccionId, distritoId, categoriaId, titulo
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.homeCarouselWidget}>
|
<div className={styles.homeCarouselWidget}>
|
||||||
<h2 className={styles.widgetTitle}>{titulo}</h2>
|
<div className={styles.widgetHeader}>
|
||||||
|
<h2 className={styles.widgetTitle}>{titulo}</h2>
|
||||||
|
<a href={mapLinkUrl} className={styles.mapLinkButton}>
|
||||||
|
<FiMap />
|
||||||
|
<span className={styles.buttonText}>Ver Mapa</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className={styles.carouselContainer}>
|
<div className={styles.carouselContainer}>
|
||||||
<Swiper
|
<Swiper
|
||||||
|
|||||||
Reference in New Issue
Block a user