@qite/tide-booking-component 1.4.105 → 1.4.107

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 (97) hide show
  1. package/build/build-cjs/index.js +18288 -20939
  2. package/build/build-cjs/src/qsm/store/qsm-slice.d.ts +2 -1
  3. package/build/build-cjs/src/shared/components/icon.d.ts +1 -0
  4. package/build/build-cjs/src/shared/utils/localization-util.d.ts +4 -0
  5. package/build/build-esm/index.js +18234 -20846
  6. package/build/build-esm/src/qsm/store/qsm-slice.d.ts +2 -1
  7. package/build/build-esm/src/shared/components/icon.d.ts +1 -0
  8. package/build/build-esm/src/shared/utils/localization-util.d.ts +4 -0
  9. package/package.json +2 -2
  10. package/src/booking-product/components/amount-input.tsx +1 -1
  11. package/src/booking-product/components/date-range-picker/calendar.tsx +1 -1
  12. package/src/booking-product/components/dates.tsx +1 -1
  13. package/src/booking-product/components/header.tsx +1 -1
  14. package/src/booking-product/components/rating.tsx +1 -1
  15. package/src/booking-product/components/rooms.tsx +1 -1
  16. package/src/booking-wizard/components/message.tsx +1 -1
  17. package/src/booking-wizard/features/confirmation/confirmation.tsx +1 -1
  18. package/src/booking-wizard/features/flight-options/flight-filter.tsx +1 -1
  19. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +1 -1
  20. package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +1 -1
  21. package/src/booking-wizard/features/summary/summary.tsx +1 -1
  22. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +1 -1
  23. package/src/content/components/accordion.tsx +1 -1
  24. package/src/content/components/contact.tsx +0 -1
  25. package/src/content/components/gallery.tsx +3 -3
  26. package/src/content/components/login.tsx +1 -2
  27. package/src/content/components/personal-contact-form.tsx +1 -1
  28. package/src/content/components/slider.tsx +1 -1
  29. package/src/content/featured-trips/featured-trip-card.tsx +1 -1
  30. package/src/content/features/content-page/content-page-self-contained.tsx +1 -1
  31. package/src/content/footer/index.tsx +1 -1
  32. package/src/content/navbar/index.tsx +1 -1
  33. package/src/qsm/components/QSMContainer/qsm-container.tsx +58 -5
  34. package/src/qsm/components/search-input/index.tsx +1 -1
  35. package/src/qsm/components/search-input-group/index.tsx +13 -2
  36. package/src/qsm/components/travel-input/index.tsx +1 -3
  37. package/src/qsm/components/travel-input-group/index.tsx +1 -1
  38. package/src/qsm/store/qsm-slice.ts +10 -3
  39. package/src/search-results/components/excursions/day-by-day-excursions.tsx +4 -9
  40. package/src/search-results/components/filters/filters.tsx +1 -1
  41. package/src/search-results/components/filters/flight-filters.tsx +1 -1
  42. package/src/search-results/components/flight/flight-results.tsx +1 -1
  43. package/src/search-results/components/flight/flight-selection/independent-flight-option.tsx +1 -1
  44. package/src/search-results/components/flight/flight-selection/independent-flight-selection.tsx +1 -1
  45. package/src/search-results/components/flight/flight-selection/paired-flight-option.tsx +1 -1
  46. package/src/search-results/components/flight/flight-selection/paired-flight-selection.tsx +1 -1
  47. package/src/search-results/components/group-tour/group-tour-card.tsx +1 -1
  48. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +1 -1
  49. package/src/search-results/components/hotel/hotel-card.tsx +1 -1
  50. package/src/search-results/components/itinerary/full-itinerary.tsx +161 -53
  51. package/src/search-results/components/itinerary/index.tsx +32 -8
  52. package/src/search-results/components/round-trip/round-trip-results.tsx +1 -1
  53. package/src/search-results/components/search-results-container/flight-search-results.tsx +1 -1
  54. package/src/search-results/components/search-results-container/search-results-container.tsx +5 -6
  55. package/src/search-results/components/tab-views/index.tsx +1 -1
  56. package/src/search-results/features/flights/flight-search-results-self-contained.tsx +1 -1
  57. package/src/search-results/features/hotels/hotel-flight-search-results-self-contained.tsx +1 -1
  58. package/src/search-results/features/hotels/hotel-search-results-self-contained.tsx +1 -1
  59. package/src/shared/components/flyin/flyin.tsx +1 -1
  60. package/src/shared/components/icon.tsx +349 -88
  61. package/src/shared/translations/ar-SA.json +4 -0
  62. package/src/shared/translations/da-DK.json +4 -0
  63. package/src/shared/translations/de-DE.json +4 -0
  64. package/src/shared/translations/en-GB.json +4 -0
  65. package/src/shared/translations/es-ES.json +4 -0
  66. package/src/shared/translations/fr-BE.json +4 -0
  67. package/src/shared/translations/fr-FR.json +4 -0
  68. package/src/shared/translations/is-IS.json +4 -0
  69. package/src/shared/translations/it-IT.json +4 -0
  70. package/src/shared/translations/ja-JP.json +4 -0
  71. package/src/shared/translations/nl-BE.json +4 -0
  72. package/src/shared/translations/nl-NL.json +4 -0
  73. package/src/shared/translations/no-NO.json +4 -0
  74. package/src/shared/translations/pl-PL.json +4 -0
  75. package/src/shared/translations/pt-PT.json +4 -0
  76. package/src/shared/translations/sv-SE.json +4 -0
  77. package/src/shared/utils/tide-api-utils.ts +2 -2
  78. package/styles/booking-qsm-variables.scss +2 -2
  79. package/styles/booking-search-results-variables.scss +17 -17
  80. package/styles/components/_faq.scss +2 -0
  81. package/styles/components/_flyin.scss +19 -0
  82. package/styles/components/_gallery.scss +5 -2
  83. package/build/build-cjs/src/booking-product/components/icon.d.ts +0 -10
  84. package/build/build-cjs/src/booking-wizard/components/icon.d.ts +0 -10
  85. package/build/build-cjs/src/content/components/icon.d.ts +0 -10
  86. package/build/build-cjs/src/qsm/components/icon.d.ts +0 -10
  87. package/build/build-cjs/src/search-results/components/icon.d.ts +0 -11
  88. package/build/build-esm/src/booking-product/components/icon.d.ts +0 -10
  89. package/build/build-esm/src/booking-wizard/components/icon.d.ts +0 -10
  90. package/build/build-esm/src/content/components/icon.d.ts +0 -10
  91. package/build/build-esm/src/qsm/components/icon.d.ts +0 -10
  92. package/build/build-esm/src/search-results/components/icon.d.ts +0 -11
  93. package/src/booking-product/components/icon.tsx +0 -200
  94. package/src/booking-wizard/components/icon.tsx +0 -398
  95. package/src/content/components/icon.tsx +0 -695
  96. package/src/qsm/components/icon.tsx +0 -354
  97. package/src/search-results/components/icon.tsx +0 -677
@@ -1,10 +1,13 @@
1
- import React, { useEffect, useMemo, useRef } from 'react';
1
+ import React, { useContext, useEffect, useMemo, useRef } from 'react';
2
2
  import { useSelector } from 'react-redux';
3
3
  import { SearchResultsRootState } from '../../store/search-results-store';
4
- import { ClientPortalItinerary } from '@qite/tide-client';
4
+ import { ClientPortalItinerary, ClientPortalItineraryItem, ClientPortalItineraryNode } from '@qite/tide-client';
5
5
  import Spinner from '../spinner/spinner';
6
+ import SearchResultsConfigurationContext from '../../search-results-configuration-context';
7
+ import { getTranslations } from '../../../shared/utils/localization-util';
8
+ import { format } from 'date-fns';
6
9
 
7
- const formatNodeDate = (date?: Date | null) => {
10
+ const formatNodeDate = (date?: Date | string | null) => {
8
11
  if (!date) return '';
9
12
 
10
13
  try {
@@ -13,7 +16,7 @@ const formatNodeDate = (date?: Date | null) => {
13
16
  day: '2-digit',
14
17
  month: '2-digit',
15
18
  year: 'numeric'
16
- }).format(date);
19
+ }).format(new Date(date));
17
20
  } catch {
18
21
  return '';
19
22
  }
@@ -25,7 +28,79 @@ const escapeHtml = (value?: string | null) => {
25
28
  return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
26
29
  };
27
30
 
28
- const buildItineraryHtml = (itinerary?: ClientPortalItinerary | null) => {
31
+ const getNodeDayRange = (node: ClientPortalItineraryNode) => {
32
+ const startDay = Number(node.startDay ?? 0);
33
+ const endDay = Number(node.endDay ?? startDay);
34
+
35
+ return { startDay, endDay };
36
+ };
37
+
38
+ const getItemDuration = (item: ClientPortalItineraryItem) => {
39
+ const duration = Number(item.productDuration ?? 0);
40
+
41
+ return Number.isFinite(duration) && duration > 0 ? duration : 0;
42
+ };
43
+
44
+ const isAccommodationItem = (item: ClientPortalItineraryItem) => {
45
+ return getItemDuration(item) > 1 && item.templateName?.toLowerCase().includes('hotel');
46
+ };
47
+
48
+ const getAccommodationName = (item: ClientPortalItineraryItem) => {
49
+ return item.title || 'Onbekende accommodatie';
50
+ };
51
+
52
+ const getItemDeduplicationKey = (item: ClientPortalItineraryItem) => {
53
+ const templateName = item.templateName?.toLowerCase();
54
+
55
+ // if (templateName === 'hotel') {
56
+ // return [item.templateName, item.productCode, item.accommodationCode, item.regimeCode].filter(Boolean).join('|');
57
+ // }
58
+
59
+ // if (templateName === 'excursion') {
60
+ // return [item.templateName, item.productCode].filter(Boolean).join('|');
61
+ // }
62
+
63
+ return [item.templateName, item.productCode, item.title].filter(Boolean).join('|');
64
+ };
65
+
66
+ const getUniqueItems = (items: ClientPortalItineraryItem[] = []) => {
67
+ const seen = new Set<string>();
68
+
69
+ return items.filter((item) => {
70
+ const key = getItemDeduplicationKey(item) || item.itemGuid;
71
+
72
+ if (seen.has(key)) {
73
+ return false;
74
+ }
75
+
76
+ seen.add(key);
77
+ return true;
78
+ });
79
+ };
80
+
81
+ const findAccommodationForDay = (nodes: ClientPortalItineraryNode[], currentDay: number) => {
82
+ for (const node of nodes ?? []) {
83
+ const { startDay } = getNodeDayRange(node);
84
+ const uniqueItems = getUniqueItems(node.items ?? []);
85
+
86
+ for (const item of uniqueItems) {
87
+ if (!isAccommodationItem(item)) {
88
+ continue;
89
+ }
90
+
91
+ const duration = getItemDuration(item);
92
+ const accommodationEndDay = startDay + duration - 1;
93
+
94
+ if (currentDay >= startDay && currentDay <= accommodationEndDay) {
95
+ return item;
96
+ }
97
+ }
98
+ }
99
+
100
+ return null;
101
+ };
102
+
103
+ const buildItineraryHtml = (itinerary: ClientPortalItinerary | null, translations: any) => {
29
104
  if (!itinerary) {
30
105
  return `
31
106
  <div class="itinerary-shell">
@@ -34,12 +109,30 @@ const buildItineraryHtml = (itinerary?: ClientPortalItinerary | null) => {
34
109
  `;
35
110
  }
36
111
 
37
- const nodesHtml = (itinerary.nodes ?? [])
112
+ const allNodes = itinerary.nodes ?? [];
113
+
114
+ const nodesHtml = allNodes
38
115
  .map((node) => {
39
- const hasItems = Array.isArray(node.items) && node.items.length > 0;
116
+ const { startDay } = getNodeDayRange(node);
117
+ const day = node.startDate ? format(node.startDate, 'd') : null;
118
+ const month = node.startDate ? format(node.startDate, 'MMM') : null;
119
+ const uniqueItems = getUniqueItems(node.items ?? []);
120
+
121
+ const hasItems = uniqueItems.length > 0;
122
+ const hasAccommodationInCurrentNode = uniqueItems.some(isAccommodationItem);
123
+ const activeAccommodation = findAccommodationForDay(allNodes, startDay);
124
+
125
+ const accommodationBanner =
126
+ !hasAccommodationInCurrentNode && activeAccommodation
127
+ ? `
128
+ <div class="itinerary-node__accommodation-banner">
129
+ Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
130
+ </div>
131
+ `
132
+ : '';
40
133
 
41
134
  const itemsHtml = hasItems
42
- ? node.items
135
+ ? uniqueItems
43
136
  .map(
44
137
  (item) => `
45
138
  <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
@@ -48,19 +141,24 @@ const buildItineraryHtml = (itinerary?: ClientPortalItinerary | null) => {
48
141
  `
49
142
  )
50
143
  .join('')
51
- : `<div class="itinerary-node__empty">Geen items voor deze dag.</div>`;
144
+ : `<div class="itinerary-node__empty">${translations.ITINERARY.NO_ITEMS}</div>`;
52
145
 
53
146
  return `
54
147
  <section class="itinerary-node">
55
148
  <header class="itinerary-node__header">
56
- <div class="itinerary-node__day">Dag ${node.startDay}${node.endDay > node.startDay ? ` - ${node.endDay}` : ''}</div>
57
- <div class="itinerary-node__meta">
149
+
150
+ <div class="itinerary-node__day">
151
+ <p class="itinerary-node__day-day">${day}</p>
152
+ <p class="itinerary-node__day-month">${month}</p>
153
+ </div>
154
+
155
+ <div>
58
156
  <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
59
- <div class="itinerary-node__date">${escapeHtml(formatNodeDate(node.startDate))}</div>
60
157
  </div>
61
158
  </header>
62
159
 
63
160
  <div class="itinerary-node__content">
161
+ ${accommodationBanner}
64
162
  ${itemsHtml}
65
163
  </div>
66
164
  </section>
@@ -73,7 +171,7 @@ const buildItineraryHtml = (itinerary?: ClientPortalItinerary | null) => {
73
171
  ? `
74
172
  <section class="itinerary-default-items">
75
173
  <h2 class="itinerary-default-items__title">Algemene info</h2>
76
- ${itinerary.defaultItems
174
+ ${getUniqueItems(itinerary.defaultItems)
77
175
  .map(
78
176
  (item) => `
79
177
  <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
@@ -103,31 +201,36 @@ interface FullItineraryProps {
103
201
  }
104
202
 
105
203
  const FullItinerary: React.FC<FullItineraryProps> = ({ isLoading }) => {
106
- if (isLoading) {
107
- return <Spinner />;
108
- }
109
-
110
204
  const { itinerary } = useSelector((state: SearchResultsRootState) => state.searchResults);
205
+ const context = useContext(SearchResultsConfigurationContext);
206
+ const translations = getTranslations(context?.languageCode ?? 'en-GB');
207
+
111
208
  const hostRef = useRef<HTMLDivElement | null>(null);
112
209
  const shadowRootRef = useRef<ShadowRoot | null>(null);
113
210
 
114
- const html = useMemo(() => buildItineraryHtml(itinerary as ClientPortalItinerary | null), [itinerary]);
211
+ const html = useMemo(() => buildItineraryHtml(itinerary as ClientPortalItinerary | null, translations), [itinerary, translations]);
115
212
 
116
213
  useEffect(() => {
117
- if (!hostRef.current) {
214
+ if (isLoading) {
118
215
  return;
119
216
  }
120
217
 
121
- if (!shadowRootRef.current) {
122
- shadowRootRef.current = hostRef.current.attachShadow({ mode: 'open' });
218
+ const host = hostRef.current;
219
+
220
+ if (!host) {
221
+ return;
123
222
  }
124
223
 
125
- const shadowRoot = shadowRootRef.current;
224
+ const shadowRoot = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
225
+
226
+ shadowRootRef.current = shadowRoot;
126
227
 
127
228
  shadowRoot.innerHTML = `
128
229
  <style>
129
230
  :host {
130
231
  all: initial;
232
+ display: block;
233
+ width: 100%;
131
234
  }
132
235
 
133
236
  *,
@@ -169,27 +272,31 @@ const FullItinerary: React.FC<FullItineraryProps> = ({ isLoading }) => {
169
272
  .itinerary-node__header {
170
273
  display: flex;
171
274
  gap: 16px;
172
- align-items: flex-start;
173
- padding: 20px 20px 16px;
275
+ align-items: center;
174
276
  border-bottom: 1px solid #eef0f2;
175
277
  background: #fafafa;
176
278
  }
177
279
 
178
280
  .itinerary-node__day {
179
- flex: 0 0 auto;
180
- min-width: 72px;
181
- padding: 8px 12px;
182
- border-radius: 999px;
183
- font-size: 14px;
184
- font-weight: 700;
185
- line-height: 1;
186
- background: #111827;
187
- color: #fff;
188
- text-align: center;
281
+ flex: 50px 0 0;
282
+ display: flex;
283
+ flex-flow: column;
284
+ align-items: center;
285
+ justify-content: center;
286
+ background: #1f9470;
287
+ color: white;
288
+ border: 1.5px solid var(--tide-booking-color-secondary);
189
289
  }
190
290
 
191
- .itinerary-node__meta {
192
- min-width: 0;
291
+ .itinerary-node__day-month {
292
+ margin: 0px;
293
+ }
294
+
295
+ .itinerary-node__day-day {
296
+ margin: 0px;
297
+ font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
298
+ color: var(--tide-booking-search-results-label-date-month-color);
299
+ font-size: 24px;
193
300
  }
194
301
 
195
302
  .itinerary-node__title {
@@ -198,18 +305,22 @@ const FullItinerary: React.FC<FullItineraryProps> = ({ isLoading }) => {
198
305
  line-height: 1.25;
199
306
  }
200
307
 
201
- .itinerary-node__date {
202
- margin-top: 6px;
203
- font-size: 14px;
204
- color: #6b7280;
205
- }
206
-
207
308
  .itinerary-node__content {
208
309
  display: grid;
209
310
  gap: 20px;
210
311
  padding: 20px;
211
312
  }
212
313
 
314
+ .itinerary-node__accommodation-banner {
315
+ padding: 12px 16px;
316
+ border: 1px solid #dbeafe;
317
+ border-radius: 12px;
318
+ background: #eff6ff;
319
+ color: #1e3a8a;
320
+ font-size: 14px;
321
+ line-height: 1.4;
322
+ }
323
+
213
324
  .itinerary-item {
214
325
  display: block;
215
326
  border-radius: 12px;
@@ -243,14 +354,6 @@ const FullItinerary: React.FC<FullItineraryProps> = ({ isLoading }) => {
243
354
  .itinerary-shell {
244
355
  padding: 16px;
245
356
  }
246
-
247
- .itinerary-node__header {
248
- flex-direction: column;
249
- }
250
-
251
- .itinerary-node__day {
252
- min-width: auto;
253
- }
254
357
  }
255
358
 
256
359
  ${itinerary?.styleSheetBody ?? ''}
@@ -258,9 +361,14 @@ const FullItinerary: React.FC<FullItineraryProps> = ({ isLoading }) => {
258
361
 
259
362
  ${html}
260
363
  `;
261
- }, [html, itinerary?.styleSheetBody]);
262
-
263
- return <div ref={hostRef} />;
364
+ }, [html, itinerary?.styleSheetBody, isLoading]);
365
+
366
+ return (
367
+ <>
368
+ {isLoading && <Spinner />}
369
+ <div ref={hostRef} style={{ display: isLoading ? 'none' : 'block' }} />
370
+ </>
371
+ );
264
372
  };
265
373
 
266
374
  export default FullItinerary;
@@ -2,7 +2,7 @@ import React, { useContext, useMemo } from 'react';
2
2
  import { differenceInCalendarDays, format } from 'date-fns';
3
3
  import { first, groupBy, isEmpty, last } from 'lodash';
4
4
  import { PackagingEntryLine, PackagingEntryLineFlightLine } from '@qite/tide-client';
5
- import Icon from '../icon';
5
+ import Icon from '../../../shared/components/icon';
6
6
  import SearchResultsConfigurationContext from '../../search-results-configuration-context';
7
7
  import { formatPrice, getTranslations } from '../../../shared/utils/localization-util';
8
8
  import { useSelector } from 'react-redux';
@@ -102,6 +102,25 @@ const getSegmentTitle = (segment: PackagingEntryLine) => {
102
102
  return segment.productName ?? segment.accommodationName;
103
103
  };
104
104
 
105
+ const SERVICE_TYPE_PRIORITY: Record<number, number> = {
106
+ 7: 0, // Flight
107
+ 13: 1, // Transfer
108
+ 3: 2, // Hotel
109
+ 4: 3 // Excursion
110
+ };
111
+
112
+ const getServiceTypePriority = (serviceType?: number) => {
113
+ return SERVICE_TYPE_PRIORITY[serviceType ?? -1] ?? 2;
114
+ };
115
+
116
+ const getDateOnlyTime = (date?: string | Date | null) => {
117
+ if (!date) return 0;
118
+
119
+ const parsedDate = new Date(date);
120
+
121
+ return new Date(parsedDate.getFullYear(), parsedDate.getMonth(), parsedDate.getDate()).getTime();
122
+ };
123
+
105
124
  const Itinerary: React.FC<ItineraryProps> = ({ isOpen, handleSetIsOpen, isLoading, onEditAccommodation }) => {
106
125
  const context = useContext(SearchResultsConfigurationContext);
107
126
  const translations = getTranslations(context?.languageCode ?? 'en-GB');
@@ -111,16 +130,21 @@ const Itinerary: React.FC<ItineraryProps> = ({ isOpen, handleSetIsOpen, isLoadin
111
130
 
112
131
  const sortedLines = useMemo(() => {
113
132
  return [...(packagingEntry?.lines ?? [])].sort((a, b) => {
114
- const orderA = a.order ?? Infinity;
115
- const orderB = b.order ?? Infinity;
133
+ const dateA = getDateOnlyTime(a.from);
134
+ const dateB = getDateOnlyTime(b.from);
135
+
136
+ if (dateA !== dateB) {
137
+ return dateA - dateB;
138
+ }
139
+
140
+ const priorityA = getServiceTypePriority(a.serviceType);
141
+ const priorityB = getServiceTypePriority(b.serviceType);
116
142
 
117
- // First sort by order
118
- if (orderA !== orderB) {
119
- return orderA - orderB;
143
+ if (priorityA !== priorityB) {
144
+ return priorityA - priorityB;
120
145
  }
121
146
 
122
- // Fallback to date
123
- return new Date(a.from).getTime() - new Date(b.from).getTime();
147
+ return (a.order ?? Infinity) - (b.order ?? Infinity);
124
148
  });
125
149
  }, [packagingEntry]);
126
150
 
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect } from 'react';
2
- import Icon from '../icon';
2
+ import Icon from '../../../shared/components/icon';
3
3
  import { useDispatch, useSelector } from 'react-redux';
4
4
  import { SearchResultsRootState } from '../../store/search-results-store';
5
5
  import { setActiveTab } from '../../store/search-results-slice';
@@ -3,7 +3,7 @@ import SearchResultsConfigurationContext from '../../search-results-configuratio
3
3
 
4
4
  import ItemPicker from '../item-picker';
5
5
 
6
- import Icon from '../icon';
6
+ import Icon from '../../../shared/components/icon';
7
7
  import { findSortByType, getSortingName, getTranslations } from '../../../shared/utils/localization-util';
8
8
  import FlightSelection from '../flight/flight-selection/index';
9
9
  import { useFlightSearch } from '../flight/flight-search-context';
@@ -31,7 +31,7 @@ import {
31
31
  setFilters,
32
32
  setInitialFilters
33
33
  } from '../../store/search-results-slice';
34
- import { FlyInType, Filter, SearchSeed, SortByType } from '../../types';
34
+ import { FlyInType, SearchSeed, SortByType } from '../../types';
35
35
  import useMediaQuery from '../../../shared/utils/use-media-query-util';
36
36
  import ItemPicker from '../item-picker';
37
37
  import {
@@ -63,13 +63,12 @@ import {
63
63
  import { getDateFromParams, getNumberFromParams, getRoomsFromParams, getStringFromParams } from '../../../shared/utils/query-string-util';
64
64
  import { concat, first, isEmpty, last, range } from 'lodash';
65
65
  import { Room } from '../../../booking-wizard/types';
66
- import Icon from '../icon';
66
+ import Icon from '../../../shared/components/icon';
67
67
  import Itinerary from '../itinerary';
68
68
  import TabViews from '../tab-views';
69
69
  import FlyIn from '../../../shared/components/flyin/flyin';
70
70
  import HotelAccommodationResults from '../hotel/hotel-accommodation-results';
71
71
  import RoundTripResults from '../round-trip/round-trip-results';
72
- import FlightResults from '../flight/flight-results';
73
72
  import { dateToDateStruct, findSortByType, getSortingName, getTranslations } from '../../../shared/utils/localization-util';
74
73
  import { FlightSearchProvider } from '../flight/flight-search-context';
75
74
  import FlightResultsContainer from './flight-search-results';
@@ -95,7 +94,7 @@ import {
95
94
  parseHotelId,
96
95
  toDateOnlyString
97
96
  } from '../../utils/query-utils';
98
- import { getRequestRoomsFromPackagingSegments, getRoomIndexFromLine, getSelectedOptionsPerRoom } from '../../utils/packaging-utils';
97
+ import { getRequestRoomsFromPackagingSegments, getSelectedOptionsPerRoom } from '../../utils/packaging-utils';
99
98
  import FullItinerary from '../itinerary/full-itinerary';
100
99
  import { getFlightKey } from '../../utils/flight-utils';
101
100
  import IndependentFlightOption from '../flight/flight-selection/independent-flight-option';
@@ -1108,7 +1107,7 @@ const SearchResultsContainer: React.FC = () => {
1108
1107
  transactionId: transactionId ?? context.packagingEntry?.transactionId ?? '',
1109
1108
  language: context.languageCode ?? 'en-GB'
1110
1109
  });
1111
- console.log('Built nextEntry', nextEntry);
1110
+
1112
1111
  if (!nextEntry) return;
1113
1112
 
1114
1113
  dispatch(setEditablePackagingEntry(nextEntry));
@@ -1658,7 +1657,7 @@ const SearchResultsContainer: React.FC = () => {
1658
1657
  </>
1659
1658
  )}
1660
1659
 
1661
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && context.packagingEntry && itinerary && (
1660
+ {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && context.packagingEntry && (
1662
1661
  <FullItinerary isLoading={itineraryIsLoading} />
1663
1662
  )}
1664
1663
  </div>
@@ -1,5 +1,5 @@
1
1
  import React, { useContext } from 'react';
2
- import Icon from '../icon';
2
+ import Icon from '../../../shared/components/icon';
3
3
  import { useDispatch, useSelector } from 'react-redux';
4
4
  import { SearchResultsRootState } from '../../store/search-results-store';
5
5
  import { setActiveTab } from '../../store/search-results-slice';
@@ -3,7 +3,7 @@ import { Filter, SearchResult, SearchResultsConfiguration } from '../../types';
3
3
  import SearchResults from '../..';
4
4
  import { Footer, Navbar } from '../../../../src';
5
5
  import { TideLogo, language, languages, topLinks, navItems } from '../../../../src/content/navbar/placeholderData';
6
- import Icon from '../../components/icon';
6
+ import Icon from '../../../shared/components/icon';
7
7
 
8
8
  interface FlightSearchResultsSelfContainedProps {}
9
9
 
@@ -3,7 +3,7 @@ import { SearchResult, SearchResultsConfiguration } from '../../types';
3
3
  import SearchResults from '../..';
4
4
  import { Navbar, Footer } from '../../../../src';
5
5
  import { TideLogo, language, languages, topLinks, navItems } from '../../../../src/content/navbar/placeholderData';
6
- import Icon from '../../components/icon';
6
+ import Icon from '../../../shared/components/icon';
7
7
 
8
8
  interface HotelFlightSearchResultsSelfContainedProps {}
9
9
 
@@ -3,7 +3,7 @@ import { Filter, SearchResult, SearchResultsConfiguration } from '../../types';
3
3
  import SearchResults from '../..';
4
4
  import { Navbar, Footer } from '../../../../src';
5
5
  import { TideLogo, language, languages, topLinks, navItems } from '../../../../src/content/navbar/placeholderData';
6
- import Icon from '../../components/icon';
6
+ import Icon from '../../../shared/components/icon';
7
7
 
8
8
  interface HotelSearchResultsSelfContainedProps {}
9
9
 
@@ -127,7 +127,7 @@ const FlyIn: React.FC<FlyInProps> = ({
127
127
  isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
128
128
  ? 'flyin--large'
129
129
  : ''
130
- }`}>
130
+ } ${flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : ''}`}>
131
131
  <div className={`flyin__panel ${isOpen ? 'flyin__panel--active' : ''}`} ref={panelRef}>
132
132
  <div className="flyin__content">
133
133
  <div className="flyin__content-title-row">