import React, { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { getPriceDifferenceText } from '../../../shared/utils/localization-util'; import { SelectableRoomAccommodation } from '../../types'; import { selectCurrencyCode, selectTranslations } from '../booking/selectors'; import { getDatePeriodText, getDateText } from '../sidebar/sidebar-util'; import { buildClassName } from '../../../shared/utils/class-util'; interface RoomOptionProps { room: SelectableRoomAccommodation; hasAlternatives?: boolean; selectedRoomPrice?: number; onAcommodationChange?: (accommodationCode: string, regimeCode: string) => void; onRegimeChange?: (code: string) => void; onToggleAlternatives?: () => void; } const RoomOption: React.FC = ({ room, hasAlternatives, selectedRoomPrice, onAcommodationChange, onRegimeChange, onToggleAlternatives }) => { const translations = useSelector(selectTranslations); const currencyCode = useSelector(selectCurrencyCode); const [roomPrice, setRoomPrice] = useState(0); const [roomRegimeCode, setRoomRegimeCode] = useState(room.regimeCode); useEffect(() => { setRoomPrice(room.price); }, [room.code, room.regimeCode]); const getPriceDifference = (selectedPrice: number, currentPrice: number) => { const priceDifference = (selectedPrice ?? 0) - currentPrice; if (priceDifference !== 0) { return `(${getPriceDifferenceText(priceDifference, currencyCode)})`; } else { return ''; } }; const selectAccommodation = () => { if (onAcommodationChange) { onAcommodationChange(room.code, roomRegimeCode); } }; const handleRegimeChange: React.FormEventHandler = (e) => { let regimeCode = e.currentTarget.value; const option = room.regimes.find((x) => x.code === regimeCode || (x.code === null && regimeCode === ''))!; setRoomRegimeCode(option.code); setRoomPrice(option.price); if (onRegimeChange) { onRegimeChange(regimeCode); } e.preventDefault(); }; return ( <>
{room.viewHtml &&
} {!room.viewHtml && (
{room.image && (
)}

{room.title}

{room.description &&

{room.description}

}
    {room.usps.map((usp, uspIndex) => (
  • {usp}
  • ))}
)}

{getDateText(room.from)} - {getDateText(room.to)}

{getDatePeriodText(translations, room.from, room.to)}
{selectedRoomPrice != undefined && (

{getPriceDifference(roomPrice, selectedRoomPrice)}

)} {hasAlternatives && onToggleAlternatives && ( )}
); }; export default RoomOption;