@qite/tide-booking-component 1.4.81 → 1.4.83
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/.husky/pre-commit +1 -2
- package/build/build-cjs/index.js +4799 -260
- package/build/build-cjs/src/search-results/components/item-picker/index.d.ts +1 -1
- package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +3 -3
- package/build/build-cjs/src/search-results/types.d.ts +1 -0
- package/build/build-cjs/src/search-results/utils/flight-utils.d.ts +1 -2
- package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +7 -3
- package/build/build-cjs/src/shared/utils/localization-util.d.ts +5 -0
- package/build/build-esm/index.js +4803 -254
- package/build/build-esm/src/search-results/components/item-picker/index.d.ts +1 -1
- package/build/build-esm/src/search-results/store/search-results-slice.d.ts +3 -3
- package/build/build-esm/src/search-results/types.d.ts +1 -0
- package/build/build-esm/src/search-results/utils/flight-utils.d.ts +1 -2
- package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +7 -3
- package/build/build-esm/src/shared/utils/localization-util.d.ts +5 -0
- package/package.json +4 -2
- package/src/booking-wizard/features/confirmation/confirmation.tsx +1 -1
- package/src/booking-wizard/features/error/error.tsx +2 -1
- package/src/booking-wizard/features/flight-options/index.tsx +1 -1
- package/src/booking-wizard/features/product-options/options-form.tsx +2 -2
- package/src/booking-wizard/features/room-options/index.tsx +1 -1
- package/src/booking-wizard/features/summary/summary.tsx +1 -1
- package/src/booking-wizard/features/travelers-form/travelers-form.tsx +1 -1
- package/src/content/featured-trips/featured-trip-card.tsx +18 -16
- package/src/search-results/components/group-tour/group-tour-results.tsx +11 -3
- package/src/search-results/components/hotel/hotel-accommodation-results.tsx +114 -131
- package/src/search-results/components/hotel/hotel-card.tsx +3 -2
- package/src/search-results/components/item-picker/index.tsx +1 -1
- package/src/search-results/components/round-trip/round-trip-results.tsx +27 -3
- package/src/search-results/components/search-results-container/flight-search-results.tsx +4 -9
- package/src/search-results/components/search-results-container/search-results-container.tsx +70 -24
- package/src/search-results/components/tab-views/index.tsx +10 -7
- package/src/search-results/store/search-results-slice.ts +7 -7
- package/src/search-results/types.ts +1 -0
- package/src/search-results/utils/flight-utils.ts +0 -13
- package/src/search-results/utils/search-results-utils.ts +31 -5
- package/src/shared/components/flyin/accommodation-flyin.tsx +169 -3
- package/src/shared/translations/ar-SA.json +3 -1
- package/src/shared/translations/da-DK.json +3 -1
- package/src/shared/translations/de-DE.json +3 -1
- package/src/shared/translations/en-GB.json +3 -1
- package/src/shared/translations/es-ES.json +3 -1
- package/src/shared/translations/fr-BE.json +3 -1
- package/src/shared/translations/fr-FR.json +3 -1
- package/src/shared/translations/is-IS.json +3 -1
- package/src/shared/translations/it-IT.json +3 -1
- package/src/shared/translations/ja-JP.json +3 -1
- package/src/shared/translations/nl-BE.json +3 -1
- package/src/shared/translations/nl-NL.json +3 -1
- package/src/shared/translations/no-NO.json +3 -1
- package/src/shared/translations/pl-PL.json +3 -1
- package/src/shared/translations/pt-PT.json +3 -1
- package/src/shared/translations/sv-SE.json +3 -1
- package/src/shared/utils/localization-util.ts +18 -0
- package/styles/booking-search-results-variables.scss +1 -1
- package/styles/components/_content.scss +7 -0
- package/styles/components/_flyin.scss +121 -1
- package/styles/components/_search.scss +134 -441
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import React, { useContext } from 'react';
|
|
1
|
+
import React, { useContext, useState } from 'react';
|
|
2
|
+
import Icon from '../icon';
|
|
2
3
|
import { useSelector } from 'react-redux';
|
|
4
|
+
import ItemPicker from '../../../qsm/components/item-picker';
|
|
3
5
|
import { SearchResultsRootState } from '../../../search-results/store/search-results-store';
|
|
4
6
|
import Spinner from '../../../search-results/components/spinner/spinner';
|
|
5
7
|
import SearchResultsConfigurationContext from '../../../search-results/search-results-configuration-context';
|
|
6
8
|
import { getTranslations } from '../../utils/localization-util';
|
|
9
|
+
import { TravelClass } from '../../../shared/types';
|
|
7
10
|
|
|
8
11
|
type AccommodationFlyInProps = {
|
|
9
12
|
isLoading: boolean;
|
|
@@ -11,6 +14,14 @@ type AccommodationFlyInProps = {
|
|
|
11
14
|
setIsOpen: (open: boolean) => void;
|
|
12
15
|
};
|
|
13
16
|
|
|
17
|
+
const travelClasses: TravelClass[] = [
|
|
18
|
+
{ id: 1, label: 'Standard Room' },
|
|
19
|
+
{ id: 2, label: 'Deluxe Balcony Room' },
|
|
20
|
+
{ id: 3, label: 'Superior Room' },
|
|
21
|
+
{ id: 4, label: 'Family Room' },
|
|
22
|
+
{ id: 5, label: 'Suite' }
|
|
23
|
+
];
|
|
24
|
+
|
|
14
25
|
const AccommodationFlyIn: React.FC<AccommodationFlyInProps> = ({ isLoading, isOpen, setIsOpen }) => {
|
|
15
26
|
const context = useContext(SearchResultsConfigurationContext);
|
|
16
27
|
const language = context?.languageCode ?? 'en-GB';
|
|
@@ -18,7 +29,8 @@ const AccommodationFlyIn: React.FC<AccommodationFlyInProps> = ({ isLoading, isOp
|
|
|
18
29
|
|
|
19
30
|
const { selectedSearchResultId } = useSelector((state: SearchResultsRootState) => state.searchResults);
|
|
20
31
|
|
|
21
|
-
|
|
32
|
+
const [selectedTravelClass, setSelectedTravelClass] = useState<string | undefined>('Standard Room');
|
|
33
|
+
|
|
22
34
|
const handleConfirm = () => {
|
|
23
35
|
if (isOpen) {
|
|
24
36
|
setIsOpen(false);
|
|
@@ -28,11 +40,165 @@ const AccommodationFlyIn: React.FC<AccommodationFlyInProps> = ({ isLoading, isOp
|
|
|
28
40
|
return (
|
|
29
41
|
<>
|
|
30
42
|
<div className="flyin__content">
|
|
31
|
-
|
|
43
|
+
<div className="flyin__acco">
|
|
44
|
+
<div className="flyin__acco__cards">
|
|
45
|
+
<div className="flyin__acco__card">
|
|
46
|
+
<div className="flyin__acco__img__wrapper">
|
|
47
|
+
<img src="https://cdn.pixabay.com/photo/2024/05/15/12/31/lake-8763490_1280.jpg" alt="river" className="flyin__acco__img" />
|
|
48
|
+
<div className="flyin__acco__price__wrapper">
|
|
49
|
+
<span className="flyin__acco__price__label">{translations?.SHARED.TOTAL_PRICE}</span>
|
|
50
|
+
<span className="flyin__acco__price flyin__acco__price--increase">+1.764,00</span>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div className="flyin__acco__content">
|
|
55
|
+
<div className="flyin__acco__header">
|
|
56
|
+
<h4 className="flyin__acco__title">Deluxe Balcony Room</h4>
|
|
57
|
+
<div className="flyin__acco__usps">
|
|
58
|
+
<div className="flyin__acco__usp">
|
|
59
|
+
<Icon name="ui-check" width={16} />
|
|
60
|
+
<span className="flyin__acco__usp__text">Sea sight</span>
|
|
61
|
+
</div>
|
|
62
|
+
<div className="flyin__acco__usp">
|
|
63
|
+
<Icon name="ui-check" width={16} />
|
|
64
|
+
<span className="flyin__acco__usp__text">Free wifi</span>
|
|
65
|
+
</div>
|
|
66
|
+
<div className="flyin__acco__usp">
|
|
67
|
+
<Icon name="ui-check" width={16} />
|
|
68
|
+
<span className="flyin__acco__usp__text">Breakfast included</span>
|
|
69
|
+
</div>
|
|
70
|
+
<div className="flyin__acco__usp">
|
|
71
|
+
<Icon name="ui-check" width={16} />
|
|
72
|
+
<span className="flyin__acco__usp__text">Air conditioning</span>
|
|
73
|
+
</div>
|
|
74
|
+
<div className="flyin__acco__usp">
|
|
75
|
+
<Icon name="ui-check" width={16} />
|
|
76
|
+
<span className="flyin__acco__usp__text">Private bathroom</span>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div className="flyin__acco__footer">
|
|
83
|
+
<ItemPicker
|
|
84
|
+
items={travelClasses}
|
|
85
|
+
selection={selectedTravelClass}
|
|
86
|
+
label=" "
|
|
87
|
+
placeholder={translations.QSM.TRAVEL_CLASS_PLACEHOLDER}
|
|
88
|
+
classModifier="travel-class-picker__items"
|
|
89
|
+
onPick={setSelectedTravelClass}
|
|
90
|
+
/>
|
|
91
|
+
<button className="cta cta--select">{translations?.SHARED.SELECT}</button>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div className="flyin__acco__card">
|
|
96
|
+
<div className="flyin__acco__img__wrapper">
|
|
97
|
+
<img src="https://cdn.pixabay.com/photo/2024/05/15/12/31/lake-8763490_1280.jpg" alt="river" className="flyin__acco__img" />
|
|
98
|
+
<div className="flyin__acco__price__wrapper">
|
|
99
|
+
<span className="flyin__acco__price__label">{translations?.SHARED.TOTAL_PRICE}</span>
|
|
100
|
+
<span className="flyin__acco__price flyin__acco__price--increase">+1.764,00</span>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div className="flyin__acco__content">
|
|
105
|
+
<div className="flyin__acco__header">
|
|
106
|
+
<h4 className="flyin__acco__title">Standard Room</h4>
|
|
107
|
+
<div className="flyin__acco__usps">
|
|
108
|
+
<div className="flyin__acco__usp">
|
|
109
|
+
<Icon name="ui-check" width={16} />
|
|
110
|
+
<span className="flyin__acco__usp__text">Garden view</span>
|
|
111
|
+
</div>
|
|
112
|
+
<div className="flyin__acco__usp">
|
|
113
|
+
<Icon name="ui-check" width={16} />
|
|
114
|
+
<span className="flyin__acco__usp__text">Free wifi</span>
|
|
115
|
+
</div>
|
|
116
|
+
<div className="flyin__acco__usp">
|
|
117
|
+
<Icon name="ui-check" width={16} />
|
|
118
|
+
<span className="flyin__acco__usp__text">Double bed</span>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div className="flyin__acco__footer">
|
|
125
|
+
<ItemPicker
|
|
126
|
+
items={travelClasses}
|
|
127
|
+
selection={selectedTravelClass}
|
|
128
|
+
label=" "
|
|
129
|
+
placeholder={translations.QSM.TRAVEL_CLASS_PLACEHOLDER}
|
|
130
|
+
classModifier="travel-class-picker__items"
|
|
131
|
+
onPick={setSelectedTravelClass}
|
|
132
|
+
/>
|
|
133
|
+
<button className="cta cta--select">{translations?.SHARED.SELECT}</button>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div className="flyin__acco__card">
|
|
138
|
+
<div className="flyin__acco__img__wrapper">
|
|
139
|
+
<img src="https://cdn.pixabay.com/photo/2024/05/15/12/31/lake-8763490_1280.jpg" alt="river" className="flyin__acco__img" />
|
|
140
|
+
<div className="flyin__acco__price__wrapper">
|
|
141
|
+
<span className="flyin__acco__price__label">{translations?.SHARED.TOTAL_PRICE}</span>
|
|
142
|
+
<span className="flyin__acco__price flyin__acco__price--increase">+1.764,00</span>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div className="flyin__acco__content">
|
|
147
|
+
<div className="flyin__acco__header">
|
|
148
|
+
<h4 className="flyin__acco__title">Suite</h4>
|
|
149
|
+
<div className="flyin__acco__usps">
|
|
150
|
+
<div className="flyin__acco__usp">
|
|
151
|
+
<Icon name="ui-check" width={16} />
|
|
152
|
+
<span className="flyin__acco__usp__text">Sea sight</span>
|
|
153
|
+
</div>
|
|
154
|
+
<div className="flyin__acco__usp">
|
|
155
|
+
<Icon name="ui-check" width={16} />
|
|
156
|
+
<span className="flyin__acco__usp__text">Free wifi</span>
|
|
157
|
+
</div>
|
|
158
|
+
<div className="flyin__acco__usp">
|
|
159
|
+
<Icon name="ui-check" width={16} />
|
|
160
|
+
<span className="flyin__acco__usp__text">Breakfast included</span>
|
|
161
|
+
</div>
|
|
162
|
+
<div className="flyin__acco__usp">
|
|
163
|
+
<Icon name="ui-check" width={16} />
|
|
164
|
+
<span className="flyin__acco__usp__text">Jacuzzi</span>
|
|
165
|
+
</div>
|
|
166
|
+
<div className="flyin__acco__usp">
|
|
167
|
+
<Icon name="ui-check" width={16} />
|
|
168
|
+
<span className="flyin__acco__usp__text">Private terrace</span>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<div className="flyin__acco__footer">
|
|
175
|
+
<ItemPicker
|
|
176
|
+
items={travelClasses}
|
|
177
|
+
selection={selectedTravelClass}
|
|
178
|
+
label=" "
|
|
179
|
+
placeholder={translations.QSM.TRAVEL_CLASS_PLACEHOLDER}
|
|
180
|
+
classModifier="travel-class-picker__items"
|
|
181
|
+
onPick={setSelectedTravelClass}
|
|
182
|
+
/>
|
|
183
|
+
<button className="cta cta--select">{translations?.SHARED.SELECT}</button>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
32
189
|
{/* {isLoading && (
|
|
33
190
|
<Spinner />
|
|
34
191
|
)} */}
|
|
35
192
|
</div>
|
|
193
|
+
|
|
194
|
+
<div className="flyin__footer">
|
|
195
|
+
<div className="flyin__footer__price">Total price: €</div>
|
|
196
|
+
<div className="flyin__button-wrapper">
|
|
197
|
+
<button className="cta cta--select" onClick={handleConfirm}>
|
|
198
|
+
Toevoegen
|
|
199
|
+
</button>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
36
202
|
</>
|
|
37
203
|
);
|
|
38
204
|
};
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "بلجيكا",
|
|
168
168
|
"NETHERLANDS": "هولندا",
|
|
169
|
-
"FRANCE": "فرنسا"
|
|
169
|
+
"FRANCE": "فرنسا",
|
|
170
|
+
"DENMARK": "الدنمارك",
|
|
171
|
+
"ITALY": "إيطاليا"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "اختر وكيل السفر الخاص بك",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgien",
|
|
168
168
|
"NETHERLANDS": "Nederlandene",
|
|
169
|
-
"FRANCE": "Frankrig"
|
|
169
|
+
"FRANCE": "Frankrig",
|
|
170
|
+
"DENMARK": "Danmark",
|
|
171
|
+
"ITALY": "Italien"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Vælg din rejseagent",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgien",
|
|
168
168
|
"NETHERLANDS": "Niederlande",
|
|
169
|
-
"FRANCE": "Frankreich"
|
|
169
|
+
"FRANCE": "Frankreich",
|
|
170
|
+
"DENMARK": "änemark",
|
|
171
|
+
"ITALY": "Italien"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Wählen Sie Ihren Reiseberater",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -170,7 +170,9 @@
|
|
|
170
170
|
"COUNTRIES": {
|
|
171
171
|
"BELGIUM": "Belgium",
|
|
172
172
|
"NETHERLANDS": "Netherlands",
|
|
173
|
-
"FRANCE": "France"
|
|
173
|
+
"FRANCE": "France",
|
|
174
|
+
"DENMARK": "Denmark",
|
|
175
|
+
"ITALY": "Italy"
|
|
174
176
|
},
|
|
175
177
|
"CHOOSE_AGENT_PLACEHOLDER": "Choose your travel agent",
|
|
176
178
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Bélgica",
|
|
168
168
|
"NETHERLANDS": "Países Bajos",
|
|
169
|
-
"FRANCE": "Francia"
|
|
169
|
+
"FRANCE": "Francia",
|
|
170
|
+
"DENMARK": "Dinamarca",
|
|
171
|
+
"ITALY": "Italia"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Elija su agente de viajes",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -170,7 +170,9 @@
|
|
|
170
170
|
"COUNTRIES": {
|
|
171
171
|
"BELGIUM": "Belgique",
|
|
172
172
|
"NETHERLANDS": "Pays-Bas",
|
|
173
|
-
"FRANCE": "France"
|
|
173
|
+
"FRANCE": "France",
|
|
174
|
+
"DENMARK": "Danemark",
|
|
175
|
+
"ITALY": "Italie"
|
|
174
176
|
},
|
|
175
177
|
"CHOOSE_AGENT_PLACEHOLDER": "Choisissez votre agent de voyage",
|
|
176
178
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgique",
|
|
168
168
|
"NETHERLANDS": "Pays-Bas",
|
|
169
|
-
"FRANCE": "France"
|
|
169
|
+
"FRANCE": "France",
|
|
170
|
+
"DENMARK": "Danemark",
|
|
171
|
+
"ITALY": "Italie"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Choisissez votre agent de voyage",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgía",
|
|
168
168
|
"NETHERLANDS": "Holland",
|
|
169
|
-
"FRANCE": "Frakkland"
|
|
169
|
+
"FRANCE": "Frakkland",
|
|
170
|
+
"DENMARK": "Danmörk",
|
|
171
|
+
"ITALY": "Ítalía"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Veldu ferðaskrifstofu",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgio",
|
|
168
168
|
"NETHERLANDS": "Paesi Bassi",
|
|
169
|
-
"FRANCE": "Francia"
|
|
169
|
+
"FRANCE": "Francia",
|
|
170
|
+
"DENMARK": "Danimarca",
|
|
171
|
+
"ITALY": "Italia"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Scegli la tua agenzia di viaggi",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -170,7 +170,9 @@
|
|
|
170
170
|
"COUNTRIES": {
|
|
171
171
|
"BELGIUM": "België",
|
|
172
172
|
"NETHERLANDS": "Nederland",
|
|
173
|
-
"FRANCE": "Frankrijk"
|
|
173
|
+
"FRANCE": "Frankrijk",
|
|
174
|
+
"DENMARK": "Denemarken",
|
|
175
|
+
"ITALY": "Italië"
|
|
174
176
|
},
|
|
175
177
|
"CHOOSE_AGENT_PLACEHOLDER": "Kies uw reisagent",
|
|
176
178
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "België",
|
|
168
168
|
"NETHERLANDS": "Nederland",
|
|
169
|
-
"FRANCE": "Frankrijk"
|
|
169
|
+
"FRANCE": "Frankrijk",
|
|
170
|
+
"DENMARK": "Denemarken",
|
|
171
|
+
"ITALY": "Italië"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Kies uw reisagent",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgia",
|
|
168
168
|
"NETHERLANDS": "Nederland",
|
|
169
|
-
"FRANCE": "Frankrike"
|
|
169
|
+
"FRANCE": "Frankrike",
|
|
170
|
+
"DENMARK": "Danmark",
|
|
171
|
+
"ITALY": "Italia"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Velg reisebyrå",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgia",
|
|
168
168
|
"NETHERLANDS": "Niderlandy",
|
|
169
|
-
"FRANCE": "Francja"
|
|
169
|
+
"FRANCE": "Francja",
|
|
170
|
+
"DENMARK": "Dania",
|
|
171
|
+
"ITALY": "Włochy"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Wybierz biuro podróży",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Bélgica",
|
|
168
168
|
"NETHERLANDS": "Países Baixos",
|
|
169
|
-
"FRANCE": "França"
|
|
169
|
+
"FRANCE": "França",
|
|
170
|
+
"DENMARK": "Dinamarca",
|
|
171
|
+
"ITALY": "Itália"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Escolha a sua agência de viagens",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -166,7 +166,9 @@
|
|
|
166
166
|
"COUNTRIES": {
|
|
167
167
|
"BELGIUM": "Belgien",
|
|
168
168
|
"NETHERLANDS": "Nederländerna",
|
|
169
|
-
"FRANCE": "Frankrike"
|
|
169
|
+
"FRANCE": "Frankrike",
|
|
170
|
+
"DENMARK": "Danmark",
|
|
171
|
+
"ITALY": "Italien"
|
|
170
172
|
},
|
|
171
173
|
"CHOOSE_AGENT_PLACEHOLDER": "Välj din resebyrå",
|
|
172
174
|
"VALIDATION": {
|
|
@@ -49,6 +49,7 @@ import svJson from '../translations/sv-SE.json';
|
|
|
49
49
|
import jaJson from '../translations/ja-JP.json';
|
|
50
50
|
import { DateStruct } from '@qite/tide-client';
|
|
51
51
|
import { DepartureRange } from '../types';
|
|
52
|
+
import { SortByType } from '../../search-results/types';
|
|
52
53
|
|
|
53
54
|
export const getTranslations = (language: string) => {
|
|
54
55
|
switch (language) {
|
|
@@ -255,3 +256,20 @@ export const calculateNights = (fromDate: Date, toDate: Date): number => {
|
|
|
255
256
|
export const calculateDays = (fromDate: Date, toDate: Date): number => {
|
|
256
257
|
return calculateNights(fromDate, toDate) + 1;
|
|
257
258
|
};
|
|
259
|
+
|
|
260
|
+
export const getSortingName = (translations: any, sortByType: SortByType): string => {
|
|
261
|
+
switch (sortByType.label) {
|
|
262
|
+
case 'price':
|
|
263
|
+
return sortByType.direction === 'asc' ? translations.SRP.PRICE_ASC : translations.SRP.PRICE_DESC;
|
|
264
|
+
case 'departureTime':
|
|
265
|
+
return sortByType.direction === 'asc' ? translations.SRP.DEPARTURE_TIME_ASC : translations.SRP.DEPARTURE_TIME_DESC;
|
|
266
|
+
case 'durationInTicks':
|
|
267
|
+
return sortByType.direction === 'asc' ? translations.SRP.DURATION_ASC : translations.SRP.DURATION_DESC;
|
|
268
|
+
default:
|
|
269
|
+
return sortByType.label;
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export const findSortByType = (sortByTypes: SortByType[], sortKey: string, direction: string) => {
|
|
274
|
+
return sortByTypes.find((s) => s.label === sortKey && s.direction === direction) || sortByTypes[0];
|
|
275
|
+
};
|
|
@@ -643,7 +643,7 @@
|
|
|
643
643
|
//SEARCH HOTEL CARD ALLOTMENTS
|
|
644
644
|
--tide-booking-search-hotel-card-allotments-background: var(--tide-booking-white);
|
|
645
645
|
--tide-booking-search-hotel-card-allotments-border: none;
|
|
646
|
-
--tide-booking-search-hotel-card-allotments-border-radius:
|
|
646
|
+
--tide-booking-search-hotel-card-allotments-border-radius: 24px;
|
|
647
647
|
--tide-booking-search-hotel-card-allotments-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
|
|
648
648
|
--tide-booking-search-hotel-card-allotments-font-weight: 400;
|
|
649
649
|
--tide-booking-search-hotel-card-allotments-color: var(--tide-booking-invalid);
|
|
@@ -197,10 +197,17 @@
|
|
|
197
197
|
padding: 20px;
|
|
198
198
|
display: flex;
|
|
199
199
|
flex-direction: column;
|
|
200
|
+
justify-content: space-between;
|
|
200
201
|
gap: 10px;
|
|
201
202
|
flex-grow: 1;
|
|
202
203
|
}
|
|
203
204
|
|
|
205
|
+
&__top {
|
|
206
|
+
display: flex;
|
|
207
|
+
flex-direction: column;
|
|
208
|
+
gap: 10px;
|
|
209
|
+
}
|
|
210
|
+
|
|
204
211
|
&__title {
|
|
205
212
|
color: var(--tide-booking-image-card-title-color);
|
|
206
213
|
font-family: var(--tide-booking-image-card-title-font-family);
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
@include mixins.media-lg {
|
|
45
|
-
width:
|
|
45
|
+
width: 850px;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
&--active {
|
|
@@ -566,6 +566,7 @@
|
|
|
566
566
|
background: var(--tide-booking-white);
|
|
567
567
|
|
|
568
568
|
@include mixins.media-sm {
|
|
569
|
+
margin-top: auto;
|
|
569
570
|
padding: 30px;
|
|
570
571
|
}
|
|
571
572
|
|
|
@@ -575,4 +576,123 @@
|
|
|
575
576
|
color: var(--tide-booking-black);
|
|
576
577
|
}
|
|
577
578
|
}
|
|
579
|
+
|
|
580
|
+
&__acco {
|
|
581
|
+
padding-bottom: 30px;
|
|
582
|
+
&__cards {
|
|
583
|
+
display: grid;
|
|
584
|
+
grid-template-columns: repeat(1, 1fr);
|
|
585
|
+
gap: 30px;
|
|
586
|
+
|
|
587
|
+
@include mixins.media-sm {
|
|
588
|
+
grid-template-columns: repeat(2, 1fr);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// @include mixins.media-xxl {
|
|
592
|
+
// grid-template-columns: repeat(3, 1fr);
|
|
593
|
+
// }
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
&__card {
|
|
597
|
+
display: flex;
|
|
598
|
+
flex-direction: column;
|
|
599
|
+
gap: 15px;
|
|
600
|
+
border-radius: 24px;
|
|
601
|
+
background: var(--tide-booking-white);
|
|
602
|
+
box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.1);
|
|
603
|
+
padding-bottom: 20px;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
&__img {
|
|
607
|
+
width: 100%;
|
|
608
|
+
height: 100%;
|
|
609
|
+
object-fit: cover;
|
|
610
|
+
|
|
611
|
+
&__wrapper {
|
|
612
|
+
position: relative;
|
|
613
|
+
width: 100%;
|
|
614
|
+
height: 200px;
|
|
615
|
+
overflow: hidden;
|
|
616
|
+
border-radius: 24px 24px 0 0;
|
|
617
|
+
background-color: #f5f5f5;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
&__usps {
|
|
622
|
+
display: flex;
|
|
623
|
+
flex-wrap: wrap;
|
|
624
|
+
gap: 15px;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
&__usp {
|
|
628
|
+
display: flex;
|
|
629
|
+
align-items: center;
|
|
630
|
+
gap: 3px;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
&__price {
|
|
634
|
+
font-family: var(--tide-booking-search-hotel-card-price-font-family);
|
|
635
|
+
font-weight: var(--tide-booking-search-hotel-card-price-font-weight);
|
|
636
|
+
color: var(--tide-booking-search-hotel-card-price-color);
|
|
637
|
+
font-size: 20px;
|
|
638
|
+
|
|
639
|
+
&__wrapper {
|
|
640
|
+
position: absolute;
|
|
641
|
+
bottom: 0px;
|
|
642
|
+
right: 0px;
|
|
643
|
+
background: var(--tide-booking-search-hotel-card-price-background-color);
|
|
644
|
+
display: flex;
|
|
645
|
+
flex-flow: column nowrap;
|
|
646
|
+
align-items: center;
|
|
647
|
+
justify-content: center;
|
|
648
|
+
gap: 5px;
|
|
649
|
+
padding: 5px 20px;
|
|
650
|
+
border-radius: 5px 0 0 0;
|
|
651
|
+
box-shadow: var(--tide-booking-search-hotel-card-price-box-shadow);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
&__label {
|
|
655
|
+
font-size: 12px;
|
|
656
|
+
font-weight: var(--tide-booking-search-hotel-card-price-label-font-weight);
|
|
657
|
+
color: var(--tide-booking-search-hotel-card-price-label-color);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
&--increase {
|
|
661
|
+
color: var(--tide-booking-price-increase);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
&--decrease {
|
|
665
|
+
color: var(--tide-booking-price-decrease);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
&__content {
|
|
670
|
+
padding: 0px 20px;
|
|
671
|
+
display: flex;
|
|
672
|
+
flex-direction: column;
|
|
673
|
+
justify-content: space-between;
|
|
674
|
+
gap: 10px;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
&__footer {
|
|
678
|
+
margin-top: auto;
|
|
679
|
+
padding: 0 20px;
|
|
680
|
+
display: flex;
|
|
681
|
+
flex-direction: column;
|
|
682
|
+
gap: 10px;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
.dropdown {
|
|
686
|
+
width: 100%;
|
|
687
|
+
|
|
688
|
+
&-menu {
|
|
689
|
+
top: 45px;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
&::after {
|
|
693
|
+
content: '';
|
|
694
|
+
display: none;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
578
698
|
}
|