import React, { useContext, useState } from 'react'; import { durationTicksInHoursString, formatPrice, getTranslations, longFormatDate, timeFromDateTime } from '../../../../shared/utils/localization-util'; import Icon from '../../../../shared/components/icon'; import { ExtendedFlightSearchResponseItem } from '../../../types'; import SearchResultsConfigurationContext from '../../../search-results-configuration-context'; import { getArrivalSegment, getDepartureSegment, getFlightSegments, getNumberOfStopsLabel } from '../../../utils/flight-utils'; import { useDispatch, useSelector } from 'react-redux'; import { setFlyInIsOpen, setSelectedFlight } from '../../../store/search-results-slice'; import { SearchResultsRootState } from '../../../store/search-results-store'; import { useFlightSearch } from '../flight-search-context'; interface PairedFlightOptionProps { item: ExtendedFlightSearchResponseItem; } const PairedFlightOption: React.FC = ({ item }) => { const dispatch = useDispatch(); const { selectedFlight } = useSelector((state: SearchResultsRootState) => state.searchResults); const context = useContext(SearchResultsConfigurationContext); const { onFlightSearch } = useFlightSearch(); const language = context?.languageCode ?? 'en-GB'; const translations = getTranslations(language); const [isOutwardOpen, setIsOutwardOpen] = useState(false); const [isReturnOpen, setIsReturnOpen] = useState(false); const handleSelect = (flight: ExtendedFlightSearchResponseItem) => { dispatch(setSelectedFlight(flight)); onFlightSearch(flight); // Trigger search to update accommodation options based on selected flight dispatch(setFlyInIsOpen(true)); }; return (
{formatPrice(item.price, 'EUR', context?.languageCode ?? 'en-GB')}
{item.outward && (
{getDepartureSegment(item.outward)?.marketingAirlineName}
{timeFromDateTime(getDepartureSegment(item.outward)?.departureDateTime)} {getDepartureSegment(item.outward)?.departureAirportCode}

{longFormatDate(getDepartureSegment(item.outward)?.departureDateTime, language)}

{durationTicksInHoursString(item.outward.durationInTicks)}

{getNumberOfStopsLabel(item.outward, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)}
{timeFromDateTime(getArrivalSegment(item.outward)?.arrivalDateTime)} {getArrivalSegment(item.outward)?.arrivalAirportCode}

{longFormatDate(getArrivalSegment(item.outward)?.arrivalDateTime, language)}

{/* +1 day */}
setIsOutwardOpen((prev) => !prev)}>
{getFlightSegments(item.outward).map((segment, index) => (

{timeFromDateTime(segment.departureDateTime)}

{segment.departureAirportCode}

{longFormatDate(segment.departureDateTime, language)}

{durationTicksInHoursString(segment.durationInTicks)}

{segment.marketingAirlineName} {segment.operatingFlightNumber}

{timeFromDateTime(segment.arrivalDateTime)}

{segment.arrivalAirportCode}

{longFormatDate(segment.arrivalDateTime, language)}

{segment.transferTimeInTicks && (
Stop time {durationTicksInHoursString(segment.transferTimeInTicks)}
)} ))}
)} {item.return && (
{getDepartureSegment(item.return)?.marketingAirlineName}
{timeFromDateTime(getDepartureSegment(item.return)?.departureDateTime)} {getDepartureSegment(item.return)?.departureAirportCode}

{longFormatDate(getDepartureSegment(item.return)?.departureDateTime, language)}

{durationTicksInHoursString(item.return.durationInTicks)}

{getNumberOfStopsLabel(item.return, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)}
{timeFromDateTime(getArrivalSegment(item.return)?.arrivalDateTime)} {getArrivalSegment(item.return)?.arrivalAirportCode}

{longFormatDate(getArrivalSegment(item.return)?.arrivalDateTime, language)}

{/* +1 day */}
setIsReturnOpen((prev) => !prev)}>
{getFlightSegments(item.return).map((segment, index) => (

{timeFromDateTime(segment.departureDateTime)}

{segment.departureAirportCode}

{longFormatDate(segment.departureDateTime, language)}

{durationTicksInHoursString(segment.durationInTicks)}

{segment.marketingAirlineName} {segment.operatingFlightNumber}

{timeFromDateTime(segment.arrivalDateTime)}

{segment.arrivalAirportCode}

{longFormatDate(segment.arrivalDateTime, language)}

{segment.transferTimeInTicks && (
Stop time {durationTicksInHoursString(segment.transferTimeInTicks)}
)} ))}
)}
); }; export default PairedFlightOption;