import React, { FC, useState } from 'react'; import { Placeholder } from '@times-components/image'; import { TripCardProps } from './types'; import { CardContainer, ImageContainer, CardImage, OfferLabel, GiftBanner, CardContent, TopContainer, BottomContainer, Headline, DataPointsList, DataPoint, DataIcon, PriceSection, PriceContainer, OfferContainer, PriceLabel, OriginalPrice, CurrentPrice, LogoContainer, CTAButton, PriceSuffix, StyledLink } from './styles'; import { MoonIcon, LocationIcon, BoatIcon, CalendarIcon } from './assets'; import { tealiumTrackingHandler } from '../../helpers/tracking/TrackingHandler'; import { getPreferredEdition } from '../../utils/cookie'; export const TripCard: FC = ({ card, isStaticGrid, imgHeight = {} }) => { const [imageLoaded, setImageLoaded] = useState(false); const trackEvent = (eventName: string) => { tealiumTrackingHandler( eventName, 'navigation', 'click', card.headline, undefined, { app_content_location: getPreferredEdition() } ); }; const handleCardClick = (type: 'headline' | 'img') => () => type === 'headline' ? trackEvent(`trip card: ${card.headline}`) : trackEvent('trip card: img click'); const handleCTAClick = () => trackEvent(`trip card: ${card.cta_text || 'View Itinerary'}`); const handleLogoClick = () => trackEvent(`trip card: ${card.logo_name}`); return ( {!imageLoaded && } setImageLoaded(true)} isLoaded={imageLoaded} /> {card.offer_label && {card.offer_label}} {card.gift_banner && {card.gift_banner}} {card.headline} {card.date && ( {card.date} )} {card.duration && ( {card.duration} )} {card.destination && ( {card.destination} )} {card.ship && ( {card.ship} )} {card.price !== 'Enquire now' && ( {From} {card.original_price && ( {card.original_price} pp )} )} {card.price} {card.price !== 'Enquire now' && pp} {card.logo && ( Partner logo )} {card.cta_text || 'View Itinerary'} ); };