import React, { useContext, useEffect, useState } from 'react'; import { BookingPackageFlight } from '@qite/tide-client/build/types'; import { isEmpty } from 'lodash'; import { useSelector } from 'react-redux'; import { buildClassName } from '../../../shared/utils/class-util'; import SettingsContext from '../../settings-context'; import { useAppDispatch } from '../../store'; import { FlightFilterOptions, GroupedFlights } from '../../types'; import { setCurrentStep, setFlights, setPackage } from '../booking/booking-slice'; import { OPTIONS_FORM_STEP, ROOM_OPTIONS_FORM_STEP, TRAVELERS_FORM_STEP } from '../booking/constants'; import { selectBookingQueryString, selectIsFetchingProductOptions, selectPackageDetails, selectPackageFlights, selectTranslations, selectTravelersFirstStep } from '../booking/selectors'; import { fetchPriceDetails } from '../price-details/price-details-slice'; import FlightFilter from './flight-filter'; import FlightOption from './flight-option'; import FlightOptionModal from './flight-option-modal'; import { buildFilterOptions, buildGroupedFlights, filterGroupedFlights } from './flight-utils'; import { Link, useNavigate } from 'react-router-dom'; interface FlightOptionsFormProps {} const FlightOptionsForm: React.FC = () => { const settings = useContext(SettingsContext); const navigate = settings.skipRouter ? () => {} : useNavigate(); const translations = useSelector(selectTranslations); const dispatch = useAppDispatch(); const packageDetails = useSelector(selectPackageDetails); const bookingQueryString = useSelector(selectBookingQueryString); const isLoading = useSelector(selectIsFetchingProductOptions); const flights = useSelector(selectPackageFlights); const travelersFirstStep = useSelector(selectTravelersFirstStep); const [filterOptions, setFilterOptions] = useState(); const [flightGroups, setFlightGroups] = useState([]); const handleSubmit: React.FormEventHandler = (e) => { if (settings.skipRouter) { if (settings.roomOptions.isHidden) { dispatch(setCurrentStep(OPTIONS_FORM_STEP)); } else { dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP)); } } else { if (settings.roomOptions.isHidden) { navigate(`${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.options.pathSuffix}?${bookingQueryString}`); } else { navigate(`${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.roomOptions.pathSuffix}?${bookingQueryString}`); } } e.preventDefault(); }; const currentFlightPrice = (flights.outward?.find((x) => x.isSelected)?.price || 0) + (flights.return?.find((x) => x.isSelected)?.price || 0); useEffect(() => { if (packageDetails && settings.roomOptions.isHidden) { const params = new URLSearchParams(location.search); const outwardFlight = params.get('outwardflight') ?? undefined; const returnFlight = params.get('returnflight') ?? undefined; if (outwardFlight && returnFlight) { const desiredOutwardFlight = packageDetails.outwardFlights.find((x) => x.entryLineGuid == outwardFlight); const desiredReturnFlight = packageDetails.returnFlights.find((x) => x.entryLineGuid == returnFlight); if (desiredOutwardFlight && desiredReturnFlight) { dispatch( setPackage({ ...packageDetails, outwardFlights: packageDetails.outwardFlights.map((flight) => { return { ...flight, isSelected: flight.entryLineGuid == desiredOutwardFlight.entryLineGuid ? true : false } as BookingPackageFlight; }), returnFlights: packageDetails.returnFlights.map((flight) => { return { ...flight, isSelected: flight.entryLineGuid == desiredReturnFlight.entryLineGuid ? true : false } as BookingPackageFlight; }) }) ); } } } dispatch(fetchPriceDetails()); const filters = buildFilterOptions(flights.outward, flights.return, translations); setFilterOptions(filters); }, []); useEffect(() => { const groups = buildGroupedFlights(flights.outward, flights.return); setFlightGroups(groups); }, [flights]); const filteredGroups = filterGroupedFlights(flightGroups, filterOptions); const resultCount = filteredGroups.length; const goPrevious = () => { dispatch(setCurrentStep(TRAVELERS_FORM_STEP)); }; return ( <>
{isLoading && settings.loaderComponent} {!isLoading && (
{filterOptions && }
{isEmpty(filteredGroups) &&

{translations.FLIGHTS_FORM.NO_FLIGHTS_FOUND}

} {!isEmpty(filteredGroups) && filteredGroups.map((flight, index) => ( { dispatch(setFlights(item)); dispatch(fetchPriceDetails()); }} /> ))}
)}
{travelersFirstStep && settings.skipRouter ? ( ) : travelersFirstStep ? ( {translations.STEPS.PREVIOUS} ) : null}
); }; export default FlightOptionsForm;