UNPKG

@qite/tide-booking-component

Version:

React Booking wizard & Booking product component for Tide

83 lines (82 loc) 2.33 kB
import { ReactNode } from 'react'; import { WebsiteConfigurationSearchConfiguration, PortalQsmType } from '@qite/tide-client'; import { PickerItem } from '../shared/types'; export interface QSMConfiguration { type?: PortalQsmType; searchConfigurations: WebsiteConfigurationSearchConfiguration[]; askRooms?: boolean; askTravelType?: boolean; allowOneWay?: boolean; allowRoundtrip?: boolean; allowOpenJaw?: boolean; allowMultiCity?: boolean; askTravelClass?: boolean; additionalFilters?: AdditionalFilters; askTravelers: boolean; askNationality?: boolean; departureAirport?: BaseFieldConfig; destinationAirport?: BaseFieldConfig; returnAirport?: BaseFieldConfig; destination?: BaseFieldConfig; travelTypes?: PickerItem[]; travelTypeIcon?: ReactNode; travelClasses?: PickerItem[]; travelClassIcon?: ReactNode; dateFlexibility?: DateFlexibility[]; minDate?: Date; maxDate?: Date; showReturnDate?: boolean; datesIcon?: ReactNode; defaultTravelers?: number; maxTravelers?: number; maxChildAge?: number; maxInfantAge?: number; onSubmit: (data: any) => void; submitIcon: ReactNode; nationalities: PickerItem[]; languageCode?: string; } export interface BaseFieldConfig { fieldKey: string; label: string; placeholder: string; icon: ReactNode; options: TypeaheadOption[]; autoComplete?: boolean; onChange?: (data: any) => void; } export interface TypeaheadOption { key: string; value: string; iataCode?: string; country?: string; type: OptionType; } export type OptionType = 'country' | 'region' | 'oord' | 'location' | 'airport' | 'hotel' | 'other'; export interface SingleFieldConfig extends BaseFieldConfig { type: 'single'; } export interface DoubleFieldConfig { type: 'double'; fieldKey: string; showReverse?: boolean; disableReturnField?: boolean; fields: BaseFieldConfig[]; } export type FieldConfig = SingleFieldConfig | DoubleFieldConfig; export interface AdditionalFilters { showDirectFlights: boolean; includeLuggage: boolean; } export interface DateFlexibility { name: string; before: number; after: number; } export type MobileFilterType = 'search' | 'date' | 'traveler' | null; export type TravelerType = 'adults' | 'kids' | 'babies'; export interface Room { adults: number; kids: number; babies: number; }