import { AirlineBookingPackageOption, AirportBookingPackageOption, BookingAirlineGroup, BookingAirportGroup, BookingOptionGroup, BookingOptionUnit, PerUnitPackageOption } from '@qite/tide-client/build/types'; import React, { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { buildClassName } from '../../../shared/utils/class-util'; import { selectDepartureFlight, selectReturnFlight, selectTranslations } from '../booking/selectors'; import OptionBookingAirlineGroup from './option-booking-airline-group'; import OptionUnitGroup from './option-unit-group'; interface OptionUnitsCardProps { units: BookingOptionUnit[]; parentIndex?: number; onUnitsChange?: (units: BookingOptionUnit[], index?: number) => void; } const OptionUnitsCard: React.FC = ({ units, parentIndex, onUnitsChange }) => { const [toggleStates, setToggleStates] = useState(); const translations = useSelector(selectTranslations); const departureFlight = useSelector(selectDepartureFlight); const returnFlight = useSelector(selectReturnFlight); useEffect(() => { if (!toggleStates || toggleStates.length !== units.length) { setToggleStates(units.map(() => true)); } }, [units, toggleStates, setToggleStates]); const getUnitPaxLabel = (unitIndex: number) => { return ''; }; const onGroupChange = (group: BookingOptionGroup, unitIndex: number) => { const updatedUnits = units.map((u) => { return u.index !== unitIndex ? u : { ...u, groups: u.groups.map((ug) => { return ug.name !== group.name ? ug : group; }) }; }); if (onUnitsChange) onUnitsChange(updatedUnits, parentIndex); }; const getAirlineGroups = (p: BookingOptionUnit) => { return p.airlineGroups.filter((x) => x.flightIds.includes(departureFlight?.entryLineGuid ?? '') || x.flightIds.includes(returnFlight?.entryLineGuid ?? '')); }; const handleOnAirlineGroupChange = (group: BookingAirlineGroup, unitIndex: number) => { const updatedPax = units.map((u) => { return u.index !== unitIndex ? u : { ...u, airlineGroups: u.airlineGroups.map((g) => (g.label === group.label ? group : g)) }; }); if (onUnitsChange) onUnitsChange(updatedPax, parentIndex); }; const getAirportGroups = (p: BookingOptionUnit) => { return p.airportGroups.filter((x) => x.flightIds.includes(departureFlight?.entryLineGuid ?? '') || x.flightIds.includes(returnFlight?.entryLineGuid ?? '')); }; const handleOnAirportGroupChange = (group: BookingAirportGroup, unitIndex: number) => { const updatedPax = units.map((u) => { return u.index !== unitIndex ? u : { ...u, airportGroups: u.airportGroups.map((g) => (g.label === group.label ? group : g)) }; }); if (onUnitsChange) onUnitsChange(updatedPax, parentIndex); }; return ( <> {units.map((u, i) => (

{translations.OPTIONS_FORM.UNIT_TITLE} {u.index}

{getUnitPaxLabel(u.index)}

{toggleStates && toggleStates[i] && ( <> {u.groups.map( (ug) => ug && ( ) )} {getAirlineGroups(u).map((group, i) => ( { handleOnAirlineGroupChange(updatedGroup, u.index); }} /> ))} {getAirportGroups(u).map((group, i) => ( { handleOnAirportGroupChange(updatedGroup, u.index); }} /> ))} )}
))} ); }; export default OptionUnitsCard;