import { Swiper, SwiperSlide } from 'swiper/react'; import { Autoplay, Pagination } from 'swiper/modules'; import { Link } from 'react-router-dom'; import type { EditorialCarouselSectionPayload } from '@homaroma/types'; import { useTranslation } from 'react-i18next'; import { getLocalizedField } from '../utils/localization'; // Import Swiper styles import 'swiper/css'; import 'swiper/css/pagination'; interface DynamicEditorialCarouselProps { payload: EditorialCarouselSectionPayload; } export default function DynamicEditorialCarousel({ payload }: DynamicEditorialCarouselProps) { const { i18n } = useTranslation(); const lang = i18n.language; const title = getLocalizedField(payload.title, lang); const slides = (payload.slides || []).map((slide) => ({ ...slide, title: getLocalizedField(slide.title, lang), description: getLocalizedField(slide.description, lang), buttonText: getLocalizedField(slide.buttonText, lang), category: getLocalizedField(slide.category, lang) })); if (slides.length === 0) return null; const renderTitle = (text: string) => { if (!text) return null; return text.split('[').map((part, i) => { if (part.includes(']')) { const [accent, rest] = part.split(']'); return ( {accent} {rest} ); } return {part}; }); }; return ( {renderTitle(title) || title} {slides.map((slide, idx) => ( { (e.target as HTMLImageElement).style.display = 'none'; }} /> {slide.category} {renderTitle(slide.title) || slide.title} {slide.description} {slide.buttonText && slide.buttonLink && ( {slide.buttonText} → )} ))} ); }
{slide.description}