@times-components/ts-components 1.145.1-cfea81c4084e6f91221ea00fec9fc730d5b933cb.4 → 1.145.1-e871182934034874ea6a75e1e684090e5504df44.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/travel-mini-cta/index.d.ts +3 -0
- package/dist/components/travel-mini-cta/index.js +86 -0
- package/dist/components/travel-mini-cta/styles.d.ts +42 -0
- package/dist/components/travel-mini-cta/styles.js +273 -0
- package/dist/components/travel-mini-cta/travel-mini-cta.stories.d.ts +110 -0
- package/dist/components/travel-mini-cta/travel-mini-cta.stories.js +121 -0
- package/dist/components/travel-mini-cta/types.d.ts +10 -0
- package/dist/components/{trip-cards → travel-mini-cta}/types.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/utils/applyDarkMode.d.ts +1 -0
- package/dist/utils/applyDarkMode.js +12 -0
- package/dist/utils/getMediaQuery.d.ts +11 -0
- package/dist/utils/getMediaQuery.js +19 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/package.json +3 -3
- package/rnw.js +1 -1
- package/src/components/travel-mini-cta/index.tsx +164 -0
- package/src/components/travel-mini-cta/styles.ts +336 -0
- package/src/components/travel-mini-cta/travel-mini-cta.stories.tsx +157 -0
- package/src/components/travel-mini-cta/types.ts +10 -0
- package/src/index.ts +1 -2
- package/src/utils/applyDarkMode.ts +12 -0
- package/src/utils/getMediaQuery.ts +25 -0
- package/src/utils/index.ts +2 -0
- package/dist/components/carousel-component/CarouselComponent.stories.d.ts +0 -1
- package/dist/components/carousel-component/CarouselComponent.stories.js +0 -146
- package/dist/components/carousel-component/CarouselItem.d.ts +0 -3
- package/dist/components/carousel-component/CarouselItem.js +0 -11
- package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +0 -8
- package/dist/components/carousel-component/DefaultNavigationArrow.js +0 -6
- package/dist/components/carousel-component/DefaultPageDot.d.ts +0 -8
- package/dist/components/carousel-component/DefaultPageDot.js +0 -4
- package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +0 -1
- package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +0 -163
- package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +0 -1
- package/dist/components/carousel-component/__tests__/CarouselItem.test.js +0 -80
- package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +0 -1
- package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +0 -62
- package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +0 -1
- package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +0 -68
- package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +0 -1
- package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +0 -314
- package/dist/components/carousel-component/hooks/useCarousel.d.ts +0 -2
- package/dist/components/carousel-component/hooks/useCarousel.js +0 -140
- package/dist/components/carousel-component/index.d.ts +0 -4
- package/dist/components/carousel-component/index.js +0 -20
- package/dist/components/carousel-component/styles.d.ts +0 -30
- package/dist/components/carousel-component/styles.js +0 -120
- package/dist/components/carousel-component/types.d.ts +0 -46
- package/dist/components/carousel-component/types.js +0 -2
- package/dist/components/trip-cards/SkeletonCard.d.ts +0 -2
- package/dist/components/trip-cards/SkeletonCard.js +0 -21
- package/dist/components/trip-cards/TripCard.d.ts +0 -3
- package/dist/components/trip-cards/TripCard.js +0 -47
- package/dist/components/trip-cards/TripCards.stories.d.ts +0 -1
- package/dist/components/trip-cards/TripCards.stories.js +0 -40
- package/dist/components/trip-cards/TripCardsLayout.d.ts +0 -3
- package/dist/components/trip-cards/TripCardsLayout.js +0 -26
- package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +0 -139
- package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/TripCard.test.js +0 -95
- package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +0 -277
- package/dist/components/trip-cards/__tests__/assets.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/assets.test.js +0 -165
- package/dist/components/trip-cards/__tests__/helpers.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/helpers.test.js +0 -135
- package/dist/components/trip-cards/__tests__/index.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/index.test.js +0 -437
- package/dist/components/trip-cards/__tests__/mockData.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/mockData.test.js +0 -57
- package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +0 -1
- package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +0 -194
- package/dist/components/trip-cards/assets/BoatIcon.d.ts +0 -1
- package/dist/components/trip-cards/assets/BoatIcon.js +0 -4
- package/dist/components/trip-cards/assets/CalendarIcon.d.ts +0 -1
- package/dist/components/trip-cards/assets/CalendarIcon.js +0 -4
- package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +0 -1
- package/dist/components/trip-cards/assets/ChevronRightIcon.js +0 -4
- package/dist/components/trip-cards/assets/LocationIcon.d.ts +0 -1
- package/dist/components/trip-cards/assets/LocationIcon.js +0 -4
- package/dist/components/trip-cards/assets/MoonIcon.d.ts +0 -1
- package/dist/components/trip-cards/assets/MoonIcon.js +0 -4
- package/dist/components/trip-cards/assets/index.d.ts +0 -6
- package/dist/components/trip-cards/assets/index.js +0 -7
- package/dist/components/trip-cards/helpers.d.ts +0 -4
- package/dist/components/trip-cards/helpers.js +0 -74
- package/dist/components/trip-cards/index.d.ts +0 -4
- package/dist/components/trip-cards/index.js +0 -70
- package/dist/components/trip-cards/mockData.d.ts +0 -3
- package/dist/components/trip-cards/mockData.js +0 -323
- package/dist/components/trip-cards/skeletonStyles.d.ts +0 -9
- package/dist/components/trip-cards/skeletonStyles.js +0 -37
- package/dist/components/trip-cards/styles.d.ts +0 -39
- package/dist/components/trip-cards/styles.js +0 -387
- package/dist/components/trip-cards/types.d.ts +0 -87
- package/src/components/carousel-component/CarouselComponent.stories.tsx +0 -220
- package/src/components/carousel-component/CarouselItem.tsx +0 -20
- package/src/components/carousel-component/DefaultNavigationArrow.tsx +0 -37
- package/src/components/carousel-component/DefaultPageDot.tsx +0 -20
- package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +0 -259
- package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +0 -140
- package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +0 -153
- package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +0 -105
- package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +0 -438
- package/src/components/carousel-component/hooks/useCarousel.ts +0 -187
- package/src/components/carousel-component/index.tsx +0 -88
- package/src/components/carousel-component/styles.ts +0 -140
- package/src/components/carousel-component/types.ts +0 -51
- package/src/components/trip-cards/SkeletonCard.tsx +0 -54
- package/src/components/trip-cards/TripCard.tsx +0 -135
- package/src/components/trip-cards/TripCards.stories.tsx +0 -67
- package/src/components/trip-cards/TripCardsLayout.tsx +0 -75
- package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +0 -169
- package/src/components/trip-cards/__tests__/TripCard.test.tsx +0 -120
- package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +0 -532
- package/src/components/trip-cards/__tests__/assets.test.tsx +0 -206
- package/src/components/trip-cards/__tests__/helpers.test.ts +0 -165
- package/src/components/trip-cards/__tests__/index.test.tsx +0 -499
- package/src/components/trip-cards/__tests__/mockData.test.ts +0 -67
- package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +0 -256
- package/src/components/trip-cards/assets/BoatIcon.tsx +0 -17
- package/src/components/trip-cards/assets/CalendarIcon.tsx +0 -17
- package/src/components/trip-cards/assets/ChevronRightIcon.tsx +0 -20
- package/src/components/trip-cards/assets/LocationIcon.tsx +0 -17
- package/src/components/trip-cards/assets/MoonIcon.tsx +0 -17
- package/src/components/trip-cards/assets/index.ts +0 -7
- package/src/components/trip-cards/helpers.ts +0 -99
- package/src/components/trip-cards/index.tsx +0 -104
- package/src/components/trip-cards/mockData.ts +0 -351
- package/src/components/trip-cards/skeletonStyles.ts +0 -46
- package/src/components/trip-cards/styles.ts +0 -426
- package/src/components/trip-cards/types.ts +0 -91
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { render } from '@testing-library/react';
|
|
3
|
-
import '@testing-library/jest-dom';
|
|
4
|
-
import { SkeletonLine, SkeletonHeadline, SkeletonPrice, SkeletonButton } from '../skeletonStyles';
|
|
5
|
-
describe('Skeleton Styles', () => {
|
|
6
|
-
describe('SkeletonLine', () => {
|
|
7
|
-
it('renders with default width', () => {
|
|
8
|
-
const { container } = render(React.createElement(SkeletonLine, null));
|
|
9
|
-
const element = container.firstChild;
|
|
10
|
-
expect(element).toBeInTheDocument();
|
|
11
|
-
});
|
|
12
|
-
it('accepts custom width prop', () => {
|
|
13
|
-
const { container } = render(React.createElement(SkeletonLine, { width: "80px" }));
|
|
14
|
-
const element = container.firstChild;
|
|
15
|
-
expect(element).toBeInTheDocument();
|
|
16
|
-
});
|
|
17
|
-
it('accepts custom marginBottom prop', () => {
|
|
18
|
-
const { container } = render(React.createElement(SkeletonLine, { marginBottom: "4px" }));
|
|
19
|
-
const element = container.firstChild;
|
|
20
|
-
expect(element).toBeInTheDocument();
|
|
21
|
-
});
|
|
22
|
-
it('accepts both width and marginBottom props', () => {
|
|
23
|
-
const { container } = render(React.createElement(SkeletonLine, { width: "60px", marginBottom: "8px" }));
|
|
24
|
-
const element = container.firstChild;
|
|
25
|
-
expect(element).toBeInTheDocument();
|
|
26
|
-
});
|
|
27
|
-
it('renders as a div element', () => {
|
|
28
|
-
const { container } = render(React.createElement(SkeletonLine, null));
|
|
29
|
-
const element = container.firstChild;
|
|
30
|
-
if (element) {
|
|
31
|
-
expect(element.nodeName).toBe('DIV');
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
it('applies skeleton styling', () => {
|
|
35
|
-
const { container } = render(React.createElement(SkeletonLine, null));
|
|
36
|
-
const element = container.firstChild;
|
|
37
|
-
expect(element.className).toMatch(/sc-/);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe('SkeletonHeadline', () => {
|
|
41
|
-
it('renders correctly', () => {
|
|
42
|
-
const { container } = render(React.createElement(SkeletonHeadline, null));
|
|
43
|
-
const element = container.firstChild;
|
|
44
|
-
expect(element).toBeInTheDocument();
|
|
45
|
-
});
|
|
46
|
-
it('renders as a div element', () => {
|
|
47
|
-
const { container } = render(React.createElement(SkeletonHeadline, null));
|
|
48
|
-
const element = container.firstChild;
|
|
49
|
-
if (element) {
|
|
50
|
-
expect(element.nodeName).toBe('DIV');
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
it('has styled component class', () => {
|
|
54
|
-
const { container } = render(React.createElement(SkeletonHeadline, null));
|
|
55
|
-
const element = container.firstChild;
|
|
56
|
-
expect(element.className).toMatch(/sc-/);
|
|
57
|
-
});
|
|
58
|
-
it('accepts className prop', () => {
|
|
59
|
-
const { container } = render(React.createElement(SkeletonHeadline, { className: "custom" }));
|
|
60
|
-
const element = container.firstChild;
|
|
61
|
-
expect(element).toHaveClass('custom');
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('SkeletonPrice', () => {
|
|
65
|
-
it('renders correctly', () => {
|
|
66
|
-
const { container } = render(React.createElement(SkeletonPrice, null));
|
|
67
|
-
const element = container.firstChild;
|
|
68
|
-
expect(element).toBeInTheDocument();
|
|
69
|
-
});
|
|
70
|
-
it('renders as a div element', () => {
|
|
71
|
-
const { container } = render(React.createElement(SkeletonPrice, null));
|
|
72
|
-
const element = container.firstChild;
|
|
73
|
-
if (element) {
|
|
74
|
-
expect(element.nodeName).toBe('DIV');
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
it('has styled component class', () => {
|
|
78
|
-
const { container } = render(React.createElement(SkeletonPrice, null));
|
|
79
|
-
const element = container.firstChild;
|
|
80
|
-
expect(element.className).toMatch(/sc-/);
|
|
81
|
-
});
|
|
82
|
-
it('can be used multiple times', () => {
|
|
83
|
-
const { container } = render(React.createElement(React.Fragment, null,
|
|
84
|
-
React.createElement(SkeletonPrice, null),
|
|
85
|
-
React.createElement(SkeletonPrice, null),
|
|
86
|
-
React.createElement(SkeletonPrice, null)));
|
|
87
|
-
const elements = container.querySelectorAll('div');
|
|
88
|
-
expect(elements.length).toBe(3);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe('SkeletonButton', () => {
|
|
92
|
-
it('renders correctly', () => {
|
|
93
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
|
|
94
|
-
const element = container.firstChild;
|
|
95
|
-
expect(element).toBeInTheDocument();
|
|
96
|
-
});
|
|
97
|
-
it('renders as div when specified', () => {
|
|
98
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
|
|
99
|
-
const element = container.firstChild;
|
|
100
|
-
if (element) {
|
|
101
|
-
expect(element.nodeName).toBe('DIV');
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
it('has styled component class', () => {
|
|
105
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
|
|
106
|
-
const element = container.firstChild;
|
|
107
|
-
expect(element.className).toMatch(/sc-/);
|
|
108
|
-
});
|
|
109
|
-
it('accepts additional props', () => {
|
|
110
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div", "data-testid": "skeleton-button" }));
|
|
111
|
-
const element = container.firstChild;
|
|
112
|
-
expect(element).toHaveAttribute('data-testid', 'skeleton-button');
|
|
113
|
-
});
|
|
114
|
-
it('is not interactive', () => {
|
|
115
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
|
|
116
|
-
const element = container.firstChild;
|
|
117
|
-
if (element) {
|
|
118
|
-
expect(element.nodeName).toBe('DIV');
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe('Skeleton Components Integration', () => {
|
|
123
|
-
it('all skeleton components render together', () => {
|
|
124
|
-
const { container } = render(React.createElement("div", null,
|
|
125
|
-
React.createElement(SkeletonHeadline, null),
|
|
126
|
-
React.createElement(SkeletonLine, { width: "80px" }),
|
|
127
|
-
React.createElement(SkeletonPrice, null),
|
|
128
|
-
React.createElement(SkeletonButton, { as: "div" })));
|
|
129
|
-
// Verify all components are present (4 skeleton components + 1 wrapper div = 5 divs minimum)
|
|
130
|
-
const elements = container.querySelectorAll('div');
|
|
131
|
-
expect(elements.length).toBeGreaterThanOrEqual(5);
|
|
132
|
-
});
|
|
133
|
-
it('skeleton components maintain consistent styling', () => {
|
|
134
|
-
const { container } = render(React.createElement("div", null,
|
|
135
|
-
React.createElement(SkeletonLine, null),
|
|
136
|
-
React.createElement(SkeletonHeadline, null),
|
|
137
|
-
React.createElement(SkeletonPrice, null)));
|
|
138
|
-
const styledElements = container.querySelectorAll('[class*="sc-"]');
|
|
139
|
-
expect(styledElements.length).toBeGreaterThanOrEqual(3);
|
|
140
|
-
});
|
|
141
|
-
it('skeleton components are div elements by default', () => {
|
|
142
|
-
const { container } = render(React.createElement("div", null,
|
|
143
|
-
React.createElement(SkeletonLine, null),
|
|
144
|
-
React.createElement(SkeletonHeadline, null),
|
|
145
|
-
React.createElement(SkeletonPrice, null)));
|
|
146
|
-
const divs = Array.from(container.querySelectorAll('div'));
|
|
147
|
-
expect(divs.length).toBeGreaterThanOrEqual(4);
|
|
148
|
-
});
|
|
149
|
-
it('props are correctly applied to skeleton components', () => {
|
|
150
|
-
const { container } = render(React.createElement("div", null,
|
|
151
|
-
React.createElement(SkeletonLine, { width: "50px", marginBottom: "10px" }),
|
|
152
|
-
React.createElement(SkeletonButton, { as: "div", className: "btn-skeleton" })));
|
|
153
|
-
const elements = container.querySelectorAll('div');
|
|
154
|
-
expect(elements.length).toBeGreaterThanOrEqual(2);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe('Styled Components Structure', () => {
|
|
158
|
-
it('SkeletonLine has correct structure', () => {
|
|
159
|
-
const { container } = render(React.createElement(SkeletonLine, null));
|
|
160
|
-
expect(container.firstChild).toBeTruthy();
|
|
161
|
-
});
|
|
162
|
-
it('SkeletonHeadline has correct structure', () => {
|
|
163
|
-
const { container } = render(React.createElement(SkeletonHeadline, null));
|
|
164
|
-
expect(container.firstChild).toBeTruthy();
|
|
165
|
-
});
|
|
166
|
-
it('SkeletonPrice has correct structure', () => {
|
|
167
|
-
const { container } = render(React.createElement(SkeletonPrice, null));
|
|
168
|
-
expect(container.firstChild).toBeTruthy();
|
|
169
|
-
});
|
|
170
|
-
it('SkeletonButton has correct structure', () => {
|
|
171
|
-
const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
|
|
172
|
-
expect(container.firstChild).toBeTruthy();
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
describe('Props and Variants', () => {
|
|
176
|
-
it('SkeletonLine with different widths', () => {
|
|
177
|
-
const { rerender, container } = render(React.createElement(SkeletonLine, { width: "20px" }));
|
|
178
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
179
|
-
rerender(React.createElement(SkeletonLine, { width: "100px" }));
|
|
180
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
181
|
-
rerender(React.createElement(SkeletonLine, { width: "50%" }));
|
|
182
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
183
|
-
});
|
|
184
|
-
it('SkeletonLine with different margins', () => {
|
|
185
|
-
const { rerender, container } = render(React.createElement(SkeletonLine, { marginBottom: "2px" }));
|
|
186
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
187
|
-
rerender(React.createElement(SkeletonLine, { marginBottom: "8px" }));
|
|
188
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
189
|
-
rerender(React.createElement(SkeletonLine, { marginBottom: "16px" }));
|
|
190
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b25TdHlsZXMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvX190ZXN0c19fL3NrZWxldG9uU3R5bGVzLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTywyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsY0FBYyxFQUNmLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsb0JBQUMsWUFBWSxPQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtZQUNuQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksSUFBQyxLQUFLLEVBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM1RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFB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LEVBQUU7WUFDN0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQ3BDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsS0FBSyxHQUFHLENBQ3BDLENBQUM7WUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFakQsUUFBUSxDQUFDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFakQsUUFBUSxDQUFDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const BoatIcon: (props: any) => JSX.Element;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export const BoatIcon = (props) => (React.createElement("svg", Object.assign({ width: "15", height: "16", viewBox: "0 0 15 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
3
|
-
React.createElement("path", { d: "M2.78887 3.51093V6.29999L6.98887 4.92187L11.1889 6.29999V3.51093H2.78887ZM1.34512 12.6L0.0326173 7.94062C0.0107423 7.89687 -0.000195216 7.82031 -0.000195216 7.71093C-0.000195216 7.40468 0.163867 7.18593 0.491992 7.05468L1.37793 6.75937V3.51093C1.37793 3.13906 1.52012 2.81093 1.80449 2.52656C2.08887 2.24218 2.41699 2.09999 2.78887 2.09999H4.88887V-7.20099e-06H9.08887V2.09999H11.1889C11.5607 2.09999 11.8889 2.24218 12.1732 2.52656C12.4576 2.81093 12.5998 3.13906 12.5998 3.51093V6.75937L13.4857 7.05468C13.9451 7.20781 14.0982 7.50312 13.9451 7.94062L12.6326 12.6H12.5998C11.5279 12.6 10.5873 12.1406 9.77793 11.2219C8.96856 12.1406 8.03887 12.6 6.98887 12.6C5.93887 12.6 5.00918 12.1406 4.19981 11.2219C3.39043 12.1406 2.4498 12.6 1.37793 12.6H1.34512ZM12.5998 14.0109H13.9779V15.4219H12.5998C11.6154 15.4219 10.6748 15.1922 9.77793 14.7328C8.90293 15.1703 7.97324 15.3891 6.98887 15.3891C6.00449 15.3891 5.07481 15.1703 4.19981 14.7328C3.30293 15.1922 2.3623 15.4219 1.37793 15.4219H-0.000195216V14.0109H1.37793C2.38418 14.0109 3.32481 13.7047 4.19981 13.0922C5.05293 13.6828 5.98262 13.9781 6.98887 13.9781C7.99512 13.9781 8.92481 13.6828 9.77793 13.0922C10.6529 13.7047 11.5936 14.0109 12.5998 14.0109Z", fill: "currentColor" })));
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9hdEljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9Cb2F0SWNvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUN0QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsMHJDQUEwckMsRUFDNXJDLElBQUksRUFBQyxjQUFjLEdBQ25CLENBQ0UsQ0FDUCxDQUFDIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const CalendarIcon: (props: any) => JSX.Element;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export const CalendarIcon = (props) => (React.createElement("svg", Object.assign({ width: "13", height: "14", viewBox: "0 0 13 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
3
|
-
React.createElement("path", { d: "M11.189 12.6V4.88907H1.41084V12.6H11.189ZM11.189 1.37813C11.5608 1.37813 11.889 1.52032 12.1733 1.80469C12.4577 2.08907 12.5999 2.41719 12.5999 2.78907V12.6C12.5999 12.9719 12.4577 13.3 12.1733 13.5844C11.889 13.8469 11.5608 13.9781 11.189 13.9781H1.41084C1.01709 13.9781 0.678028 13.8469 0.393653 13.5844C0.131152 13.3219 -9.75132e-05 12.9938 -9.75132e-05 12.6V2.78907C-9.75132e-05 2.41719 0.131152 2.08907 0.393653 1.80469C0.678028 1.52032 1.01709 1.37813 1.41084 1.37813H2.0999V5.05522e-06H3.51084V1.37813H9.08897V5.05522e-06H10.4999V1.37813H11.189ZM9.81084 6.30001V7.67813H8.3999V6.30001H9.81084ZM6.98897 6.30001V7.67813H5.61084V6.30001H6.98897ZM4.1999 6.30001V7.67813H2.78897V6.30001H4.1999Z", fill: "currentColor" })));
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXJJY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9hc3NldHMvQ2FsZW5kYXJJY29uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQzFDLDJDQUNFLEtBQUssRUFBQyxJQUFJLEVBQ1YsTUFBTSxFQUFDLElBQUksRUFDWCxPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLEtBQUssRUFBQyw0QkFBNEIsSUFDOUIsS0FBSztJQUVULDhCQUNFLENBQUMsRUFBQywwckJBQTByQixFQUM1ckIsSUFBSSxFQUFDLGNBQWMsR0FDbkIsQ0FDRSxDQUNQLENBQUMifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const ChevronRightIcon: (props: any) => JSX.Element;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export const ChevronRightIcon = (props) => (React.createElement("svg", Object.assign({ width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
3
|
-
React.createElement("path", { d: "M6 12L10 8L6 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })));
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hldnJvblJpZ2h0SWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvYXNzZXRzL0NoZXZyb25SaWdodEljb24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUM5QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQ2xCLE1BQU0sRUFBQyxjQUFjLEVBQ3JCLFdBQVcsRUFBQyxLQUFLLEVBQ2pCLGFBQWEsRUFBQyxPQUFPLEVBQ3JCLGNBQWMsRUFBQyxPQUFPLEdBQ3RCLENBQ0UsQ0FDUCxDQUFDIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const LocationIcon: (props: any) => JSX.Element;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export const LocationIcon = (props) => (React.createElement("svg", Object.assign({ width: "10", height: "14", viewBox: "0 0 10 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
3
|
-
React.createElement("path", { d: "M3.64238 6.13594C3.99238 6.46407 4.40801 6.62813 4.88926 6.62813C5.37051 6.62813 5.7752 6.46407 6.10332 6.13594C6.45332 5.78594 6.62832 5.37032 6.62832 4.88907C6.62832 4.40782 6.45332 4.00313 6.10332 3.67501C5.7752 3.32501 5.37051 3.15001 4.88926 3.15001C4.40801 3.15001 3.99238 3.32501 3.64238 3.67501C3.31426 4.00313 3.1502 4.40782 3.1502 4.88907C3.1502 5.37032 3.31426 5.78594 3.64238 6.13594ZM1.41113 1.44376C2.37363 0.481255 3.53301 5.05522e-06 4.88926 5.05522e-06C6.24551 5.05522e-06 7.39395 0.481255 8.33457 1.44376C9.29707 2.38438 9.77832 3.53282 9.77832 4.88907C9.77832 5.56719 9.60332 6.34376 9.25332 7.21876C8.9252 8.09376 8.52051 8.91407 8.03926 9.67969C7.55801 10.4453 7.07676 11.1672 6.59551 11.8453C6.13613 12.5016 5.74238 13.0266 5.41426 13.4203L4.88926 13.9781C4.75801 13.825 4.58301 13.6281 4.36426 13.3875C4.14551 13.125 3.75176 12.6219 3.18301 11.8781C2.61426 11.1125 2.11113 10.3797 1.67363 9.67969C1.25801 8.95782 0.875196 8.14844 0.525196 7.25157C0.175196 6.35469 0.000195552 5.56719 0.000195552 4.88907C0.000195552 3.53282 0.470508 2.38438 1.41113 1.44376Z", fill: "currentColor" })));
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYXRpb25JY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9hc3NldHMvTG9jYXRpb25JY29uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQzFDLDJDQUNFLEtBQUssRUFBQyxJQUFJLEVBQ1YsTUFBTSxFQUFDLElBQUksRUFDWCxPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLEtBQUssRUFBQyw0QkFBNEIsSUFDOUIsS0FBSztJQUVULDhCQUNFLENBQUMsRUFBQywwakNBQTBqQyxFQUM1akMsSUFBSSxFQUFDLGNBQWMsR0FDbkIsQ0FDRSxDQUNQLENBQUMifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const MoonIcon: (props: any) => JSX.Element;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export const MoonIcon = (props) => (React.createElement("svg", Object.assign({ width: "14", height: "15", viewBox: "0 0 14 15", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
3
|
-
React.createElement("path", { d: "M7.21856 0.0656178C6.69356 0.984368 6.38731 1.92499 6.29981 2.88749C6.21231 3.84999 6.31074 4.77968 6.59512 5.67656C6.90137 6.57343 7.36074 7.38281 7.97324 8.10468C8.58574 8.82656 9.31856 9.40624 10.1717 9.84374C11.0467 10.2812 12.0092 10.5109 13.0592 10.5328C12.6436 11.2328 12.1295 11.8453 11.517 12.3703C10.9045 12.8953 10.2154 13.3109 9.44981 13.6172C8.68418 13.9016 7.86387 14.0437 6.98887 14.0437C6.02637 14.0437 5.11856 13.8687 4.26543 13.5187C3.43418 13.1469 2.69043 12.6437 2.03418 12.0094C1.3998 11.3531 0.89668 10.6094 0.524805 9.77812C0.174805 8.92499 -0.000195216 8.01718 -0.000195216 7.05468C-0.000195216 6.07031 0.185742 5.15156 0.557617 4.29843C0.929492 3.44531 1.44355 2.70156 2.0998 2.06718C2.75605 1.41093 3.52168 0.907805 4.39668 0.557805C5.27168 0.18593 6.21231 0.0218678 7.21856 0.0656178Z", fill: "currentColor" })));
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9vbkljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9Nb29uSWNvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUN0QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsNnlCQUE2eUIsRUFDL3lCLElBQUksRUFBQyxjQUFjLEdBQ25CLENBQ0UsQ0FDUCxDQUFDIn0=
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { BoatIcon } from './BoatIcon';
|
|
2
|
-
import { CalendarIcon } from './CalendarIcon';
|
|
3
|
-
import { ChevronRightIcon } from './ChevronRightIcon';
|
|
4
|
-
import { LocationIcon } from './LocationIcon';
|
|
5
|
-
import { MoonIcon } from './MoonIcon';
|
|
6
|
-
export { BoatIcon, LocationIcon, CalendarIcon, MoonIcon, ChevronRightIcon };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BoatIcon } from './BoatIcon';
|
|
2
|
-
import { CalendarIcon } from './CalendarIcon';
|
|
3
|
-
import { ChevronRightIcon } from './ChevronRightIcon';
|
|
4
|
-
import { LocationIcon } from './LocationIcon';
|
|
5
|
-
import { MoonIcon } from './MoonIcon';
|
|
6
|
-
export { BoatIcon, LocationIcon, CalendarIcon, MoonIcon, ChevronRightIcon };
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMifQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { TripCardApiData, ApiCruiseResult } from './types';
|
|
2
|
-
export declare const transformApiResult: (result: ApiCruiseResult) => TripCardApiData;
|
|
3
|
-
export declare const decodeIds: (encoded: string) => number[];
|
|
4
|
-
export declare const fetchCruiseCards: (cruiseIds: number[]) => Promise<TripCardApiData[]>;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
const decodeHtmlEntities = (text) => {
|
|
2
|
-
const textarea = document.createElement('textarea');
|
|
3
|
-
textarea.innerHTML = text;
|
|
4
|
-
return textarea.value;
|
|
5
|
-
};
|
|
6
|
-
export const transformApiResult = (result) => {
|
|
7
|
-
const formatPrice = (price) => {
|
|
8
|
-
if (price === 0 || price === 'Enquire now') {
|
|
9
|
-
return 'Enquire now';
|
|
10
|
-
}
|
|
11
|
-
return typeof price === 'string' ? price : `£${price}`;
|
|
12
|
-
};
|
|
13
|
-
const formatRoute = (itinerary) => {
|
|
14
|
-
if (itinerary.length <= 2) {
|
|
15
|
-
return itinerary.join(' → ');
|
|
16
|
-
}
|
|
17
|
-
return `${itinerary[0]} → ${itinerary[itinerary.length - 1]}`;
|
|
18
|
-
};
|
|
19
|
-
const formatOriginalPrice = (wasPrice) => {
|
|
20
|
-
if (!wasPrice || wasPrice === 0 || wasPrice === 'Enquire now') {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
return typeof wasPrice === 'string' ? wasPrice : `£${wasPrice}`;
|
|
24
|
-
};
|
|
25
|
-
return {
|
|
26
|
-
cruise_id: String(result.cruise_id),
|
|
27
|
-
image: result.ship.image,
|
|
28
|
-
offer_label: result.campaigns.length > 0 ? result.campaigns[0] : undefined,
|
|
29
|
-
headline: decodeHtmlEntities(result.cruise_title),
|
|
30
|
-
date: result.extras.date,
|
|
31
|
-
duration: result.extras.duration,
|
|
32
|
-
route: formatRoute(result.itinerary),
|
|
33
|
-
ship: result.ship.name,
|
|
34
|
-
original_price: formatOriginalPrice(result.was_prices.cheapest_price),
|
|
35
|
-
price: formatPrice(result.prices.cheapest_price),
|
|
36
|
-
logo: result.cruise_line.logo,
|
|
37
|
-
logo_url: result.cruise_line.link,
|
|
38
|
-
cta_url: result.link,
|
|
39
|
-
cta_text: 'View Itinerary'
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
export const decodeIds = (encoded) => {
|
|
43
|
-
try {
|
|
44
|
-
const decoded = atob(encoded);
|
|
45
|
-
const data = JSON.parse(decoded);
|
|
46
|
-
if (Array.isArray(data)) {
|
|
47
|
-
return data;
|
|
48
|
-
}
|
|
49
|
-
return [];
|
|
50
|
-
}
|
|
51
|
-
catch (e) {
|
|
52
|
-
// Failed to decode trip card IDs
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
export const fetchCruiseCards = async (cruiseIds) => {
|
|
57
|
-
const formData = new FormData();
|
|
58
|
-
formData.append('action', 'results');
|
|
59
|
-
formData.append('cruise_ids', cruiseIds.join(','));
|
|
60
|
-
const response = await fetch('https://www.staging-thetimes.com/holidays/wp-admin/admin-ajax.php', {
|
|
61
|
-
method: 'POST',
|
|
62
|
-
body: formData
|
|
63
|
-
});
|
|
64
|
-
if (!response.ok) {
|
|
65
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
66
|
-
}
|
|
67
|
-
const data = await response.json();
|
|
68
|
-
if (data.results && Array.isArray(data.results)) {
|
|
69
|
-
const transformedCards = data.results.map((result) => transformApiResult(result));
|
|
70
|
-
return cruiseIds.map(id => transformedCards.find(card => card.cruise_id === String(id)));
|
|
71
|
-
}
|
|
72
|
-
throw new Error('Invalid API response format');
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7SUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsTUFBdUIsRUFDTixFQUFFO0lBQ25CLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBc0IsRUFBVSxFQUFFO1FBQ3JELElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssYUFBYSxFQUFFO1lBQzFDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQW1CLEVBQVUsRUFBRTtRQUNsRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixNQUFNLG1CQUFtQixHQUFHLENBQzFCLFFBQXlCLEVBQ0wsRUFBRTtRQUN0QixJQUFJLENBQUMsUUFBUSxJQUFJLFFB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
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { TripCard } from './TripCard';
|
|
3
|
-
import { SkeletonCard } from './SkeletonCard';
|
|
4
|
-
import { TripCardsLayout } from './TripCardsLayout';
|
|
5
|
-
import { getMockTripCards } from './mockData';
|
|
6
|
-
import { decodeIds, fetchCruiseCards } from './helpers';
|
|
7
|
-
export const TripCards = ({ element, useMockData = false }) => {
|
|
8
|
-
const [cards, setCards] = useState([]);
|
|
9
|
-
const [loading, setLoading] = useState(true);
|
|
10
|
-
const [error, setError] = useState(null);
|
|
11
|
-
const [itemsPerPage, setItemsPerPage] = useState(2);
|
|
12
|
-
const allIds = [...decodeIds(element.tripcards || '')].filter((id, index, self) => self.indexOf(id) === index);
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
const loadCards = async () => {
|
|
15
|
-
if (allIds.length === 0) {
|
|
16
|
-
setLoading(false);
|
|
17
|
-
setError('No valid cruise IDs provided');
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (useMockData) {
|
|
21
|
-
setCards(getMockTripCards(allIds.length));
|
|
22
|
-
setLoading(false);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
const transformedCards = await fetchCruiseCards(allIds);
|
|
27
|
-
setCards(transformedCards);
|
|
28
|
-
}
|
|
29
|
-
catch (e) {
|
|
30
|
-
setError(e instanceof Error ? e.message : 'Failed to load cruises');
|
|
31
|
-
}
|
|
32
|
-
finally {
|
|
33
|
-
setLoading(false);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
loadCards();
|
|
37
|
-
}, [element.tripcards, useMockData]);
|
|
38
|
-
useEffect(() => {
|
|
39
|
-
const handleResize = () => {
|
|
40
|
-
const width = window.innerWidth;
|
|
41
|
-
// sm/xs: < 768px → 1 card per page
|
|
42
|
-
// md/lg/xl: >= 768px → 2 cards per page
|
|
43
|
-
if (width < 768) {
|
|
44
|
-
setItemsPerPage(1);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
setItemsPerPage(2);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
handleResize();
|
|
51
|
-
window.addEventListener('resize', handleResize);
|
|
52
|
-
return () => window.removeEventListener('resize', handleResize);
|
|
53
|
-
}, []);
|
|
54
|
-
if (loading) {
|
|
55
|
-
const skeletonItems = Array.from({ length: allIds.length || 2 }, (_, i) => ({
|
|
56
|
-
id: `skeleton-${i}`
|
|
57
|
-
}));
|
|
58
|
-
return (React.createElement(TripCardsLayout, { element: element, items: skeletonItems, CardComponent: SkeletonCard, itemsPerPage: itemsPerPage }));
|
|
59
|
-
}
|
|
60
|
-
if (error || cards.length === 0) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
const cardItems = cards.map((card, index) => ({
|
|
64
|
-
id: `${card.cruise_id}-${index}`,
|
|
65
|
-
data: card
|
|
66
|
-
}));
|
|
67
|
-
return (React.createElement(TripCardsLayout, { element: element, items: cardItems, CardComponent: TripCard, itemsPerPage: itemsPerPage }));
|
|
68
|
-
};
|
|
69
|
-
export default TripCards;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2luZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFNLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBdUIsQ0FBQyxFQUM1QyxPQUFPLEVBQ1AsV0FBVyxHQUFHLEtBQUssRUFDcEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElB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
|