@qite/tide-booking-component 1.1.3 → 1.2.0
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/booking-product/components/multi-range-filter.d.ts +12 -0
- package/build/build-cjs/booking-wizard/features/booking/api.d.ts +4 -1
- package/build/build-cjs/booking-wizard/features/booking/booking-slice.d.ts +7 -3
- package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +23 -17
- package/build/build-cjs/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
- package/build/build-cjs/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
- package/build/build-cjs/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
- package/build/build-cjs/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
- package/build/build-cjs/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
- package/build/build-cjs/booking-wizard/features/room-options/room-utils.d.ts +9 -0
- package/build/build-cjs/booking-wizard/features/room-options/room.d.ts +12 -0
- package/build/build-cjs/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
- package/build/build-cjs/booking-wizard/types.d.ts +101 -0
- package/build/build-cjs/index.js +1563 -606
- package/build/build-cjs/shared/utils/localization-util.d.ts +30 -2
- package/build/build-esm/booking-product/components/multi-range-filter.d.ts +12 -0
- package/build/build-esm/booking-wizard/features/booking/api.d.ts +4 -1
- package/build/build-esm/booking-wizard/features/booking/booking-slice.d.ts +7 -3
- package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +23 -17
- package/build/build-esm/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
- package/build/build-esm/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
- package/build/build-esm/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
- package/build/build-esm/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
- package/build/build-esm/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
- package/build/build-esm/booking-wizard/features/room-options/room-utils.d.ts +9 -0
- package/build/build-esm/booking-wizard/features/room-options/room.d.ts +12 -0
- package/build/build-esm/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
- package/build/build-esm/booking-wizard/types.d.ts +101 -0
- package/build/build-esm/index.js +1564 -607
- package/build/build-esm/shared/utils/localization-util.d.ts +30 -2
- package/package.json +3 -3
- package/rollup.config.js +23 -23
- package/src/booking-product/components/multi-range-filter.css +115 -0
- package/src/booking-product/components/multi-range-filter.tsx +114 -0
- package/src/booking-wizard/components/labeled-input.tsx +64 -64
- package/src/booking-wizard/components/labeled-select.tsx +69 -69
- package/src/booking-wizard/components/step-indicator.tsx +3 -3
- package/src/booking-wizard/features/booking/api.ts +12 -1
- package/src/booking-wizard/features/booking/booking-self-contained.tsx +50 -20
- package/src/booking-wizard/features/booking/booking-slice.ts +45 -9
- package/src/booking-wizard/features/booking/booking.tsx +67 -56
- package/src/booking-wizard/features/booking/selectors.ts +38 -11
- package/src/booking-wizard/features/flight-options/flight-filter.tsx +343 -0
- package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +350 -0
- package/src/booking-wizard/features/flight-options/flight-option.tsx +30 -759
- package/src/booking-wizard/features/flight-options/flight-utils.ts +401 -0
- package/src/booking-wizard/features/flight-options/index.tsx +55 -368
- package/src/booking-wizard/features/price-details/util.ts +6 -6
- package/src/booking-wizard/features/product-options/option-room.tsx +3 -5
- package/src/booking-wizard/features/product-options/options-form.tsx +46 -54
- package/src/booking-wizard/features/room-options/index.tsx +48 -144
- package/src/booking-wizard/features/room-options/room-utils.ts +143 -0
- package/src/booking-wizard/features/room-options/room.tsx +124 -0
- package/src/booking-wizard/features/room-options/traveler-rooms.tsx +63 -0
- package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -2
- package/src/booking-wizard/features/summary/summary.tsx +2 -2
- package/src/booking-wizard/features/travelers-form/travelers-form.tsx +1 -1
- package/src/booking-wizard/types.ts +116 -0
- package/src/shared/components/rating.tsx +21 -21
- package/src/shared/translations/fr-BE.json +222 -192
- package/src/shared/translations/nl-BE.json +222 -192
- package/src/shared/utils/class-util.ts +9 -9
- package/tsconfig.json +24 -24
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import React, { useContext, useEffect, useState } from "react";
|
|
2
2
|
|
|
3
3
|
import { BookingPackageFlight } from "@qite/tide-client/build/types";
|
|
4
|
-
import {
|
|
4
|
+
import { navigate } from "@reach/router";
|
|
5
|
+
import { isEmpty } from "lodash";
|
|
5
6
|
import { useSelector } from "react-redux";
|
|
6
7
|
import { buildClassName } from "../../../shared/utils/class-util";
|
|
7
8
|
import SettingsContext from "../../settings-context";
|
|
8
9
|
import { useAppDispatch } from "../../store";
|
|
10
|
+
import { FlightFilterOptions, GroupedFlights } from "../../types";
|
|
9
11
|
import {
|
|
10
12
|
setCurrentStep,
|
|
11
|
-
|
|
12
|
-
setPackage
|
|
13
|
-
setReturnFlight
|
|
13
|
+
setFlights,
|
|
14
|
+
setPackage
|
|
14
15
|
} from "../booking/booking-slice";
|
|
15
|
-
import {
|
|
16
|
+
import { ROOM_OPTIONS_FORM_STEP } from "../booking/constants";
|
|
16
17
|
import {
|
|
17
18
|
selectBookingQueryString,
|
|
18
19
|
selectIsFetchingProductOptions,
|
|
@@ -21,38 +22,40 @@ import {
|
|
|
21
22
|
selectTranslations
|
|
22
23
|
} from "../booking/selectors";
|
|
23
24
|
import { fetchPriceDetails } from "../price-details/price-details-slice";
|
|
25
|
+
import FlightFilter from "./flight-filter";
|
|
24
26
|
import FlightOption from "./flight-option";
|
|
25
27
|
import FlightOptionModal from "./flight-option-modal";
|
|
28
|
+
import { buildFilterOptions, buildGroupedFlights, filterGroupedFlights } from "./flight-utils";
|
|
26
29
|
|
|
27
30
|
interface FlightOptionsFormProps { }
|
|
28
31
|
|
|
29
32
|
const FlightOptionsForm: React.FC<FlightOptionsFormProps> = () => {
|
|
30
33
|
const settings = useContext(SettingsContext);
|
|
31
34
|
|
|
32
|
-
const translations = useSelector(selectTranslations);
|
|
35
|
+
const translations = useSelector(selectTranslations);
|
|
33
36
|
const dispatch = useAppDispatch();
|
|
34
37
|
const packageDetails = useSelector(selectPackageDetails);
|
|
35
38
|
const bookingQueryString = useSelector(selectBookingQueryString);
|
|
36
39
|
const isLoading = useSelector(selectIsFetchingProductOptions);
|
|
37
40
|
const flights = useSelector(selectPackageFlights);
|
|
38
41
|
|
|
42
|
+
const [filterOptions, setFilterOptions] = useState<FlightFilterOptions | undefined>();
|
|
43
|
+
const [flightGroups, setFlightGroups] = useState<GroupedFlights[]>([]);
|
|
44
|
+
|
|
39
45
|
const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {
|
|
40
46
|
if (settings.skipRouter) {
|
|
41
|
-
dispatch(setCurrentStep(
|
|
47
|
+
dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
|
|
42
48
|
} else {
|
|
43
|
-
|
|
49
|
+
if (settings.roomOptions.isHidden) {
|
|
50
|
+
navigate(`${settings.basePath}${settings.options.pathSuffix}?${bookingQueryString}`);
|
|
51
|
+
} else {
|
|
52
|
+
navigate(`${settings.basePath}${settings.roomOptions.pathSuffix}?${bookingQueryString}`);
|
|
53
|
+
}
|
|
44
54
|
}
|
|
45
55
|
|
|
46
56
|
e.preventDefault();
|
|
47
57
|
};
|
|
48
58
|
|
|
49
|
-
const goPrevious = () => {
|
|
50
|
-
dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const selectedOptionGuid = packageDetails?.options.find(x => x.isSelected)?.id!;
|
|
54
|
-
const selectedOutwardFlight = flights.outward?.find(x => x.isSelected);
|
|
55
|
-
const selectedReturnFlight = flights.return?.find(x => x.isSelected);
|
|
56
59
|
const currentFlightPrice = (flights.outward?.find(x => x.isSelected)?.price || 0)
|
|
57
60
|
+ (flights.return?.find(x => x.isSelected)?.price || 0);
|
|
58
61
|
|
|
@@ -97,20 +100,23 @@ const FlightOptionsForm: React.FC<FlightOptionsFormProps> = () => {
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
dispatch(fetchPriceDetails());
|
|
100
|
-
}, []);
|
|
101
103
|
|
|
102
|
-
|
|
104
|
+
const filters = buildFilterOptions(flights.outward, flights.return, translations);
|
|
105
|
+
setFilterOptions(filters);
|
|
106
|
+
}, []);
|
|
103
107
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
};
|
|
108
|
+
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
const groups = buildGroupedFlights(flights.outward, flights.return);
|
|
111
|
+
setFlightGroups(groups);
|
|
112
|
+
}, [flights]);
|
|
109
113
|
|
|
114
|
+
const filteredGroups = filterGroupedFlights(flightGroups, filterOptions);
|
|
115
|
+
const resultCount = filteredGroups.length;
|
|
110
116
|
|
|
111
117
|
return (
|
|
112
118
|
<>
|
|
113
|
-
<FlightOptionModal />
|
|
119
|
+
<FlightOptionModal />
|
|
114
120
|
<form
|
|
115
121
|
className="form"
|
|
116
122
|
name="booking--flights"
|
|
@@ -120,96 +126,39 @@ const FlightOptionsForm: React.FC<FlightOptionsFormProps> = () => {
|
|
|
120
126
|
>
|
|
121
127
|
{isLoading && settings.loaderComponent}
|
|
122
128
|
{!isLoading && (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
<div className="booking-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
dispatch(setOutwardFlight(item));
|
|
149
|
-
dispatch(fetchPriceDetails());
|
|
150
|
-
}}
|
|
151
|
-
/>
|
|
152
|
-
))}
|
|
153
|
-
</div>
|
|
154
|
-
</div>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
|
|
158
|
-
<div className="booking-card">
|
|
159
|
-
{/* <div className="booking-card__header">
|
|
160
|
-
<h2 className="booking-card__header-heading">
|
|
161
|
-
{translations.FLIGHTS_FORM.RETURN_FLIGHTS}
|
|
162
|
-
</h2>
|
|
163
|
-
</div> */}
|
|
164
|
-
<div className="booking-card__body">
|
|
165
|
-
<div className="booking-card__group">
|
|
166
|
-
<div className="flight return__flights">
|
|
167
|
-
{flights.return?.map((flight, index) => (
|
|
168
|
-
<FlightOption
|
|
169
|
-
key={index}
|
|
170
|
-
item={flight}
|
|
171
|
-
isSelected={flight.isSelected}
|
|
172
|
-
group="return"
|
|
173
|
-
selectedOutward={selectedOutwardFlight}
|
|
174
|
-
currentPrice={currentFlightPrice}
|
|
175
|
-
isSameOption={flight.validOptions.some(y => y === selectedOptionGuid)}
|
|
176
|
-
relatedFlight={flight.externalGuid ? flights.outward?.find(x => x.externalGuid === flight.externalGuid) : null}
|
|
177
|
-
onChange={item => {
|
|
178
|
-
dispatch(setReturnFlight(item));
|
|
179
|
-
dispatch(fetchPriceDetails());
|
|
180
|
-
}}
|
|
181
|
-
/>
|
|
182
|
-
))}
|
|
183
|
-
</div>
|
|
129
|
+
<div className="form__group">
|
|
130
|
+
<div className="booking-card">
|
|
131
|
+
<div className="booking-card__body">
|
|
132
|
+
{filterOptions && (
|
|
133
|
+
<FlightFilter filterOptions={filterOptions} resultCount={resultCount} applyFilter={setFilterOptions} />
|
|
134
|
+
)}
|
|
135
|
+
|
|
136
|
+
<div className="booking-card__group">
|
|
137
|
+
<div className="flight outward__flights">
|
|
138
|
+
{isEmpty(filteredGroups) && (
|
|
139
|
+
<p>{translations.FLIGHTS_FORM.NO_FLIGHTS_FOUND}</p>
|
|
140
|
+
)}
|
|
141
|
+
|
|
142
|
+
{!isEmpty(filteredGroups) && filteredGroups.map((flight, index) => (
|
|
143
|
+
<FlightOption
|
|
144
|
+
key={index}
|
|
145
|
+
item={flight}
|
|
146
|
+
isSelected={flight.isSelected}
|
|
147
|
+
currentPrice={currentFlightPrice}
|
|
148
|
+
onChange={item => {
|
|
149
|
+
dispatch(setFlights(item));
|
|
150
|
+
dispatch(fetchPriceDetails());
|
|
151
|
+
}}
|
|
152
|
+
/>
|
|
153
|
+
))}
|
|
184
154
|
</div>
|
|
185
155
|
</div>
|
|
186
156
|
</div>
|
|
187
157
|
</div>
|
|
158
|
+
</div>
|
|
188
159
|
)}
|
|
189
160
|
|
|
190
161
|
<div className="booking__navigator">
|
|
191
|
-
{!settings.roomOptions.isHidden && (
|
|
192
|
-
<>
|
|
193
|
-
{settings.skipRouter ? (
|
|
194
|
-
<button
|
|
195
|
-
type="button"
|
|
196
|
-
title={translations.STEPS.PREVIOUS}
|
|
197
|
-
onClick={() => goPrevious()}
|
|
198
|
-
className="cta cta--secondary"
|
|
199
|
-
>
|
|
200
|
-
{translations.STEPS.PREVIOUS}
|
|
201
|
-
</button>
|
|
202
|
-
) : (
|
|
203
|
-
<Link
|
|
204
|
-
to={`${settings.basePath}${settings.roomOptions.pathSuffix}?${bookingQueryString}`}
|
|
205
|
-
title={translations.STEPS.PREVIOUS}
|
|
206
|
-
className="cta cta--secondary"
|
|
207
|
-
>
|
|
208
|
-
{translations.STEPS.PREVIOUS}
|
|
209
|
-
</Link>
|
|
210
|
-
)}
|
|
211
|
-
</>
|
|
212
|
-
)}
|
|
213
162
|
<button
|
|
214
163
|
type="submit"
|
|
215
164
|
title={translations.STEPS.NEXT}
|
|
@@ -220,268 +169,6 @@ const FlightOptionsForm: React.FC<FlightOptionsFormProps> = () => {
|
|
|
220
169
|
</button>
|
|
221
170
|
</div>
|
|
222
171
|
|
|
223
|
-
<div className="flight__filter flight__filter--active">
|
|
224
|
-
<div className="flight__filter__header">
|
|
225
|
-
<div className="flight__filter__header__title">
|
|
226
|
-
<h3>Filter opties</h3>
|
|
227
|
-
<p>er zijn <strong>4 vluchten</strong> gevonden</p>
|
|
228
|
-
</div>
|
|
229
|
-
</div>
|
|
230
|
-
<div className="flight__filter__body">
|
|
231
|
-
<div className="flight__filter__group">
|
|
232
|
-
<div className="flight__filter__group__title">
|
|
233
|
-
Airlines
|
|
234
|
-
<svg width={16} height={16} className="flight__detail__btn__arrow"><use href="/icons/svg-sprite.svg#chevron"></use></svg>
|
|
235
|
-
</div>
|
|
236
|
-
{/* <div className="flight__filter__checkbox">
|
|
237
|
-
<input type="checkbox" id="klm" name="klm" value="klm" />
|
|
238
|
-
<label htmlFor="klm">KLM</label>
|
|
239
|
-
</div> */}
|
|
240
|
-
<div className="flight__filter__group__wrapper">
|
|
241
|
-
<div className="tree">
|
|
242
|
-
<div className="checkbox flight__filter__checkbox">
|
|
243
|
-
<label htmlFor="all" className="checkbox__label">
|
|
244
|
-
<input type="checkbox" id="all" className="checkbox__input checkbox__input--parent" />
|
|
245
|
-
<span className="radiobutton__label-text">
|
|
246
|
-
Alle airlines <span className="amount">(5)</span>
|
|
247
|
-
</span>
|
|
248
|
-
</label>
|
|
249
|
-
</div>
|
|
250
|
-
</div>
|
|
251
|
-
<div className="tree">
|
|
252
|
-
<div className="checkbox flight__filter__checkbox">
|
|
253
|
-
<label htmlFor="BRIT" className="checkbox__label">
|
|
254
|
-
<input type="checkbox" id="BRIT" className="checkbox__input checkbox__input--parent" />
|
|
255
|
-
<span className="radiobutton__label-text">
|
|
256
|
-
British airways <span className="amount">(2)</span>
|
|
257
|
-
</span>
|
|
258
|
-
</label>
|
|
259
|
-
</div>
|
|
260
|
-
</div>
|
|
261
|
-
<div className="tree">
|
|
262
|
-
<div className="checkbox flight__filter__checkbox">
|
|
263
|
-
<label htmlFor="BRU" className="checkbox__label">
|
|
264
|
-
<input type="checkbox" id="BRU" className="checkbox__input checkbox__input--parent" />
|
|
265
|
-
<span className="radiobutton__label-text">
|
|
266
|
-
Brussels airlines <span className="amount">(1)</span>
|
|
267
|
-
</span>
|
|
268
|
-
</label>
|
|
269
|
-
</div>
|
|
270
|
-
</div>
|
|
271
|
-
<div className="tree">
|
|
272
|
-
<div className="checkbox flight__filter__checkbox">
|
|
273
|
-
<label htmlFor="TUI" className="checkbox__label">
|
|
274
|
-
<input type="checkbox" id="TUI" className="checkbox__input checkbox__input--parent" />
|
|
275
|
-
<span className="radiobutton__label-text">
|
|
276
|
-
TUI <span className="amount">(5)</span>
|
|
277
|
-
</span>
|
|
278
|
-
</label>
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
<div className="tree">
|
|
282
|
-
<div className="checkbox flight__filter__checkbox">
|
|
283
|
-
<label htmlFor="luft" className="checkbox__label">
|
|
284
|
-
<input type="checkbox" id="luft" className="checkbox__input checkbox__input--parent" />
|
|
285
|
-
<span className="radiobutton__label-text">
|
|
286
|
-
Lufthansa <span className="amount">(3)</span>
|
|
287
|
-
</span>
|
|
288
|
-
</label>
|
|
289
|
-
</div>
|
|
290
|
-
</div>
|
|
291
|
-
</div>
|
|
292
|
-
</div>
|
|
293
|
-
<div className="flight__filter__group">
|
|
294
|
-
<div className="flight__filter__group__title">
|
|
295
|
-
Aantal stops
|
|
296
|
-
<svg width={16} height={16} className="flight__detail__btn__arrow"><use href="/icons/svg-sprite.svg#chevron"></use></svg>
|
|
297
|
-
</div>
|
|
298
|
-
<div className="flight__filter__group__wrapper">
|
|
299
|
-
<div className="tree">
|
|
300
|
-
<div className="radiobutton flight__filter__checkbox">
|
|
301
|
-
<label htmlFor="stops" className="radiobutton__label">
|
|
302
|
-
<input type="checkbox" id="stops" className="radiobutton__input radiobutton__input--parent" />
|
|
303
|
-
<span className="radiobutton__label-text">
|
|
304
|
-
Alle stops <span className="amount">(5)</span>
|
|
305
|
-
</span>
|
|
306
|
-
</label>
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
<div className="tree">
|
|
310
|
-
<div className="radiobutton flight__filter__checkbox">
|
|
311
|
-
<label htmlFor="stops" className="radiobutton__label">
|
|
312
|
-
<input type="checkbox" id="stops" className="radiobutton__input radiobutton__input--parent" />
|
|
313
|
-
<span className="radiobutton__label-text">
|
|
314
|
-
Directe vlucht <span className="amount">(5)</span>
|
|
315
|
-
</span>
|
|
316
|
-
</label>
|
|
317
|
-
</div>
|
|
318
|
-
</div>
|
|
319
|
-
<div className="tree">
|
|
320
|
-
<div className="radiobutton flight__filter__checkbox">
|
|
321
|
-
<label htmlFor="stops" className="radiobutton__label">
|
|
322
|
-
<input type="checkbox" id="stops" className="radiobutton__input radiobutton__input--parent" />
|
|
323
|
-
<span className="radiobutton__label-text">
|
|
324
|
-
1 Stop <span className="amount">(1)</span>
|
|
325
|
-
</span>
|
|
326
|
-
</label>
|
|
327
|
-
</div>
|
|
328
|
-
</div>
|
|
329
|
-
<div className="tree">
|
|
330
|
-
<div className="radiobutton flight__filter__checkbox">
|
|
331
|
-
<label htmlFor="stops" className="radiobutton__label">
|
|
332
|
-
<input type="checkbox" id="stops" className="radiobutton__input radiobutton__input--parent" />
|
|
333
|
-
<span className="radiobutton__label-text">
|
|
334
|
-
2 Stops <span className="amount">(2)</span>
|
|
335
|
-
</span>
|
|
336
|
-
</label>
|
|
337
|
-
</div>
|
|
338
|
-
</div>
|
|
339
|
-
</div>
|
|
340
|
-
</div>
|
|
341
|
-
<div className="flight__filter__group">
|
|
342
|
-
<div className="flight__filter__group__title">
|
|
343
|
-
Vlucht heenreis
|
|
344
|
-
<svg width={16} height={16} className="flight__detail__btn__arrow"><use href="/icons/svg-sprite.svg#chevron"></use></svg>
|
|
345
|
-
</div>
|
|
346
|
-
<div className="flight__filter__group__wrapper">
|
|
347
|
-
<p>Vertrektijd</p>
|
|
348
|
-
<div className="tree">
|
|
349
|
-
<div className="checkbox flight__filter__checkbox">
|
|
350
|
-
<label htmlFor="ochtend" className="checkbox__label">
|
|
351
|
-
<input type="checkbox" id="ochtend" className="checkbox__input checkbox__input--parent" />
|
|
352
|
-
<span className="radiobutton__label-text">
|
|
353
|
-
Ochtend <span className="amount">(05:00 - 12:00)</span>
|
|
354
|
-
</span>
|
|
355
|
-
</label>
|
|
356
|
-
</div>
|
|
357
|
-
</div>
|
|
358
|
-
<div className="tree">
|
|
359
|
-
<div className="checkbox flight__filter__checkbox">
|
|
360
|
-
<label htmlFor="mid" className="checkbox__label">
|
|
361
|
-
<input type="checkbox" id="mid" className="checkbox__input checkbox__input--parent" />
|
|
362
|
-
<span className="radiobutton__label-text">
|
|
363
|
-
Namiddag <span className="amount">(12:00 - 18:00)</span>
|
|
364
|
-
</span>
|
|
365
|
-
</label>
|
|
366
|
-
</div>
|
|
367
|
-
</div>
|
|
368
|
-
<div className="tree">
|
|
369
|
-
<div className="checkbox flight__filter__checkbox">
|
|
370
|
-
<label htmlFor="avond" className="checkbox__label">
|
|
371
|
-
<input type="checkbox" id="avond" className="checkbox__input checkbox__input--parent" />
|
|
372
|
-
<span className="radiobutton__label-text">
|
|
373
|
-
Avond <span className="amount">(18:00 - 00:00)</span>
|
|
374
|
-
</span>
|
|
375
|
-
</label>
|
|
376
|
-
</div>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
<div className="flight__filter__group__wrapper">
|
|
380
|
-
<p>Reisduur</p>
|
|
381
|
-
<div className="flight__filter__slider">
|
|
382
|
-
<input
|
|
383
|
-
type="range"
|
|
384
|
-
min="2"
|
|
385
|
-
max="7"
|
|
386
|
-
value={value}
|
|
387
|
-
onChange={handleChange}
|
|
388
|
-
className="slider slider--progress"
|
|
389
|
-
/>
|
|
390
|
-
<div className="flight__filter__slider__value">
|
|
391
|
-
<span>2h 42m</span><span>6h 35m</span>
|
|
392
|
-
</div>
|
|
393
|
-
</div>
|
|
394
|
-
</div>
|
|
395
|
-
<div className="flight__filter__group__wrapper">
|
|
396
|
-
<p>Overstaptijd</p>
|
|
397
|
-
<div className="flight__filter__slider">
|
|
398
|
-
<input
|
|
399
|
-
type="range"
|
|
400
|
-
min="2"
|
|
401
|
-
max="7"
|
|
402
|
-
value={value}
|
|
403
|
-
onChange={handleChange}
|
|
404
|
-
className="slider slider--progress"
|
|
405
|
-
/>
|
|
406
|
-
<div className="flight__filter__slider__value">
|
|
407
|
-
<span>2h 42m</span><span>6h 35m</span>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
<div className="flight__filter__group">
|
|
413
|
-
<div className="flight__filter__group__title">
|
|
414
|
-
Vlucht terugreis
|
|
415
|
-
<svg width={16} height={16} className="flight__detail__btn__arrow"><use href="/icons/svg-sprite.svg#chevron"></use></svg>
|
|
416
|
-
</div>
|
|
417
|
-
<div className="flight__filter__group__wrapper">
|
|
418
|
-
<p>Vertrektijd</p>
|
|
419
|
-
<div className="tree">
|
|
420
|
-
<div className="checkbox flight__filter__checkbox">
|
|
421
|
-
<label htmlFor="ochtend" className="checkbox__label">
|
|
422
|
-
<input type="checkbox" id="ochtend" className="checkbox__input checkbox__input--parent" />
|
|
423
|
-
<span className="radiobutton__label-text">
|
|
424
|
-
Ochtend <span className="amount">(05:00 - 12:00)</span>
|
|
425
|
-
</span>
|
|
426
|
-
</label>
|
|
427
|
-
</div>
|
|
428
|
-
</div>
|
|
429
|
-
<div className="tree">
|
|
430
|
-
<div className="checkbox flight__filter__checkbox">
|
|
431
|
-
<label htmlFor="mid" className="checkbox__label">
|
|
432
|
-
<input type="checkbox" id="mid" className="checkbox__input checkbox__input--parent" />
|
|
433
|
-
<span className="radiobutton__label-text">
|
|
434
|
-
Namiddag <span className="amount">(12:00 - 18:00)</span>
|
|
435
|
-
</span>
|
|
436
|
-
</label>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
<div className="tree">
|
|
440
|
-
<div className="checkbox flight__filter__checkbox">
|
|
441
|
-
<label htmlFor="avond" className="checkbox__label">
|
|
442
|
-
<input type="checkbox" id="avond" className="checkbox__input checkbox__input--parent" />
|
|
443
|
-
<span className="radiobutton__label-text">
|
|
444
|
-
Avond <span className="amount">(18:00 - 00:00)</span>
|
|
445
|
-
</span>
|
|
446
|
-
</label>
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
</div>
|
|
450
|
-
<div className="flight__filter__group__wrapper">
|
|
451
|
-
<p>Reisduur</p>
|
|
452
|
-
<div className="flight__filter__slider">
|
|
453
|
-
<input
|
|
454
|
-
type="range"
|
|
455
|
-
min="2"
|
|
456
|
-
max="7"
|
|
457
|
-
value={value}
|
|
458
|
-
onChange={handleChange}
|
|
459
|
-
className="slider slider--progress"
|
|
460
|
-
/>
|
|
461
|
-
<div className="flight__filter__slider__value">
|
|
462
|
-
<span>2h 42m</span><span>6h 35m</span>
|
|
463
|
-
</div>
|
|
464
|
-
</div>
|
|
465
|
-
</div>
|
|
466
|
-
<div className="flight__filter__group__wrapper">
|
|
467
|
-
<p>Overstaptijd</p>
|
|
468
|
-
<div className="flight__filter__slider">
|
|
469
|
-
<input
|
|
470
|
-
type="range"
|
|
471
|
-
min="2"
|
|
472
|
-
max="7"
|
|
473
|
-
value={value}
|
|
474
|
-
onChange={handleChange}
|
|
475
|
-
className="slider slider--progress"
|
|
476
|
-
/>
|
|
477
|
-
<div className="flight__filter__slider__value">
|
|
478
|
-
<span>2h 42m</span><span>6h 35m</span>
|
|
479
|
-
</div>
|
|
480
|
-
</div>
|
|
481
|
-
</div>
|
|
482
|
-
</div>
|
|
483
|
-
</div>
|
|
484
|
-
</div>
|
|
485
172
|
</form >
|
|
486
173
|
</>
|
|
487
174
|
);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
+
BookingOptionGroup,
|
|
3
|
+
BookingOptionPax,
|
|
4
|
+
BookingOptionUnit,
|
|
2
5
|
BookingPackage,
|
|
6
|
+
BookingPackageOption,
|
|
7
|
+
BookingPackageRoom,
|
|
3
8
|
ChangedLine,
|
|
4
|
-
|
|
5
|
-
BookingOptionGroup,
|
|
9
|
+
PerBookingPackageOption,
|
|
6
10
|
PerPaxPackageOption,
|
|
7
|
-
BookingOptionUnit,
|
|
8
11
|
PerUnitPackageOption,
|
|
9
|
-
PerBookingPackageOption,
|
|
10
|
-
BookingPackageRoom,
|
|
11
12
|
} from "@qite/tide-client/build/types";
|
|
12
|
-
import { BookingPackageOption } from "@qite/tide-client/build/types/offer/booking-v2/shared/booking-package-option";
|
|
13
13
|
|
|
14
14
|
export const updatePackageDetails = (
|
|
15
15
|
packageDetails: BookingPackage,
|
|
@@ -53,11 +53,9 @@ const OptionRoom: React.FC<OptionRoomProps> = ({
|
|
|
53
53
|
const accommodations = uniqBy(
|
|
54
54
|
compact(
|
|
55
55
|
packageRoom &&
|
|
56
|
-
packageRoom.options
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
56
|
+
packageRoom.options
|
|
57
|
+
.filter(x => x.accommodationCode && !x.isLocked)
|
|
58
|
+
.map((option) => {
|
|
61
59
|
return {
|
|
62
60
|
accommodationCode: option.accommodationCode,
|
|
63
61
|
accommodationName: option.accommodationName,
|