@qite/tide-booking-component 1.4.33 → 1.4.35
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/index.js +1674 -416
- package/build/build-cjs/qsm/types.d.ts +0 -1
- package/build/build-cjs/search-results/components/filters/filters.d.ts +2 -2
- package/build/build-cjs/search-results/components/flight/flight-results.d.ts +2 -0
- package/build/build-cjs/search-results/components/hotel/hotel-card.d.ts +1 -0
- package/build/build-cjs/search-results/components/itinerary/index.d.ts +2 -2
- package/build/build-cjs/search-results/store/search-results-slice.d.ts +11 -2
- package/build/build-cjs/search-results/types.d.ts +0 -14
- package/build/build-esm/index.js +1674 -416
- package/build/build-esm/qsm/types.d.ts +0 -1
- package/build/build-esm/search-results/components/filters/filters.d.ts +2 -2
- package/build/build-esm/search-results/components/flight/flight-results.d.ts +2 -0
- package/build/build-esm/search-results/components/hotel/hotel-card.d.ts +1 -0
- package/build/build-esm/search-results/components/itinerary/index.d.ts +2 -2
- package/build/build-esm/search-results/store/search-results-slice.d.ts +11 -2
- package/build/build-esm/search-results/types.d.ts +0 -14
- package/package.json +77 -77
- package/src/booking-product/components/product.tsx +26 -22
- package/src/booking-wizard/features/booking/booking-self-contained.tsx +303 -304
- package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +5 -5
- package/src/booking-wizard/features/travelers-form/travelers-form.tsx +10 -10
- package/src/content/components/icon.tsx +1 -1
- package/src/content/features/content-page/content-page-self-contained.tsx +0 -1
- package/src/qsm/components/QSMContainer/qsm-container.tsx +217 -218
- package/src/qsm/components/mobile-filter-modal/index.tsx +12 -10
- package/src/qsm/components/travel-class-picker/index.tsx +5 -3
- package/src/qsm/components/travel-input/index.tsx +15 -12
- package/src/qsm/components/travel-input-group/index.tsx +14 -3
- package/src/qsm/components/travel-nationality-picker/index.tsx +5 -3
- package/src/qsm/components/travel-type-picker/index.tsx +5 -3
- package/src/qsm/qsm-configuration-context.ts +0 -1
- package/src/qsm/store/qsm-slice.ts +261 -261
- package/src/qsm/types.ts +144 -145
- package/src/search-results/components/filters/filters.tsx +15 -16
- package/src/search-results/components/flight/flight-results.tsx +168 -1099
- package/src/search-results/components/hotel/hotel-accommodation-results.tsx +21 -24
- package/src/search-results/components/hotel/hotel-card.tsx +4 -3
- package/src/search-results/components/icon.tsx +1 -1
- package/src/search-results/components/itinerary/index.tsx +229 -129
- package/src/search-results/components/round-trip/round-trip-results.tsx +1 -1
- package/src/search-results/components/search-results-container/search-results-container.tsx +353 -337
- package/src/search-results/components/spinner/spinner.tsx +3 -1
- package/src/search-results/components/tab-views/index.tsx +13 -7
- package/src/search-results/features/flights/flight-search-results-self-contained.tsx +1 -14
- package/src/search-results/features/hotels/hotel-search-results-self-contained.tsx +1 -14
- package/src/search-results/store/search-results-slice.ts +37 -3
- package/src/search-results/types.ts +0 -15
- package/src/shared/translations/ar-SA.json +70 -0
- package/src/shared/translations/da-DK.json +70 -0
- package/src/shared/translations/de-DE.json +70 -0
- package/src/shared/translations/en-GB.json +71 -1
- package/src/shared/translations/es-ES.json +70 -0
- package/src/shared/translations/fr-BE.json +71 -1
- package/src/shared/translations/fr-FR.json +70 -0
- package/src/shared/translations/is-IS.json +72 -2
- package/src/shared/translations/it-IT.json +70 -0
- package/src/shared/translations/ja-JP.json +72 -2
- package/src/shared/translations/nl-BE.json +70 -0
- package/src/shared/translations/nl-NL.json +70 -0
- package/src/shared/translations/no-NO.json +72 -2
- package/src/shared/translations/pl-PL.json +70 -0
- package/src/shared/translations/pt-PT.json +70 -0
- package/src/shared/translations/sv-SE.json +72 -2
- package/styles/components/_search.scss +7 -1
|
@@ -4,17 +4,19 @@ import { QSMRootState } from '../../store/qsm-store';
|
|
|
4
4
|
import { setSelectedTravelClass } from '../../store/qsm-slice';
|
|
5
5
|
import QSMConfigurationContext from '../../qsm-configuration-context';
|
|
6
6
|
import ItemPicker from '../item-picker';
|
|
7
|
+
import { getTranslations } from '../../../shared/utils/localization-util';
|
|
7
8
|
|
|
8
9
|
const TravelClassPicker: React.FC = () => {
|
|
9
|
-
const { travelClasses } = useContext(QSMConfigurationContext);
|
|
10
|
+
const { travelClasses, languageCode } = useContext(QSMConfigurationContext);
|
|
11
|
+
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
10
12
|
const { selectedTravelClass } = useSelector((state: QSMRootState) => state.qsm);
|
|
11
13
|
|
|
12
14
|
return (
|
|
13
15
|
<ItemPicker
|
|
14
16
|
items={travelClasses}
|
|
15
17
|
selection={selectedTravelClass}
|
|
16
|
-
label=
|
|
17
|
-
placeholder=
|
|
18
|
+
label={translations.QSM.TRAVEL_CLASS_LABEL}
|
|
19
|
+
placeholder={translations.QSM.TRAVEL_CLASS_PLACEHOLDER}
|
|
18
20
|
classModifier="travel-class-picker__items"
|
|
19
21
|
onPick={setSelectedTravelClass}
|
|
20
22
|
/>
|
|
@@ -3,16 +3,19 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
3
3
|
import { QSMRootState } from '../../store/qsm-store';
|
|
4
4
|
import { setAdults, setKids, setBabies, setRooms, addRoom, removeRoom, updateRoomTraveler } from '../../store/qsm-slice';
|
|
5
5
|
import QSMConfigurationContext from '../../qsm-configuration-context';
|
|
6
|
+
import { getTranslations } from '../../../shared/utils/localization-util';
|
|
6
7
|
import TravelClassPicker from '../travel-class-picker';
|
|
7
8
|
import TravelTypePicker from '../travel-type-picker';
|
|
8
9
|
import Icon from '../icon';
|
|
9
10
|
|
|
10
11
|
const TravelInput: React.FC = () => {
|
|
11
|
-
const { type, askRooms, maxTravelers, defaultTravelers, maxChildAge, maxInfantAge, askTravelType, askTravelClass } =
|
|
12
|
+
const { type, askRooms, maxTravelers, defaultTravelers, maxChildAge, maxInfantAge, askTravelType, askTravelClass, languageCode } =
|
|
13
|
+
useContext(QSMConfigurationContext);
|
|
12
14
|
const areTravelersInRooms = type !== 'flight' && askRooms;
|
|
13
15
|
|
|
14
16
|
const dispatch = useDispatch();
|
|
15
17
|
const { adults, kids, babies, rooms } = useSelector((state: QSMRootState) => state.qsm);
|
|
18
|
+
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
16
19
|
|
|
17
20
|
const getTravelerButtonClass = (disabled: boolean) => `button button--increment ${disabled ? 'button--disabled' : ''}`;
|
|
18
21
|
|
|
@@ -67,9 +70,9 @@ const TravelInput: React.FC = () => {
|
|
|
67
70
|
|
|
68
71
|
// Compute age labels dynamically
|
|
69
72
|
const ageLabels = {
|
|
70
|
-
adults: maxChildAge ? `${maxChildAge + 1}+
|
|
71
|
-
kids: maxChildAge && maxInfantAge ? `${maxInfantAge + 1}-${maxChildAge}
|
|
72
|
-
babies: maxInfantAge !== undefined ? `0-${maxInfantAge}
|
|
73
|
+
adults: maxChildAge ? `${maxChildAge + 1}+ ${translations.PRODUCT.YEAR}` : `12+ ${translations.PRODUCT.YEAR}`,
|
|
74
|
+
kids: maxChildAge && maxInfantAge ? `${maxInfantAge + 1}-${maxChildAge} ${translations.PRODUCT.YEAR}` : `2-11 ${translations.PRODUCT.YEAR}`,
|
|
75
|
+
babies: maxInfantAge !== undefined ? `0-${maxInfantAge} ${translations.PRODUCT.YEAR}` : `0-1 ${translations.PRODUCT.YEAR}`
|
|
73
76
|
};
|
|
74
77
|
|
|
75
78
|
return (
|
|
@@ -78,7 +81,7 @@ const TravelInput: React.FC = () => {
|
|
|
78
81
|
<div>
|
|
79
82
|
<div className="passenger-picker__rooms-header">
|
|
80
83
|
<h4 className="passenger-picker__rooms-header-title">
|
|
81
|
-
|
|
84
|
+
{translations.SHARED.ROOMS}: <span className="passenger-picker__rooms-header-count">{rooms.length}</span>
|
|
82
85
|
</h4>
|
|
83
86
|
{rooms.length < 4 && (
|
|
84
87
|
<div
|
|
@@ -88,7 +91,7 @@ const TravelInput: React.FC = () => {
|
|
|
88
91
|
handleAddRoom();
|
|
89
92
|
}
|
|
90
93
|
}}>
|
|
91
|
-
|
|
94
|
+
{translations.QSM.ADD_ROOM}
|
|
92
95
|
</div>
|
|
93
96
|
)}
|
|
94
97
|
</div>
|
|
@@ -129,7 +132,7 @@ const TravelInput: React.FC = () => {
|
|
|
129
132
|
{rooms.length > 1 && (
|
|
130
133
|
<div className="passenger-picker__remove-room">
|
|
131
134
|
<button type="button" className="cta--remove" onClick={() => handleRemoveRoom(idx)}>
|
|
132
|
-
|
|
135
|
+
{translations.QSM.REMOVE_ROOM}
|
|
133
136
|
</button>
|
|
134
137
|
</div>
|
|
135
138
|
)}
|
|
@@ -143,7 +146,7 @@ const TravelInput: React.FC = () => {
|
|
|
143
146
|
transform="translate(-96 864)"
|
|
144
147
|
/>
|
|
145
148
|
</svg>
|
|
146
|
-
<span className="passenger-picker__info-message-explanation">
|
|
149
|
+
<span className="passenger-picker__info-message-explanation">{translations.QSM.MAX_TRAVELERS_REACHED}</span>
|
|
147
150
|
</div>
|
|
148
151
|
)}
|
|
149
152
|
|
|
@@ -158,7 +161,7 @@ const TravelInput: React.FC = () => {
|
|
|
158
161
|
{/* Adults */}
|
|
159
162
|
<div className="passenger-picker__item">
|
|
160
163
|
<div className="passenger-picker__item-text">
|
|
161
|
-
<span>
|
|
164
|
+
<span>{translations.QSM.ADULTS}</span>
|
|
162
165
|
<span className="passenger-picker__item-text-age">{ageLabels.adults}</span>
|
|
163
166
|
</div>
|
|
164
167
|
<div className="decrement-increment__ui">
|
|
@@ -177,7 +180,7 @@ const TravelInput: React.FC = () => {
|
|
|
177
180
|
{/* Children */}
|
|
178
181
|
<div className="passenger-picker__item">
|
|
179
182
|
<div className="passenger-picker__item-text">
|
|
180
|
-
<span>
|
|
183
|
+
<span>{translations.QSM.CHILDREN}</span>
|
|
181
184
|
<span className="passenger-picker__item-text-age">{ageLabels.kids}</span>
|
|
182
185
|
</div>
|
|
183
186
|
<div className="decrement-increment__ui">
|
|
@@ -194,7 +197,7 @@ const TravelInput: React.FC = () => {
|
|
|
194
197
|
{/* Babies */}
|
|
195
198
|
<div className="passenger-picker__item">
|
|
196
199
|
<div className="passenger-picker__item-text">
|
|
197
|
-
<span>
|
|
200
|
+
<span>{translations.QSM.BABIES}</span>
|
|
198
201
|
<span className="passenger-picker__item-text-age">{ageLabels.babies}</span>
|
|
199
202
|
</div>
|
|
200
203
|
<div className="decrement-increment__ui">
|
|
@@ -220,7 +223,7 @@ const TravelInput: React.FC = () => {
|
|
|
220
223
|
transform="translate(-96 864)"
|
|
221
224
|
/>
|
|
222
225
|
</svg>
|
|
223
|
-
<span className="passenger-picker__info-message-explanation">
|
|
226
|
+
<span className="passenger-picker__info-message-explanation">{translations.QSM.MAX_TRAVELERS_REACHED}</span>
|
|
224
227
|
</div>
|
|
225
228
|
)}
|
|
226
229
|
|
|
@@ -6,6 +6,7 @@ import useMediaQuery from '../../../shared/utils/use-media-query-util';
|
|
|
6
6
|
import { QSMRootState } from '../../store/qsm-store';
|
|
7
7
|
import QSMConfigurationContext from '../../qsm-configuration-context';
|
|
8
8
|
import Icon from '../icon';
|
|
9
|
+
import { getTranslations } from '../../../shared/utils/localization-util';
|
|
9
10
|
|
|
10
11
|
const selectTravelerSummary = (state: QSMRootState, areTravelersInRooms: boolean | undefined) => {
|
|
11
12
|
const { adults, kids, babies, rooms, selectedTravelType } = state.qsm;
|
|
@@ -29,7 +30,9 @@ const TravelInputGroup: React.FC = () => {
|
|
|
29
30
|
const isSmallScreen = useMediaQuery('(max-width: 768px)');
|
|
30
31
|
const [isOpen, setIsOpen] = useState(false);
|
|
31
32
|
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
32
|
-
const { type, askRooms, defaultTravelers, maxTravelers } = useContext(QSMConfigurationContext);
|
|
33
|
+
const { type, askRooms, defaultTravelers, maxTravelers, languageCode } = useContext(QSMConfigurationContext);
|
|
34
|
+
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
35
|
+
|
|
33
36
|
const areTravelersInRooms = type !== 'flight' && askRooms;
|
|
34
37
|
|
|
35
38
|
const { adults, rooms } = useSelector((s: QSMRootState) => s.qsm);
|
|
@@ -86,8 +89,16 @@ const TravelInputGroup: React.FC = () => {
|
|
|
86
89
|
<div ref={wrapperRef} className="qsm__single-input-wrapper qsm__single-input-wrapper--travel">
|
|
87
90
|
<Icon name="ui-user" height={16} />
|
|
88
91
|
|
|
89
|
-
<span className="qsm__label">
|
|
90
|
-
<input
|
|
92
|
+
<span className="qsm__label">{translations.QSM.TRAVELERS_LABEL}</span>
|
|
93
|
+
<input
|
|
94
|
+
type="text"
|
|
95
|
+
id="traveler"
|
|
96
|
+
className="qsm__input u-ps-2"
|
|
97
|
+
placeholder={translations.QSM.TRAVELERS_LABEL}
|
|
98
|
+
readOnly
|
|
99
|
+
onClick={handleClick}
|
|
100
|
+
value={travelerSummary}
|
|
101
|
+
/>
|
|
91
102
|
|
|
92
103
|
{!isSmallScreen && isOpen && (
|
|
93
104
|
<div>
|
|
@@ -4,17 +4,19 @@ import { QSMRootState } from '../../store/qsm-store';
|
|
|
4
4
|
import { setSelectedNationality } from '../../store/qsm-slice';
|
|
5
5
|
import QSMConfigurationContext from '../../qsm-configuration-context';
|
|
6
6
|
import ItemPicker from '../item-picker';
|
|
7
|
+
import { getTranslations } from '../../../shared/utils/localization-util';
|
|
7
8
|
|
|
8
9
|
const TravelNationalityPicker: React.FC = () => {
|
|
9
|
-
const { nationalities } = useContext(QSMConfigurationContext);
|
|
10
|
+
const { nationalities, languageCode } = useContext(QSMConfigurationContext);
|
|
11
|
+
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
10
12
|
const { selectedNationality } = useSelector((state: QSMRootState) => state.qsm);
|
|
11
13
|
|
|
12
14
|
return (
|
|
13
15
|
<ItemPicker
|
|
14
16
|
items={nationalities}
|
|
15
17
|
selection={selectedNationality}
|
|
16
|
-
label=
|
|
17
|
-
placeholder=
|
|
18
|
+
label={translations.QSM.NATIONALITY_LABEL}
|
|
19
|
+
placeholder={translations.QSM.NATIONALITY_PLACEHOLDER}
|
|
18
20
|
classModifier="travel-class-picker__items"
|
|
19
21
|
onPick={setSelectedNationality}
|
|
20
22
|
/>
|
|
@@ -4,17 +4,19 @@ import { QSMRootState } from '../../store/qsm-store';
|
|
|
4
4
|
import { setSelectedTravelType } from '../../store/qsm-slice';
|
|
5
5
|
import QSMConfigurationContext from '../../qsm-configuration-context';
|
|
6
6
|
import ItemPicker from '../item-picker';
|
|
7
|
+
import { getTranslations } from '../../../shared/utils/localization-util';
|
|
7
8
|
|
|
8
9
|
const TravelTypePicker: React.FC = () => {
|
|
9
|
-
const { travelTypes } = useContext(QSMConfigurationContext);
|
|
10
|
+
const { travelTypes, languageCode } = useContext(QSMConfigurationContext);
|
|
11
|
+
const translations = getTranslations(languageCode ?? 'en-GB');
|
|
10
12
|
const { selectedTravelType } = useSelector((state: QSMRootState) => state.qsm);
|
|
11
13
|
|
|
12
14
|
return (
|
|
13
15
|
<ItemPicker
|
|
14
16
|
items={travelTypes}
|
|
15
17
|
selection={selectedTravelType}
|
|
16
|
-
label=
|
|
17
|
-
placeholder=
|
|
18
|
+
label={translations.QSM.TRAVEL_TYPE_LABEL}
|
|
19
|
+
placeholder={translations.QSM.TRAVEL_TYPE_PLACEHOLDER}
|
|
18
20
|
classModifier="travel-type-picker__items"
|
|
19
21
|
onPick={setSelectedTravelType}
|
|
20
22
|
/>
|