@qite/tide-booking-component 1.4.112 → 1.4.113

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 (31) hide show
  1. package/build/build-cjs/index.js +215 -139
  2. package/build/build-cjs/src/search-results/components/search-results-container/search-results-container.d.ts +4 -1
  3. package/build/build-cjs/src/search-results/index.d.ts +1 -0
  4. package/build/build-cjs/src/shared/booking/summary.d.ts +1 -0
  5. package/build/build-esm/index.js +214 -139
  6. package/build/build-esm/src/search-results/components/search-results-container/search-results-container.d.ts +4 -1
  7. package/build/build-esm/src/search-results/index.d.ts +1 -0
  8. package/build/build-esm/src/shared/booking/summary.d.ts +1 -0
  9. package/package.json +2 -2
  10. package/src/search-results/components/book-packaging-entry/index.tsx +34 -16
  11. package/src/search-results/components/search-results-container/search-results-container.tsx +17 -7
  12. package/src/search-results/index.tsx +3 -2
  13. package/src/shared/booking/summary.tsx +4 -1
  14. package/src/shared/booking/travelers-form.tsx +12 -6
  15. package/src/shared/translations/ar-SA.json +3 -1
  16. package/src/shared/translations/da-DK.json +3 -1
  17. package/src/shared/translations/de-DE.json +3 -1
  18. package/src/shared/translations/en-GB.json +3 -1
  19. package/src/shared/translations/es-ES.json +3 -1
  20. package/src/shared/translations/fr-BE.json +3 -1
  21. package/src/shared/translations/fr-FR.json +3 -1
  22. package/src/shared/translations/is-IS.json +3 -1
  23. package/src/shared/translations/it-IT.json +3 -1
  24. package/src/shared/translations/ja-JP.json +3 -1
  25. package/src/shared/translations/nl-BE.json +3 -1
  26. package/src/shared/translations/nl-NL.json +3 -1
  27. package/src/shared/translations/no-NO.json +3 -1
  28. package/src/shared/translations/pl-PL.json +3 -1
  29. package/src/shared/translations/pt-PT.json +3 -1
  30. package/src/shared/translations/sv-SE.json +3 -1
  31. package/styles/components/_booking.scss +10 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "1.4.112",
3
+ "version": "1.4.113",
4
4
  "description": "React Booking wizard & Booking product component for Tide",
5
5
  "main": "build/build-cjs/index.js",
6
6
  "types": "build/build-cjs/src/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "devDependencies": {
30
30
  "@jsonurl/jsonurl": "^1.1.4",
31
31
  "@popperjs/core": "^2.10.2",
32
- "@qite/tide-client": "^1.1.172",
32
+ "@qite/tide-client": "^1.1.173",
33
33
  "@reduxjs/toolkit": "^2.8.2",
34
34
  "@rollup/plugin-commonjs": "^19.0.1",
35
35
  "@rollup/plugin-json": "^4.1.0",
@@ -52,6 +52,7 @@ const travellersSettings: SharedTravelersSettings = {
52
52
  const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSeed, isConfirmationPage }) => {
53
53
  const context = useContext(SearchResultsConfigurationContext);
54
54
  const dispatch = useDispatch();
55
+
55
56
  const { editablePackagingEntry, priceDetails, currentStep, bookingNumber } = useSelector((state: SearchResultsRootState) => state.searchResults);
56
57
 
57
58
  const [countries, setCountries] = useState<CountryItem[]>([]);
@@ -59,44 +60,56 @@ const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSee
59
60
  const [remarks, setRemarks] = useState('');
60
61
  const [isSubmitting, setIsSubmitting] = useState(false);
61
62
 
62
- if (!context || !editablePackagingEntry || !priceDetails) return null;
63
-
64
- const config: TideClientConfig = {
65
- host: context.tideConnection.host,
66
- apiKey: context.tideConnection.apiKey
67
- };
63
+ const translations = useMemo(() => getTranslations(context?.languageCode ?? 'en-GB'), [context?.languageCode]);
68
64
 
69
- const translations = getTranslations(context?.languageCode ?? 'en-GB');
70
65
  const stepLabels = [translations.STEPS.PERSONAL_DETAILS, translations.STEPS.SUMMARY, translations.STEPS.CONFIRMATION];
71
66
 
72
- console.log('editablePackagingEntry in WLSidebar:', editablePackagingEntry);
73
- console.log('priceDetails in WLSidebar:', priceDetails);
67
+ const config: TideClientConfig | null = useMemo(() => {
68
+ if (!context) return null;
74
69
 
75
- const initialValues = useMemo(() => createInitialValuesFromEditablePackagingEntry(editablePackagingEntry), [editablePackagingEntry?.transactionId]);
70
+ return {
71
+ host: context.tideConnection.host,
72
+ apiKey: context.tideConnection.apiKey
73
+ };
74
+ }, [context]);
75
+
76
+ const initialValues = useMemo(() => {
77
+ if (!editablePackagingEntry) {
78
+ return {} as TravelersFormValues;
79
+ }
80
+
81
+ return createInitialValuesFromEditablePackagingEntry(editablePackagingEntry);
82
+ }, [editablePackagingEntry?.transactionId]);
76
83
 
77
84
  const formik = useFormik<TravelersFormValues>({
78
85
  initialValues,
79
86
  enableReinitialize: true,
80
87
  validate: (values) => validateForm(values, false, 'b2c', translations, travellersSettings.formFields, travellersSettings.mainBookerFormFields),
81
88
  onSubmit: (values) => {
89
+ if (!editablePackagingEntry) return;
90
+
82
91
  dispatch(setEditablePackagingEntry(applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry, values)));
92
+
83
93
  dispatch(setCurrentStep(1));
84
94
  }
85
95
  });
86
96
 
87
97
  useEffect(() => {
88
- if (!context) return;
98
+ if (!context || !config) return;
99
+
89
100
  const controller = new AbortController();
90
101
 
91
102
  (async () => {
92
103
  try {
93
104
  const result = await getCountries(config, controller.signal);
94
105
  setCountries(result.items);
95
- } catch {}
106
+ } catch {
107
+ // optionally handle error
108
+ }
96
109
  })();
97
110
 
98
111
  return () => controller.abort();
99
- }, []);
112
+ }, [context, config]);
100
113
 
101
114
  useEffect(() => {
102
115
  if (isConfirmationPage) {
@@ -104,6 +117,8 @@ const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSee
104
117
  }
105
118
  }, [isConfirmationPage, dispatch]);
106
119
 
120
+ if (!context || !editablePackagingEntry || !priceDetails || !config) return null;
121
+
107
122
  const handleSummarySubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {
108
123
  e.preventDefault();
109
124
 
@@ -141,6 +156,7 @@ const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSee
141
156
  agentId: context.agentId,
142
157
  payload: updatedEditablePackagingEntry
143
158
  } as PackagingRequestBase<PackagingEntry>;
159
+
144
160
  const bookingResponse = await bookPackagingEntry(config, request);
145
161
 
146
162
  dispatch(setBookingNumber(bookingResponse.number));
@@ -188,6 +204,7 @@ const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSee
188
204
  translations={translations}
189
205
  travelerFormValues={formik.values}
190
206
  isSubmitting={isSubmitting}
207
+ skipPayment={!context.generatePaymentUrl}
191
208
  userValidated={userValidated}
192
209
  remarks={remarks}
193
210
  enableVoucher={false}
@@ -204,21 +221,22 @@ const BookPackagingEntry: React.FC<BookPackagingEntryProps> = ({ activeSearchSee
204
221
  )}
205
222
  />
206
223
  )}
224
+
207
225
  {currentStep === 2 && (
208
226
  <SharedConfirmation
209
227
  bookingNumber={bookingNumber ?? editablePackagingEntry?.dossierNumber ?? ''}
210
228
  isOption={false}
211
229
  isOffer={false}
212
230
  translations={translations.CONFIRMATION}
213
- // companyContactPhone={context?.companyContactPhone || ''}
214
- // companyContactEmail={context?.companyContactEmail || ''}
215
- // homeUrl={context?.homeUrl || '/'}
216
231
  />
217
232
  )}
233
+
218
234
  {currentStep === 3 && <div>{/* error */}</div>}
219
235
  </BookingPanel>
220
236
  </div>
237
+
221
238
  <div className="backdrop" id="backdrop"></div>
239
+
222
240
  <WLSidebar activeSearchSeed={activeSearchSeed} />
223
241
  </div>
224
242
  </div>
@@ -128,7 +128,11 @@ type BuildPackagingEntryPartialArgs = {
128
128
  language: string;
129
129
  };
130
130
 
131
- const SearchResultsContainer: React.FC = () => {
131
+ interface SearchResultsContainerProps {
132
+ onBookingStarted?: () => void;
133
+ }
134
+
135
+ const SearchResultsContainer: React.FC<SearchResultsContainerProps> = ({ onBookingStarted }) => {
132
136
  const currentSearch = typeof window !== 'undefined' ? window.location.search : '';
133
137
 
134
138
  const dispatch = useDispatch();
@@ -361,8 +365,8 @@ const SearchResultsContainer: React.FC = () => {
361
365
  if (typeof window !== 'undefined') {
362
366
  window.scrollTo(0, 0);
363
367
  }
364
- var adults = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 18).length;
365
- var kids = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 2 && x.age! < 18).length;
368
+ var adults = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 12).length;
369
+ var kids = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 2 && x.age! < 12).length;
366
370
  var babies = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! < 2).length;
367
371
 
368
372
  return {
@@ -812,6 +816,12 @@ const SearchResultsContainer: React.FC = () => {
812
816
  }
813
817
  }, [context?.packagingEntry]);
814
818
 
819
+ useEffect(() => {
820
+ if (bookPackagingEntry && onBookingStarted) {
821
+ onBookingStarted();
822
+ }
823
+ }, [bookPackagingEntry, onBookingStarted]);
824
+
815
825
  // separate detailsCall
816
826
  useEffect(() => {
817
827
  const fetchDetails = async () => {
@@ -1435,12 +1445,12 @@ const SearchResultsContainer: React.FC = () => {
1435
1445
  seed.rooms?.forEach((room, roomIndex) => {
1436
1446
  const paxIds = room.pax.map((_, paxIndex) => {
1437
1447
  const id = paxId++;
1438
-
1439
1448
  pax.push({
1440
1449
  id,
1441
- firstName: '',
1442
- lastName: '',
1443
- dateOfBirth: null,
1450
+ firstName: _.firstName || '',
1451
+ lastName: _.lastName || '',
1452
+ dateOfBirth: _.dateOfBirth || null,
1453
+ age: _.age || null,
1444
1454
  isMainBooker: roomIndex === 0 && paxIndex === 0
1445
1455
  });
1446
1456
 
@@ -7,15 +7,16 @@ import { createSearchResultsStore } from './store/search-results-store';
7
7
 
8
8
  interface SearchResultsProps {
9
9
  configuration: SearchResultsConfiguration;
10
+ onBookingStarted?: () => void;
10
11
  }
11
12
 
12
- const SearchResults: React.FC<SearchResultsProps> = ({ configuration }) => {
13
+ const SearchResults: React.FC<SearchResultsProps> = ({ configuration, onBookingStarted }) => {
13
14
  const store = React.useMemo(() => createSearchResultsStore(), []);
14
15
 
15
16
  return (
16
17
  <Provider store={store}>
17
18
  <SearchResultsConfigurationContext.Provider value={configuration}>
18
- <SearchResultsContainer />
19
+ <SearchResultsContainer onBookingStarted={onBookingStarted} />
19
20
  </SearchResultsConfigurationContext.Provider>
20
21
  </Provider>
21
22
  );
@@ -4,6 +4,7 @@ import { SummaryCheckbox, TravelersFormValues } from '../../booking-wizard/types
4
4
  import Loader from '../components/loader';
5
5
  import { buildClassName } from '../utils/class-util';
6
6
  import Icon from '../components/icon';
7
+ import Spinner from '../../search-results/components/spinner/spinner';
7
8
 
8
9
  export interface SummaryNotification {
9
10
  id: number;
@@ -32,6 +33,7 @@ export interface SharedSummaryProps {
32
33
  isOffer?: boolean;
33
34
  customValidateText?: string;
34
35
  isSubmitting?: boolean;
36
+ skipPayment?: boolean;
35
37
  userValidated?: boolean;
36
38
  renderOptions: () => ReactNode;
37
39
  renderPreviousButton: () => ReactNode;
@@ -66,6 +68,7 @@ const SharedSummary: React.FC<SharedSummaryProps> = ({
66
68
  isOffer = false,
67
69
  customValidateText,
68
70
  isSubmitting = false,
71
+ skipPayment = false,
69
72
  userValidated = true,
70
73
  renderOptions,
71
74
  renderPreviousButton,
@@ -122,7 +125,7 @@ const SharedSummary: React.FC<SharedSummaryProps> = ({
122
125
 
123
126
  return (
124
127
  <>
125
- {isSubmitting && (renderLoader?.() || <Loader />)}
128
+ {isSubmitting && <Spinner label={skipPayment ? translations.SUMMARY.PROCESS_BOOKING : translations.SUMMARY.REDIRECT} />}
126
129
  {!isSubmitting && (
127
130
  <form className="form" name="booking--summary" id="booking--summary" onSubmit={onSubmit}>
128
131
  <div className="form__booking--summary">
@@ -98,13 +98,13 @@ export function createInitialValuesFromRooms(
98
98
  }
99
99
 
100
100
  export function createInitialValuesFromEditablePackagingEntry(editablePackagingEntry: PackagingEntry, agentAdressId?: number): TravelersFormValues {
101
- console.log('editablePackagingEntry?.pax:', editablePackagingEntry?.pax);
102
101
  const pax = editablePackagingEntry?.pax ?? [];
103
102
  const rooms = editablePackagingEntry.rooms.map((room) => {
104
103
  const roomPax = pax.filter((x: PackagingEntryPax) => room.paxIds.includes(x.id));
105
- // TODO children/dateofbirth is missing at this point
104
+ const adults = roomPax.filter((x: PackagingEntryPax) => x.age! >= 18);
105
+ const children = roomPax.filter((x: PackagingEntryPax) => x.age! < 18);
106
106
  return {
107
- adults: roomPax.map((roomTraveler: PackagingEntryPax) => {
107
+ adults: adults.map((roomTraveler: PackagingEntryPax) => {
108
108
  return {
109
109
  id: roomTraveler.id,
110
110
  firstName: roomTraveler.firstName ?? '',
@@ -113,7 +113,15 @@ export function createInitialValuesFromEditablePackagingEntry(editablePackagingE
113
113
  gender: ''
114
114
  } as Traveler;
115
115
  }),
116
- children: [] as Traveler[]
116
+ children: children.map((roomTraveler: PackagingEntryPax) => {
117
+ return {
118
+ id: roomTraveler.id,
119
+ firstName: roomTraveler.firstName ?? '',
120
+ lastName: roomTraveler.lastName ?? '',
121
+ birthDate: roomTraveler.dateOfBirth ? format(new Date(roomTraveler.dateOfBirth), 'yyyy-MM-dd') : '',
122
+ gender: ''
123
+ } as Traveler;
124
+ })
117
125
  };
118
126
  });
119
127
 
@@ -144,8 +152,6 @@ export function createInitialValuesFromEditablePackagingEntry(editablePackagingE
144
152
 
145
153
  export function applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry: PackagingEntry, values: TravelersFormValues) {
146
154
  const travelers = values.rooms.flatMap((room) => [...room.adults, ...room.children]);
147
- console.log('Applying form values:', values);
148
- console.log('editablePackagingEntry:', editablePackagingEntry);
149
155
 
150
156
  return {
151
157
  ...editablePackagingEntry,
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "تحقق من القسيمة",
226
226
  "ADD_VOUCHER": "إضافة قسيمة",
227
227
  "VOUCHER_VALID": "القسيمة صالحة",
228
- "VOUCHER_INVALID": "القسيمة غير صالحة"
228
+ "VOUCHER_INVALID": "القسيمة غير صالحة",
229
+ "REDIRECT": "إعادة التوجيه إلى مزود الدفع...",
230
+ "PROCESS_BOOKING": "يرجى الانتظار، جاري معالجة حجزك"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "تم طلب عرضك رقم {0}",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Valider voucher",
226
226
  "ADD_VOUCHER": "Tilføj voucher",
227
227
  "VOUCHER_VALID": "Voucher er gyldig",
228
- "VOUCHER_INVALID": "Voucher er ikke gyldig"
228
+ "VOUCHER_INVALID": "Voucher er ikke gyldig",
229
+ "REDIRECT": "Omdirigerer til betalingsudbyder...",
230
+ "PROCESS_BOOKING": "Vent venligst, din booking behandles"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Dit tilbud med nummer {0} er blevet anmodet",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Gutschein prüfen",
226
226
  "ADD_VOUCHER": "Gutschein hinzufügen",
227
227
  "VOUCHER_VALID": "Gutschein ist gültig",
228
- "VOUCHER_INVALID": "Gutschein ist ungültig"
228
+ "VOUCHER_INVALID": "Gutschein ist ungültig",
229
+ "REDIRECT": "Weiterleitung zum Zahlungsanbieter...",
230
+ "PROCESS_BOOKING": "Bitte warten Sie, Ihre Buchung wird bearbeitet"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Ihr Angebot mit der Nummer {0} wurde angefordert",
@@ -229,7 +229,9 @@
229
229
  "VOUCHER_VALIDATE": "Validate voucher",
230
230
  "ADD_VOUCHER": "Add voucher",
231
231
  "VOUCHER_VALID": "Voucher is valid",
232
- "VOUCHER_INVALID": "Voucher is not valid"
232
+ "VOUCHER_INVALID": "Voucher is not valid",
233
+ "REDIRECT": "Redirecting to payment provider...",
234
+ "PROCESS_BOOKING": "Please wait, your booking is being processed"
233
235
  },
234
236
  "CONFIRMATION": {
235
237
  "TITLE_TEXT_OFFER": "Your quote with number {0} has been requested",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Validar vale",
226
226
  "ADD_VOUCHER": "Agregar vale",
227
227
  "VOUCHER_VALID": "Vale válido",
228
- "VOUCHER_INVALID": "Vale no válido"
228
+ "VOUCHER_INVALID": "Vale no válido",
229
+ "REDIRECT": "Redirigiendo al proveedor de pagos...",
230
+ "PROCESS_BOOKING": "Por favor, espere, su reserva se está procesando"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Su presupuesto con número {0} ha sido solicitado",
@@ -229,7 +229,9 @@
229
229
  "VOUCHER_VALIDATE": "Valider le bon",
230
230
  "ADD_VOUCHER": "Ajouter un bon",
231
231
  "VOUCHER_VALID": "Bon valide",
232
- "VOUCHER_INVALID": "Bon invalide"
232
+ "VOUCHER_INVALID": "Bon invalide",
233
+ "REDIRECT": "Redirection vers le fournisseur de paiement...",
234
+ "PROCESS_BOOKING": "Veuillez patienter, votre réservation est en cours de traitement"
233
235
  },
234
236
  "CONFIRMATION": {
235
237
  "TITLE_TEXT_OFFER": "Votre devis numéro {0} a été demandé",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Valider le bon",
226
226
  "ADD_VOUCHER": "Ajouter un bon",
227
227
  "VOUCHER_VALID": "Bon valide",
228
- "VOUCHER_INVALID": "Bon invalide"
228
+ "VOUCHER_INVALID": "Bon invalide",
229
+ "REDIRECT": "Redirection vers le fournisseur de paiement...",
230
+ "PROCESS_BOOKING": "Veuillez patienter, votre réservation est en cours de traitement"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Votre devis numéro {0} a été demandé",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Staðfesta miða",
226
226
  "ADD_VOUCHER": "Bæta við miða",
227
227
  "VOUCHER_VALID": "Miðinn er gildur",
228
- "VOUCHER_INVALID": "Miðinn er ógildur"
228
+ "VOUCHER_INVALID": "Miðinn er ógildur",
229
+ "REDIRECT": "Beinir á greiðsluaðila...",
230
+ "PROCESS_BOOKING": "Vinsamlegast bíðið, pöntunin þín er í vinnslu"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Tilboð þitt nr. {0} hefur verið beðið um",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Valida voucher",
226
226
  "ADD_VOUCHER": "Aggiungi voucher",
227
227
  "VOUCHER_VALID": "Voucher valido",
228
- "VOUCHER_INVALID": "Voucher non valido"
228
+ "VOUCHER_INVALID": "Voucher non valido",
229
+ "REDIRECT": "Reindirizzamento al fornitore di pagamento...",
230
+ "PROCESS_BOOKING": "Attendere prego, la tua prenotazione è in fase di elaborazione"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Il tuo preventivo numero {0} è stato richiesto",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "バウチャーを確認",
226
226
  "ADD_VOUCHER": "バウチャーを追加",
227
227
  "VOUCHER_VALID": "バウチャーは有効です",
228
- "VOUCHER_INVALID": "バウチャーは無効です"
228
+ "VOUCHER_INVALID": "バウチャーは無効です",
229
+ "REDIRECT": "支払いプロバイダーにリダイレクト中...",
230
+ "PROCESS_BOOKING": "お待ちください、予約を処理中です"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "見積もり番号 {0} の依頼を受け付けました",
@@ -229,7 +229,9 @@
229
229
  "VOUCHER_VALIDATE": "Valideer voucher",
230
230
  "ADD_VOUCHER": "Voucher toevoegen",
231
231
  "VOUCHER_VALID": "Voucher is geldig",
232
- "VOUCHER_INVALID": "Voucher is niet geldig"
232
+ "VOUCHER_INVALID": "Voucher is niet geldig",
233
+ "REDIRECT": "Redirecten naar betalingsprovider...",
234
+ "PROCESS_BOOKING": "Even geduld, we verwerken je boeking"
233
235
  },
234
236
  "CONFIRMATION": {
235
237
  "TITLE_TEXT_OFFER": "Je offerte met nummer {0} is aangevraagd",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Voucher valideren",
226
226
  "ADD_VOUCHER": "Voucher toevoegen",
227
227
  "VOUCHER_VALID": "Voucher is geldig",
228
- "VOUCHER_INVALID": "Voucher is ongeldig"
228
+ "VOUCHER_INVALID": "Voucher is ongeldig",
229
+ "REDIRECT": "Redirecten naar betalingsprovider...",
230
+ "PROCESS_BOOKING": "Even geduld, we verwerken je boeking"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Uw offerte met nummer {0} is aangevraagd",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Valider verdikupong",
226
226
  "ADD_VOUCHER": "Legg til verdikupong",
227
227
  "VOUCHER_VALID": "Verdikupongen er gyldig",
228
- "VOUCHER_INVALID": "Verdikupongen er ugyldig"
228
+ "VOUCHER_INVALID": "Verdikupongen er ugyldig",
229
+ "REDIRECT": "Omdirigerer til betalingsleverandør...",
230
+ "PROCESS_BOOKING": "Vennligst vent, bestillingen din behandles"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Tilbudet ditt med nummer {0} er forespurt",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Zweryfikuj voucher",
226
226
  "ADD_VOUCHER": "Dodaj voucher",
227
227
  "VOUCHER_VALID": "Voucher jest ważny",
228
- "VOUCHER_INVALID": "Voucher jest nieważny"
228
+ "VOUCHER_INVALID": "Voucher jest nieważny",
229
+ "REDIRECT": "Przekierowanie do dostawcy płatności...",
230
+ "PROCESS_BOOKING": "Proszę czekać, Twoja rezerwacja jest przetwarzana"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Twoja wycena o numerze {0} została wysłana",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Validar voucher",
226
226
  "ADD_VOUCHER": "Adicionar voucher",
227
227
  "VOUCHER_VALID": "O voucher é válido",
228
- "VOUCHER_INVALID": "O voucher não é válido"
228
+ "VOUCHER_INVALID": "O voucher não é válido",
229
+ "REDIRECT": "Redirecionando para o provedor de pagamento...",
230
+ "PROCESS_BOOKING": "Por favor, aguarde, sua reserva está sendo processada"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "O seu orçamento com o número {0} foi solicitado",
@@ -225,7 +225,9 @@
225
225
  "VOUCHER_VALIDATE": "Validera voucher",
226
226
  "ADD_VOUCHER": "Lägg till voucher",
227
227
  "VOUCHER_VALID": "Vouchern är giltig",
228
- "VOUCHER_INVALID": "Vouchern är ogiltig"
228
+ "VOUCHER_INVALID": "Vouchern är ogiltig",
229
+ "REDIRECT": "Omdirigerar till betalningsleverantör...",
230
+ "PROCESS_BOOKING": "Vänligen vänta, din bokning behandlas"
229
231
  },
230
232
  "CONFIRMATION": {
231
233
  "TITLE_TEXT_OFFER": "Din offert med nummer {0} har begärts",
@@ -65,6 +65,7 @@
65
65
 
66
66
  .cta--secondary {
67
67
  width: 100%;
68
+
68
69
  @include media-xs {
69
70
  width: auto;
70
71
  margin-right: auto;
@@ -161,6 +162,12 @@
161
162
  display: flex;
162
163
  align-items: center;
163
164
  background: var(--tide-booking-sidebar-header-background);
165
+
166
+ min-height: 80px;
167
+
168
+ @include media-xl {
169
+ min-height: 100px;
170
+ }
164
171
  }
165
172
 
166
173
  &__product-body {
@@ -626,6 +633,7 @@
626
633
 
627
634
  .tree {
628
635
  padding-bottom: 0;
636
+
629
637
  @include media-lg {
630
638
  padding-bottom: 7.5px;
631
639
  }
@@ -638,6 +646,7 @@
638
646
 
639
647
  tr:last-child .tree {
640
648
  padding-bottom: 7.5px;
649
+
641
650
  @include media-lg {
642
651
  // empty but transition inherited
643
652
  }
@@ -869,6 +878,7 @@
869
878
  color: var(--tide-booking-invalid);
870
879
  }
871
880
  }
881
+
872
882
  .icon {
873
883
  width: 50px;
874
884
  height: 50px;