@qite/tide-booking-component 1.4.2 → 1.4.4

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 (35) hide show
  1. package/build/build-cjs/booking-wizard/components/phone-input.d.ts +17 -0
  2. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +41 -12
  3. package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  4. package/build/build-cjs/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  5. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  6. package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  7. package/build/build-cjs/booking-wizard/types.d.ts +13 -0
  8. package/build/build-cjs/index.js +460 -273
  9. package/build/build-esm/booking-wizard/components/phone-input.d.ts +17 -0
  10. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +41 -12
  11. package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  12. package/build/build-esm/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  13. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  14. package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  15. package/build/build-esm/booking-wizard/types.d.ts +13 -0
  16. package/build/build-esm/index.js +462 -275
  17. package/package.json +1 -1
  18. package/src/booking-wizard/api-settings-slice.ts +5 -0
  19. package/src/booking-wizard/components/phone-input.tsx +181 -0
  20. package/src/booking-wizard/features/booking/booking.tsx +28 -28
  21. package/src/booking-wizard/features/booking/selectors.ts +17 -14
  22. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +4 -2
  23. package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -0
  24. package/src/booking-wizard/features/summary/summary-flight.tsx +7 -6
  25. package/src/booking-wizard/features/summary/summary.tsx +91 -62
  26. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +70 -0
  27. package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +11 -0
  28. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +451 -313
  29. package/src/booking-wizard/features/travelers-form/validate-form.ts +84 -98
  30. package/src/booking-wizard/types.ts +15 -0
  31. package/src/shared/translations/en-GB.json +3 -0
  32. package/src/shared/translations/fr-BE.json +3 -0
  33. package/src/shared/translations/nl-BE.json +3 -0
  34. package/styles/booking-wizard.scss +1 -0
  35. package/styles/components/_phone-input.scss +8 -0
@@ -32,6 +32,8 @@ import {
32
32
  import { fetchPriceDetails } from "../price-details/price-details-slice";
33
33
  import TypeAheadInput from "./type-ahead-input";
34
34
  import validateForm from "./validate-form";
35
+ import GenderControl from "./controls/gender-control";
36
+ import PhoneInput from "../../components/phone-input";
35
37
 
36
38
  interface TravelersFormProps { }
37
39
 
@@ -140,7 +142,7 @@ const TravelersForm: React.FC<TravelersFormProps> = () => {
140
142
  : useFormik<TravelersFormValues>({
141
143
  initialValues,
142
144
  validate: (values) =>
143
- validateForm(values, settings.agentRequired, bookingType, translations),
145
+ validateForm(values, settings.agentRequired, bookingType, translations, settings.travellers.formFields, settings.travellers.mainBookerFormFields),
144
146
  onSubmit: (values) => {
145
147
  dispatch(setFormValues(values));
146
148
  dispatch(fetchPriceDetails());
@@ -244,6 +246,112 @@ const TravelersForm: React.FC<TravelersFormProps> = () => {
244
246
  const hasVisibleError = (key: string) =>
245
247
  get(formik.errors, key) && get(formik.touched, key);
246
248
 
249
+ const getControl = (type: string, value: Traveler, name: string) => {
250
+ switch (type) {
251
+ case "gender": {
252
+ return <GenderControl translations={translations} value={value} formik={formik} name={name} />;
253
+ }
254
+ case "firstName": {
255
+ return (<LabeledInput
256
+ hasError={hasVisibleError(
257
+ name
258
+ )}
259
+ extraClassName="form__group--md-33"
260
+ label={translations.TRAVELERS_FORM.FIRST_NAME}
261
+ required
262
+ name={name}
263
+ onChange={formik.handleChange}
264
+ onBlur={formik.handleBlur}
265
+ value={value.firstName}
266
+ />);
267
+ }
268
+ case "lastName": {
269
+ return (<LabeledInput
270
+ hasError={hasVisibleError(
271
+ name
272
+ )}
273
+ extraClassName="form__group--md-33"
274
+ label={translations.TRAVELERS_FORM.LAST_NAME}
275
+ required
276
+ name={name}
277
+ onChange={formik.handleChange}
278
+ onBlur={formik.handleBlur}
279
+ value={value.lastName}
280
+ />)
281
+ }
282
+ case "birthDate": {
283
+ return (
284
+ <LabeledInput
285
+ type="date"
286
+ hasError={hasVisibleError(
287
+ name
288
+ )}
289
+ extraClassName="form__group--md-33"
290
+ label={translations.TRAVELERS_FORM.BIRTHDATE}
291
+ required
292
+ name={name}
293
+ onChange={formik.handleChange}
294
+ onBlur={formik.handleBlur}
295
+ value={value.birthDate}
296
+ />
297
+ )
298
+ }
299
+ case "country": {
300
+ return (<LabeledSelect
301
+ hasError={hasVisibleError("country")}
302
+ label={translations.TRAVELERS_FORM.COUNTRY}
303
+ required
304
+ name="country"
305
+ onChange={formik.handleChange}
306
+ onBlur={formik.handleBlur}
307
+ value={formik.values.country}
308
+ options={[{key: "empty", value: undefined, label: translations.TRAVELERS_FORM.SELECT_COUNTRY}, ...settings.travellers?.countries?.map(country => ({key: country.iso2, value: country.iso2, label: country.name})) ?? []]}
309
+ />)
310
+ }
311
+ case "phone": {
312
+ return (
313
+ <PhoneInput
314
+ countries={settings.travellers?.countries ?? []}
315
+ countryIso2={formik.values.country}
316
+ hasError={hasVisibleError("phone")}
317
+ label={translations.TRAVELERS_FORM.PHONE}
318
+ required
319
+ name="phone"
320
+ onChange={formik.handleChange}
321
+ onBlur={formik.handleBlur}
322
+ value={formik.values.phone}
323
+ />
324
+ );
325
+ }
326
+ case "email": {
327
+ return (<>
328
+ <LabeledInput
329
+ type="email"
330
+ hasError={hasVisibleError("email")}
331
+ extraClassName="form__group--md-33"
332
+ label={translations.TRAVELERS_FORM.EMAIL}
333
+ required
334
+ name="email"
335
+ onChange={formik.handleChange}
336
+ onBlur={formik.handleBlur}
337
+ value={formik.values.email}
338
+ />
339
+ <LabeledInput
340
+ type="email"
341
+ hasError={hasVisibleError("emailConfirmation")}
342
+ extraClassName="form__group--md-33"
343
+ label={translations.TRAVELERS_FORM.REPEAT_EMAIL}
344
+ required
345
+ name="emailConfirmation"
346
+ onChange={formik.handleChange}
347
+ onBlur={formik.handleBlur}
348
+ value={formik.values.emailConfirmation}
349
+ />
350
+ </>);
351
+ }
352
+ }
353
+ };
354
+
247
355
  return (
248
356
  <form
249
357
  className="form form__travelers"
@@ -416,105 +524,115 @@ const TravelersForm: React.FC<TravelersFormProps> = () => {
416
524
  </label>
417
525
  </div>
418
526
  </div>
419
- <div className="form__row">
420
- <div
421
- className={buildClassName([
422
- "form__group",
423
- hasVisibleError(
424
- `rooms[${rIndex}].adults[${index}].gender`
425
- ) && "form__group--error",
426
- ])}
427
- >
428
- <label className="form__label">
429
- {translations.TRAVELERS_FORM.GENDER} *
430
- </label>
431
- <div className="radiobutton-group">
432
- <div className="radiobutton">
433
- <label className="radiobutton__label">
434
- <input
435
- type="radio"
436
- className="radiobutton__input"
437
- name={`rooms[${rIndex}].adults[${index}].gender`}
438
- onChange={formik.handleChange}
439
- onBlur={formik.handleBlur}
440
- value="m"
441
- checked={travelerValues.gender === "m"}
442
- />
443
- {translations.TRAVELERS_FORM.MALE}
444
- </label>
445
- </div>
527
+ {settings.travellers.formFields?.length
528
+ ? <>
529
+ <div className="travelers-form__grid">
530
+ {settings.travellers.formFields.map((field, fIndex) => <div key={fIndex} className={`control control--${field.type}`}>
531
+ {getControl(field.type, travelerValues, `rooms[${rIndex}].adults[${index}].${field.type}`)}
532
+ </div>)}
533
+ </div>
534
+ </>
535
+ : <>
536
+ <div className="form__row">
537
+ <div
538
+ className={buildClassName([
539
+ "form__group",
540
+ hasVisibleError(
541
+ `rooms[${rIndex}].adults[${index}].gender`
542
+ ) && "form__group--error",
543
+ ])}
544
+ >
545
+ <label className="form__label">
546
+ {translations.TRAVELERS_FORM.GENDER} *
547
+ </label>
548
+ <div className="radiobutton-group">
549
+ <div className="radiobutton">
550
+ <label className="radiobutton__label">
551
+ <input
552
+ type="radio"
553
+ className="radiobutton__input"
554
+ name={`rooms[${rIndex}].adults[${index}].gender`}
555
+ onChange={formik.handleChange}
556
+ onBlur={formik.handleBlur}
557
+ value="m"
558
+ checked={travelerValues.gender === "m"}
559
+ />
560
+ {translations.TRAVELERS_FORM.MALE}
561
+ </label>
562
+ </div>
446
563
 
447
- <div className="radiobutton">
448
- <label className="radiobutton__label">
449
- <input
450
- type="radio"
451
- className="radiobutton__input"
452
- name={`rooms[${rIndex}].adults[${index}].gender`}
453
- onChange={formik.handleChange}
454
- onBlur={formik.handleBlur}
455
- value="f"
456
- checked={travelerValues.gender === "f"}
457
- />
458
- {translations.TRAVELERS_FORM.FEMALE}
459
- </label>
460
- </div>
564
+ <div className="radiobutton">
565
+ <label className="radiobutton__label">
566
+ <input
567
+ type="radio"
568
+ className="radiobutton__input"
569
+ name={`rooms[${rIndex}].adults[${index}].gender`}
570
+ onChange={formik.handleChange}
571
+ onBlur={formik.handleBlur}
572
+ value="f"
573
+ checked={travelerValues.gender === "f"}
574
+ />
575
+ {translations.TRAVELERS_FORM.FEMALE}
576
+ </label>
577
+ </div>
461
578
 
462
- <div className="radiobutton">
463
- <label className="radiobutton__label">
464
- <input
465
- type="radio"
466
- className="radiobutton__input"
467
- name={`rooms[${rIndex}].adults[${index}].gender`}
468
- onChange={formik.handleChange}
469
- onBlur={formik.handleBlur}
470
- value="x"
471
- checked={travelerValues.gender === "x"}
472
- />
473
- {translations.TRAVELERS_FORM.OTHER}
474
- </label>
579
+ <div className="radiobutton">
580
+ <label className="radiobutton__label">
581
+ <input
582
+ type="radio"
583
+ className="radiobutton__input"
584
+ name={`rooms[${rIndex}].adults[${index}].gender`}
585
+ onChange={formik.handleChange}
586
+ onBlur={formik.handleBlur}
587
+ value="x"
588
+ checked={travelerValues.gender === "x"}
589
+ />
590
+ {translations.TRAVELERS_FORM.OTHER}
591
+ </label>
592
+ </div>
475
593
  </div>
476
594
  </div>
477
595
  </div>
478
- </div>
479
- <div className="form__row">
480
- <LabeledInput
481
- hasError={hasVisibleError(
482
- `rooms[${rIndex}].adults[${index}].firstName`
483
- )}
484
- extraClassName="form__group--md-33"
485
- label={translations.TRAVELERS_FORM.FIRST_NAME}
486
- required
487
- name={`rooms[${rIndex}].adults[${index}].firstName`}
488
- onChange={formik.handleChange}
489
- onBlur={formik.handleBlur}
490
- value={travelerValues.firstName}
491
- />
492
- <LabeledInput
493
- hasError={hasVisibleError(
494
- `rooms[${rIndex}].adults[${index}].lastName`
495
- )}
496
- extraClassName="form__group--md-33"
497
- label={translations.TRAVELERS_FORM.LAST_NAME}
498
- required
499
- name={`rooms[${rIndex}].adults[${index}].lastName`}
500
- onChange={formik.handleChange}
501
- onBlur={formik.handleBlur}
502
- value={travelerValues.lastName}
503
- />
504
- <LabeledInput
505
- type="date"
506
- hasError={hasVisibleError(
507
- `rooms[${rIndex}].adults[${index}].birthDate`
508
- )}
509
- extraClassName="form__group--md-33"
510
- label={translations.TRAVELERS_FORM.BIRTHDATE}
511
- required
512
- name={`rooms[${rIndex}].adults[${index}].birthDate`}
513
- onChange={formik.handleChange}
514
- onBlur={formik.handleBlur}
515
- value={travelerValues.birthDate}
516
- />
517
- </div>
596
+ <div className="form__row">
597
+ <LabeledInput
598
+ hasError={hasVisibleError(
599
+ `rooms[${rIndex}].adults[${index}].firstName`
600
+ )}
601
+ extraClassName="form__group--md-33"
602
+ label={translations.TRAVELERS_FORM.FIRST_NAME}
603
+ required
604
+ name={`rooms[${rIndex}].adults[${index}].firstName`}
605
+ onChange={formik.handleChange}
606
+ onBlur={formik.handleBlur}
607
+ value={travelerValues.firstName}
608
+ />
609
+ <LabeledInput
610
+ hasError={hasVisibleError(
611
+ `rooms[${rIndex}].adults[${index}].lastName`
612
+ )}
613
+ extraClassName="form__group--md-33"
614
+ label={translations.TRAVELERS_FORM.LAST_NAME}
615
+ required
616
+ name={`rooms[${rIndex}].adults[${index}].lastName`}
617
+ onChange={formik.handleChange}
618
+ onBlur={formik.handleBlur}
619
+ value={travelerValues.lastName}
620
+ />
621
+ <LabeledInput
622
+ type="date"
623
+ hasError={hasVisibleError(
624
+ `rooms[${rIndex}].adults[${index}].birthDate`
625
+ )}
626
+ extraClassName="form__group--md-33"
627
+ label={translations.TRAVELERS_FORM.BIRTHDATE}
628
+ required
629
+ name={`rooms[${rIndex}].adults[${index}].birthDate`}
630
+ onChange={formik.handleChange}
631
+ onBlur={formik.handleBlur}
632
+ value={travelerValues.birthDate}
633
+ />
634
+ </div>
635
+ </>}
518
636
  </div>
519
637
  ))}
520
638
  {room.children.map((travelerValues, index) => (
@@ -528,111 +646,121 @@ const TravelersForm: React.FC<TravelersFormProps> = () => {
528
646
  {translations.TRAVELERS_FORM.CHILD}
529
647
  </p>
530
648
  </div>
531
- <div className="form__row">
532
- <div
533
- className={buildClassName([
534
- "form__group",
535
- hasVisibleError(
536
- `rooms[${rIndex}].children[${index}].gender`
537
- ) && "form__group--error",
538
- ])}
539
- >
540
- <label className="form__label">
541
- {translations.TRAVELERS_FORM.GENDER} *
542
- </label>
543
- <div className="radiobutton-group">
544
- <div className="radiobutton">
545
- <label className="radiobutton__label">
546
- <input
547
- type="radio"
548
- className="radiobutton__input"
549
- name={`rooms[${rIndex}].children[${index}].gender`}
550
- onChange={formik.handleChange}
551
- onBlur={formik.handleBlur}
552
- value="m"
553
- checked={travelerValues.gender === "m"}
554
- />
555
- {translations.TRAVELERS_FORM.MALE}
556
- </label>
557
- </div>
649
+ {settings.travellers.formFields?.length
650
+ ? <>
651
+ <div className="travelers-form__grid">
652
+ {settings.travellers.formFields.map((field, fIndex) => <div key={fIndex} className={`control control--${field.type}`}>
653
+ {getControl(field.type, travelerValues, `rooms[${rIndex}].children[${index}].${field.type}`)}
654
+ </div>)}
655
+ </div>
656
+ </>
657
+ : <>
658
+ <div className="form__row">
659
+ <div
660
+ className={buildClassName([
661
+ "form__group",
662
+ hasVisibleError(
663
+ `rooms[${rIndex}].children[${index}].gender`
664
+ ) && "form__group--error",
665
+ ])}
666
+ >
667
+ <label className="form__label">
668
+ {translations.TRAVELERS_FORM.GENDER} *
669
+ </label>
670
+ <div className="radiobutton-group">
671
+ <div className="radiobutton">
672
+ <label className="radiobutton__label">
673
+ <input
674
+ type="radio"
675
+ className="radiobutton__input"
676
+ name={`rooms[${rIndex}].children[${index}].gender`}
677
+ onChange={formik.handleChange}
678
+ onBlur={formik.handleBlur}
679
+ value="m"
680
+ checked={travelerValues.gender === "m"}
681
+ />
682
+ {translations.TRAVELERS_FORM.MALE}
683
+ </label>
684
+ </div>
558
685
 
559
- <div className="radiobutton">
560
- <label className="radiobutton__label">
561
- <input
562
- type="radio"
563
- className="radiobutton__input"
564
- name={`rooms[${rIndex}].children[${index}].gender`}
565
- onChange={formik.handleChange}
566
- onBlur={formik.handleBlur}
567
- value="f"
568
- checked={travelerValues.gender === "f"}
569
- />
570
- {translations.TRAVELERS_FORM.FEMALE}
571
- </label>
572
- </div>
686
+ <div className="radiobutton">
687
+ <label className="radiobutton__label">
688
+ <input
689
+ type="radio"
690
+ className="radiobutton__input"
691
+ name={`rooms[${rIndex}].children[${index}].gender`}
692
+ onChange={formik.handleChange}
693
+ onBlur={formik.handleBlur}
694
+ value="f"
695
+ checked={travelerValues.gender === "f"}
696
+ />
697
+ {translations.TRAVELERS_FORM.FEMALE}
698
+ </label>
699
+ </div>
573
700
 
574
- <div className="radiobutton">
575
- <label className="radiobutton__label">
576
- <input
577
- type="radio"
578
- className="radiobutton__input"
579
- name={`rooms[${rIndex}].children[${index}].gender`}
580
- onChange={formik.handleChange}
581
- onBlur={formik.handleBlur}
582
- value="x"
583
- checked={travelerValues.gender === "x"}
584
- />
585
- {translations.TRAVELERS_FORM.OTHER}
586
- </label>
701
+ <div className="radiobutton">
702
+ <label className="radiobutton__label">
703
+ <input
704
+ type="radio"
705
+ className="radiobutton__input"
706
+ name={`rooms[${rIndex}].children[${index}].gender`}
707
+ onChange={formik.handleChange}
708
+ onBlur={formik.handleBlur}
709
+ value="x"
710
+ checked={travelerValues.gender === "x"}
711
+ />
712
+ {translations.TRAVELERS_FORM.OTHER}
713
+ </label>
714
+ </div>
587
715
  </div>
588
716
  </div>
589
717
  </div>
590
- </div>
591
- <div className="form__row">
592
- <LabeledInput
593
- hasError={hasVisibleError(
594
- `rooms[${rIndex}].children[${index}].firstName`
595
- )}
596
- extraClassName="form__group--md-33"
597
- label={translations.TRAVELERS_FORM.FIRST_NAME}
598
- required
599
- name={`rooms[${rIndex}].children[${index}].firstName`}
600
- onChange={formik.handleChange}
601
- onBlur={formik.handleBlur}
602
- value={travelerValues.firstName}
603
- />
604
- <LabeledInput
605
- hasError={hasVisibleError(
606
- `rooms[${rIndex}].children[${index}].lastName`
607
- )}
608
- extraClassName="form__group--md-33"
609
- label={translations.TRAVELERS_FORM.LAST_NAME}
610
- required
611
- name={`rooms[${rIndex}].children[${index}].lastName`}
612
- onChange={formik.handleChange}
613
- onBlur={formik.handleBlur}
614
- value={travelerValues.lastName}
615
- />
616
- <LabeledInput
617
- type="date"
618
- hasError={hasVisibleError(
619
- `rooms[${rIndex}].children[${index}].birthDate`
620
- )}
621
- extraClassName="form__group--md-33"
622
- label={translations.TRAVELERS_FORM.BIRTHDATE}
623
- required
624
- name={`rooms[${rIndex}].children[${index}].birthDate`}
625
- onChange={formik.handleChange}
626
- onBlur={formik.handleBlur}
627
- value={travelerValues.birthDate}
628
- />
629
- </div>
718
+ <div className="form__row">
719
+ <LabeledInput
720
+ hasError={hasVisibleError(
721
+ `rooms[${rIndex}].children[${index}].firstName`
722
+ )}
723
+ extraClassName="form__group--md-33"
724
+ label={translations.TRAVELERS_FORM.FIRST_NAME}
725
+ required
726
+ name={`rooms[${rIndex}].children[${index}].firstName`}
727
+ onChange={formik.handleChange}
728
+ onBlur={formik.handleBlur}
729
+ value={travelerValues.firstName}
730
+ />
731
+ <LabeledInput
732
+ hasError={hasVisibleError(
733
+ `rooms[${rIndex}].children[${index}].lastName`
734
+ )}
735
+ extraClassName="form__group--md-33"
736
+ label={translations.TRAVELERS_FORM.LAST_NAME}
737
+ required
738
+ name={`rooms[${rIndex}].children[${index}].lastName`}
739
+ onChange={formik.handleChange}
740
+ onBlur={formik.handleBlur}
741
+ value={travelerValues.lastName}
742
+ />
743
+ <LabeledInput
744
+ type="date"
745
+ hasError={hasVisibleError(
746
+ `rooms[${rIndex}].children[${index}].birthDate`
747
+ )}
748
+ extraClassName="form__group--md-33"
749
+ label={translations.TRAVELERS_FORM.BIRTHDATE}
750
+ required
751
+ name={`rooms[${rIndex}].children[${index}].birthDate`}
752
+ onChange={formik.handleChange}
753
+ onBlur={formik.handleBlur}
754
+ value={travelerValues.birthDate}
755
+ />
756
+ </div>
757
+ </>}
630
758
  </div>
631
759
  ))}
632
760
  </div>
633
761
  ))}
634
762
 
635
- {bookingType != "b2b" ? (
763
+ {bookingType != "b2b" || settings.travellers?.mainBookerFormFields?.length ? (
636
764
  <div className="form__region">
637
765
  <div className="form__region-header">
638
766
  <h5 className="form__region-heading">
@@ -652,132 +780,142 @@ const TravelersForm: React.FC<TravelersFormProps> = () => {
652
780
  </p>
653
781
  </div>
654
782
  <>
655
- <div className="form__twocolumn">
656
- <div className="form__twocolumn-column">
657
- <div className="form__row">
658
- <LabeledInput
659
- hasError={hasVisibleError("street")}
660
- extraClassName="form__group--50 form__group--sm-60"
661
- label={translations.TRAVELERS_FORM.STREET}
662
- required
663
- name="street"
664
- onChange={formik.handleChange}
665
- onBlur={formik.handleBlur}
666
- value={formik.values.street}
667
- />
668
- <LabeledInput
669
- hasError={hasVisibleError("houseNumber")}
670
- extraClassName="form__group--30 form__group--sm-20"
671
- label={translations.TRAVELERS_FORM.HOUSE_NUMBER}
672
- required
673
- name="houseNumber"
674
- onChange={formik.handleChange}
675
- onBlur={formik.handleBlur}
676
- value={formik.values.houseNumber}
677
- />
678
- <LabeledInput
679
- hasError={hasVisibleError("box")}
680
- extraClassName="form__group--20"
681
- label={translations.TRAVELERS_FORM.POST_BOX}
682
- name="box"
683
- onChange={formik.handleChange}
684
- onBlur={formik.handleBlur}
685
- value={formik.values.box}
686
- />
783
+ {settings.travellers?.mainBookerFormFields?.length
784
+ ? <>
785
+ <div className="main-booker-form__grid">
786
+ {settings.travellers.mainBookerFormFields.map((field, fIndex) => <div key={fIndex} className={`control control--${field.type}`}>
787
+ {getControl(field.type, {} as Traveler, field.type)}
788
+ </div>)}
687
789
  </div>
688
- </div>
689
- <div className="form__twocolumn-column">
690
- <div className="form__row">
691
- <LabeledInput
692
- hasError={hasVisibleError("zipCode")}
693
- extraClassName="form__group--40 form__group--sm-20"
694
- label={translations.TRAVELERS_FORM.ZIPCODE}
695
- required
696
- name="zipCode"
697
- onChange={formik.handleChange}
698
- onBlur={formik.handleBlur}
699
- value={formik.values.zipCode}
700
- />
701
- <LabeledInput
702
- hasError={hasVisibleError("place")}
703
- extraClassName="form__group--60 form__group--sm-40"
704
- label={translations.TRAVELERS_FORM.CITY}
705
- required
706
- name="place"
707
- onChange={formik.handleChange}
708
- onBlur={formik.handleBlur}
709
- value={formik.values.place}
710
- />
711
- <LabeledSelect
712
- hasError={hasVisibleError("country")}
713
- extraClassName="form__group--sm-40"
714
- label={translations.TRAVELERS_FORM.COUNTRY}
715
- required
716
- name="country"
717
- onChange={formik.handleChange}
718
- onBlur={formik.handleBlur}
719
- value={formik.values.country}
720
- options={[
721
- {
722
- key: "empty",
723
- label: translations.TRAVELERS_FORM.SELECT_COUNTRY,
724
- value: undefined,
725
- },
726
- {
727
- key: "be",
728
- value: "be",
729
- label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM,
730
- },
731
- {
732
- key: "nl",
733
- value: "nl",
734
- label:
735
- translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS,
736
- },
737
- {
738
- key: "fr",
739
- value: "fr",
740
- label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE,
741
- },
742
- ]}
743
- />
790
+ </>
791
+ : <>
792
+ <div className="form__twocolumn">
793
+ <div className="form__twocolumn-column">
794
+ <div className="form__row">
795
+ <LabeledInput
796
+ hasError={hasVisibleError("street")}
797
+ extraClassName="form__group--50 form__group--sm-60"
798
+ label={translations.TRAVELERS_FORM.STREET}
799
+ required
800
+ name="street"
801
+ onChange={formik.handleChange}
802
+ onBlur={formik.handleBlur}
803
+ value={formik.values.street}
804
+ />
805
+ <LabeledInput
806
+ hasError={hasVisibleError("houseNumber")}
807
+ extraClassName="form__group--30 form__group--sm-20"
808
+ label={translations.TRAVELERS_FORM.HOUSE_NUMBER}
809
+ required
810
+ name="houseNumber"
811
+ onChange={formik.handleChange}
812
+ onBlur={formik.handleBlur}
813
+ value={formik.values.houseNumber}
814
+ />
815
+ <LabeledInput
816
+ hasError={hasVisibleError("box")}
817
+ extraClassName="form__group--20"
818
+ label={translations.TRAVELERS_FORM.POST_BOX}
819
+ name="box"
820
+ onChange={formik.handleChange}
821
+ onBlur={formik.handleBlur}
822
+ value={formik.values.box}
823
+ />
824
+ </div>
825
+ </div>
826
+ <div className="form__twocolumn-column">
827
+ <div className="form__row">
828
+ <LabeledInput
829
+ hasError={hasVisibleError("zipCode")}
830
+ extraClassName="form__group--40 form__group--sm-20"
831
+ label={translations.TRAVELERS_FORM.ZIPCODE}
832
+ required
833
+ name="zipCode"
834
+ onChange={formik.handleChange}
835
+ onBlur={formik.handleBlur}
836
+ value={formik.values.zipCode}
837
+ />
838
+ <LabeledInput
839
+ hasError={hasVisibleError("place")}
840
+ extraClassName="form__group--60 form__group--sm-40"
841
+ label={translations.TRAVELERS_FORM.CITY}
842
+ required
843
+ name="place"
844
+ onChange={formik.handleChange}
845
+ onBlur={formik.handleBlur}
846
+ value={formik.values.place}
847
+ />
848
+ <LabeledSelect
849
+ hasError={hasVisibleError("country")}
850
+ extraClassName="form__group--sm-40"
851
+ label={translations.TRAVELERS_FORM.COUNTRY}
852
+ required
853
+ name="country"
854
+ onChange={formik.handleChange}
855
+ onBlur={formik.handleBlur}
856
+ value={formik.values.country}
857
+ options={[
858
+ {
859
+ key: "empty",
860
+ label: translations.TRAVELERS_FORM.SELECT_COUNTRY,
861
+ value: undefined,
862
+ },
863
+ {
864
+ key: "be",
865
+ value: "be",
866
+ label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM,
867
+ },
868
+ {
869
+ key: "nl",
870
+ value: "nl",
871
+ label:
872
+ translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS,
873
+ },
874
+ {
875
+ key: "fr",
876
+ value: "fr",
877
+ label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE,
878
+ },
879
+ ]}
880
+ />
881
+ </div>
744
882
  </div>
745
883
  </div>
746
- </div>
747
- <div className="form__row">
748
- <LabeledInput
749
- hasError={hasVisibleError("phone")}
750
- extraClassName="form__group--md-33"
751
- label={translations.TRAVELERS_FORM.PHONE}
752
- required
753
- name="phone"
754
- onChange={formik.handleChange}
755
- onBlur={formik.handleBlur}
756
- value={formik.values.phone}
757
- />
758
- <LabeledInput
759
- type="email"
760
- hasError={hasVisibleError("email")}
761
- extraClassName="form__group--md-33"
762
- label={translations.TRAVELERS_FORM.EMAIL}
763
- required
764
- name="email"
765
- onChange={formik.handleChange}
766
- onBlur={formik.handleBlur}
767
- value={formik.values.email}
768
- />
769
- <LabeledInput
770
- type="email"
771
- hasError={hasVisibleError("emailConfirmation")}
772
- extraClassName="form__group--md-33"
773
- label={translations.TRAVELERS_FORM.REPEAT_EMAIL}
774
- required
775
- name="emailConfirmation"
776
- onChange={formik.handleChange}
777
- onBlur={formik.handleBlur}
778
- value={formik.values.emailConfirmation}
779
- />
780
- </div>
884
+ <div className="form__row">
885
+ <LabeledInput
886
+ hasError={hasVisibleError("phone")}
887
+ extraClassName="form__group--md-33"
888
+ label={translations.TRAVELERS_FORM.PHONE}
889
+ required
890
+ name="phone"
891
+ onChange={formik.handleChange}
892
+ onBlur={formik.handleBlur}
893
+ value={formik.values.phone}
894
+ />
895
+ <LabeledInput
896
+ type="email"
897
+ hasError={hasVisibleError("email")}
898
+ extraClassName="form__group--md-33"
899
+ label={translations.TRAVELERS_FORM.EMAIL}
900
+ required
901
+ name="email"
902
+ onChange={formik.handleChange}
903
+ onBlur={formik.handleBlur}
904
+ value={formik.values.email}
905
+ />
906
+ <LabeledInput
907
+ type="email"
908
+ hasError={hasVisibleError("emailConfirmation")}
909
+ extraClassName="form__group--md-33"
910
+ label={translations.TRAVELERS_FORM.REPEAT_EMAIL}
911
+ required
912
+ name="emailConfirmation"
913
+ onChange={formik.handleChange}
914
+ onBlur={formik.handleBlur}
915
+ value={formik.values.emailConfirmation}
916
+ />
917
+ </div>
918
+ </>}
781
919
  </>
782
920
  </div>
783
921
  ) : (