@qite/tide-booking-component
Version:
React Booking wizard & Booking product component for Tide
111 lines (88 loc) • 2.62 kB
text/typescript
import { ReactNode } from 'react';
// import { TravelClass, TravelType } from '../shared/types';
import { WebsiteConfigurationSearchConfiguration, PortalQsmType } from '@qite/tide-client';
import { PickerItem } from '../shared/types';
export interface QSMConfiguration {
type?: PortalQsmType;
searchConfigurations: WebsiteConfigurationSearchConfiguration[];
askRooms?: boolean; // hotel || roundTrip
askTravelType?: boolean; // hotel || roundTrip
allowOneWay?: boolean; // flight
allowRoundtrip?: boolean; // flight
allowOpenJaw?: boolean; // flight
allowMultiCity?: boolean; // flight
askTravelClass?: boolean; // flight
additionalFilters?: AdditionalFilters; // flight
askTravelers: boolean;
askNationality?: boolean;
// Origins and destinations
departureAirport?: BaseFieldConfig;
destinationAirport?: BaseFieldConfig;
returnAirport?: BaseFieldConfig;
destination?: BaseFieldConfig;
// Travel types
travelTypes?: PickerItem[];
travelTypeIcon?: ReactNode;
// Travel classes
travelClasses?: PickerItem[];
travelClassIcon?: ReactNode;
// Date flexibility
dateFlexibility?: DateFlexibility[];
minDate?: Date;
maxDate?: Date;
showReturnDate?: boolean;
datesIcon?: ReactNode;
// Travelers
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;
}