@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.
Files changed (64) hide show
  1. package/build/build-cjs/index.js +1674 -416
  2. package/build/build-cjs/qsm/types.d.ts +0 -1
  3. package/build/build-cjs/search-results/components/filters/filters.d.ts +2 -2
  4. package/build/build-cjs/search-results/components/flight/flight-results.d.ts +2 -0
  5. package/build/build-cjs/search-results/components/hotel/hotel-card.d.ts +1 -0
  6. package/build/build-cjs/search-results/components/itinerary/index.d.ts +2 -2
  7. package/build/build-cjs/search-results/store/search-results-slice.d.ts +11 -2
  8. package/build/build-cjs/search-results/types.d.ts +0 -14
  9. package/build/build-esm/index.js +1674 -416
  10. package/build/build-esm/qsm/types.d.ts +0 -1
  11. package/build/build-esm/search-results/components/filters/filters.d.ts +2 -2
  12. package/build/build-esm/search-results/components/flight/flight-results.d.ts +2 -0
  13. package/build/build-esm/search-results/components/hotel/hotel-card.d.ts +1 -0
  14. package/build/build-esm/search-results/components/itinerary/index.d.ts +2 -2
  15. package/build/build-esm/search-results/store/search-results-slice.d.ts +11 -2
  16. package/build/build-esm/search-results/types.d.ts +0 -14
  17. package/package.json +77 -77
  18. package/src/booking-product/components/product.tsx +26 -22
  19. package/src/booking-wizard/features/booking/booking-self-contained.tsx +303 -304
  20. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +5 -5
  21. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +10 -10
  22. package/src/content/components/icon.tsx +1 -1
  23. package/src/content/features/content-page/content-page-self-contained.tsx +0 -1
  24. package/src/qsm/components/QSMContainer/qsm-container.tsx +217 -218
  25. package/src/qsm/components/mobile-filter-modal/index.tsx +12 -10
  26. package/src/qsm/components/travel-class-picker/index.tsx +5 -3
  27. package/src/qsm/components/travel-input/index.tsx +15 -12
  28. package/src/qsm/components/travel-input-group/index.tsx +14 -3
  29. package/src/qsm/components/travel-nationality-picker/index.tsx +5 -3
  30. package/src/qsm/components/travel-type-picker/index.tsx +5 -3
  31. package/src/qsm/qsm-configuration-context.ts +0 -1
  32. package/src/qsm/store/qsm-slice.ts +261 -261
  33. package/src/qsm/types.ts +144 -145
  34. package/src/search-results/components/filters/filters.tsx +15 -16
  35. package/src/search-results/components/flight/flight-results.tsx +168 -1099
  36. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +21 -24
  37. package/src/search-results/components/hotel/hotel-card.tsx +4 -3
  38. package/src/search-results/components/icon.tsx +1 -1
  39. package/src/search-results/components/itinerary/index.tsx +229 -129
  40. package/src/search-results/components/round-trip/round-trip-results.tsx +1 -1
  41. package/src/search-results/components/search-results-container/search-results-container.tsx +353 -337
  42. package/src/search-results/components/spinner/spinner.tsx +3 -1
  43. package/src/search-results/components/tab-views/index.tsx +13 -7
  44. package/src/search-results/features/flights/flight-search-results-self-contained.tsx +1 -14
  45. package/src/search-results/features/hotels/hotel-search-results-self-contained.tsx +1 -14
  46. package/src/search-results/store/search-results-slice.ts +37 -3
  47. package/src/search-results/types.ts +0 -15
  48. package/src/shared/translations/ar-SA.json +70 -0
  49. package/src/shared/translations/da-DK.json +70 -0
  50. package/src/shared/translations/de-DE.json +70 -0
  51. package/src/shared/translations/en-GB.json +71 -1
  52. package/src/shared/translations/es-ES.json +70 -0
  53. package/src/shared/translations/fr-BE.json +71 -1
  54. package/src/shared/translations/fr-FR.json +70 -0
  55. package/src/shared/translations/is-IS.json +72 -2
  56. package/src/shared/translations/it-IT.json +70 -0
  57. package/src/shared/translations/ja-JP.json +72 -2
  58. package/src/shared/translations/nl-BE.json +70 -0
  59. package/src/shared/translations/nl-NL.json +70 -0
  60. package/src/shared/translations/no-NO.json +72 -2
  61. package/src/shared/translations/pl-PL.json +70 -0
  62. package/src/shared/translations/pt-PT.json +70 -0
  63. package/src/shared/translations/sv-SE.json +72 -2
  64. 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="Reisklasse"
17
- placeholder="Selecteer reisklasse"
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 } = useContext(QSMConfigurationContext);
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}+ jaar` : '12+ jaar',
71
- kids: maxChildAge && maxInfantAge ? `${maxInfantAge + 1}-${maxChildAge} jaar` : '2-11 jaar',
72
- babies: maxInfantAge !== undefined ? `0-${maxInfantAge} jaar` : '0-1 jaar'
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
- Kamers: <span className="passenger-picker__rooms-header-count">{rooms.length}</span>
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
- Kamer toevoegen
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
- Verwijder kamer
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">Je zit aan het maximale aantal personen</span>
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>Volwassenen</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>Kinderen</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>Baby&squot;s</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">Je zit aan het maximale aantal personen</span>
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">Met wie ga je?</span>
90
- <input type="text" id="traveler" className="qsm__input u-ps-2" placeholder="Met wie ga je?" readOnly onClick={handleClick} value={travelerSummary} />
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="Nationaliteit"
17
- placeholder="Selecteer nationaliteit"
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="Reistype"
17
- placeholder="Selecteer reistype"
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
  />
@@ -34,7 +34,6 @@ const QSMConfigurationContext = React.createContext<QSMConfiguration>({
34
34
  datesIcon: '',
35
35
 
36
36
  onSubmit: () => {},
37
- submitLabel: 'Zoeken',
38
37
  submitIcon: ''
39
38
  });
40
39