UNPKG

@qite/tide-booking-component

Version:

React Booking wizard & Booking product component for Tide

85 lines (62 loc) 3.73 kB
import { createSelector } from '@reduxjs/toolkit'; import { SearchResultsRootState } from './search-results-store'; import { getFlightKey } from '../utils/flight-utils'; import { PackagingFlightResponse } from '@qite/tide-client'; const selectSearchResultsState = (state: SearchResultsRootState) => state.searchResults; export const selectPackagingAccoResults = createSelector([selectSearchResultsState], (state) => state.packagingAccoResults); export const selectSelectedPackagingAccoResultCode = createSelector([selectSearchResultsState], (state) => state.selectedPackagingAccoResultCode); export const selectSelectedPackagingAccoResult = createSelector( [selectPackagingAccoResults, selectSelectedPackagingAccoResultCode], (packagingAccoResults, selectedPackagingAccoResultCode) => { if (!selectedPackagingAccoResultCode) return null; return packagingAccoResults.find((accoResult) => accoResult.code === selectedPackagingAccoResultCode) ?? null; } ); export const selectPackagingFlightResults = createSelector([selectSearchResultsState], (state) => state.packagingFlightResults); export const selectFilteredPackagingFlightResults = createSelector([selectSearchResultsState], (state) => state.filteredPackagingFlightResults); export const selectSelectedOutwardKey = createSelector([selectSearchResultsState], (state) => state.selectedOutwardKey); export const selectSelectedReturnKey = createSelector([selectSearchResultsState], (state) => state.selectedReturnKey); export const selectUniqueOutwardFlights = createSelector([selectFilteredPackagingFlightResults], (packagingFlightResults): PackagingFlightResponse[] => { const map = new Map<string, PackagingFlightResponse>(); packagingFlightResults.forEach((flight) => { const key = getFlightKey(flight.outward.segments); if (!map.has(key)) { map.set(key, flight); } }); return Array.from(map.values()); }); export const selectUniqueReturnFlights = createSelector( [selectFilteredPackagingFlightResults, selectSelectedOutwardKey], (packagingFlightResults, selectedOutwardKey): PackagingFlightResponse[] => { if (!selectedOutwardKey) return []; const matchingCombinations = packagingFlightResults.filter((flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey); const map = new Map<string, PackagingFlightResponse>(); matchingCombinations.forEach((flight) => { const key = getFlightKey(flight.return.segments); if (!map.has(key)) { map.set(key, flight); } }); return Array.from(map.values()); } ); export const selectSelectedOutward = createSelector([selectPackagingFlightResults, selectSelectedOutwardKey], (packagingFlightResults, selectedOutwardKey) => { if (!selectedOutwardKey) return null; return packagingFlightResults.find((flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey) ?? null; }); export const selectSelectedReturn = createSelector([selectPackagingFlightResults, selectSelectedReturnKey], (packagingFlightResults, selectedReturnKey) => { if (!selectedReturnKey) return null; return packagingFlightResults.find((flight) => getFlightKey(flight.return.segments) === selectedReturnKey) ?? null; }); export const selectSelectedCombinationFlight = createSelector( [selectPackagingFlightResults, selectSelectedOutwardKey, selectSelectedReturnKey], (packagingFlightResults, selectedOutwardKey, selectedReturnKey) => { if (!selectedOutwardKey || !selectedReturnKey) return null; return ( packagingFlightResults.find( (flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey ) ?? null ); } );