@times-components/ts-components 1.146.2-a0ffbb6bc2acbec91d140a39f6be06256e702094.5 → 1.146.2-c12ed7999a41984c2ba8c437357e7a5df1914881.48

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 (137) hide show
  1. package/dist/components/carousel-component/CarouselComponent.stories.d.ts +1 -0
  2. package/dist/components/carousel-component/CarouselComponent.stories.js +146 -0
  3. package/dist/components/carousel-component/CarouselItem.d.ts +3 -0
  4. package/dist/components/carousel-component/CarouselItem.js +12 -0
  5. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +8 -0
  6. package/dist/components/carousel-component/DefaultNavigationArrow.js +6 -0
  7. package/dist/components/carousel-component/DefaultPageDot.d.ts +8 -0
  8. package/dist/components/carousel-component/DefaultPageDot.js +4 -0
  9. package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +1 -0
  10. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +163 -0
  11. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +1 -0
  12. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +80 -0
  13. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +1 -0
  14. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +62 -0
  15. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +1 -0
  16. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +68 -0
  17. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +1 -0
  18. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +459 -0
  19. package/dist/components/carousel-component/hooks/useCarousel.d.ts +2 -0
  20. package/dist/components/carousel-component/hooks/useCarousel.js +167 -0
  21. package/dist/components/carousel-component/index.d.ts +4 -0
  22. package/dist/components/carousel-component/index.js +20 -0
  23. package/dist/components/carousel-component/styles.d.ts +28 -0
  24. package/dist/components/carousel-component/styles.js +172 -0
  25. package/dist/components/carousel-component/types.d.ts +53 -0
  26. package/dist/components/carousel-component/types.js +2 -0
  27. package/dist/components/social-embed/SocialMediaEmbed.js +15 -122
  28. package/dist/components/social-embed/SocialVendor.d.ts +16 -1
  29. package/dist/components/social-embed/SocialVendor.js +2 -41
  30. package/dist/components/social-embed/__tests__/SocialVendor.test.js +1 -8
  31. package/dist/components/social-embed/constants.d.ts +0 -1
  32. package/dist/components/social-embed/constants.js +2 -3
  33. package/dist/components/social-embed/helpers/socialMediaVendors.js +1 -6
  34. package/dist/components/social-embed/styles.d.ts +0 -1
  35. package/dist/components/social-embed/styles.js +1 -28
  36. package/dist/components/trip-cards/SkeletonCard.d.ts +7 -0
  37. package/dist/components/trip-cards/SkeletonCard.js +22 -0
  38. package/dist/components/trip-cards/TripCard.d.ts +3 -0
  39. package/dist/components/trip-cards/TripCard.js +61 -0
  40. package/dist/components/trip-cards/TripCards.stories.d.ts +1 -0
  41. package/dist/components/trip-cards/TripCards.stories.js +159 -0
  42. package/dist/components/trip-cards/TripCardsLayout.d.ts +3 -0
  43. package/dist/components/trip-cards/TripCardsLayout.js +63 -0
  44. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +1 -0
  45. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +139 -0
  46. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +1 -0
  47. package/dist/components/trip-cards/__tests__/TripCard.test.js +165 -0
  48. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +1 -0
  49. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +353 -0
  50. package/dist/components/trip-cards/__tests__/assets.test.d.ts +1 -0
  51. package/dist/components/trip-cards/__tests__/assets.test.js +165 -0
  52. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +1 -0
  53. package/dist/components/trip-cards/__tests__/helpers.test.js +221 -0
  54. package/dist/components/trip-cards/__tests__/index.test.d.ts +1 -0
  55. package/dist/components/trip-cards/__tests__/index.test.js +482 -0
  56. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +1 -0
  57. package/dist/components/trip-cards/__tests__/mockData.test.js +57 -0
  58. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +1 -0
  59. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +194 -0
  60. package/dist/components/trip-cards/assets/BoatIcon.d.ts +1 -0
  61. package/dist/components/trip-cards/assets/BoatIcon.js +4 -0
  62. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +1 -0
  63. package/dist/components/trip-cards/assets/CalendarIcon.js +4 -0
  64. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +1 -0
  65. package/dist/components/trip-cards/assets/ChevronRightIcon.js +4 -0
  66. package/dist/components/trip-cards/assets/LocationIcon.d.ts +1 -0
  67. package/dist/components/trip-cards/assets/LocationIcon.js +4 -0
  68. package/dist/components/trip-cards/assets/MoonIcon.d.ts +1 -0
  69. package/dist/components/trip-cards/assets/MoonIcon.js +4 -0
  70. package/dist/components/trip-cards/assets/index.d.ts +6 -0
  71. package/dist/components/trip-cards/assets/index.js +7 -0
  72. package/dist/components/trip-cards/helpers.d.ts +11 -0
  73. package/dist/components/trip-cards/helpers.js +144 -0
  74. package/dist/components/trip-cards/index.d.ts +4 -0
  75. package/dist/components/trip-cards/index.js +68 -0
  76. package/dist/components/trip-cards/mockData.d.ts +3 -0
  77. package/dist/components/trip-cards/mockData.js +317 -0
  78. package/dist/components/trip-cards/skeletonStyles.d.ts +9 -0
  79. package/dist/components/trip-cards/skeletonStyles.js +37 -0
  80. package/dist/components/trip-cards/styles.d.ts +43 -0
  81. package/dist/components/trip-cards/styles.js +404 -0
  82. package/dist/components/trip-cards/types.d.ts +121 -0
  83. package/dist/components/trip-cards/types.js +2 -0
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.js +2 -1
  86. package/dist/utils/cookie.d.ts +1 -0
  87. package/dist/utils/cookie.js +8 -1
  88. package/package.json +3 -3
  89. package/rnw.js +1 -1
  90. package/src/components/carousel-component/CarouselComponent.stories.tsx +220 -0
  91. package/src/components/carousel-component/CarouselItem.tsx +26 -0
  92. package/src/components/carousel-component/DefaultNavigationArrow.tsx +37 -0
  93. package/src/components/carousel-component/DefaultPageDot.tsx +20 -0
  94. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +259 -0
  95. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +140 -0
  96. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +153 -0
  97. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +105 -0
  98. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +625 -0
  99. package/src/components/carousel-component/hooks/useCarousel.ts +229 -0
  100. package/src/components/carousel-component/index.tsx +92 -0
  101. package/src/components/carousel-component/styles.ts +188 -0
  102. package/src/components/carousel-component/types.ts +62 -0
  103. package/src/components/social-embed/SocialMediaEmbed.tsx +1 -111
  104. package/src/components/social-embed/SocialVendor.tsx +1 -46
  105. package/src/components/social-embed/__tests__/SocialVendor.test.tsx +0 -11
  106. package/src/components/social-embed/constants.ts +1 -2
  107. package/src/components/social-embed/helpers/socialMediaVendors.ts +0 -5
  108. package/src/components/social-embed/styles.ts +0 -30
  109. package/src/components/trip-cards/SkeletonCard.tsx +64 -0
  110. package/src/components/trip-cards/TripCard.tsx +172 -0
  111. package/src/components/trip-cards/TripCards.stories.tsx +224 -0
  112. package/src/components/trip-cards/TripCardsLayout.tsx +162 -0
  113. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +169 -0
  114. package/src/components/trip-cards/__tests__/TripCard.test.tsx +255 -0
  115. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +671 -0
  116. package/src/components/trip-cards/__tests__/assets.test.tsx +206 -0
  117. package/src/components/trip-cards/__tests__/helpers.test.ts +273 -0
  118. package/src/components/trip-cards/__tests__/index.test.tsx +554 -0
  119. package/src/components/trip-cards/__tests__/mockData.test.ts +67 -0
  120. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +256 -0
  121. package/src/components/trip-cards/assets/BoatIcon.tsx +17 -0
  122. package/src/components/trip-cards/assets/CalendarIcon.tsx +17 -0
  123. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +20 -0
  124. package/src/components/trip-cards/assets/LocationIcon.tsx +17 -0
  125. package/src/components/trip-cards/assets/MoonIcon.tsx +17 -0
  126. package/src/components/trip-cards/assets/index.ts +7 -0
  127. package/src/components/trip-cards/helpers.ts +181 -0
  128. package/src/components/trip-cards/index.tsx +120 -0
  129. package/src/components/trip-cards/mockData.ts +345 -0
  130. package/src/components/trip-cards/skeletonStyles.ts +46 -0
  131. package/src/components/trip-cards/styles.ts +450 -0
  132. package/src/components/trip-cards/types.ts +130 -0
  133. package/src/index.ts +2 -0
  134. package/src/utils/cookie.ts +8 -0
  135. package/dist/components/social-embed/components/FacebookComponent.d.ts +0 -6
  136. package/dist/components/social-embed/components/FacebookComponent.js +0 -74
  137. package/src/components/social-embed/components/FacebookComponent.tsx +0 -93
@@ -0,0 +1,221 @@
1
+ import { transformApiResult, fetchCruiseCards } from '../helpers';
2
+ const mockApiResult = {
3
+ post_id: 34246,
4
+ cruise_id: 2074350,
5
+ cruise_title: 'Mediterranean from Barcelona',
6
+ cruise_line: {
7
+ name: 'MSC Cruises',
8
+ link: 'https://example.com/cruise-lines/msc-cruises/',
9
+ logo: 'https://example.com/msc-logo.png'
10
+ },
11
+ ship: {
12
+ name: 'MSC Seaside',
13
+ link: 'https://example.com/ships/msc-seaside/',
14
+ image: 'https://example.com/ship-image.jpg'
15
+ },
16
+ departs: '2025-10-21',
17
+ ends: '2025-10-28',
18
+ date_label: 'Oct 21 - Oct 28, 2025',
19
+ destination: ['Mediterranean'],
20
+ duration: 7,
21
+ itinerary: ['Barcelona', 'Naples', 'Rome', 'Marseille'],
22
+ prices: {
23
+ cheapest_price: 2000,
24
+ inside: 'Enquire now',
25
+ outside: 'Enquire now',
26
+ balcony: '2000',
27
+ suite: 'Enquire now'
28
+ },
29
+ was_prices: {
30
+ inside: 0,
31
+ outside: 0,
32
+ balcony: 2500,
33
+ suite: 0
34
+ },
35
+ link: 'https://example.com/cruises/mediterranean-from-barcelona',
36
+ campaigns: ['Special Offer'],
37
+ extras: {
38
+ date: 'Oct 2025 - Oct 2025',
39
+ duration: 'Seven Days',
40
+ destination: 'Mediterranean',
41
+ info: 'Seven nights onboard a four-star ship'
42
+ }
43
+ };
44
+ describe('transformApiResult', () => {
45
+ it('transforms API result to TripCardApiData format', () => {
46
+ const result = transformApiResult(mockApiResult);
47
+ expect(result).toEqual({
48
+ cruise_id: '2074350',
49
+ image: 'https://example.com/ship-image.jpg',
50
+ offer_label: 'Special Offer',
51
+ headline: 'Mediterranean from Barcelona',
52
+ date: 'Oct 2025 - Oct 2025',
53
+ duration: 'Seven Days',
54
+ route: 'Barcelona → Marseille',
55
+ ship: 'MSC Seaside',
56
+ original_price: '£2500',
57
+ price: '£2000',
58
+ logo: 'https://example.com/msc-logo.png',
59
+ logo_url: 'https://example.com/cruise-lines/msc-cruises/',
60
+ logo_name: 'MSC Cruises',
61
+ cta_url: 'https://example.com/cruises/mediterranean-from-barcelona',
62
+ cta_text: 'View Itinerary'
63
+ });
64
+ });
65
+ it('formats price as "Enquire now" when price is 0', () => {
66
+ const resultWithZeroPrice = {
67
+ ...mockApiResult,
68
+ prices: { ...mockApiResult.prices, cheapest_price: 0 }
69
+ };
70
+ const result = transformApiResult(resultWithZeroPrice);
71
+ expect(result.price).toBe('Enquire now');
72
+ });
73
+ it('formats price as "Enquire now" when price is "Enquire now"', () => {
74
+ const resultWithEnquire = {
75
+ ...mockApiResult,
76
+ prices: { ...mockApiResult.prices, cheapest_price: 'Enquire now' }
77
+ };
78
+ const result = transformApiResult(resultWithEnquire);
79
+ expect(result.price).toBe('Enquire now');
80
+ });
81
+ it('formats numeric price with £ symbol', () => {
82
+ const result = transformApiResult(mockApiResult);
83
+ expect(result.price).toBe('£2000');
84
+ });
85
+ it('returns undefined original_price when was_price is 0', () => {
86
+ const resultWithZeroWasPrice = {
87
+ ...mockApiResult,
88
+ was_prices: { ...mockApiResult.was_prices, balcony: 0 }
89
+ };
90
+ const result = transformApiResult(resultWithZeroWasPrice);
91
+ expect(result.original_price).toBeUndefined();
92
+ });
93
+ it('returns undefined original_price when was_price is "Enquire now"', () => {
94
+ const resultWithEnquireWasPrice = {
95
+ ...mockApiResult,
96
+ was_prices: { ...mockApiResult.was_prices, balcony: 0 },
97
+ prices: {
98
+ ...mockApiResult.prices,
99
+ cheapest_price: 'Enquire now',
100
+ balcony: 'Enquire now'
101
+ }
102
+ };
103
+ const result = transformApiResult(resultWithEnquireWasPrice);
104
+ expect(result.original_price).toBeUndefined();
105
+ });
106
+ it('formats route with start and end for long itineraries', () => {
107
+ const result = transformApiResult(mockApiResult);
108
+ expect(result.route).toBe('Barcelona → Marseille');
109
+ });
110
+ it('formats route with all stops for short itineraries', () => {
111
+ const resultWithShortItinerary = {
112
+ ...mockApiResult,
113
+ itinerary: ['Barcelona', 'Rome']
114
+ };
115
+ const result = transformApiResult(resultWithShortItinerary);
116
+ expect(result.route).toBe('Barcelona → Rome');
117
+ });
118
+ it('returns undefined offer_label when no campaigns', () => {
119
+ const resultWithNoCampaigns = {
120
+ ...mockApiResult,
121
+ campaigns: []
122
+ };
123
+ const result = transformApiResult(resultWithNoCampaigns);
124
+ expect(result.offer_label).toBeUndefined();
125
+ });
126
+ it('uses data from extras object', () => {
127
+ const result = transformApiResult(mockApiResult);
128
+ expect(result.date).toBe('Oct 2025 - Oct 2025');
129
+ expect(result.duration).toBe('Seven Days');
130
+ });
131
+ it('handles string prices correctly', () => {
132
+ const resultWithStringPrice = {
133
+ ...mockApiResult,
134
+ prices: { ...mockApiResult.prices, cheapest_price: '£1500pp' }
135
+ };
136
+ const result = transformApiResult(resultWithStringPrice);
137
+ expect(result.price).toBe('£1500pp');
138
+ });
139
+ });
140
+ describe('fetchCruiseCards', () => {
141
+ beforeEach(() => {
142
+ global.fetch = jest.fn();
143
+ });
144
+ afterEach(() => {
145
+ jest.resetAllMocks();
146
+ });
147
+ it('filters out offers with past departure dates', async () => {
148
+ const futureDate = new Date();
149
+ futureDate.setFullYear(futureDate.getFullYear() + 1);
150
+ const futureDateString = futureDate.toISOString().split('T')[0];
151
+ const validOffer = {
152
+ ...mockApiResult,
153
+ cruise_id: 1,
154
+ departs: futureDateString // Future date
155
+ };
156
+ const pastOffer = {
157
+ ...mockApiResult,
158
+ cruise_id: 2,
159
+ departs: '2024-01-01' // Past date
160
+ };
161
+ const mockResponse = {
162
+ results: [validOffer, pastOffer]
163
+ };
164
+ global.fetch.mockResolvedValueOnce({
165
+ ok: true,
166
+ json: async () => mockResponse
167
+ });
168
+ const result = await fetchCruiseCards([1, 2]);
169
+ // Should only include the valid offer with future date
170
+ expect(result).toHaveLength(1);
171
+ expect(result[0]).toBeDefined();
172
+ expect(result[0].cruise_id).toBe('1');
173
+ });
174
+ it('filters out offers with invalid date format', async () => {
175
+ const futureDate = new Date();
176
+ futureDate.setFullYear(futureDate.getFullYear() + 1);
177
+ const futureDateString = futureDate.toISOString().split('T')[0];
178
+ const validOffer = {
179
+ ...mockApiResult,
180
+ cruise_id: 1,
181
+ departs: futureDateString
182
+ };
183
+ const invalidDateOffer = {
184
+ ...mockApiResult,
185
+ cruise_id: 2,
186
+ departs: 'invalid-date'
187
+ };
188
+ const mockResponse = {
189
+ results: [validOffer, invalidDateOffer]
190
+ };
191
+ global.fetch.mockResolvedValueOnce({
192
+ ok: true,
193
+ json: async () => mockResponse
194
+ });
195
+ const result = await fetchCruiseCards([1, 2]);
196
+ expect(result).toHaveLength(1);
197
+ expect(result[0]).toBeDefined();
198
+ expect(result[0].cruise_id).toBe('1');
199
+ });
200
+ it('includes offers departing today', async () => {
201
+ const today = new Date();
202
+ const todayString = today.toISOString().split('T')[0];
203
+ const todayOffer = {
204
+ ...mockApiResult,
205
+ cruise_id: 1,
206
+ departs: todayString
207
+ };
208
+ const mockResponse = {
209
+ results: [todayOffer]
210
+ };
211
+ global.fetch.mockResolvedValueOnce({
212
+ ok: true,
213
+ json: async () => mockResponse
214
+ });
215
+ const result = await fetchCruiseCards([1]);
216
+ expect(result).toHaveLength(1);
217
+ expect(result[0]).toBeDefined();
218
+ expect(result[0].cruise_id).toBe('1');
219
+ });
220
+ });
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9fX3Rlc3RzX18vaGVscGVycy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSxNQUFNLGFBQWEsR0FBb0I7SUFDckMsT0FBTyxFQUFFLEtBQUs7SUFDZCxTQUFTLEVBQUUsT0FBTztJQUNsQixZQUFZLEVBQUUsOEJBQThCO0lBQzVDLFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSwrQ0FBK0M7UUFDckQsSUFBSSxFQUFFLGtDQUFrQztLQUN6QztJQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSx3Q0FBd0M7UUFDOUMsS0FBSyxFQUFFLG9DQUFvQztLQUM1QztJQUNELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLElBQUksRUFBRSxZQUFZO0lBQ2xCLFVBQVUsRUFBRSx1QkFBdUI7SUFDbkMsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQzlCLFFBQVEsRUFBRSxDQUFDO0lBQ1gsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3ZELE1BQU0sRUFBRTtRQUNOLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsS0FBSyxFQUFFLGFBQWE7S0FDckI7SUFDRCxVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLElBQUk7UUFDYixLQUFLLEVBQUUsQ0FBQztLQUNUO0lBQ0QsSUFBSSxFQUFFLDBEQUEwRDtJQUNoRSxT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
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';