@qite/tide-booking-component 1.4.127 → 1.4.128

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.
@@ -21354,7 +21354,7 @@ const SidebarFlight = ({ title, flightMetaData, translations }) => {
21354
21354
  React__default["default"].createElement("div", { className: "pricing-summary__value" }, translations.SIDEBAR.LUGGAGE_INCLUDED)))));
21355
21355
  };
21356
21356
 
21357
- const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, headerComponent, travelerRooms, startDateText, endDateText, loaderComponent, departureFlightMetaData, returnFlightMetaData, accommodations, packagingAccommodations, isOnRequest, includedServiceTypes, basePrice, commission, totalPrice, includedCosts, extraCosts, deposit, basePricePerPaxType, seperateExtraPricePerPaxType, isUnavailable, agent, footerComponent }) => {
21357
+ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, headerComponent, travelerRooms, startDateText, endDateText, loaderComponent, departureFlightMetaData, returnFlightMetaData, accommodations, packagingAccommodations, isOnRequest, includedServiceTypes, basePrice, commission, showCommission, totalPrice, includedCosts, extraCosts, deposit, basePricePerPaxType, seperateExtraPricePerPaxType, isUnavailable, agent, footerComponent, currencyCode = 'EUR' }) => {
21358
21358
  if (!translations)
21359
21359
  return null;
21360
21360
  const [active, setActive] = React.useState(false);
@@ -21365,8 +21365,6 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21365
21365
  const canShowPriceBreakdownSection = Boolean(basePrice && basePrice > 0) || !lodash.isEmpty(includedCosts) || !lodash.isEmpty(extraCosts);
21366
21366
  const canShowTotalPriceSection = Boolean(totalPrice && totalPrice > 0);
21367
21367
  const remainingAmount = Number(((totalPrice ?? 0) - (deposit ?? 0)).toFixed(2));
21368
- // TODO: Determine currency code based on the data, for now default to EUR
21369
- let currencyCode = 'EUR';
21370
21368
  return (React__default["default"].createElement("div", { className: buildClassName(['booking__sidebar', active && 'booking__sidebar--active']) },
21371
21369
  headerComponent,
21372
21370
  React__default["default"].createElement("div", { className: "booking__sidebar-frame" },
@@ -21496,7 +21494,7 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21496
21494
  translations.SIDEBAR.DEPOSIT_TEXT4,
21497
21495
  React__default["default"].createElement("strong", null, translations.SIDEBAR.DEPOSIT_TEXT5),
21498
21496
  translations.SIDEBAR.DEPOSIT_TEXT6))))) : (React__default["default"].createElement("div", { className: "pricing-summary__group" },
21499
- agent && (React__default["default"].createElement("div", { className: "pricing-summary__row pricing-summary__row--total-price" },
21497
+ (agent && showCommission) && (React__default["default"].createElement("div", { className: "pricing-summary__row pricing-summary__row--total-price" },
21500
21498
  React__default["default"].createElement("div", { className: "pricing-summary__property" },
21501
21499
  React__default["default"].createElement("h6", { className: "pricing-summary__title" }, translations.SIDEBAR.COMMISSION)),
21502
21500
  React__default["default"].createElement("div", { className: "pricing-summary__value" },
@@ -21512,7 +21510,7 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21512
21510
  };
21513
21511
 
21514
21512
  const SidebarContainer = ({ productName, thumbnailUrl }) => {
21515
- const { sidebarHeaderComponent, sidebarFooterComponent, loaderComponent, showPricesPerPaxType, maxChildAge } = React.useContext(SettingsContext);
21513
+ const { sidebarHeaderComponent, sidebarFooterComponent, loaderComponent, showPricesPerPaxType, maxChildAge, showCommission } = React.useContext(SettingsContext);
21516
21514
  const bookingAttributes = reactRedux.useSelector(selectBookingAttributes);
21517
21515
  const selectFormRooms = React.useMemo(() => makeSelectFormRooms(maxChildAge), [maxChildAge]);
21518
21516
  const rooms = reactRedux.useSelector(selectFormRooms);
@@ -21529,7 +21527,7 @@ const SidebarContainer = ({ productName, thumbnailUrl }) => {
21529
21527
  const isUnavailable = reactRedux.useSelector(selectIsUnavailable) || false;
21530
21528
  const isLoading = isFetchingProductOptions || isFetchingPriceDetails;
21531
21529
  const agent = reactRedux.useSelector(selectAgentAdressId);
21532
- return (React__default["default"].createElement(SharedSidebar, { productName: productName, thumbnailUrl: thumbnailUrl, isLoading: isLoading, startDateText: getDateText(bookingAttributes?.startDate), endDateText: bookingAttributes?.startDate !== bookingAttributes?.endDate ? getDateText(bookingAttributes?.endDate) : undefined, travelerRooms: travelerRooms, departureFlightMetaData: departureFlightMetaData, returnFlightMetaData: returnFlightMetaData, basePrice: reactRedux.useSelector(selectBasePrice), commission: reactRedux.useSelector(selectCommission), totalPrice: reactRedux.useSelector(selectTotalPrice), includedCosts: reactRedux.useSelector(selectSeparatePackagePriceDetails$1), extraCosts: reactRedux.useSelector(selectSeparateExtraPriceDetails), accommodations: accommodations, includedServiceTypes: includedServiceTypes, deposit: reactRedux.useSelector(selectDeposit), isOnRequest: reactRedux.useSelector(selectIsOnRequest), headerComponent: sidebarHeaderComponent ?? undefined, footerComponent: sidebarFooterComponent ?? undefined, loaderComponent: loaderComponent ?? undefined, isUnavailable: isUnavailable, basePricePerPaxType: showPricesPerPaxType ? reactRedux.useSelector(selectBasePricePerPaxType) : undefined, seperateExtraPricePerPaxType: showPricesPerPaxType ? reactRedux.useSelector(selectSeparateExtraPriceDetailsPerPaxType) : undefined, translations: translations, agent: agent }));
21530
+ return (React__default["default"].createElement(SharedSidebar, { productName: productName, thumbnailUrl: thumbnailUrl, isLoading: isLoading, startDateText: getDateText(bookingAttributes?.startDate), endDateText: bookingAttributes?.startDate !== bookingAttributes?.endDate ? getDateText(bookingAttributes?.endDate) : undefined, travelerRooms: travelerRooms, departureFlightMetaData: departureFlightMetaData, returnFlightMetaData: returnFlightMetaData, basePrice: reactRedux.useSelector(selectBasePrice), commission: reactRedux.useSelector(selectCommission), showCommission: showCommission, totalPrice: reactRedux.useSelector(selectTotalPrice), includedCosts: reactRedux.useSelector(selectSeparatePackagePriceDetails$1), extraCosts: reactRedux.useSelector(selectSeparateExtraPriceDetails), accommodations: accommodations, includedServiceTypes: includedServiceTypes, deposit: reactRedux.useSelector(selectDeposit), isOnRequest: reactRedux.useSelector(selectIsOnRequest), headerComponent: sidebarHeaderComponent ?? undefined, footerComponent: sidebarFooterComponent ?? undefined, loaderComponent: loaderComponent ?? undefined, isUnavailable: isUnavailable, basePricePerPaxType: showPricesPerPaxType ? reactRedux.useSelector(selectBasePricePerPaxType) : undefined, seperateExtraPricePerPaxType: showPricesPerPaxType ? reactRedux.useSelector(selectSeparateExtraPriceDetailsPerPaxType) : undefined, translations: translations, agent: agent, currencyCode: reactRedux.useSelector(selectCurrencyCode) }));
21533
21531
  };
21534
21532
 
21535
21533
  const SummaryPerPaxOptionGroup = ({ group }) => {
@@ -21711,7 +21709,7 @@ const Summary = () => {
21711
21709
  }
21712
21710
  else {
21713
21711
  const location = window.location;
21714
- bookRequest.payload.redirectUrl = `${location.protocol}//${location.host}${settings.basePath}?${bookingQueryString}`;
21712
+ bookRequest.payload.redirectUrl = `${location.protocol}//${location.host}${settings.basePath ?? location.pathname}?${bookingQueryString}`;
21715
21713
  }
21716
21714
  }
21717
21715
  }
@@ -22642,7 +22640,12 @@ const TravelersForm = () => {
22642
22640
  navigate(`${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.summary.pathSuffix}?${bookingQueryString}`);
22643
22641
  return;
22644
22642
  }
22645
- dispatch(fetchPackage());
22643
+ if (travelersFirstStep) {
22644
+ dispatch(fetchPackage());
22645
+ }
22646
+ else {
22647
+ dispatch(fetchPriceDetails());
22648
+ }
22646
22649
  if (settings.skipRouter)
22647
22650
  dispatch(setCurrentStep$1(travelersFirstStep ? FLIGHT_OPTIONS_FORM_STEP : SUMMARY_STEP));
22648
22651
  else
@@ -22653,6 +22656,8 @@ const TravelersForm = () => {
22653
22656
  dispatch(fetchPriceDetails());
22654
22657
  }, [dispatch]);
22655
22658
  React.useEffect(() => {
22659
+ if (!travelersFirstStep)
22660
+ return;
22656
22661
  if (!bookingAttributes?.rooms?.length)
22657
22662
  return;
22658
22663
  if (!hasMounted) {
@@ -22677,7 +22682,7 @@ const TravelersForm = () => {
22677
22682
  }
22678
22683
  };
22679
22684
  fetchAll();
22680
- }, [bookingAttributes?.rooms, dispatch, hasMounted]);
22685
+ }, [bookingAttributes?.rooms, dispatch, hasMounted, travelersFirstStep]);
22681
22686
  const roomsQuery = React.useMemo(() => formik$1.values.rooms
22682
22687
  .map((room) => {
22683
22688
  const adults = room.adults ? room.adults.length : 0;
@@ -31043,10 +31048,10 @@ const findAccommodationForDay = (nodes, currentDay) => {
31043
31048
  };
31044
31049
  const buildItineraryHtml = (itinerary, translations) => {
31045
31050
  if (!itinerary) {
31046
- return `
31047
- <div class="itinerary-shell">
31048
- <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
31049
- </div>
31051
+ return `
31052
+ <div class="itinerary-shell">
31053
+ <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
31054
+ </div>
31050
31055
  `;
31051
31056
  }
31052
31057
  const allNodes = itinerary.nodes ?? [];
@@ -31060,66 +31065,66 @@ const buildItineraryHtml = (itinerary, translations) => {
31060
31065
  const hasAccommodationInCurrentNode = uniqueItems.some(isAccommodationItem);
31061
31066
  const activeAccommodation = findAccommodationForDay(allNodes, startDay);
31062
31067
  const accommodationBanner = !hasAccommodationInCurrentNode && activeAccommodation
31063
- ? `
31064
- <div class="itinerary-node__accommodation-banner">
31065
- Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
31066
- </div>
31068
+ ? `
31069
+ <div class="itinerary-node__accommodation-banner">
31070
+ Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
31071
+ </div>
31067
31072
  `
31068
31073
  : '';
31069
31074
  const itemsHtml = hasItems
31070
31075
  ? uniqueItems
31071
- .map((item) => `
31072
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31073
- ${item.contents ?? ''}
31074
- </article>
31076
+ .map((item) => `
31077
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31078
+ ${item.contents ?? ''}
31079
+ </article>
31075
31080
  `)
31076
31081
  .join('')
31077
31082
  : `<div class="itinerary-node__empty">${translations.ITINERARY.NO_ITEMS}</div>`;
31078
- return `
31079
- <section class="itinerary-node">
31080
- <header class="itinerary-node__header">
31081
-
31082
- <div class="itinerary-node__day">
31083
- <p class="itinerary-node__day-day">${day}</p>
31084
- <p class="itinerary-node__day-month">${month}</p>
31085
- </div>
31086
-
31087
- <div>
31088
- <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
31089
- </div>
31090
- </header>
31091
-
31092
- <div class="itinerary-node__content">
31093
- ${accommodationBanner}
31094
- ${itemsHtml}
31095
- </div>
31096
- </section>
31083
+ return `
31084
+ <section class="itinerary-node">
31085
+ <header class="itinerary-node__header">
31086
+
31087
+ <div class="itinerary-node__day">
31088
+ <p class="itinerary-node__day-day">${day}</p>
31089
+ <p class="itinerary-node__day-month">${month}</p>
31090
+ </div>
31091
+
31092
+ <div>
31093
+ <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
31094
+ </div>
31095
+ </header>
31096
+
31097
+ <div class="itinerary-node__content">
31098
+ ${accommodationBanner}
31099
+ ${itemsHtml}
31100
+ </div>
31101
+ </section>
31097
31102
  `;
31098
31103
  })
31099
31104
  .join('');
31100
31105
  const defaultItemsHtml = itinerary.defaultItems && itinerary.defaultItems.length > 0
31101
- ? `
31102
- <section class="itinerary-default-items">
31103
- <h2 class="itinerary-default-items__title">Algemene info</h2>
31106
+ ? `
31107
+ <section class="itinerary-default-items">
31108
+ <h2 class="itinerary-default-items__title">Algemene info</h2>
31104
31109
  ${getUniqueItems(itinerary.defaultItems)
31105
- .map((item) => `
31106
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31107
- ${item.contents ?? ''}
31108
- </article>
31110
+ .map((item) => `
31111
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31112
+ ${item.contents ?? ''}
31113
+ </article>
31109
31114
  `)
31110
- .join('')}
31111
- </section>
31115
+ .join('')}
31116
+ </section>
31112
31117
  `
31113
31118
  : '';
31114
- return `
31115
- <div class="itinerary-shell">
31116
- ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
31117
-
31118
- <div class="itinerary-shell__content">
31119
- ${nodesHtml}
31120
- ${defaultItemsHtml}
31121
- </div>
31122
- </div>
31119
+ return `
31120
+ <div class="itinerary-shell">
31121
+ ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
31122
+
31123
+ <div class="itinerary-shell__content">
31124
+ ${nodesHtml}
31125
+ ${defaultItemsHtml}
31126
+ </div>
31127
+ </div>
31123
31128
  `;
31124
31129
  };
31125
31130
  const FullItinerary = ({ isLoading }) => {
@@ -31139,141 +31144,141 @@ const FullItinerary = ({ isLoading }) => {
31139
31144
  }
31140
31145
  const shadowRoot = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
31141
31146
  shadowRootRef.current = shadowRoot;
31142
- shadowRoot.innerHTML = `
31143
- <style>
31144
- :host {
31145
- all: initial;
31146
- display: block;
31147
- width: 100%;
31148
- }
31149
-
31150
- *,
31151
- *::before,
31152
- *::after {
31153
- box-sizing: border-box;
31154
- }
31155
-
31156
- .itinerary-shell {
31157
- width: 100%;
31158
- margin: 0 auto;
31159
- font-family: 'Outfit', sans-serif;
31160
- color: #222;
31161
- }
31162
-
31163
- .itinerary-shell__header {
31164
- margin-bottom: 24px;
31165
- }
31166
-
31167
- .itinerary-shell__title {
31168
- margin: 0;
31169
- font-size: 32px;
31170
- line-height: 1.2;
31171
- }
31172
-
31173
- .itinerary-shell__content {
31174
- display: grid;
31175
- gap: 24px;
31176
- }
31177
-
31178
- .itinerary-node {
31179
- border: 1px solid #e5e7eb;
31180
- border-radius: 16px;
31181
- overflow: hidden;
31182
- background: #fff;
31183
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31184
- }
31185
-
31186
- .itinerary-node__header {
31187
- display: flex;
31188
- gap: 16px;
31189
- align-items: center;
31190
- border-bottom: 1px solid #eef0f2;
31191
- background: #fafafa;
31192
- }
31193
-
31194
- .itinerary-node__day {
31195
- flex: 50px 0 0;
31196
- display: flex;
31197
- flex-flow: column;
31198
- align-items: center;
31199
- justify-content: center;
31200
- background: #1f9470;
31201
- color: white;
31202
- border: 1.5px solid var(--tide-booking-color-secondary);
31203
- }
31204
-
31205
- .itinerary-node__day-month {
31206
- margin: 0px;
31207
- }
31208
-
31209
- .itinerary-node__day-day {
31210
- margin: 0px;
31211
- font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
31212
- color: var(--tide-booking-search-results-label-date-month-color);
31213
- font-size: 24px;
31214
- }
31215
-
31216
- .itinerary-node__title {
31217
- margin: 0;
31218
- font-size: 22px;
31219
- line-height: 1.25;
31220
- }
31221
-
31222
- .itinerary-node__content {
31223
- display: grid;
31224
- gap: 20px;
31225
- padding: 20px;
31226
- }
31227
-
31228
- .itinerary-node__accommodation-banner {
31229
- padding: 12px 16px;
31230
- border: 1px solid #dbeafe;
31231
- border-radius: 12px;
31232
- background: #eff6ff;
31233
- color: #1e3a8a;
31234
- font-size: 14px;
31235
- line-height: 1.4;
31236
- }
31237
-
31238
- .itinerary-item {
31239
- display: block;
31240
- border-radius: 12px;
31241
- overflow: hidden;
31242
- background: #fff;
31243
- }
31244
-
31245
- .itinerary-node__empty,
31246
- .itinerary-empty {
31247
- padding: 20px;
31248
- border: 1px dashed #d1d5db;
31249
- border-radius: 12px;
31250
- color: #6b7280;
31251
- background: #fafafa;
31252
- }
31253
-
31254
- .itinerary-default-items {
31255
- border: 1px solid #e5e7eb;
31256
- border-radius: 16px;
31257
- padding: 20px;
31258
- background: #fff;
31259
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31260
- }
31261
-
31262
- .itinerary-default-items__title {
31263
- margin: 0 0 16px;
31264
- font-size: 22px;
31265
- }
31266
-
31267
- @media (max-width: 768px) {
31268
- .itinerary-shell {
31269
- padding: 16px;
31270
- }
31271
- }
31272
-
31273
- ${itinerary?.styleSheetBody ?? ''}
31274
- </style>
31275
-
31276
- ${html}
31147
+ shadowRoot.innerHTML = `
31148
+ <style>
31149
+ :host {
31150
+ all: initial;
31151
+ display: block;
31152
+ width: 100%;
31153
+ }
31154
+
31155
+ *,
31156
+ *::before,
31157
+ *::after {
31158
+ box-sizing: border-box;
31159
+ }
31160
+
31161
+ .itinerary-shell {
31162
+ width: 100%;
31163
+ margin: 0 auto;
31164
+ font-family: 'Outfit', sans-serif;
31165
+ color: #222;
31166
+ }
31167
+
31168
+ .itinerary-shell__header {
31169
+ margin-bottom: 24px;
31170
+ }
31171
+
31172
+ .itinerary-shell__title {
31173
+ margin: 0;
31174
+ font-size: 32px;
31175
+ line-height: 1.2;
31176
+ }
31177
+
31178
+ .itinerary-shell__content {
31179
+ display: grid;
31180
+ gap: 24px;
31181
+ }
31182
+
31183
+ .itinerary-node {
31184
+ border: 1px solid #e5e7eb;
31185
+ border-radius: 16px;
31186
+ overflow: hidden;
31187
+ background: #fff;
31188
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31189
+ }
31190
+
31191
+ .itinerary-node__header {
31192
+ display: flex;
31193
+ gap: 16px;
31194
+ align-items: center;
31195
+ border-bottom: 1px solid #eef0f2;
31196
+ background: #fafafa;
31197
+ }
31198
+
31199
+ .itinerary-node__day {
31200
+ flex: 50px 0 0;
31201
+ display: flex;
31202
+ flex-flow: column;
31203
+ align-items: center;
31204
+ justify-content: center;
31205
+ background: #1f9470;
31206
+ color: white;
31207
+ border: 1.5px solid var(--tide-booking-color-secondary);
31208
+ }
31209
+
31210
+ .itinerary-node__day-month {
31211
+ margin: 0px;
31212
+ }
31213
+
31214
+ .itinerary-node__day-day {
31215
+ margin: 0px;
31216
+ font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
31217
+ color: var(--tide-booking-search-results-label-date-month-color);
31218
+ font-size: 24px;
31219
+ }
31220
+
31221
+ .itinerary-node__title {
31222
+ margin: 0;
31223
+ font-size: 22px;
31224
+ line-height: 1.25;
31225
+ }
31226
+
31227
+ .itinerary-node__content {
31228
+ display: grid;
31229
+ gap: 20px;
31230
+ padding: 20px;
31231
+ }
31232
+
31233
+ .itinerary-node__accommodation-banner {
31234
+ padding: 12px 16px;
31235
+ border: 1px solid #dbeafe;
31236
+ border-radius: 12px;
31237
+ background: #eff6ff;
31238
+ color: #1e3a8a;
31239
+ font-size: 14px;
31240
+ line-height: 1.4;
31241
+ }
31242
+
31243
+ .itinerary-item {
31244
+ display: block;
31245
+ border-radius: 12px;
31246
+ overflow: hidden;
31247
+ background: #fff;
31248
+ }
31249
+
31250
+ .itinerary-node__empty,
31251
+ .itinerary-empty {
31252
+ padding: 20px;
31253
+ border: 1px dashed #d1d5db;
31254
+ border-radius: 12px;
31255
+ color: #6b7280;
31256
+ background: #fafafa;
31257
+ }
31258
+
31259
+ .itinerary-default-items {
31260
+ border: 1px solid #e5e7eb;
31261
+ border-radius: 16px;
31262
+ padding: 20px;
31263
+ background: #fff;
31264
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31265
+ }
31266
+
31267
+ .itinerary-default-items__title {
31268
+ margin: 0 0 16px;
31269
+ font-size: 22px;
31270
+ }
31271
+
31272
+ @media (max-width: 768px) {
31273
+ .itinerary-shell {
31274
+ padding: 16px;
31275
+ }
31276
+ }
31277
+
31278
+ ${itinerary?.styleSheetBody ?? ''}
31279
+ </style>
31280
+
31281
+ ${html}
31277
31282
  `;
31278
31283
  }, [html, itinerary?.styleSheetBody, isLoading]);
31279
31284
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
@@ -31377,7 +31382,7 @@ const DayByDayExcursions = () => {
31377
31382
  })));
31378
31383
  };
31379
31384
 
31380
- const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, priceDetails, translations) => {
31385
+ const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, priceDetails, translations, currencyCode) => {
31381
31386
  const priceDetailsByProduct = lodash.groupBy(priceDetails?.details ?? [], (detail) => `${detail.productCode}|${detail.accommodationCode}`);
31382
31387
  return (editablePackagingEntry?.lines ?? []).map((line) => {
31383
31388
  const groupedPriceDetails = priceDetailsByProduct[`${line.productCode}|${line.accommodationCode}`] ?? [];
@@ -31401,7 +31406,7 @@ const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, pric
31401
31406
  visiblePriceDetails.map((detail, index) => (React__default["default"].createElement("li", { className: "list__item", key: `${line.guid}-price-${index}` },
31402
31407
  detail.priceDescription,
31403
31408
  ": ",
31404
- detail.total?.toLocaleString(undefined, { style: 'currency', currency: 'EUR' }))))),
31409
+ detail.total !== undefined && detail.total !== null ? formatPrice$3(detail.total, currencyCode ?? 'EUR') : '')))),
31405
31410
  React__default["default"].createElement("p", null,
31406
31411
  "(",
31407
31412
  line.from === line.to ? (getDateText(line.from)) : (React__default["default"].createElement(React__default["default"].Fragment, null,
@@ -31521,7 +31526,7 @@ const WLSidebar = ({ activeSearchSeed, packagingAccoResult }) => {
31521
31526
  const separateExtraPriceDetails = priceDetails?.details.filter((pd) => !pd.isInPackage && pd.isSeparate) ?? [];
31522
31527
  const totalPrice = lodash.sum([basePrice, ...separateExtraPriceDetails.map((priceDetail) => priceDetail.price * priceDetail.amount)]);
31523
31528
  const includedCosts = selectSeparatePackagePriceDetails(priceDetails?.details.filter((pd) => pd.isInPackage) ?? []);
31524
- return (React__default["default"].createElement(SharedSidebar, { productName: location ?? '', thumbnailUrl: accoImage ?? context.destinationImage?.url, translations: translations, travelerRooms: travelerRooms, startDateText: lodash.first(sortedLines)?.from && formatDate(new Date(lodash.first(sortedLines).from)), endDateText: lodash.last(sortedLines)?.to && formatDate(new Date(lodash.last(sortedLines).to)), isLoading: !editablePackagingEntry || !priceDetails, loaderComponent: React__default["default"].createElement(Spinner, null), departureFlightMetaData: outboundFlightMetaData, returnFlightMetaData: returnFlightMetaData, includedServiceTypes: editablePackagingEntry.lines.map((line) => line.serviceType), packagingAccommodations: accommodationLines, basePrice: basePrice, commission: priceDetails?.commission, totalPrice: totalPrice, includedCosts: includedCosts, extraCosts: separateExtraPriceDetails, deposit: priceDetails?.deposit, isUnavailable: false, agent: context.agentId }));
31529
+ return (React__default["default"].createElement(SharedSidebar, { productName: location ?? '', thumbnailUrl: accoImage ?? context.destinationImage?.url, translations: translations, travelerRooms: travelerRooms, startDateText: lodash.first(sortedLines)?.from && formatDate(new Date(lodash.first(sortedLines).from)), endDateText: lodash.last(sortedLines)?.to && formatDate(new Date(lodash.last(sortedLines).to)), isLoading: !editablePackagingEntry || !priceDetails, loaderComponent: React__default["default"].createElement(Spinner, null), departureFlightMetaData: outboundFlightMetaData, returnFlightMetaData: returnFlightMetaData, includedServiceTypes: editablePackagingEntry.lines.map((line) => line.serviceType), packagingAccommodations: accommodationLines, basePrice: basePrice, commission: priceDetails?.commission, totalPrice: totalPrice, includedCosts: includedCosts, extraCosts: separateExtraPriceDetails, deposit: priceDetails?.deposit, isUnavailable: false, agent: context.agentId, currencyCode: packagingAccoResult?.currencyCode }));
31525
31530
  };
31526
31531
 
31527
31532
  const formatBirthDate = (birthDate) => {
@@ -31815,7 +31820,7 @@ const BookPackagingEntry = ({ activeSearchSeed, isLoading, isConfirmationPage })
31815
31820
  stepLabels[step])) },
31816
31821
  isConfirmationPage && isLoading && React__default["default"].createElement(Spinner, { label: translations.SUMMARY.PROCESS_BOOKING }),
31817
31822
  currentStep === 0 && (React__default["default"].createElement(SharedTravelersForm, { formik: formik$1, translations: translations, travellersSettings: travellersSettings, countries: countries, travelersFirstStep: false, isUnavailable: false, useCompactForm: false, showAgentSelection: false })),
31818
- currentStep === 1 && (React__default["default"].createElement(SharedSummary, { translations: translations, travelerFormValues: formik$1.values, isSubmitting: isSubmitting, skipPayment: !context.generatePaymentUrl, userValidated: userValidated, remarks: remarks, enableVoucher: false, allowOption: false, isOffer: false, onUserValidatedChange: setUserValidated, onRemarksChange: setRemarks, onSubmit: handleSummarySubmit, renderOptions: () => renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails), renderPreviousButton: () => (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep(0)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) })),
31823
+ currentStep === 1 && (React__default["default"].createElement(SharedSummary, { translations: translations, travelerFormValues: formik$1.values, isSubmitting: isSubmitting, skipPayment: !context.generatePaymentUrl, userValidated: userValidated, remarks: remarks, enableVoucher: false, allowOption: false, isOffer: false, onUserValidatedChange: setUserValidated, onRemarksChange: setRemarks, onSubmit: handleSummarySubmit, renderOptions: () => renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails, translations, selectedPackagingAccoResult?.currencyCode), renderPreviousButton: () => (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep(0)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) })),
31819
31824
  currentStep === 2 && (React__default["default"].createElement(SharedConfirmation, { bookingNumber: bookingNumber ?? editablePackagingEntry?.dossierNumber ?? '', isOption: false, isOffer: false, translations: translations.CONFIRMATION })),
31820
31825
  currentStep === 3 && React__default["default"].createElement("div", null))),
31821
31826
  React__default["default"].createElement("div", { className: "backdrop", id: "backdrop" }),
@@ -35968,20 +35973,20 @@ function ItineraryMapView({ destinations: propDestinations, adults = 2, dateFrom
35968
35973
  const isStartEnd = dest.isStart || dest.isEnd;
35969
35974
  let iconHtml;
35970
35975
  if (isStartEnd) {
35971
- iconHtml = `
35972
- <div class="map-view__marker map-view__marker--plane">
35973
- <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
35974
- <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
35975
- </svg>
35976
+ iconHtml = `
35977
+ <div class="map-view__marker map-view__marker--plane">
35978
+ <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
35979
+ <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
35980
+ </svg>
35976
35981
  </div>`;
35977
35982
  }
35978
35983
  else {
35979
35984
  stopIndex++;
35980
35985
  const imgStyle = dest.imageUrl ? `style="background-image:url('${dest.imageUrl}')"` : '';
35981
- iconHtml = `
35982
- <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
35983
- ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
35984
- <span class="map-view__marker-badge">${stopIndex}</span>
35986
+ iconHtml = `
35987
+ <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
35988
+ ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
35989
+ <span class="map-view__marker-badge">${stopIndex}</span>
35985
35990
  </div>`;
35986
35991
  }
35987
35992
  const icon = L.divIcon({
@@ -12,6 +12,7 @@ interface SharedSidebarProps {
12
12
  returnFlightMetaData?: any;
13
13
  basePrice?: number;
14
14
  commission?: number;
15
+ showCommission?: boolean;
15
16
  totalPrice?: number;
16
17
  remainingAmountText?: string;
17
18
  includedCosts?: any[];
@@ -29,6 +30,7 @@ interface SharedSidebarProps {
29
30
  seperateExtraPricePerPaxType?: PricePerPaxType[];
30
31
  translations: any;
31
32
  agent?: number;
33
+ currencyCode?: string;
32
34
  }
33
35
  declare const SharedSidebar: React.FC<SharedSidebarProps>;
34
36
  export default SharedSidebar;
@@ -1,2 +1,2 @@
1
- export declare const renderEditablePackagingEntrySummaryOptions: (editablePackagingEntry: any, priceDetails: any, translations: any) => any;
1
+ export declare const renderEditablePackagingEntrySummaryOptions: (editablePackagingEntry: any, priceDetails: any, translations: any, currencyCode?: string) => any;
2
2
  export declare const getImageSrcFromHtml: (html?: string | null) => string | undefined;
@@ -21325,7 +21325,7 @@ const SidebarFlight = ({ title, flightMetaData, translations }) => {
21325
21325
  React__default.createElement("div", { className: "pricing-summary__value" }, translations.SIDEBAR.LUGGAGE_INCLUDED)))));
21326
21326
  };
21327
21327
 
21328
- const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, headerComponent, travelerRooms, startDateText, endDateText, loaderComponent, departureFlightMetaData, returnFlightMetaData, accommodations, packagingAccommodations, isOnRequest, includedServiceTypes, basePrice, commission, totalPrice, includedCosts, extraCosts, deposit, basePricePerPaxType, seperateExtraPricePerPaxType, isUnavailable, agent, footerComponent }) => {
21328
+ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, headerComponent, travelerRooms, startDateText, endDateText, loaderComponent, departureFlightMetaData, returnFlightMetaData, accommodations, packagingAccommodations, isOnRequest, includedServiceTypes, basePrice, commission, showCommission, totalPrice, includedCosts, extraCosts, deposit, basePricePerPaxType, seperateExtraPricePerPaxType, isUnavailable, agent, footerComponent, currencyCode = 'EUR' }) => {
21329
21329
  if (!translations)
21330
21330
  return null;
21331
21331
  const [active, setActive] = useState(false);
@@ -21336,8 +21336,6 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21336
21336
  const canShowPriceBreakdownSection = Boolean(basePrice && basePrice > 0) || !isEmpty$1(includedCosts) || !isEmpty$1(extraCosts);
21337
21337
  const canShowTotalPriceSection = Boolean(totalPrice && totalPrice > 0);
21338
21338
  const remainingAmount = Number(((totalPrice ?? 0) - (deposit ?? 0)).toFixed(2));
21339
- // TODO: Determine currency code based on the data, for now default to EUR
21340
- let currencyCode = 'EUR';
21341
21339
  return (React__default.createElement("div", { className: buildClassName(['booking__sidebar', active && 'booking__sidebar--active']) },
21342
21340
  headerComponent,
21343
21341
  React__default.createElement("div", { className: "booking__sidebar-frame" },
@@ -21467,7 +21465,7 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21467
21465
  translations.SIDEBAR.DEPOSIT_TEXT4,
21468
21466
  React__default.createElement("strong", null, translations.SIDEBAR.DEPOSIT_TEXT5),
21469
21467
  translations.SIDEBAR.DEPOSIT_TEXT6))))) : (React__default.createElement("div", { className: "pricing-summary__group" },
21470
- agent && (React__default.createElement("div", { className: "pricing-summary__row pricing-summary__row--total-price" },
21468
+ (agent && showCommission) && (React__default.createElement("div", { className: "pricing-summary__row pricing-summary__row--total-price" },
21471
21469
  React__default.createElement("div", { className: "pricing-summary__property" },
21472
21470
  React__default.createElement("h6", { className: "pricing-summary__title" }, translations.SIDEBAR.COMMISSION)),
21473
21471
  React__default.createElement("div", { className: "pricing-summary__value" },
@@ -21483,7 +21481,7 @@ const SharedSidebar = ({ productName, thumbnailUrl, isLoading, translations, hea
21483
21481
  };
21484
21482
 
21485
21483
  const SidebarContainer = ({ productName, thumbnailUrl }) => {
21486
- const { sidebarHeaderComponent, sidebarFooterComponent, loaderComponent, showPricesPerPaxType, maxChildAge } = useContext(SettingsContext);
21484
+ const { sidebarHeaderComponent, sidebarFooterComponent, loaderComponent, showPricesPerPaxType, maxChildAge, showCommission } = useContext(SettingsContext);
21487
21485
  const bookingAttributes = useSelector(selectBookingAttributes);
21488
21486
  const selectFormRooms = useMemo(() => makeSelectFormRooms(maxChildAge), [maxChildAge]);
21489
21487
  const rooms = useSelector(selectFormRooms);
@@ -21500,7 +21498,7 @@ const SidebarContainer = ({ productName, thumbnailUrl }) => {
21500
21498
  const isUnavailable = useSelector(selectIsUnavailable) || false;
21501
21499
  const isLoading = isFetchingProductOptions || isFetchingPriceDetails;
21502
21500
  const agent = useSelector(selectAgentAdressId);
21503
- return (React__default.createElement(SharedSidebar, { productName: productName, thumbnailUrl: thumbnailUrl, isLoading: isLoading, startDateText: getDateText(bookingAttributes?.startDate), endDateText: bookingAttributes?.startDate !== bookingAttributes?.endDate ? getDateText(bookingAttributes?.endDate) : undefined, travelerRooms: travelerRooms, departureFlightMetaData: departureFlightMetaData, returnFlightMetaData: returnFlightMetaData, basePrice: useSelector(selectBasePrice), commission: useSelector(selectCommission), totalPrice: useSelector(selectTotalPrice), includedCosts: useSelector(selectSeparatePackagePriceDetails$1), extraCosts: useSelector(selectSeparateExtraPriceDetails), accommodations: accommodations, includedServiceTypes: includedServiceTypes, deposit: useSelector(selectDeposit), isOnRequest: useSelector(selectIsOnRequest), headerComponent: sidebarHeaderComponent ?? undefined, footerComponent: sidebarFooterComponent ?? undefined, loaderComponent: loaderComponent ?? undefined, isUnavailable: isUnavailable, basePricePerPaxType: showPricesPerPaxType ? useSelector(selectBasePricePerPaxType) : undefined, seperateExtraPricePerPaxType: showPricesPerPaxType ? useSelector(selectSeparateExtraPriceDetailsPerPaxType) : undefined, translations: translations, agent: agent }));
21501
+ return (React__default.createElement(SharedSidebar, { productName: productName, thumbnailUrl: thumbnailUrl, isLoading: isLoading, startDateText: getDateText(bookingAttributes?.startDate), endDateText: bookingAttributes?.startDate !== bookingAttributes?.endDate ? getDateText(bookingAttributes?.endDate) : undefined, travelerRooms: travelerRooms, departureFlightMetaData: departureFlightMetaData, returnFlightMetaData: returnFlightMetaData, basePrice: useSelector(selectBasePrice), commission: useSelector(selectCommission), showCommission: showCommission, totalPrice: useSelector(selectTotalPrice), includedCosts: useSelector(selectSeparatePackagePriceDetails$1), extraCosts: useSelector(selectSeparateExtraPriceDetails), accommodations: accommodations, includedServiceTypes: includedServiceTypes, deposit: useSelector(selectDeposit), isOnRequest: useSelector(selectIsOnRequest), headerComponent: sidebarHeaderComponent ?? undefined, footerComponent: sidebarFooterComponent ?? undefined, loaderComponent: loaderComponent ?? undefined, isUnavailable: isUnavailable, basePricePerPaxType: showPricesPerPaxType ? useSelector(selectBasePricePerPaxType) : undefined, seperateExtraPricePerPaxType: showPricesPerPaxType ? useSelector(selectSeparateExtraPriceDetailsPerPaxType) : undefined, translations: translations, agent: agent, currencyCode: useSelector(selectCurrencyCode) }));
21504
21502
  };
21505
21503
 
21506
21504
  const SummaryPerPaxOptionGroup = ({ group }) => {
@@ -21682,7 +21680,7 @@ const Summary = () => {
21682
21680
  }
21683
21681
  else {
21684
21682
  const location = window.location;
21685
- bookRequest.payload.redirectUrl = `${location.protocol}//${location.host}${settings.basePath}?${bookingQueryString}`;
21683
+ bookRequest.payload.redirectUrl = `${location.protocol}//${location.host}${settings.basePath ?? location.pathname}?${bookingQueryString}`;
21686
21684
  }
21687
21685
  }
21688
21686
  }
@@ -22613,7 +22611,12 @@ const TravelersForm = () => {
22613
22611
  navigate(`${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.summary.pathSuffix}?${bookingQueryString}`);
22614
22612
  return;
22615
22613
  }
22616
- dispatch(fetchPackage());
22614
+ if (travelersFirstStep) {
22615
+ dispatch(fetchPackage());
22616
+ }
22617
+ else {
22618
+ dispatch(fetchPriceDetails());
22619
+ }
22617
22620
  if (settings.skipRouter)
22618
22621
  dispatch(setCurrentStep$1(travelersFirstStep ? FLIGHT_OPTIONS_FORM_STEP : SUMMARY_STEP));
22619
22622
  else
@@ -22624,6 +22627,8 @@ const TravelersForm = () => {
22624
22627
  dispatch(fetchPriceDetails());
22625
22628
  }, [dispatch]);
22626
22629
  useEffect(() => {
22630
+ if (!travelersFirstStep)
22631
+ return;
22627
22632
  if (!bookingAttributes?.rooms?.length)
22628
22633
  return;
22629
22634
  if (!hasMounted) {
@@ -22648,7 +22653,7 @@ const TravelersForm = () => {
22648
22653
  }
22649
22654
  };
22650
22655
  fetchAll();
22651
- }, [bookingAttributes?.rooms, dispatch, hasMounted]);
22656
+ }, [bookingAttributes?.rooms, dispatch, hasMounted, travelersFirstStep]);
22652
22657
  const roomsQuery = useMemo(() => formik.values.rooms
22653
22658
  .map((room) => {
22654
22659
  const adults = room.adults ? room.adults.length : 0;
@@ -31014,10 +31019,10 @@ const findAccommodationForDay = (nodes, currentDay) => {
31014
31019
  };
31015
31020
  const buildItineraryHtml = (itinerary, translations) => {
31016
31021
  if (!itinerary) {
31017
- return `
31018
- <div class="itinerary-shell">
31019
- <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
31020
- </div>
31022
+ return `
31023
+ <div class="itinerary-shell">
31024
+ <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
31025
+ </div>
31021
31026
  `;
31022
31027
  }
31023
31028
  const allNodes = itinerary.nodes ?? [];
@@ -31031,66 +31036,66 @@ const buildItineraryHtml = (itinerary, translations) => {
31031
31036
  const hasAccommodationInCurrentNode = uniqueItems.some(isAccommodationItem);
31032
31037
  const activeAccommodation = findAccommodationForDay(allNodes, startDay);
31033
31038
  const accommodationBanner = !hasAccommodationInCurrentNode && activeAccommodation
31034
- ? `
31035
- <div class="itinerary-node__accommodation-banner">
31036
- Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
31037
- </div>
31039
+ ? `
31040
+ <div class="itinerary-node__accommodation-banner">
31041
+ Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
31042
+ </div>
31038
31043
  `
31039
31044
  : '';
31040
31045
  const itemsHtml = hasItems
31041
31046
  ? uniqueItems
31042
- .map((item) => `
31043
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31044
- ${item.contents ?? ''}
31045
- </article>
31047
+ .map((item) => `
31048
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31049
+ ${item.contents ?? ''}
31050
+ </article>
31046
31051
  `)
31047
31052
  .join('')
31048
31053
  : `<div class="itinerary-node__empty">${translations.ITINERARY.NO_ITEMS}</div>`;
31049
- return `
31050
- <section class="itinerary-node">
31051
- <header class="itinerary-node__header">
31052
-
31053
- <div class="itinerary-node__day">
31054
- <p class="itinerary-node__day-day">${day}</p>
31055
- <p class="itinerary-node__day-month">${month}</p>
31056
- </div>
31057
-
31058
- <div>
31059
- <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
31060
- </div>
31061
- </header>
31062
-
31063
- <div class="itinerary-node__content">
31064
- ${accommodationBanner}
31065
- ${itemsHtml}
31066
- </div>
31067
- </section>
31054
+ return `
31055
+ <section class="itinerary-node">
31056
+ <header class="itinerary-node__header">
31057
+
31058
+ <div class="itinerary-node__day">
31059
+ <p class="itinerary-node__day-day">${day}</p>
31060
+ <p class="itinerary-node__day-month">${month}</p>
31061
+ </div>
31062
+
31063
+ <div>
31064
+ <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
31065
+ </div>
31066
+ </header>
31067
+
31068
+ <div class="itinerary-node__content">
31069
+ ${accommodationBanner}
31070
+ ${itemsHtml}
31071
+ </div>
31072
+ </section>
31068
31073
  `;
31069
31074
  })
31070
31075
  .join('');
31071
31076
  const defaultItemsHtml = itinerary.defaultItems && itinerary.defaultItems.length > 0
31072
- ? `
31073
- <section class="itinerary-default-items">
31074
- <h2 class="itinerary-default-items__title">Algemene info</h2>
31077
+ ? `
31078
+ <section class="itinerary-default-items">
31079
+ <h2 class="itinerary-default-items__title">Algemene info</h2>
31075
31080
  ${getUniqueItems(itinerary.defaultItems)
31076
- .map((item) => `
31077
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31078
- ${item.contents ?? ''}
31079
- </article>
31081
+ .map((item) => `
31082
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
31083
+ ${item.contents ?? ''}
31084
+ </article>
31080
31085
  `)
31081
- .join('')}
31082
- </section>
31086
+ .join('')}
31087
+ </section>
31083
31088
  `
31084
31089
  : '';
31085
- return `
31086
- <div class="itinerary-shell">
31087
- ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
31088
-
31089
- <div class="itinerary-shell__content">
31090
- ${nodesHtml}
31091
- ${defaultItemsHtml}
31092
- </div>
31093
- </div>
31090
+ return `
31091
+ <div class="itinerary-shell">
31092
+ ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
31093
+
31094
+ <div class="itinerary-shell__content">
31095
+ ${nodesHtml}
31096
+ ${defaultItemsHtml}
31097
+ </div>
31098
+ </div>
31094
31099
  `;
31095
31100
  };
31096
31101
  const FullItinerary = ({ isLoading }) => {
@@ -31110,141 +31115,141 @@ const FullItinerary = ({ isLoading }) => {
31110
31115
  }
31111
31116
  const shadowRoot = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
31112
31117
  shadowRootRef.current = shadowRoot;
31113
- shadowRoot.innerHTML = `
31114
- <style>
31115
- :host {
31116
- all: initial;
31117
- display: block;
31118
- width: 100%;
31119
- }
31120
-
31121
- *,
31122
- *::before,
31123
- *::after {
31124
- box-sizing: border-box;
31125
- }
31126
-
31127
- .itinerary-shell {
31128
- width: 100%;
31129
- margin: 0 auto;
31130
- font-family: 'Outfit', sans-serif;
31131
- color: #222;
31132
- }
31133
-
31134
- .itinerary-shell__header {
31135
- margin-bottom: 24px;
31136
- }
31137
-
31138
- .itinerary-shell__title {
31139
- margin: 0;
31140
- font-size: 32px;
31141
- line-height: 1.2;
31142
- }
31143
-
31144
- .itinerary-shell__content {
31145
- display: grid;
31146
- gap: 24px;
31147
- }
31148
-
31149
- .itinerary-node {
31150
- border: 1px solid #e5e7eb;
31151
- border-radius: 16px;
31152
- overflow: hidden;
31153
- background: #fff;
31154
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31155
- }
31156
-
31157
- .itinerary-node__header {
31158
- display: flex;
31159
- gap: 16px;
31160
- align-items: center;
31161
- border-bottom: 1px solid #eef0f2;
31162
- background: #fafafa;
31163
- }
31164
-
31165
- .itinerary-node__day {
31166
- flex: 50px 0 0;
31167
- display: flex;
31168
- flex-flow: column;
31169
- align-items: center;
31170
- justify-content: center;
31171
- background: #1f9470;
31172
- color: white;
31173
- border: 1.5px solid var(--tide-booking-color-secondary);
31174
- }
31175
-
31176
- .itinerary-node__day-month {
31177
- margin: 0px;
31178
- }
31179
-
31180
- .itinerary-node__day-day {
31181
- margin: 0px;
31182
- font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
31183
- color: var(--tide-booking-search-results-label-date-month-color);
31184
- font-size: 24px;
31185
- }
31186
-
31187
- .itinerary-node__title {
31188
- margin: 0;
31189
- font-size: 22px;
31190
- line-height: 1.25;
31191
- }
31192
-
31193
- .itinerary-node__content {
31194
- display: grid;
31195
- gap: 20px;
31196
- padding: 20px;
31197
- }
31198
-
31199
- .itinerary-node__accommodation-banner {
31200
- padding: 12px 16px;
31201
- border: 1px solid #dbeafe;
31202
- border-radius: 12px;
31203
- background: #eff6ff;
31204
- color: #1e3a8a;
31205
- font-size: 14px;
31206
- line-height: 1.4;
31207
- }
31208
-
31209
- .itinerary-item {
31210
- display: block;
31211
- border-radius: 12px;
31212
- overflow: hidden;
31213
- background: #fff;
31214
- }
31215
-
31216
- .itinerary-node__empty,
31217
- .itinerary-empty {
31218
- padding: 20px;
31219
- border: 1px dashed #d1d5db;
31220
- border-radius: 12px;
31221
- color: #6b7280;
31222
- background: #fafafa;
31223
- }
31224
-
31225
- .itinerary-default-items {
31226
- border: 1px solid #e5e7eb;
31227
- border-radius: 16px;
31228
- padding: 20px;
31229
- background: #fff;
31230
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31231
- }
31232
-
31233
- .itinerary-default-items__title {
31234
- margin: 0 0 16px;
31235
- font-size: 22px;
31236
- }
31237
-
31238
- @media (max-width: 768px) {
31239
- .itinerary-shell {
31240
- padding: 16px;
31241
- }
31242
- }
31243
-
31244
- ${itinerary?.styleSheetBody ?? ''}
31245
- </style>
31246
-
31247
- ${html}
31118
+ shadowRoot.innerHTML = `
31119
+ <style>
31120
+ :host {
31121
+ all: initial;
31122
+ display: block;
31123
+ width: 100%;
31124
+ }
31125
+
31126
+ *,
31127
+ *::before,
31128
+ *::after {
31129
+ box-sizing: border-box;
31130
+ }
31131
+
31132
+ .itinerary-shell {
31133
+ width: 100%;
31134
+ margin: 0 auto;
31135
+ font-family: 'Outfit', sans-serif;
31136
+ color: #222;
31137
+ }
31138
+
31139
+ .itinerary-shell__header {
31140
+ margin-bottom: 24px;
31141
+ }
31142
+
31143
+ .itinerary-shell__title {
31144
+ margin: 0;
31145
+ font-size: 32px;
31146
+ line-height: 1.2;
31147
+ }
31148
+
31149
+ .itinerary-shell__content {
31150
+ display: grid;
31151
+ gap: 24px;
31152
+ }
31153
+
31154
+ .itinerary-node {
31155
+ border: 1px solid #e5e7eb;
31156
+ border-radius: 16px;
31157
+ overflow: hidden;
31158
+ background: #fff;
31159
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31160
+ }
31161
+
31162
+ .itinerary-node__header {
31163
+ display: flex;
31164
+ gap: 16px;
31165
+ align-items: center;
31166
+ border-bottom: 1px solid #eef0f2;
31167
+ background: #fafafa;
31168
+ }
31169
+
31170
+ .itinerary-node__day {
31171
+ flex: 50px 0 0;
31172
+ display: flex;
31173
+ flex-flow: column;
31174
+ align-items: center;
31175
+ justify-content: center;
31176
+ background: #1f9470;
31177
+ color: white;
31178
+ border: 1.5px solid var(--tide-booking-color-secondary);
31179
+ }
31180
+
31181
+ .itinerary-node__day-month {
31182
+ margin: 0px;
31183
+ }
31184
+
31185
+ .itinerary-node__day-day {
31186
+ margin: 0px;
31187
+ font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
31188
+ color: var(--tide-booking-search-results-label-date-month-color);
31189
+ font-size: 24px;
31190
+ }
31191
+
31192
+ .itinerary-node__title {
31193
+ margin: 0;
31194
+ font-size: 22px;
31195
+ line-height: 1.25;
31196
+ }
31197
+
31198
+ .itinerary-node__content {
31199
+ display: grid;
31200
+ gap: 20px;
31201
+ padding: 20px;
31202
+ }
31203
+
31204
+ .itinerary-node__accommodation-banner {
31205
+ padding: 12px 16px;
31206
+ border: 1px solid #dbeafe;
31207
+ border-radius: 12px;
31208
+ background: #eff6ff;
31209
+ color: #1e3a8a;
31210
+ font-size: 14px;
31211
+ line-height: 1.4;
31212
+ }
31213
+
31214
+ .itinerary-item {
31215
+ display: block;
31216
+ border-radius: 12px;
31217
+ overflow: hidden;
31218
+ background: #fff;
31219
+ }
31220
+
31221
+ .itinerary-node__empty,
31222
+ .itinerary-empty {
31223
+ padding: 20px;
31224
+ border: 1px dashed #d1d5db;
31225
+ border-radius: 12px;
31226
+ color: #6b7280;
31227
+ background: #fafafa;
31228
+ }
31229
+
31230
+ .itinerary-default-items {
31231
+ border: 1px solid #e5e7eb;
31232
+ border-radius: 16px;
31233
+ padding: 20px;
31234
+ background: #fff;
31235
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
31236
+ }
31237
+
31238
+ .itinerary-default-items__title {
31239
+ margin: 0 0 16px;
31240
+ font-size: 22px;
31241
+ }
31242
+
31243
+ @media (max-width: 768px) {
31244
+ .itinerary-shell {
31245
+ padding: 16px;
31246
+ }
31247
+ }
31248
+
31249
+ ${itinerary?.styleSheetBody ?? ''}
31250
+ </style>
31251
+
31252
+ ${html}
31248
31253
  `;
31249
31254
  }, [html, itinerary?.styleSheetBody, isLoading]);
31250
31255
  return (React__default.createElement(React__default.Fragment, null,
@@ -31348,7 +31353,7 @@ const DayByDayExcursions = () => {
31348
31353
  })));
31349
31354
  };
31350
31355
 
31351
- const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, priceDetails, translations) => {
31356
+ const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, priceDetails, translations, currencyCode) => {
31352
31357
  const priceDetailsByProduct = groupBy(priceDetails?.details ?? [], (detail) => `${detail.productCode}|${detail.accommodationCode}`);
31353
31358
  return (editablePackagingEntry?.lines ?? []).map((line) => {
31354
31359
  const groupedPriceDetails = priceDetailsByProduct[`${line.productCode}|${line.accommodationCode}`] ?? [];
@@ -31372,7 +31377,7 @@ const renderEditablePackagingEntrySummaryOptions = (editablePackagingEntry, pric
31372
31377
  visiblePriceDetails.map((detail, index) => (React__default.createElement("li", { className: "list__item", key: `${line.guid}-price-${index}` },
31373
31378
  detail.priceDescription,
31374
31379
  ": ",
31375
- detail.total?.toLocaleString(undefined, { style: 'currency', currency: 'EUR' }))))),
31380
+ detail.total !== undefined && detail.total !== null ? formatPrice$3(detail.total, currencyCode ?? 'EUR') : '')))),
31376
31381
  React__default.createElement("p", null,
31377
31382
  "(",
31378
31383
  line.from === line.to ? (getDateText(line.from)) : (React__default.createElement(React__default.Fragment, null,
@@ -31492,7 +31497,7 @@ const WLSidebar = ({ activeSearchSeed, packagingAccoResult }) => {
31492
31497
  const separateExtraPriceDetails = priceDetails?.details.filter((pd) => !pd.isInPackage && pd.isSeparate) ?? [];
31493
31498
  const totalPrice = sum([basePrice, ...separateExtraPriceDetails.map((priceDetail) => priceDetail.price * priceDetail.amount)]);
31494
31499
  const includedCosts = selectSeparatePackagePriceDetails(priceDetails?.details.filter((pd) => pd.isInPackage) ?? []);
31495
- return (React__default.createElement(SharedSidebar, { productName: location ?? '', thumbnailUrl: accoImage ?? context.destinationImage?.url, translations: translations, travelerRooms: travelerRooms, startDateText: first(sortedLines)?.from && formatDate(new Date(first(sortedLines).from)), endDateText: last(sortedLines)?.to && formatDate(new Date(last(sortedLines).to)), isLoading: !editablePackagingEntry || !priceDetails, loaderComponent: React__default.createElement(Spinner, null), departureFlightMetaData: outboundFlightMetaData, returnFlightMetaData: returnFlightMetaData, includedServiceTypes: editablePackagingEntry.lines.map((line) => line.serviceType), packagingAccommodations: accommodationLines, basePrice: basePrice, commission: priceDetails?.commission, totalPrice: totalPrice, includedCosts: includedCosts, extraCosts: separateExtraPriceDetails, deposit: priceDetails?.deposit, isUnavailable: false, agent: context.agentId }));
31500
+ return (React__default.createElement(SharedSidebar, { productName: location ?? '', thumbnailUrl: accoImage ?? context.destinationImage?.url, translations: translations, travelerRooms: travelerRooms, startDateText: first(sortedLines)?.from && formatDate(new Date(first(sortedLines).from)), endDateText: last(sortedLines)?.to && formatDate(new Date(last(sortedLines).to)), isLoading: !editablePackagingEntry || !priceDetails, loaderComponent: React__default.createElement(Spinner, null), departureFlightMetaData: outboundFlightMetaData, returnFlightMetaData: returnFlightMetaData, includedServiceTypes: editablePackagingEntry.lines.map((line) => line.serviceType), packagingAccommodations: accommodationLines, basePrice: basePrice, commission: priceDetails?.commission, totalPrice: totalPrice, includedCosts: includedCosts, extraCosts: separateExtraPriceDetails, deposit: priceDetails?.deposit, isUnavailable: false, agent: context.agentId, currencyCode: packagingAccoResult?.currencyCode }));
31496
31501
  };
31497
31502
 
31498
31503
  const formatBirthDate = (birthDate) => {
@@ -31786,7 +31791,7 @@ const BookPackagingEntry = ({ activeSearchSeed, isLoading, isConfirmationPage })
31786
31791
  stepLabels[step])) },
31787
31792
  isConfirmationPage && isLoading && React__default.createElement(Spinner, { label: translations.SUMMARY.PROCESS_BOOKING }),
31788
31793
  currentStep === 0 && (React__default.createElement(SharedTravelersForm, { formik: formik, translations: translations, travellersSettings: travellersSettings, countries: countries, travelersFirstStep: false, isUnavailable: false, useCompactForm: false, showAgentSelection: false })),
31789
- currentStep === 1 && (React__default.createElement(SharedSummary, { translations: translations, travelerFormValues: formik.values, isSubmitting: isSubmitting, skipPayment: !context.generatePaymentUrl, userValidated: userValidated, remarks: remarks, enableVoucher: false, allowOption: false, isOffer: false, onUserValidatedChange: setUserValidated, onRemarksChange: setRemarks, onSubmit: handleSummarySubmit, renderOptions: () => renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails), renderPreviousButton: () => (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep(0)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) })),
31794
+ currentStep === 1 && (React__default.createElement(SharedSummary, { translations: translations, travelerFormValues: formik.values, isSubmitting: isSubmitting, skipPayment: !context.generatePaymentUrl, userValidated: userValidated, remarks: remarks, enableVoucher: false, allowOption: false, isOffer: false, onUserValidatedChange: setUserValidated, onRemarksChange: setRemarks, onSubmit: handleSummarySubmit, renderOptions: () => renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails, translations, selectedPackagingAccoResult?.currencyCode), renderPreviousButton: () => (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep(0)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) })),
31790
31795
  currentStep === 2 && (React__default.createElement(SharedConfirmation, { bookingNumber: bookingNumber ?? editablePackagingEntry?.dossierNumber ?? '', isOption: false, isOffer: false, translations: translations.CONFIRMATION })),
31791
31796
  currentStep === 3 && React__default.createElement("div", null))),
31792
31797
  React__default.createElement("div", { className: "backdrop", id: "backdrop" }),
@@ -35939,20 +35944,20 @@ function ItineraryMapView({ destinations: propDestinations, adults = 2, dateFrom
35939
35944
  const isStartEnd = dest.isStart || dest.isEnd;
35940
35945
  let iconHtml;
35941
35946
  if (isStartEnd) {
35942
- iconHtml = `
35943
- <div class="map-view__marker map-view__marker--plane">
35944
- <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
35945
- <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
35946
- </svg>
35947
+ iconHtml = `
35948
+ <div class="map-view__marker map-view__marker--plane">
35949
+ <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
35950
+ <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
35951
+ </svg>
35947
35952
  </div>`;
35948
35953
  }
35949
35954
  else {
35950
35955
  stopIndex++;
35951
35956
  const imgStyle = dest.imageUrl ? `style="background-image:url('${dest.imageUrl}')"` : '';
35952
- iconHtml = `
35953
- <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
35954
- ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
35955
- <span class="map-view__marker-badge">${stopIndex}</span>
35957
+ iconHtml = `
35958
+ <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
35959
+ ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
35960
+ <span class="map-view__marker-badge">${stopIndex}</span>
35956
35961
  </div>`;
35957
35962
  }
35958
35963
  const icon = L.divIcon({
@@ -12,6 +12,7 @@ interface SharedSidebarProps {
12
12
  returnFlightMetaData?: any;
13
13
  basePrice?: number;
14
14
  commission?: number;
15
+ showCommission?: boolean;
15
16
  totalPrice?: number;
16
17
  remainingAmountText?: string;
17
18
  includedCosts?: any[];
@@ -29,6 +30,7 @@ interface SharedSidebarProps {
29
30
  seperateExtraPricePerPaxType?: PricePerPaxType[];
30
31
  translations: any;
31
32
  agent?: number;
33
+ currencyCode?: string;
32
34
  }
33
35
  declare const SharedSidebar: React.FC<SharedSidebarProps>;
34
36
  export default SharedSidebar;
@@ -1,2 +1,2 @@
1
- export declare const renderEditablePackagingEntrySummaryOptions: (editablePackagingEntry: any, priceDetails: any, translations: any) => any;
1
+ export declare const renderEditablePackagingEntrySummaryOptions: (editablePackagingEntry: any, priceDetails: any, translations: any, currencyCode?: string) => any;
2
2
  export declare const getImageSrcFromHtml: (html?: string | null) => string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "1.4.127",
3
+ "version": "1.4.128",
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",