@qite/tide-booking-component 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +31 -7
- package/build/build-cjs/booking-wizard/features/sidebar/sidebar-flight.d.ts +2 -2
- package/build/build-cjs/booking-wizard/features/sidebar/sidebar.d.ts +3 -3
- package/build/build-cjs/index.js +4820 -5061
- package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +31 -7
- package/build/build-esm/booking-wizard/features/sidebar/sidebar-flight.d.ts +2 -2
- package/build/build-esm/booking-wizard/features/sidebar/sidebar.d.ts +3 -3
- package/build/build-esm/index.js +4820 -5061
- package/package.json +2 -2
- package/src/booking-wizard/features/booking/selectors.ts +25 -1
- package/src/booking-wizard/features/sidebar/index.tsx +6 -2
- package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +7 -7
- package/src/booking-wizard/features/sidebar/sidebar.tsx +8 -8
- package/src/booking-wizard/features/summary/summary.tsx +50 -53
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qite/tide-booking-component",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "React Booking wizard & Booking product component for Tide",
|
|
5
5
|
"main": "build/build-cjs/index.js",
|
|
6
6
|
"module": "build/build-esm/index.js",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"uuid": "^8.3.2"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@qite/tide-client": "^1.1.
|
|
72
|
+
"@qite/tide-client": "^1.1.94",
|
|
73
73
|
"react-html-comment": "^2.0.16"
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -3,8 +3,11 @@ import { Gender } from "@qite/tide-client";
|
|
|
3
3
|
import {
|
|
4
4
|
BookingPackageAddress,
|
|
5
5
|
BookingPackageBookRequest,
|
|
6
|
+
BookingPackageEntryLineFlightMetaData,
|
|
7
|
+
BookingPackageFlight,
|
|
6
8
|
BookingPackagePax,
|
|
7
9
|
BookingPackageRequest,
|
|
10
|
+
BookingPackageRoomOption,
|
|
8
11
|
} from "@qite/tide-client/build/types";
|
|
9
12
|
import { createSelector } from "@reduxjs/toolkit";
|
|
10
13
|
import { format, parseISO } from "date-fns";
|
|
@@ -67,6 +70,9 @@ export const selectPackageFlights = (state: RootState) => ({
|
|
|
67
70
|
return: state.booking.package?.returnFlights,
|
|
68
71
|
});
|
|
69
72
|
|
|
73
|
+
export const selectFlightMetaData = (state: RootState) =>
|
|
74
|
+
state.booking.package?.flightInfo.metaData;
|
|
75
|
+
|
|
70
76
|
export const selectActiveOption = (state: RootState) =>
|
|
71
77
|
state.booking.package?.options.find((x) => x.isSelected);
|
|
72
78
|
|
|
@@ -94,6 +100,24 @@ export const selectPackageAirportGroups = createSelector(
|
|
|
94
100
|
)
|
|
95
101
|
);
|
|
96
102
|
|
|
103
|
+
export const selectRoomOptionDepartureFlightsMetaData = createSelector(
|
|
104
|
+
selectActiveOption,
|
|
105
|
+
selectFlightMetaData,
|
|
106
|
+
(ativeOption, flightMetaData) => {
|
|
107
|
+
const roomOptions = ativeOption?.rooms.map(r => r.options.filter(o => o.isSelected).shift());
|
|
108
|
+
return roomOptions?.map(ro => flightMetaData?.find(f => f.entryLineGuid === ro?.entryLineGuid)?.flightMetaData).filter(f => f !== undefined) ?? [];
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
export const selectRoomOptionReturnFlightsMetaData = createSelector(
|
|
113
|
+
selectActiveOption,
|
|
114
|
+
selectFlightMetaData,
|
|
115
|
+
(ativeOption, flightMetaData) => {
|
|
116
|
+
const roomOptions = ativeOption?.rooms.map(r => r.options.filter(o => o.isSelected).reverse().shift());
|
|
117
|
+
return roomOptions?.map(ro => flightMetaData?.find(f => f.entryLineGuid === ro?.entryLineGuid)?.flightMetaData).filter(f => f !== undefined) ?? [];
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
|
|
97
121
|
export const selectApiSettings = (state: RootState) => state.apiSettings;
|
|
98
122
|
|
|
99
123
|
export const selectIsUnavailable = (state: RootState) =>
|
|
@@ -157,7 +181,7 @@ export const selectBookingAttributes = (state: RootState) =>
|
|
|
157
181
|
export const selectBookingNumber = (state: RootState) =>
|
|
158
182
|
state.booking.bookingNumber;
|
|
159
183
|
|
|
160
|
-
export const selectIsOption = (state: RootState) =>
|
|
184
|
+
export const selectIsOption = (state: RootState) =>
|
|
161
185
|
state.booking.isOption;
|
|
162
186
|
|
|
163
187
|
export const selectBookingRooms = (state: RootState) =>
|
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
selectIsOnRequest,
|
|
6
6
|
selectPackageRooms,
|
|
7
7
|
selectReturnFlight,
|
|
8
|
+
selectRoomOptionDepartureFlightsMetaData,
|
|
9
|
+
selectRoomOptionReturnFlightsMetaData,
|
|
8
10
|
} from "../booking/selectors";
|
|
9
11
|
import { getDateText, getTravelersText } from "./sidebar-util";
|
|
10
12
|
import { selectFormRooms } from "../travelers-form/travelers-form-slice";
|
|
@@ -39,7 +41,9 @@ const SidebarContainer: React.FC<SidebarProps> = ({
|
|
|
39
41
|
const rooms = useSelector(selectFormRooms);
|
|
40
42
|
const travelerRooms = getTravelersText(rooms);
|
|
41
43
|
const departureFlight = useSelector(selectDepartureFlight);
|
|
44
|
+
const departureFlightMetaData = departureFlight?.flightMetaData ?? useSelector(selectRoomOptionDepartureFlightsMetaData)?.[0];
|
|
42
45
|
const returnFlight = useSelector(selectReturnFlight);
|
|
46
|
+
const returnFlightMetaData = returnFlight?.flightMetaData ?? useSelector(selectRoomOptionReturnFlightsMetaData)?.[0];
|
|
43
47
|
const isFetchingProductOptions = useSelector(selectIsFetchingProductOptions);
|
|
44
48
|
const isFetchingPriceDetails = useSelector(selectIsFetchingPriceDetails);
|
|
45
49
|
const accommodations = useSelector(selectPackageRooms);
|
|
@@ -59,8 +63,8 @@ const SidebarContainer: React.FC<SidebarProps> = ({
|
|
|
59
63
|
: undefined
|
|
60
64
|
}
|
|
61
65
|
travelerRooms={travelerRooms}
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
departureFlightMetaData={departureFlightMetaData}
|
|
67
|
+
returnFlightMetaData={returnFlightMetaData}
|
|
64
68
|
basePrice={useSelector(selectBasePrice)}
|
|
65
69
|
totalPrice={useSelector(selectTotalPrice)}
|
|
66
70
|
includedCosts={useSelector(selectSeparatePackagePriceDetails)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BookingPackageFlightMetaData } from "@qite/tide-client/build/types";
|
|
2
2
|
import { first, last } from "lodash";
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { useSelector } from "react-redux";
|
|
@@ -7,11 +7,11 @@ import { getAirlines, getDateText, parseFlightLines } from "./sidebar-util";
|
|
|
7
7
|
|
|
8
8
|
interface SidebarFlightProps {
|
|
9
9
|
title: string;
|
|
10
|
-
|
|
10
|
+
flightMetaData: BookingPackageFlightMetaData;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const SidebarFlight: React.FC<SidebarFlightProps> = ({ title,
|
|
14
|
-
const flightLines = parseFlightLines(
|
|
13
|
+
const SidebarFlight: React.FC<SidebarFlightProps> = ({ title, flightMetaData }) => {
|
|
14
|
+
const flightLines = parseFlightLines(flightMetaData);
|
|
15
15
|
const firstFlight = first(flightLines);
|
|
16
16
|
const lastFlight = last(flightLines);
|
|
17
17
|
const translations = useSelector(selectTranslations);
|
|
@@ -43,9 +43,9 @@ const SidebarFlight: React.FC<SidebarFlightProps> = ({ title, flight }) => {
|
|
|
43
43
|
|
|
44
44
|
<div className="pricing-summary__row">
|
|
45
45
|
<div className="pricing-summary__property">
|
|
46
|
-
{
|
|
46
|
+
{flightMetaData.flightLines.length > 1 && (
|
|
47
47
|
<i>
|
|
48
|
-
{
|
|
48
|
+
{flightMetaData.flightLines.length - 1}
|
|
49
49
|
{"x "}
|
|
50
50
|
{translations.SIDEBAR.CHANGES}
|
|
51
51
|
</i>
|
|
@@ -53,7 +53,7 @@ const SidebarFlight: React.FC<SidebarFlightProps> = ({ title, flight }) => {
|
|
|
53
53
|
</div>
|
|
54
54
|
<div className="pricing-summary__value">{getAirlines(flightLines)}</div>
|
|
55
55
|
</div>
|
|
56
|
-
{
|
|
56
|
+
{flightMetaData.luggageIncluded && (
|
|
57
57
|
<div className="pricing-summary__row">
|
|
58
58
|
<div className="pricing-summary__property"></div>
|
|
59
59
|
<div className="pricing-summary__value">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
BookingPackageFlightMetaData,
|
|
3
3
|
BookingPackageRoom,
|
|
4
4
|
BookingPriceDetail
|
|
5
5
|
} from "@qite/tide-client/build/types";
|
|
@@ -21,8 +21,8 @@ interface SidebarProps {
|
|
|
21
21
|
travelerRooms?: string[];
|
|
22
22
|
startDateText?: string;
|
|
23
23
|
endDateText?: string;
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
departureFlightMetaData?: BookingPackageFlightMetaData;
|
|
25
|
+
returnFlightMetaData?: BookingPackageFlightMetaData;
|
|
26
26
|
basePrice?: number;
|
|
27
27
|
totalPrice?: number;
|
|
28
28
|
remainingAmountText?: string;
|
|
@@ -44,8 +44,8 @@ const Sidebar: React.FC<SidebarProps> = ({
|
|
|
44
44
|
travelerRooms,
|
|
45
45
|
startDateText,
|
|
46
46
|
endDateText,
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
departureFlightMetaData,
|
|
48
|
+
returnFlightMetaData,
|
|
49
49
|
basePrice,
|
|
50
50
|
totalPrice,
|
|
51
51
|
includedCosts,
|
|
@@ -136,15 +136,15 @@ const Sidebar: React.FC<SidebarProps> = ({
|
|
|
136
136
|
</div>
|
|
137
137
|
|
|
138
138
|
{isLoading && loaderComponent}
|
|
139
|
-
{!isLoading &&
|
|
139
|
+
{!isLoading && departureFlightMetaData && returnFlightMetaData && (
|
|
140
140
|
<>
|
|
141
141
|
<SidebarFlight
|
|
142
142
|
title={translations.SIDEBAR.DEPARTURE_FLIGHT}
|
|
143
|
-
|
|
143
|
+
flightMetaData={departureFlightMetaData}
|
|
144
144
|
/>
|
|
145
145
|
<SidebarFlight
|
|
146
146
|
title={translations.SIDEBAR.ARRIVAL_FLIGHT}
|
|
147
|
-
|
|
147
|
+
flightMetaData={returnFlightMetaData}
|
|
148
148
|
/>
|
|
149
149
|
</>
|
|
150
150
|
)}
|
|
@@ -284,7 +284,7 @@ const Summary: React.FC<SummaryProps> = () => {
|
|
|
284
284
|
</div>
|
|
285
285
|
</div>
|
|
286
286
|
{rooms.map((r, rIndex) => (
|
|
287
|
-
<div className="form__row">
|
|
287
|
+
<div className="form__row" key={rIndex}>
|
|
288
288
|
<div className="form__group">
|
|
289
289
|
<div className="form__region-header">
|
|
290
290
|
<h5 className="form__region-heading">
|
|
@@ -371,61 +371,58 @@ const Summary: React.FC<SummaryProps> = () => {
|
|
|
371
371
|
<div className="form__row">
|
|
372
372
|
<div className="form__group">
|
|
373
373
|
<ul className="list list--booking-summary">
|
|
374
|
-
|
|
375
|
-
<
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
374
|
+
{activeOption?.rooms.flatMap((r) => r.options).filter(x => x.isSelected).map((roomOption, roomOptionIndex) => (<>
|
|
375
|
+
<li key={roomOptionIndex}>
|
|
376
|
+
<h6>{roomOption?.productName}</h6>
|
|
377
|
+
<ul>
|
|
378
|
+
<li className="list__item">
|
|
379
|
+
{roomOption?.accommodationName}
|
|
380
|
+
{!isNil(roomOption?.regimeName) && ", "}
|
|
381
|
+
{roomOption?.regimeName}
|
|
382
|
+
</li>
|
|
383
|
+
</ul>
|
|
384
|
+
<p>
|
|
385
|
+
({roomOption?.from === roomOption?.to
|
|
386
|
+
? getDateText(roomOption?.from)
|
|
387
|
+
: <>{getDateText(roomOption?.from)} > {getDateText(roomOption?.to)}</>})
|
|
388
|
+
</p>
|
|
389
|
+
</li>
|
|
390
|
+
{!isEmpty(activeOption?.groups) &&
|
|
391
|
+
activeOption?.groups.map((x, i) => {
|
|
392
|
+
if (!x.options.some((y) => y.isSelected)) return;
|
|
393
|
+
|
|
394
|
+
return <SummaryBookingOption key={i} group={x} />;
|
|
388
395
|
})}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
{getDateText(activeOption?.toDate)})
|
|
393
|
-
</p>
|
|
394
|
-
</li>
|
|
395
|
-
{!isEmpty(activeOption?.groups) &&
|
|
396
|
-
activeOption?.groups.map((x, i) => {
|
|
397
|
-
if (!x.options.some((y) => y.isSelected)) return;
|
|
398
|
-
|
|
399
|
-
return <SummaryBookingOption key={i} group={x} />;
|
|
400
|
-
})}
|
|
401
|
-
{!isEmpty(activeOption?.optionUnits) &&
|
|
402
|
-
activeOption?.optionUnits.map((x, i) => (
|
|
403
|
-
<SummaryBookingOptionUnit key={i} unit={x} />
|
|
404
|
-
))}
|
|
405
|
-
{!isEmpty(activeOption?.optionPax) &&
|
|
406
|
-
activeOption?.optionPax.map((x, i) => (
|
|
407
|
-
<SummaryBookingOptionPax key={i} pax={x} />
|
|
408
|
-
))}
|
|
409
|
-
{packageDetails?.outwardFlights &&
|
|
410
|
-
packageDetails.outwardFlights
|
|
411
|
-
.filter((x) => x.isSelected)
|
|
412
|
-
.map((flight, i) => (
|
|
413
|
-
<SummaryFlight
|
|
414
|
-
key={i}
|
|
415
|
-
flight={flight}
|
|
416
|
-
header={translations.SIDEBAR.DEPARTURE_FLIGHT}
|
|
417
|
-
/>
|
|
396
|
+
{!isEmpty(activeOption?.optionUnits) &&
|
|
397
|
+
activeOption?.optionUnits.map((x, i) => (
|
|
398
|
+
<SummaryBookingOptionUnit key={i} unit={x} />
|
|
418
399
|
))}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
400
|
+
{!isEmpty(activeOption?.optionPax) &&
|
|
401
|
+
activeOption?.optionPax.map((x, i) => (
|
|
402
|
+
<SummaryBookingOptionPax key={i} pax={x} />
|
|
403
|
+
))}
|
|
404
|
+
{packageDetails?.outwardFlights &&
|
|
405
|
+
packageDetails.outwardFlights
|
|
406
|
+
.filter((x) => x.isSelected)
|
|
407
|
+
.map((flight, i) => (
|
|
408
|
+
<SummaryFlight
|
|
409
|
+
key={i}
|
|
410
|
+
flight={flight}
|
|
411
|
+
header={translations.SIDEBAR.DEPARTURE_FLIGHT}
|
|
412
|
+
/>
|
|
413
|
+
))}
|
|
414
|
+
{packageDetails?.returnFlights &&
|
|
415
|
+
packageDetails.returnFlights
|
|
416
|
+
.filter((x) => x.isSelected)
|
|
417
|
+
.map((flight, i) => (
|
|
418
|
+
<SummaryFlight
|
|
419
|
+
key={i}
|
|
420
|
+
flight={flight}
|
|
421
|
+
header={translations.SIDEBAR.ARRIVAL_FLIGHT}
|
|
422
|
+
/>
|
|
428
423
|
))}
|
|
424
|
+
</>
|
|
425
|
+
))}
|
|
429
426
|
</ul>
|
|
430
427
|
</div>
|
|
431
428
|
</div>
|