@qite/tide-booking-component 1.4.103 → 1.4.105

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 (70) hide show
  1. package/build/build-cjs/index.js +2782 -1052
  2. package/build/build-cjs/src/search-results/components/excursions/day-by-day-excursions.d.ts +4 -0
  3. package/build/build-cjs/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  4. package/build/build-cjs/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  5. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +2 -0
  6. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  7. package/build/build-cjs/src/search-results/store/search-results-selectors.d.ts +546 -0
  8. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +55 -8
  9. package/build/build-cjs/src/search-results/types.d.ts +40 -2
  10. package/build/build-cjs/src/search-results/utils/query-utils.d.ts +1 -0
  11. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +8 -6
  12. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +4 -3
  13. package/build/build-cjs/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  14. package/build/build-cjs/src/shared/utils/localization-util.d.ts +3 -0
  15. package/build/build-cjs/src/shared/utils/tide-api-utils.d.ts +6 -0
  16. package/build/build-esm/index.js +2735 -1023
  17. package/build/build-esm/src/search-results/components/excursions/day-by-day-excursions.d.ts +4 -0
  18. package/build/build-esm/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  19. package/build/build-esm/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  20. package/build/build-esm/src/search-results/components/filters/filters.d.ts +2 -0
  21. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  22. package/build/build-esm/src/search-results/store/search-results-selectors.d.ts +546 -0
  23. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +55 -8
  24. package/build/build-esm/src/search-results/types.d.ts +40 -2
  25. package/build/build-esm/src/search-results/utils/query-utils.d.ts +1 -0
  26. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +8 -6
  27. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +4 -3
  28. package/build/build-esm/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  29. package/build/build-esm/src/shared/utils/localization-util.d.ts +3 -0
  30. package/build/build-esm/src/shared/utils/tide-api-utils.d.ts +6 -0
  31. package/package.json +2 -2
  32. package/src/booking-wizard/features/flight-options/index.tsx +6 -2
  33. package/src/search-results/components/excursions/day-by-day-excursions.tsx +169 -0
  34. package/src/search-results/components/excursions/excursion-details.tsx +340 -0
  35. package/src/search-results/components/excursions/excursion-results.tsx +186 -0
  36. package/src/search-results/components/filters/filters.tsx +8 -9
  37. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +81 -24
  38. package/src/search-results/components/hotel/hotel-card.tsx +0 -3
  39. package/src/search-results/components/icon.tsx +1 -4
  40. package/src/search-results/components/search-results-container/search-results-container.tsx +208 -130
  41. package/src/search-results/store/search-results-selectors.ts +84 -0
  42. package/src/search-results/store/search-results-slice.ts +138 -15
  43. package/src/search-results/types.ts +55 -2
  44. package/src/search-results/utils/query-utils.ts +1 -0
  45. package/src/search-results/utils/search-results-utils.ts +310 -58
  46. package/src/shared/components/flyin/accommodation-flyin.tsx +4 -2
  47. package/src/shared/components/flyin/flights-flyin.tsx +3 -1
  48. package/src/shared/components/flyin/flyin.tsx +116 -21
  49. package/src/shared/components/flyin/group-tour-flyin.tsx +3 -1
  50. package/src/shared/components/flyin/packaging-flights-flyin.tsx +164 -0
  51. package/src/shared/translations/ar-SA.json +4 -2
  52. package/src/shared/translations/da-DK.json +4 -2
  53. package/src/shared/translations/de-DE.json +4 -2
  54. package/src/shared/translations/en-GB.json +4 -2
  55. package/src/shared/translations/es-ES.json +4 -2
  56. package/src/shared/translations/fr-BE.json +4 -2
  57. package/src/shared/translations/fr-FR.json +4 -2
  58. package/src/shared/translations/is-IS.json +4 -2
  59. package/src/shared/translations/it-IT.json +4 -2
  60. package/src/shared/translations/ja-JP.json +4 -2
  61. package/src/shared/translations/nl-BE.json +4 -2
  62. package/src/shared/translations/nl-NL.json +4 -2
  63. package/src/shared/translations/no-NO.json +4 -2
  64. package/src/shared/translations/pl-PL.json +4 -2
  65. package/src/shared/translations/pt-PT.json +4 -2
  66. package/src/shared/translations/sv-SE.json +4 -2
  67. package/src/shared/utils/localization-util.ts +14 -0
  68. package/src/shared/utils/tide-api-utils.ts +8 -0
  69. package/styles/components/_flyin.scss +16 -0
  70. package/styles/components/_search.scss +15 -2
@@ -0,0 +1,164 @@
1
+ import React, { useContext, useState } from 'react';
2
+ import { useDispatch, useSelector } from 'react-redux';
3
+ import {
4
+ resetFlightFilters,
5
+ setFlightFilters,
6
+ setFlightSortType,
7
+ setFlyInIsOpen,
8
+ setFlyInType,
9
+ setSelectedOutwardKey,
10
+ setSelectedReturnKey
11
+ } from '../../../search-results/store/search-results-slice';
12
+ import { SearchResultsRootState } from '../../../search-results/store/search-results-store';
13
+ import Spinner from '../../../search-results/components/spinner/spinner';
14
+ import SearchResultsConfigurationContext from '../../../search-results/search-results-configuration-context';
15
+ import { findSortByType, getSortingName, getTranslations } from '../../utils/localization-util';
16
+ import { getFlightKey } from '../../../search-results/utils/flight-utils';
17
+ import {
18
+ selectSelectedOutward,
19
+ selectSelectedReturn,
20
+ selectUniqueOutwardFlights,
21
+ selectUniqueReturnFlights
22
+ } from '../../../search-results/store/search-results-selectors';
23
+ import IndependentFlightOption from '../../../search-results/components/flight/flight-selection/independent-flight-option';
24
+ import Filters from '../../../search-results/components/filters/filters';
25
+ import { SortByType } from '../../../search-results/types';
26
+ import ItemPicker from '../../../search-results/components/item-picker';
27
+
28
+ type FlightsFlyInProps = {
29
+ isOpen: boolean;
30
+ setIsOpen: (open: boolean) => void;
31
+ };
32
+
33
+ const PackageingFlightsFlyIn: React.FC<FlightsFlyInProps> = ({ isOpen, setIsOpen }) => {
34
+ const context = useContext(SearchResultsConfigurationContext);
35
+ const language = context?.languageCode ?? 'en-GB';
36
+ const translations = getTranslations(language);
37
+
38
+ const dispatch = useDispatch();
39
+ const { flightsLoading, initialFlightFilters, flightFilters, flyInType, selectedFlightSortType } = useSelector(
40
+ (state: SearchResultsRootState) => state.searchResults
41
+ );
42
+ const uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
43
+ const uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
44
+ const selectedOutward = useSelector(selectSelectedOutward);
45
+ const selectedReturn = useSelector(selectSelectedReturn);
46
+
47
+ const [outwardStepComplete, setOutwardStepComplete] = useState<boolean>(false);
48
+
49
+ const handleConfirm = (): void => {
50
+ if (!outwardStepComplete) {
51
+ setOutwardStepComplete(true);
52
+ dispatch(setFlyInType('flight-return-results'));
53
+ return;
54
+ } else {
55
+ dispatch(setFlyInType(null));
56
+ setOutwardStepComplete(false);
57
+ dispatch(setFlyInIsOpen(false));
58
+ }
59
+ };
60
+
61
+ const sortByTypes = [
62
+ { direction: 'asc', label: 'default' } as SortByType,
63
+ { direction: 'asc', label: 'price' } as SortByType,
64
+ { direction: 'desc', label: 'price' } as SortByType,
65
+ { direction: 'asc', label: 'departureTime' } as SortByType,
66
+ { direction: 'desc', label: 'departureTime' } as SortByType,
67
+ { direction: 'asc', label: 'durationInTicks' } as SortByType,
68
+ { direction: 'desc', label: 'durationInTicks' } as SortByType
69
+ ];
70
+
71
+ const handleSortChange = (newSortKey: string, direction?: string) => {
72
+ if (sortByTypes === undefined) return;
73
+ const newSortByType = findSortByType(sortByTypes, newSortKey, direction ?? 'asc');
74
+ if (newSortByType) {
75
+ dispatch(setFlightSortType(newSortByType));
76
+ }
77
+ };
78
+
79
+ return (
80
+ <>
81
+ <div className="flyin__content flyin__content--columns">
82
+ {flightsLoading ? (
83
+ <Spinner />
84
+ ) : (
85
+ <>
86
+ <Filters
87
+ initialFilters={initialFlightFilters}
88
+ filters={flightFilters}
89
+ isOpen={false}
90
+ handleSetIsOpen={() => {}}
91
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
92
+ isLoading={flightsLoading}
93
+ setFilters={(filters) => dispatch(setFlightFilters(filters))}
94
+ resetFilters={(filters) => dispatch(resetFlightFilters(filters))}
95
+ />
96
+ <div className="search__results__wrapper">
97
+ <div className="search__result-row">
98
+ <span className="search__result-row-text">
99
+ {uniqueOutwardFlights?.length && uniqueOutwardFlights.length}
100
+ &nbsp;{translations.FLIGHTS_FORM.FLIGHTS_FOUND_2}&nbsp;{translations.FLIGHTS_FORM.FLIGHTS_FOUND_3}
101
+ </span>
102
+ {sortByTypes && sortByTypes.length > 0 && (
103
+ <div className="search__result-row-filter">
104
+ <ItemPicker
105
+ items={sortByTypes}
106
+ selection={selectedFlightSortType?.label || undefined}
107
+ selectedSortByType={selectedFlightSortType || undefined}
108
+ label={translations.SRP.SORTBY}
109
+ placeholder={translations.SRP.SORTBY}
110
+ classModifier=""
111
+ valueFormatter={(value, direction) => getSortingName(translations, findSortByType(sortByTypes, value, direction ?? 'asc'))}
112
+ // onPick={handleSortChange}
113
+ onPick={(newSortKey, direction) => handleSortChange(newSortKey, direction)}
114
+ />
115
+ </div>
116
+ )}
117
+ </div>
118
+ <div className="search__results__cards search__results__cards--extended">
119
+ {flyInType == 'flight-outward-results' &&
120
+ uniqueOutwardFlights.map((result) => (
121
+ <IndependentFlightOption
122
+ key={`flight-${result.outwardGuid}`}
123
+ item={result.outward}
124
+ onSelect={() => dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)))}
125
+ guid={result.outwardGuid}
126
+ isOutward={true}
127
+ price={result.price}
128
+ currentSelectedPrice={selectedOutward?.price}
129
+ selectedGuid={selectedOutward?.outwardGuid}
130
+ showSelectedState={true}
131
+ />
132
+ ))}
133
+ {flyInType == 'flight-return-results' &&
134
+ uniqueReturnFlights.map((result) => (
135
+ <IndependentFlightOption
136
+ key={`flight-${result.outwardGuid}`}
137
+ item={result.return}
138
+ onSelect={() => dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)))}
139
+ guid={result.outwardGuid}
140
+ isOutward={false}
141
+ price={result.price}
142
+ currentSelectedPrice={selectedReturn?.price}
143
+ selectedGuid={selectedReturn?.outwardGuid}
144
+ showSelectedState={true}
145
+ />
146
+ ))}
147
+ </div>
148
+ </div>
149
+ </>
150
+ )}
151
+ </div>
152
+ <div className="flyin__footer">
153
+ <div className="flyin__footer__price"></div>
154
+ <div className="flyin__button-wrapper">
155
+ <button className="cta cta--select" onClick={() => handleConfirm()}>
156
+ {translations.QSM.CONFIRM}
157
+ </button>
158
+ </div>
159
+ </div>
160
+ </>
161
+ );
162
+ };
163
+
164
+ export default PackageingFlightsFlyIn;
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "تاريخ العودة",
329
329
  "CONFIRM": "تأكيد",
330
330
  "TRAVELERS": "المسافرون",
331
- "GROUP_TOUR": "جولة جماعية"
331
+ "GROUP_TOUR": "جولة جماعية",
332
+ "ALL_TRAVELERS": "جميع المسافرين"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "عرض المزيد",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_TIME_DESC": "وقت المغادرة تنازلياً",
380
381
  "DURATION_ASC": "المدة تصاعدياً",
381
382
  "DURATION_DESC": "المدة تنازلياً",
382
- "TRAVEL_GROUP": "مجموعة المسافرين"
383
+ "TRAVEL_GROUP": "مجموعة المسافرين",
384
+ "EXCURSION": "رحلة"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Hjemrejsedato",
329
329
  "CONFIRM": "Bekræft",
330
330
  "TRAVELERS": "Rejsende",
331
- "GROUP_TOUR": "Grupperejse"
331
+ "GROUP_TOUR": "Grupperejse",
332
+ "ALL_TRAVELERS": "Alle rejsende"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Vis flere",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_TIME_DESC": "Afgangstid faldende",
380
381
  "DURATION_ASC": "Varighed stigende",
381
382
  "DURATION_DESC": "Varighed faldende",
382
- "TRAVEL_GROUP": "Rejseselskab"
383
+ "TRAVEL_GROUP": "Rejseselskab",
384
+ "EXCURSION": "Udflugt"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Rückreisedatum",
329
329
  "CONFIRM": "Bestätigen",
330
330
  "TRAVELERS": "Reisende",
331
- "GROUP_TOUR": "Gruppentour"
331
+ "GROUP_TOUR": "Gruppentour",
332
+ "ALL_TRAVELERS": "Alle Reisenden"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Mehr anzeigen",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Abflughäfen",
380
381
  "ARRIVAL_AIRPORTS": "Ankunftsflughäfen",
381
382
  "PRICE": "Preis",
382
- "TRAVEL_GROUP": "Reisegruppe"
383
+ "TRAVEL_GROUP": "Reisegruppe",
384
+ "EXCURSION": "Ausflug"
383
385
  }
384
386
  }
@@ -332,7 +332,8 @@
332
332
  "RETURN_DATE": "Return date",
333
333
  "CONFIRM": "Confirm",
334
334
  "TRAVELERS": "Travelers",
335
- "GROUP_TOUR": "Group tour"
335
+ "GROUP_TOUR": "Group tour",
336
+ "ALL_TRAVELERS": "All travelers"
336
337
  },
337
338
  "SRP": {
338
339
  "SHOW_MORE": "Show more",
@@ -383,6 +384,7 @@
383
384
  "DEPARTURE_RANGE": "Departure range",
384
385
  "DEPARTURE_AIRPORTS": "Departure airports",
385
386
  "ARRIVAL_AIRPORTS": "Arrival airports",
386
- "TRAVEL_GROUP": "Travel group"
387
+ "TRAVEL_GROUP": "Travel group",
388
+ "EXCURSION": "Excursion"
387
389
  }
388
390
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Fecha de regreso",
329
329
  "CONFIRM": "Confirmar",
330
330
  "TRAVELERS": "Viajeros",
331
- "GROUP_TOUR": "Tour grupal"
331
+ "GROUP_TOUR": "Tour grupal",
332
+ "ALL_TRAVELERS": "Todos los viajeros"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Mostrar más",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Aeropuertos de salida",
380
381
  "ARRIVAL_AIRPORTS": "Aeropuertos de llegada",
381
382
  "PRICE": "Precio",
382
- "TRAVEL_GROUP": "Grupo de viaje"
383
+ "TRAVEL_GROUP": "Grupo de viaje",
384
+ "EXCURSION": "Excursión"
383
385
  }
384
386
  }
@@ -332,7 +332,8 @@
332
332
  "RETURN_DATE": "Date de retour",
333
333
  "CONFIRM": "Confirmer",
334
334
  "TRAVELERS": "Voyageurs",
335
- "GROUP_TOUR": "Tour en groupe"
335
+ "GROUP_TOUR": "Tour en groupe",
336
+ "ALL_TRAVELERS": "Tous les voyageurs"
336
337
  },
337
338
  "SRP": {
338
339
  "SHOW_MORE": "Afficher plus",
@@ -383,6 +384,7 @@
383
384
  "DEPARTURE_AIRPORTS": "Aéroports de départ",
384
385
  "ARRIVAL_AIRPORTS": "Aéroports d’arrivée",
385
386
  "PRICE": "Prix",
386
- "TRAVEL_GROUP": "Groupe de voyageurs"
387
+ "TRAVEL_GROUP": "Groupe de voyageurs",
388
+ "EXCURSION": "Excursion"
387
389
  }
388
390
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Date de retour",
329
329
  "CONFIRM": "Confirmer",
330
330
  "TRAVELERS": "Voyageurs",
331
- "GROUP_TOUR": "Tour en groupe"
331
+ "GROUP_TOUR": "Tour en groupe",
332
+ "ALL_TRAVELERS": "Tous les voyageurs"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Afficher plus",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Aéroports de départ",
380
381
  "ARRIVAL_AIRPORTS": "Aéroports d’arrivée",
381
382
  "PRICE": "Prix",
382
- "TRAVEL_GROUP": "Groupe de voyageurs"
383
+ "TRAVEL_GROUP": "Groupe de voyageurs",
384
+ "EXCURSION": "Excursion"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Heimkomudagur",
329
329
  "CONFIRM": "Staðfesta",
330
330
  "TRAVELERS": "Ferðalangar",
331
- "GROUP_TOUR": "Ferð í hóp"
331
+ "GROUP_TOUR": "Ferð í hóp",
332
+ "ALL_TRAVELERS": "Allir ferðalangar"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Sýna meira",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Brottfararflugvellir",
380
381
  "ARRIVAL_AIRPORTS": "Komuflugvellir",
381
382
  "PRICE": "Verð",
382
- "TRAVEL_GROUP": "Ferðahópur"
383
+ "TRAVEL_GROUP": "Ferðahópur",
384
+ "EXCURSION": "Útflutningur"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Data di ritorno",
329
329
  "CONFIRM": "Conferma",
330
330
  "TRAVELERS": "Viaggiatori",
331
- "GROUP_TOUR": "Tour di gruppo"
331
+ "GROUP_TOUR": "Tour di gruppo",
332
+ "ALL_TRAVELERS": "Tutti i viaggiatori"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Mostra di più",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Aeroporti di partenza",
380
381
  "ARRIVAL_AIRPORTS": "Aeroporti di arrivo",
381
382
  "PRICE": "Prezzo",
382
- "TRAVEL_GROUP": "Gruppo di viaggio"
383
+ "TRAVEL_GROUP": "Gruppo di viaggio",
384
+ "EXCURSION": "Escursione"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "帰着日",
329
329
  "CONFIRM": "確認",
330
330
  "TRAVELERS": "旅行者",
331
- "GROUP_TOUR": "グループツアー"
331
+ "GROUP_TOUR": "グループツアー",
332
+ "ALL_TRAVELERS": "すべての旅行者"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "もっと見る",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "出発空港",
380
381
  "ARRIVAL_AIRPORTS": "到着空港",
381
382
  "PRICE": "価格",
382
- "TRAVEL_GROUP": "旅行グループ"
383
+ "TRAVEL_GROUP": "旅行グループ",
384
+ "EXCURSION": "エクスカーション"
383
385
  }
384
386
  }
@@ -332,7 +332,8 @@
332
332
  "RETURN_DATE": "Terugkeerdatum",
333
333
  "CONFIRM": "Bevestigen",
334
334
  "TRAVELERS": "Reizigers",
335
- "GROUP_TOUR": "Groepsreis"
335
+ "GROUP_TOUR": "Groepsreis",
336
+ "ALL_TRAVELERS": "Alle reizigers"
336
337
  },
337
338
  "SRP": {
338
339
  "SHOW_MORE": "Toon meer",
@@ -383,6 +384,7 @@
383
384
  "DEPARTURE_AIRPORTS": "Vertrekluchthavens",
384
385
  "ARRIVAL_AIRPORTS": "Aankomstluchthavens",
385
386
  "PRICE": "Prijs",
386
- "TRAVEL_GROUP": "Reisgezelschap"
387
+ "TRAVEL_GROUP": "Reisgezelschap",
388
+ "EXCURSION": "Excursie"
387
389
  }
388
390
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Terugkeerdatum",
329
329
  "CONFIRM": "Bevestigen",
330
330
  "TRAVELERS": "Reizigers",
331
- "GROUP_TOUR": "Groepsreis"
331
+ "GROUP_TOUR": "Groepsreis",
332
+ "ALL_TRAVELERS": "Alle reizigers"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Toon meer",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Vertrekluchthavens",
380
381
  "ARRIVAL_AIRPORTS": "Aankomstluchthavens",
381
382
  "PRICE": "Prijs",
382
- "TRAVEL_GROUP": "Reisgezelschap"
383
+ "TRAVEL_GROUP": "Reisgezelschap",
384
+ "EXCURSION": "Excursie"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Returdato",
329
329
  "CONFIRM": "Bekreft",
330
330
  "TRAVELERS": "Reisende",
331
- "GROUP_TOUR": "Gruppetur"
331
+ "GROUP_TOUR": "Gruppetur",
332
+ "ALL_TRAVELERS": "Alle reisende"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Vis mer",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Avgangsflyplasser",
380
381
  "ARRIVAL_AIRPORTS": "Ankomstflyplasser",
381
382
  "PRICE": "Pris",
382
- "TRAVEL_GROUP": "Reisefølge"
383
+ "TRAVEL_GROUP": "Reisefølge",
384
+ "EXCURSION": "Utflukt"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Data powrotu",
329
329
  "CONFIRM": "Potwierdź",
330
330
  "TRAVELERS": "Podróżni",
331
- "GROUP_TOUR": "Tour w grupie"
331
+ "GROUP_TOUR": "Tour w grupie",
332
+ "ALL_TRAVELERS": "Wszyscy podróżni"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Pokaż więcej",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Lotniska wylotu",
380
381
  "ARRIVAL_AIRPORTS": "Lotniska przylotu",
381
382
  "PRICE": "Cena",
382
- "TRAVEL_GROUP": "Grupa podróżnych"
383
+ "TRAVEL_GROUP": "Grupa podróżnych",
384
+ "EXCURSION": "Wycieczka"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Data de regresso",
329
329
  "CONFIRM": "Confirmar",
330
330
  "TRAVELERS": "Viajantes",
331
- "GROUP_TOUR": "Tour em grupo"
331
+ "GROUP_TOUR": "Tour em grupo",
332
+ "ALL_TRAVELERS": "All travelers"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Mostrar mais",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Aeroportos de partida",
380
381
  "ARRIVAL_AIRPORTS": "Aeroportos de chegada",
381
382
  "PRICE": "Preço",
382
- "TRAVEL_GROUP": "Grupo de viajantes"
383
+ "TRAVEL_GROUP": "Grupo de viajantes",
384
+ "EXCURSION": "Excursão"
383
385
  }
384
386
  }
@@ -328,7 +328,8 @@
328
328
  "RETURN_DATE": "Hemresedatum",
329
329
  "CONFIRM": "Bekräfta",
330
330
  "TRAVELERS": "Resenärer",
331
- "GROUP_TOUR": "Gruppresa"
331
+ "GROUP_TOUR": "Gruppresa",
332
+ "ALL_TRAVELERS": "All travelers"
332
333
  },
333
334
  "SRP": {
334
335
  "SHOW_MORE": "Visa mer",
@@ -379,6 +380,7 @@
379
380
  "DEPARTURE_AIRPORTS": "Avgångsflygplatser",
380
381
  "ARRIVAL_AIRPORTS": "Ankomstflygplatser",
381
382
  "PRICE": "Pris",
382
- "TRAVEL_GROUP": "Resesällskap"
383
+ "TRAVEL_GROUP": "Resesällskap",
384
+ "EXCURSION": "Utflykt"
383
385
  }
384
386
  }
@@ -276,3 +276,17 @@ export const getSortingName = (translations: any, sortByType: SortByType): strin
276
276
  export const findSortByType = (sortByTypes: SortByType[], sortKey: string, direction: string) => {
277
277
  return sortByTypes.find((s) => s.label === sortKey && s.direction === direction) || sortByTypes[0];
278
278
  };
279
+
280
+ export const getDatesBetween = (fromDate: string, toDate: string): Date[] => {
281
+ const dates: Date[] = [];
282
+
283
+ const current = new Date(fromDate);
284
+ const end = new Date(toDate);
285
+
286
+ while (current < end) {
287
+ dates.push(new Date(current));
288
+ current.setUTCDate(current.getUTCDate() + 1);
289
+ }
290
+
291
+ return dates;
292
+ };
@@ -2,6 +2,14 @@ import { TideClientConfig } from '@qite/tide-client';
2
2
  import { isNil } from 'lodash';
3
3
  import { ApiSettingsState } from '../types';
4
4
 
5
+ export const tideConnection = {
6
+ host: 'https://localhost:44341',
7
+ // host: 'https://preview-tide.tidesoftware.be',
8
+ apiKey: 'e9b95d79-de4c-41d6-ab7e-3dd429873058',
9
+ catalogueIds: [1],
10
+ officeId: 1
11
+ };
12
+
5
13
  export function buildTideClientConfig(settings?: ApiSettingsState): TideClientConfig {
6
14
  const HOST = settings?.apiUrl || process.env.REACT_APP_BOOKING_HOST;
7
15
  const API_KEY = settings?.apiKey || process.env.REACT_APP_BOOKING_API_KEY;
@@ -537,6 +537,20 @@
537
537
  }
538
538
  }
539
539
  }
540
+
541
+ &--columns {
542
+ display: flex;
543
+ gap: 10px;
544
+
545
+ .search__results__wrapper {
546
+ width: 100%;
547
+ }
548
+
549
+ .search__results__cards {
550
+ grid-template-rows: auto;
551
+ align-content: flex-start;
552
+ }
553
+ }
540
554
  }
541
555
 
542
556
  &__button {
@@ -601,6 +615,8 @@
601
615
 
602
616
  background: var(--tide-booking-white);
603
617
 
618
+ z-index: 1;
619
+
604
620
  @include mixins.media-sm {
605
621
  margin-top: auto;
606
622
  padding: 30px;
@@ -361,9 +361,12 @@
361
361
  }
362
362
 
363
363
  &__prices {
364
- padding: 0 20px;
365
364
  display: flex;
366
365
  flex-direction: column;
366
+ justify-content: center;
367
+
368
+ height: 173.5px;
369
+ padding: 0 20px;
367
370
 
368
371
  &__wrapper {
369
372
  padding: 20px 0px;
@@ -764,7 +767,12 @@
764
767
 
765
768
  &__actions {
766
769
  display: flex;
767
- justify-content: flex-end;
770
+ justify-content: space-between;
771
+ align-items: center;
772
+
773
+ .cta {
774
+ margin-left: auto;
775
+ }
768
776
  }
769
777
  }
770
778
 
@@ -1088,6 +1096,11 @@
1088
1096
  flex-direction: column;
1089
1097
  gap: 10px;
1090
1098
  }
1099
+
1100
+ &--extra {
1101
+ padding: 0 15px;
1102
+ margin-top: -20px;
1103
+ }
1091
1104
  }
1092
1105
 
1093
1106
  &__header {