@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.
- package/build/build-cjs/index.js +215 -139
- package/build/build-cjs/src/search-results/components/search-results-container/search-results-container.d.ts +4 -1
- package/build/build-cjs/src/search-results/index.d.ts +1 -0
- package/build/build-cjs/src/shared/booking/summary.d.ts +1 -0
- package/build/build-esm/index.js +214 -139
- package/build/build-esm/src/search-results/components/search-results-container/search-results-container.d.ts +4 -1
- package/build/build-esm/src/search-results/index.d.ts +1 -0
- package/build/build-esm/src/shared/booking/summary.d.ts +1 -0
- package/package.json +2 -2
- package/src/search-results/components/book-packaging-entry/index.tsx +34 -16
- package/src/search-results/components/search-results-container/search-results-container.tsx +17 -7
- package/src/search-results/index.tsx +3 -2
- package/src/shared/booking/summary.tsx +4 -1
- package/src/shared/booking/travelers-form.tsx +12 -6
- 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/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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
67
|
+
const config: TideClientConfig | null = useMemo(() => {
|
|
68
|
+
if (!context) return null;
|
|
74
69
|
|
|
75
|
-
|
|
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
|
-
|
|
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! >=
|
|
365
|
-
var kids = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 2 && x.age! <
|
|
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 &&
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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;
|