kupos-ui-components-lib 9.0.6 → 9.0.7
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/README copy.md +67 -223
- package/dist/assets/images/anims/service_list/directo.json +1 -1
- package/dist/assets/images/anims/service_list/priority_stage.json +1 -1
- package/dist/components/ServiceItem/RatingHover.js +31 -31
- package/dist/components/ServiceItem/ServiceItemDesktop.d.ts +1 -1
- package/dist/components/ServiceItem/ServiceItemDesktop.js +263 -125
- package/dist/components/ServiceItem/ServiceItemMobile.js +291 -44
- package/dist/components/ServiceItem/mobileTypes.d.ts +0 -3
- package/dist/components/ServiceItem/types.d.ts +0 -7
- package/dist/styles.css +17 -66
- package/dist/ui/AmenitiesBlock.js +36 -25
- package/dist/ui/DurationBlock.js +2 -2
- package/dist/ui/FlexibleBlock.js +4 -2
- package/dist/ui/PetBlock.js +3 -1
- package/dist/ui/RatingBlock.js +2 -6
- package/package.json +1 -1
- package/src/assets/images/anims/service_list/directo.json +1 -1
- package/src/assets/images/anims/service_list/priority_stage.json +1 -1
- package/src/components/ServiceItem/RatingHover.tsx +51 -51
- package/src/components/ServiceItem/ServiceItemDesktop.tsx +466 -222
- package/src/components/ServiceItem/ServiceItemMobile.tsx +501 -120
- package/src/components/ServiceItem/mobileTypes.ts +0 -3
- package/src/components/ServiceItem/types.ts +0 -7
- package/src/ui/AmenitiesBlock.tsx +15 -34
- package/src/ui/DurationBlock.tsx +2 -2
- package/src/ui/FlexibleBlock.tsx +3 -3
- package/src/ui/PetBlock.tsx +2 -2
- package/src/ui/RatingBlock.tsx +4 -16
- package/src/assets/images/anims/service_list/bomb.json +0 -1
- package/src/ui/BottomAmenities/BottomAmenities.tsx +0 -109
- package/src/ui/ExpendedDropDown/ExpandedDropdown.tsx +0 -85
- package/src/ui/KuposButton/KuposButton.tsx +0 -48
- package/src/ui/SeatSection/SeatSection.tsx +0 -187
- package/src/ui/TopAmenities/TopAmenities.tsx +0 -82
- package/src/ui/mobileweb/BottomAmenitiesMobile.tsx +0 -168
- package/src/ui/mobileweb/DateTimeSectionMobile.tsx +0 -192
- package/src/ui/mobileweb/SeatSectionMobile.tsx +0 -256
- package/src/ui/mobileweb/TopAmenitieMobile.tsx +0 -82
|
@@ -5,7 +5,6 @@ import ModalEventManager from "../../utils/ModalEventManager";
|
|
|
5
5
|
import InternationalServicePopupBody from "../InternationalServicePopupBody";
|
|
6
6
|
import LottiePlayer from "../../assets/LottiePlayer";
|
|
7
7
|
import PeruServiceItemDesktop from "./PeruServiceItemDesktop";
|
|
8
|
-
import ExpandedDropdown from "../../ui/ExpendedDropDown/ExpandedDropdown";
|
|
9
8
|
import promoAnimation from "../../assets/images/anims/service_list/promocion.json";
|
|
10
9
|
import flexibleAnimation from "../../assets/images/anims/service_list/flexible.json";
|
|
11
10
|
import locationAnimation from "../../assets/images/anims/service_list/location.json";
|
|
@@ -16,72 +15,71 @@ import pullmanFlexibleAnimation from "../../assets/images/anims/service_list/pul
|
|
|
16
15
|
import pullmanPetFriendlyAnimation from "../../assets/images/anims/service_list/pullmanPetFriendly.json";
|
|
17
16
|
import pullmanLocationAnimation from "../../assets/images/anims/service_list/pullmanLocation.json";
|
|
18
17
|
import pullmanPriorityStageAnimation from "../../assets/images/anims/service_list/pullmanPriorityStage.json";
|
|
18
|
+
import pullmanPromoAnimation from "../../assets/images/anims/service_list/promocion.json";
|
|
19
|
+
import pullmanDirectoAnimation from "../../assets/images/anims/service_list/directo.json";
|
|
19
20
|
import opsitesFlexibleAnimation from "../../assets/images/anims/service_list/opsitesFlexible.json";
|
|
20
21
|
import opsitesPetFriendlyAnimation from "../../assets/images/anims/service_list/opsitesPetFriendly.json";
|
|
21
22
|
import opsitesLocationAnimation from "../../assets/images/anims/service_list/opsitesLocation.json";
|
|
22
23
|
import opsitesPriorityStageAnimation from "../../assets/images/anims/service_list/opsitesPriorityStage.json";
|
|
23
|
-
import
|
|
24
|
+
import opsitesPromoAnimation from "../../assets/images/anims/service_list/promocion.json";
|
|
25
|
+
import opsitesDirectoAnimation from "../../assets/images/anims/service_list/directo.json";
|
|
26
|
+
import linatalFlexibleAnimation from "../../assets/images/anims/service_list/flexible.json";
|
|
27
|
+
import linatalPromoAnimation from "../../assets/images/anims/service_list/promocion.json";
|
|
28
|
+
import linatalDirectoAnimation from "../../assets/images/anims/service_list/directo.json";
|
|
29
|
+
import linatalPriorityStageAnimation from "../../assets/images/anims/service_list/priority_stage.json";
|
|
30
|
+
import linatalPetFriendlyAnimation from "../../assets/images/anims/service_list/pet_friendly.json";
|
|
31
|
+
import linatalLocationAnimation from "../../assets/images/anims/service_list/location.json";
|
|
24
32
|
import RatingBlock from "../../ui/RatingBlock";
|
|
25
33
|
import DurationBlock from "../../ui/DurationBlock";
|
|
26
34
|
import PetBlock from "../../ui/PetBlock";
|
|
27
35
|
import FlexibleBlock from "../../ui/FlexibleBlock";
|
|
28
36
|
import AmenitiesBlock from "../../ui/AmenitiesBlock";
|
|
29
37
|
import StageTooltip from "../../ui/StagesTooltip";
|
|
30
|
-
import KuposButton from "../../ui/KuposButton/KuposButton";
|
|
31
|
-
import TopAmenities from "../../ui/TopAmenities/TopAmenities";
|
|
32
|
-
import BottomAmenities from "../../ui/BottomAmenities/BottomAmenities";
|
|
33
|
-
import SeatSection from "../../ui/SeatSection/SeatSection";
|
|
34
38
|
const SEAT_EXCEPTIONS = ["Asiento mascota"];
|
|
35
|
-
|
|
36
|
-
promoAnim: {
|
|
37
|
-
kupos: promoAnimation,
|
|
38
|
-
},
|
|
39
|
-
locationAnim: {
|
|
40
|
-
kupos: locationAnimation,
|
|
41
|
-
pullman: pullmanLocationAnimation,
|
|
42
|
-
opsites: opsitesLocationAnimation,
|
|
43
|
-
},
|
|
44
|
-
directoAnim: {
|
|
45
|
-
kupos: directoAnimation,
|
|
46
|
-
},
|
|
47
|
-
petFriendlyAnim: {
|
|
48
|
-
kupos: petFriendlyAnimation,
|
|
49
|
-
pullman: pullmanPetFriendlyAnimation,
|
|
50
|
-
opsites: opsitesPetFriendlyAnimation,
|
|
51
|
-
},
|
|
52
|
-
priorityStageAnim: {
|
|
53
|
-
kupos: priorityStageAnimation,
|
|
54
|
-
pullman: pullmanPriorityStageAnimation,
|
|
55
|
-
opsites: opsitesPriorityStageAnimation,
|
|
56
|
-
},
|
|
57
|
-
flexibleIcon: {
|
|
58
|
-
kupos: flexibleAnimation,
|
|
59
|
-
pullman: pullmanFlexibleAnimation,
|
|
60
|
-
opsites: opsitesFlexibleAnimation,
|
|
61
|
-
},
|
|
62
|
-
bombAnimation: {
|
|
63
|
-
kupos: bombAnimation,
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
const convertTo24Hour = (depTime) => {
|
|
67
|
-
const hasAM = depTime.includes("AM");
|
|
68
|
-
const hasPM = depTime.includes("PM");
|
|
69
|
-
const [timePart] = depTime.split(/AM|PM/).map((part) => part.trim());
|
|
70
|
-
const [hour, minute] = timePart.split(":").map(Number);
|
|
71
|
-
const pad = (n) => (n < 10 ? "0" + n : String(n));
|
|
72
|
-
if (hasAM) {
|
|
73
|
-
return `${pad(hour === 12 ? 0 : hour)}:${pad(minute)}`;
|
|
74
|
-
}
|
|
75
|
-
if (hasPM) {
|
|
76
|
-
return `${hour === 12 ? hour : hour + 12}:${pad(minute)}`;
|
|
77
|
-
}
|
|
78
|
-
return timePart;
|
|
79
|
-
};
|
|
80
|
-
function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, children, busStage, serviceDetailsLoading, cityOrigin, cityDestination, translation, orignLabel, destinationLabel, currencySign, isCiva, showRating, showLastSeats, removeArrivalTime, removeDuplicateSeats, isPeruSites, showAvailableSeats, isSeatIcon, isLinatal, isPeru, t = (key) => key, siteType, isAllinBus, isExpand, setIsExpand, coachKey, }) {
|
|
39
|
+
function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, children, busStage, serviceDetailsLoading, cityOrigin, cityDestination, translation, orignLabel, destinationLabel, currencySign, isCiva, showRating, showLastSeats, removeArrivalTime, removeDuplicateSeats, isPeruSites, showAvailableSeats, isSeatIcon, isLinatal, isPeru, t = (key) => key, siteType, isAllinBus, }) {
|
|
81
40
|
var _a, _b;
|
|
41
|
+
console.log("🚀 ~ ServiceItemPB ~ serviceItem:", serviceItem);
|
|
42
|
+
const animationMap = {
|
|
43
|
+
promoAnim: {
|
|
44
|
+
kupos: promoAnimation,
|
|
45
|
+
pullman: pullmanPromoAnimation,
|
|
46
|
+
opsites: opsitesPromoAnimation,
|
|
47
|
+
linatal: linatalPromoAnimation,
|
|
48
|
+
},
|
|
49
|
+
locationAnim: {
|
|
50
|
+
kupos: locationAnimation,
|
|
51
|
+
pullman: pullmanLocationAnimation,
|
|
52
|
+
opsites: opsitesLocationAnimation,
|
|
53
|
+
linatal: linatalLocationAnimation,
|
|
54
|
+
},
|
|
55
|
+
directoAnim: {
|
|
56
|
+
kupos: directoAnimation,
|
|
57
|
+
pullman: pullmanDirectoAnimation,
|
|
58
|
+
opsites: opsitesDirectoAnimation,
|
|
59
|
+
linatal: linatalDirectoAnimation,
|
|
60
|
+
},
|
|
61
|
+
petFriendlyAnim: {
|
|
62
|
+
kupos: petFriendlyAnimation,
|
|
63
|
+
pullman: pullmanPetFriendlyAnimation,
|
|
64
|
+
opsites: opsitesPetFriendlyAnimation,
|
|
65
|
+
linatal: linatalPetFriendlyAnimation,
|
|
66
|
+
},
|
|
67
|
+
priorityStageAnim: {
|
|
68
|
+
kupos: priorityStageAnimation,
|
|
69
|
+
pullman: pullmanPriorityStageAnimation,
|
|
70
|
+
opsites: opsitesPriorityStageAnimation,
|
|
71
|
+
linatal: linatalPriorityStageAnimation,
|
|
72
|
+
},
|
|
73
|
+
flexibleIcon: {
|
|
74
|
+
kupos: flexibleAnimation,
|
|
75
|
+
pullman: pullmanFlexibleAnimation,
|
|
76
|
+
opsites: opsitesFlexibleAnimation,
|
|
77
|
+
linatal: linatalFlexibleAnimation,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
82
80
|
const getAnimationIcon = (icon) => {
|
|
83
81
|
var _a;
|
|
84
|
-
const animation =
|
|
82
|
+
const animation = animationMap[icon];
|
|
85
83
|
if (!animation)
|
|
86
84
|
return null;
|
|
87
85
|
return (_a = animation[siteType]) !== null && _a !== void 0 ? _a : animation.kupos;
|
|
@@ -100,7 +98,7 @@ function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, child
|
|
|
100
98
|
const iconPath = getIconPath();
|
|
101
99
|
return (React.createElement("img", { src: iconPath, alt: name, style: {
|
|
102
100
|
filter: color === "white" ? "brightness(0) invert(1)" : "",
|
|
103
|
-
}, className:
|
|
101
|
+
}, className: `object-contain ${moreAnemities ? "w-[16px] h-[16px]" : "w-[16px] h-[16px]"}` }));
|
|
104
102
|
};
|
|
105
103
|
const labelId = typeof serviceItem.boarding_stages === "string"
|
|
106
104
|
? serviceItem.boarding_stages.split("|")[0]
|
|
@@ -110,22 +108,98 @@ function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, child
|
|
|
110
108
|
busStage[labelId].split("|")[1] === "true" &&
|
|
111
109
|
busStage[labelId].split("|")[0];
|
|
112
110
|
let isSoldOut = serviceItem.available_seats <= 0;
|
|
113
|
-
const showPromo = Math.random() > 0.5;
|
|
114
|
-
const isItemExpanded = serviceItem.id === isExpand || isExpand === true;
|
|
115
|
-
const grayscaleClass = isSoldOut ? "grayscale" : "";
|
|
116
111
|
const renderIcon = (iconKey, size = "14px") => {
|
|
117
112
|
var _a;
|
|
118
113
|
const iconValue = (_a = serviceItem.icons) === null || _a === void 0 ? void 0 : _a[iconKey];
|
|
119
114
|
if (iconValue) {
|
|
120
115
|
if (typeof iconValue === "string") {
|
|
121
|
-
return (React.createElement("img", { src: iconValue, alt: iconKey, className: `${`w-[${size}] h-[${size}]`} ` }));
|
|
116
|
+
return (React.createElement("img", { src: iconValue, alt: iconKey, className: `${`w-[${size}] h-[${size}]`} mr-[5px]` }));
|
|
122
117
|
}
|
|
123
118
|
}
|
|
124
119
|
return null;
|
|
125
120
|
};
|
|
121
|
+
const getAllSeatTypes = () => {
|
|
122
|
+
var _a;
|
|
123
|
+
if (!((_a = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.seat_types) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
124
|
+
return [{ label: "Salon cama", price: 0 }];
|
|
125
|
+
}
|
|
126
|
+
let seatTypesWithPrices = serviceItem.seat_types
|
|
127
|
+
.filter((item) => getFilteredSeats(item))
|
|
128
|
+
.map((val) => ({
|
|
129
|
+
label: val === null || val === void 0 ? void 0 : val.label,
|
|
130
|
+
price: val === null || val === void 0 ? void 0 : val.fare,
|
|
131
|
+
}));
|
|
132
|
+
seatTypesWithPrices.sort((a, b) => a.price - b.price);
|
|
133
|
+
return seatTypesWithPrices;
|
|
134
|
+
};
|
|
135
|
+
const getSortedSeatTypes = () => {
|
|
136
|
+
var _a;
|
|
137
|
+
if (!((_a = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.seat_types) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
138
|
+
return [{ label: "Salon cama", price: 0 }];
|
|
139
|
+
}
|
|
140
|
+
let seatTypesWithPrices = getAllSeatTypes();
|
|
141
|
+
const premiumIndex = seatTypesWithPrices.findIndex((item) => item.label === "Premium");
|
|
142
|
+
if (premiumIndex >= 3) {
|
|
143
|
+
seatTypesWithPrices[2] = seatTypesWithPrices[premiumIndex];
|
|
144
|
+
}
|
|
145
|
+
seatTypesWithPrices = seatTypesWithPrices.slice(0, 2);
|
|
146
|
+
return seatTypesWithPrices;
|
|
147
|
+
};
|
|
148
|
+
const getUniqueSeats = () => {
|
|
149
|
+
const allSeatTypes = getAllSeatTypes();
|
|
150
|
+
const seatMap = new Map();
|
|
151
|
+
allSeatTypes.forEach((seat) => {
|
|
152
|
+
if (SEAT_EXCEPTIONS.includes(seat.label))
|
|
153
|
+
return;
|
|
154
|
+
// Only check if the label already exists in the map, don't compare prices
|
|
155
|
+
if (!seatMap.has(seat.label)) {
|
|
156
|
+
seatMap.set(seat.label, seat);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return Array.from(seatMap.values());
|
|
160
|
+
};
|
|
161
|
+
const getNumberOfSeats = () => {
|
|
162
|
+
return serviceItem.seat_types.filter((val) => !SEAT_EXCEPTIONS.includes(val.label)).length;
|
|
163
|
+
};
|
|
164
|
+
const getSeatNames = () => {
|
|
165
|
+
const uniqueSeats = getUniqueSeats();
|
|
166
|
+
const sortedSeatTypes = getSortedSeatTypes();
|
|
167
|
+
if (removeDuplicateSeats) {
|
|
168
|
+
return uniqueSeats.map((val, key) => SEAT_EXCEPTIONS.includes(val.label) ? null : (React.createElement("span", { key: key, className: `flex items-center justify-between text-[13.33px] ${isSoldOut ? "text-[#c0c0c0]" : ""}` }, typeof val.label === "string" || typeof val.label === "number"
|
|
169
|
+
? isPeru
|
|
170
|
+
? CommonService.truncateSeatLabel(val.label)
|
|
171
|
+
: val.label
|
|
172
|
+
: null)));
|
|
173
|
+
}
|
|
174
|
+
return sortedSeatTypes.map((val, key) => SEAT_EXCEPTIONS.includes(val.label) ? null : (React.createElement("span", { key: key, className: `flex items-center justify-between text-[13.33px] ${isSoldOut ? "text-[#c0c0c0]" : ""}` }, typeof val.label === "string" || typeof val.label === "number"
|
|
175
|
+
? val.label
|
|
176
|
+
: null)));
|
|
177
|
+
};
|
|
178
|
+
const getSeatPrice = () => {
|
|
179
|
+
const sortedSeatTypes = getSortedSeatTypes();
|
|
180
|
+
const uniqueSeats = getUniqueSeats();
|
|
181
|
+
if (removeDuplicateSeats) {
|
|
182
|
+
return uniqueSeats.map((val, key) => (React.createElement("span", { key: key }, (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) <= 0
|
|
183
|
+
? CommonService.currency(0, currencySign)
|
|
184
|
+
: CommonService.currency(val.price, currencySign))));
|
|
185
|
+
}
|
|
186
|
+
return sortedSeatTypes.map((val, key) => {
|
|
187
|
+
return SEAT_EXCEPTIONS.includes(val.label) ? null : (React.createElement("span", { key: key, className: "flex items-center text-[13.33px] bold-text" }, typeof val.price === "string"
|
|
188
|
+
? (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) <= 0
|
|
189
|
+
? CommonService.currency(0, currencySign)
|
|
190
|
+
: CommonService.currency(val.price, currencySign)
|
|
191
|
+
: typeof val.price === "number"
|
|
192
|
+
? (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) <= 0
|
|
193
|
+
? CommonService.currency(0, currencySign)
|
|
194
|
+
: CommonService.currency(val.price, currencySign)
|
|
195
|
+
: null));
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
const getFilteredSeats = (item) => {
|
|
199
|
+
return item;
|
|
200
|
+
};
|
|
126
201
|
const checkMidnight = () => {
|
|
127
202
|
var _a, _b;
|
|
128
|
-
setIsExpand(null);
|
|
129
203
|
if ((cityOrigin === null || cityOrigin === void 0 ? void 0 : cityOrigin.label) &&
|
|
130
204
|
(cityDestination === null || cityDestination === void 0 ? void 0 : cityDestination.label) &&
|
|
131
205
|
((cityOrigin.label.toLowerCase().includes("argentina") &&
|
|
@@ -196,33 +270,45 @@ function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, child
|
|
|
196
270
|
});
|
|
197
271
|
return;
|
|
198
272
|
}
|
|
199
|
-
|
|
273
|
+
else {
|
|
274
|
+
onBookButtonPress();
|
|
275
|
+
}
|
|
200
276
|
};
|
|
201
277
|
const depTime = serviceItem.dep_time || "";
|
|
278
|
+
// Extract hours and minutes and check for AM/PM
|
|
202
279
|
const hasAM = depTime.includes("AM");
|
|
203
280
|
const hasPM = depTime.includes("PM");
|
|
204
|
-
const
|
|
281
|
+
const [timePart] = depTime.split(/AM|PM/).map((part) => part.trim());
|
|
282
|
+
const [hour, minute] = timePart.split(":").map(Number);
|
|
283
|
+
// Convert to 24-hour format
|
|
284
|
+
let cleanedDepTime;
|
|
285
|
+
if (hasAM) {
|
|
286
|
+
cleanedDepTime =
|
|
287
|
+
hour === 12
|
|
288
|
+
? `00:${minute < 10 ? "0" + minute : minute}`
|
|
289
|
+
: `${hour < 10 ? "0" + hour : hour}:${minute < 10 ? "0" + minute : minute}`;
|
|
290
|
+
}
|
|
291
|
+
else if (hasPM) {
|
|
292
|
+
cleanedDepTime =
|
|
293
|
+
hour === 12
|
|
294
|
+
? `${hour}:${minute < 10 ? "0" + minute : minute}`
|
|
295
|
+
: `${hour + 12}:${minute < 10 ? "0" + minute : minute}`;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
cleanedDepTime = timePart;
|
|
299
|
+
}
|
|
205
300
|
const items = [
|
|
206
301
|
{
|
|
207
|
-
key: "
|
|
208
|
-
width: "
|
|
209
|
-
|
|
210
|
-
render: (React.createElement(AmenitiesBlock, { serviceItem: serviceItem, metaData: metaData, isSoldOut: isSoldOut, colors: colors, isPeru: isPeru, getAnimationIcon: getAnimationIcon, getAmenityName: CommonService.getAmenityName, SvgAmenities: SvgAmenities })),
|
|
302
|
+
key: "rating",
|
|
303
|
+
width: "30%",
|
|
304
|
+
render: (React.createElement(RatingBlock, { showRating: showRating, serviceItem: serviceItem, isSoldOut: isSoldOut, colors: colors, t: t, translation: translation })),
|
|
211
305
|
},
|
|
212
306
|
{
|
|
213
307
|
key: "duration",
|
|
214
|
-
width: "
|
|
308
|
+
width: "20%",
|
|
215
309
|
condition: serviceItem.duration,
|
|
216
310
|
render: (React.createElement(DurationBlock, { serviceItem: serviceItem, translation: translation, renderIcon: renderIcon, isSoldOut: isSoldOut, colors: colors })),
|
|
217
311
|
},
|
|
218
|
-
{
|
|
219
|
-
key: "directo",
|
|
220
|
-
width: "12%",
|
|
221
|
-
condition: serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_direct_trip,
|
|
222
|
-
render: (React.createElement("div", { className: "flex items-center gap-[10px] text-[12.5px] z-10 mt-[6px]" },
|
|
223
|
-
React.createElement(LottiePlayer, { animationData: getAnimationIcon("directoAnim"), width: "14px", height: "14px" }),
|
|
224
|
-
React.createElement("div", null, translation === null || translation === void 0 ? void 0 : translation.directService))),
|
|
225
|
-
},
|
|
226
312
|
{
|
|
227
313
|
key: "pet",
|
|
228
314
|
width: "20%",
|
|
@@ -236,50 +322,35 @@ function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, child
|
|
|
236
322
|
condition: serviceItem.is_change_ticket,
|
|
237
323
|
render: (React.createElement(FlexibleBlock, { translation: translation, getAnimationIcon: getAnimationIcon, colors: colors, serviceItem: serviceItem, isSoldOut: isSoldOut })),
|
|
238
324
|
},
|
|
325
|
+
{
|
|
326
|
+
key: "amenities",
|
|
327
|
+
width: "20%",
|
|
328
|
+
render: (React.createElement(AmenitiesBlock, { serviceItem: serviceItem, metaData: metaData, isSoldOut: isSoldOut, colors: colors, isPeru: isPeru, getAnimationIcon: getAnimationIcon, getAmenityName: CommonService.getAmenityName, SvgAmenities: SvgAmenities })),
|
|
329
|
+
},
|
|
239
330
|
];
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// className="p-[15px] pt-[20px]"
|
|
255
|
-
className: " pt-[20px]", style: {
|
|
256
|
-
padding: coachKey
|
|
257
|
-
? "15px 15px 20px 15px"
|
|
258
|
-
: "20px 15px 11px 15px",
|
|
259
|
-
} },
|
|
260
|
-
React.createElement("div", {
|
|
261
|
-
// className="grid text-[#464647] w-full [grid-template-columns:18%_28%_2.5%_28%_15.5%] gap-x-[2%] items-center"
|
|
262
|
-
className: "grid text-[#464647] w-full [grid-template-columns:22%_28%_2.5%_24%_15.5%] gap-x-[2%] items-center" },
|
|
263
|
-
React.createElement("div", { style: {
|
|
264
|
-
display: "flex",
|
|
265
|
-
flexDirection: "column",
|
|
266
|
-
gap: "5px",
|
|
267
|
-
} },
|
|
268
|
-
React.createElement("div", {
|
|
269
|
-
// className="flex items-center justify-center m-[auto]"
|
|
270
|
-
className: "" },
|
|
271
|
-
React.createElement("img", { src: serviceItem.operator_details[0], alt: "service logo", className: `h-auto w-[150px] object-contain ${isSoldOut ? "grayscale" : ""}` }),
|
|
272
|
-
isCiva ? (React.createElement("div", { className: "text-[13.33px] black-text ml-2" }, serviceItem.operator_details[2])) : null),
|
|
273
|
-
React.createElement(RatingBlock, { showRating: showRating, serviceItem: serviceItem, isSoldOut: isSoldOut, colors: colors, t: t, translation: translation })),
|
|
331
|
+
const amenitiesItem = items.find((i) => i.key === "amenities");
|
|
332
|
+
const otherItems = items.filter((i) => i.key !== "amenities" && i.condition !== false);
|
|
333
|
+
return (React.createElement(React.Fragment, null, isPeruSites ? (React.createElement(PeruServiceItemDesktop, { serviceItem: serviceItem, onBookButtonPress: onBookButtonPress, colors: colors, metaData: metaData, children: children, busStage: busStage, serviceDetailsLoading: serviceDetailsLoading, cityOrigin: cityOrigin, cityDestination: cityDestination, translation: translation, orignLabel: orignLabel, destinationLabel: destinationLabel, currencySign: currencySign, isCiva: isCiva, showRating: showRating, showLastSeats: showLastSeats, removeArrivalTime: removeArrivalTime, removeDuplicateSeats: removeDuplicateSeats, isPeruSites: isPeruSites, t: (key) => t(key), showAvailableSeats: showAvailableSeats, isSeatIcon: isSeatIcon, isPeru: isPeru, siteType: siteType, isAllinBus: isAllinBus })) : (React.createElement("div", { className: `relative ${serviceItem.offer_text ? "mb-[55px]" : "mb-[10px]"} ${(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_direct_trip) ||
|
|
334
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.train_type_label) === "Tren Express (Nuevo)" ||
|
|
335
|
+
showTopLabel
|
|
336
|
+
? "mt-[24px]"
|
|
337
|
+
: "mt-[20px]"} ` },
|
|
338
|
+
React.createElement("div", { className: "bg-white rounded-[20px] shadow-service mx-auto relative" },
|
|
339
|
+
React.createElement("div", { className: "p-[15px] pt-[20px]" },
|
|
340
|
+
React.createElement("div", { className: "grid text-[#464647] w-full [grid-template-columns:14%_30%_2.5%_30%_15.5%] gap-x-[2%] items-center", style: { marginTop: showTopLabel ? "8px" : "" } },
|
|
341
|
+
React.createElement("div", { className: "flex items-center justify-center m-[auto]" },
|
|
342
|
+
React.createElement("div", { className: " " },
|
|
343
|
+
React.createElement("img", { src: serviceItem.operator_details[0], alt: "service logo", className: ` h-auto object-contain ${isSoldOut ? "grayscale" : ""}` })),
|
|
344
|
+
isCiva ? (React.createElement("div", { className: "text-[13.33px] black-text ml-2" }, serviceItem.operator_details[2])) : null),
|
|
274
345
|
React.createElement("div", { className: `min-h-[2.5rem] grid grid-cols-[26px_auto_26%_1fr] gap-x-4 items-center text-[13.33px] ${isSoldOut ? "text-[#c0c0c0]" : ""}`, style: {
|
|
275
346
|
gridTemplateRows: "1fr",
|
|
276
347
|
} },
|
|
277
348
|
React.createElement("div", { className: "flex flex-col gap-[6px]" },
|
|
278
349
|
orignLabel ? (React.createElement("div", { className: "w-[60px] h-[20px] flex items-center" }, orignLabel)) : (React.createElement("div", { className: "h-[20px] flex items-center" },
|
|
279
|
-
React.createElement("img", { src: (_a = serviceItem.icons) === null || _a === void 0 ? void 0 : _a.origin, alt: "origin", className: `w-[
|
|
350
|
+
React.createElement("img", { src: (_a = serviceItem.icons) === null || _a === void 0 ? void 0 : _a.origin, alt: "origin", className: `w-[18px] h-auto mr-[8px] ${isSoldOut ? "grayscale" : ""}` }))),
|
|
280
351
|
!isCiva &&
|
|
281
352
|
(destinationLabel ? (React.createElement("div", { className: "w-[60px] h-[20px] flex items-center" }, destinationLabel)) : (React.createElement("div", { className: "h-[20px] flex items-center" },
|
|
282
|
-
React.createElement("img", { src: (_b = serviceItem.icons) === null || _b === void 0 ? void 0 : _b.destination, className: `w-[
|
|
353
|
+
React.createElement("img", { src: (_b = serviceItem.icons) === null || _b === void 0 ? void 0 : _b.destination, className: `w-[18px] h-auto mr-[8px] ${isSoldOut ? "grayscale" : ""}`, style: { opacity: isSoldOut ? 0.5 : 1 } }))))),
|
|
283
354
|
React.createElement("div", { className: "flex flex-col gap-[6px]" },
|
|
284
355
|
React.createElement(StageTooltip, { stageData: serviceItem.boarding_stages, direction: 1, terminals: busStage, serviceItem: serviceItem, metaData: metaData, colors: colors },
|
|
285
356
|
React.createElement("span", { className: "cursor-pointer bold-text capitalize" }, DateService.getServiceItemDate(serviceItem.travel_date))),
|
|
@@ -310,25 +381,92 @@ function ServiceItemPB({ serviceItem, onBookButtonPress, colors, metaData, child
|
|
|
310
381
|
backgroundColor: "#ccc",
|
|
311
382
|
} }),
|
|
312
383
|
React.createElement("div", { className: "content-center" },
|
|
313
|
-
React.createElement(
|
|
384
|
+
React.createElement("div", { className: `relative flex gap-[10px] text-[13.33px] justify-between min-h-[2.5rem] ${getNumberOfSeats() < 3 ? "" : ""}`, style: getNumberOfSeats() < 2 || removeDuplicateSeats
|
|
385
|
+
? { alignItems: "center" }
|
|
386
|
+
: {} },
|
|
387
|
+
React.createElement("div", { className: "flex flex-col justify-between", style: { gap: "10px" } }, getSeatNames()),
|
|
388
|
+
React.createElement("div", { className: "flex flex-col justify-between absolute inset-y-0 right-0 left-1/2 h-full", style: {
|
|
389
|
+
color: isSoldOut ? "#c0c0c0" : colors.priceColor,
|
|
390
|
+
top: 0,
|
|
391
|
+
bottom: 0,
|
|
392
|
+
left: "clamp(60%, 65% + (100vw - 1300px) * 0.1, 65%)",
|
|
393
|
+
// left: "68%",
|
|
394
|
+
right: 0,
|
|
395
|
+
justifyContent: getNumberOfSeats() < 2 || removeDuplicateSeats
|
|
396
|
+
? "center"
|
|
397
|
+
: "",
|
|
398
|
+
gap: "10px",
|
|
399
|
+
} }, getSeatPrice()))),
|
|
314
400
|
React.createElement("div", null,
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
401
|
+
React.createElement("button", { onClick: () => (!isSoldOut ? checkMidnight() : null), disabled: serviceDetailsLoading, className: `w-full ${serviceDetailsLoading || isSoldOut
|
|
402
|
+
? "py-[12px]"
|
|
403
|
+
: "py-[12px]"} text-[13.33px] font-bold text-white rounded-[10px] border-none px-[20px] flex items-center justify-center`, style: {
|
|
404
|
+
backgroundColor: serviceDetailsLoading || isSoldOut
|
|
405
|
+
? "lightgray"
|
|
406
|
+
: colors.kuposButtonColor,
|
|
407
|
+
cursor: serviceDetailsLoading || isSoldOut
|
|
408
|
+
? "not-allowed"
|
|
409
|
+
: "pointer",
|
|
410
|
+
} },
|
|
411
|
+
React.createElement("span", { className: "min-w-[75px] flex justify-center items-center bold-text uppercase" },
|
|
412
|
+
isSoldOut ? renderIcon("soldOutIcon", "14px") : null,
|
|
413
|
+
serviceDetailsLoading ? (React.createElement("span", { className: "loader-circle" })) : !isSoldOut ? (translation === null || translation === void 0 ? void 0 : translation.buyButton) : (translation === null || translation === void 0 ? void 0 : translation.soldOutButton))))),
|
|
414
|
+
showLastSeats ? (React.createElement("div", { className: "flex justify-end mr-[11px]" }, (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) < 10 &&
|
|
415
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) > 0 && (React.createElement("div", { className: "text-[12px] text-[red] mt-1 text-center" }, "\u00A1 \u00DAltimos Asientos!")))) : null,
|
|
416
|
+
React.createElement("div", { className: "flex items-center mt-[15px] border-t border-[#eee] pt-[10px]" },
|
|
417
|
+
React.createElement("div", { className: "grid items-center gap-[2%] flex-1", style: {
|
|
418
|
+
gridTemplateColumns: "40% 18% 23% 23%",
|
|
419
|
+
// otherItems
|
|
420
|
+
// .map((i) => i.width)
|
|
421
|
+
// .join(" "),
|
|
422
|
+
} }, otherItems.map((item) => (React.createElement("div", { key: item.key, className: "flex items-center " }, item.render)))),
|
|
423
|
+
React.createElement("div", { className: "flex items-center ml-[12px] shrink-0 w-[130px] justify-end" }, amenitiesItem === null || amenitiesItem === void 0 ? void 0 : amenitiesItem.render)))),
|
|
326
424
|
children,
|
|
327
|
-
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.offer_text) && (React.createElement("div", { className:
|
|
328
|
-
backgroundColor:
|
|
425
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.offer_text) && (React.createElement("div", { className: ` text-white p-[10px_15px] text-left w-full flex items-center absolute -bottom-[36px] pt-[50px] -z-10 rounded-b-[14px] text-[14px]`, style: {
|
|
426
|
+
backgroundColor: isSoldOut
|
|
427
|
+
? colors === null || colors === void 0 ? void 0 : colors.bottomStripColor
|
|
428
|
+
: colors === null || colors === void 0 ? void 0 : colors.bottomStripColor,
|
|
329
429
|
opacity: isSoldOut ? 0.5 : 1,
|
|
330
430
|
} },
|
|
331
431
|
React.createElement(LottiePlayer, { animationData: getAnimationIcon("promoAnim"), width: "18px", height: "18px" }),
|
|
332
|
-
React.createElement("span", { className: "ml-[10px]" }, serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.offer_text)))
|
|
432
|
+
React.createElement("span", { className: "ml-[10px]" }, serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.offer_text))),
|
|
433
|
+
React.createElement("div", { className: "absolute -top-[11px] left-0 w-full flex items-center justify-end gap-[12px] pr-[15px] z-10 " },
|
|
434
|
+
showTopLabel && (React.createElement("div", { className: `flex items-center gap-[10px] py-[4px] px-[14px] rounded-[38px] text-[12.5px] z-20`, style: {
|
|
435
|
+
backgroundColor: isSoldOut
|
|
436
|
+
? "#ddd"
|
|
437
|
+
: colors.ratingBottomColor,
|
|
438
|
+
} },
|
|
439
|
+
React.createElement("div", { className: isSoldOut ? "grayscale" : "" },
|
|
440
|
+
React.createElement(LottiePlayer
|
|
441
|
+
// animationData={serviceItem.icons.priorityStageAnim}
|
|
442
|
+
, {
|
|
443
|
+
// animationData={serviceItem.icons.priorityStageAnim}
|
|
444
|
+
animationData: getAnimationIcon("priorityStageAnim"), width: "14px", height: "14px" })),
|
|
445
|
+
React.createElement("div", { className: isSoldOut ? "text-white" : `text-[${colors.topLabelColor}]` }, showTopLabel))),
|
|
446
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_transpordo) && (React.createElement("div", { className: `flex items-center gap-[10px] py-[4px] text-white px-[14px] rounded-[38px] text-[12.5px] z-20`, style: {
|
|
447
|
+
backgroundColor: isSoldOut ? "#ddd" : colors.tooltipColor,
|
|
448
|
+
} },
|
|
449
|
+
React.createElement(LottiePlayer, { animationData: serviceItem.icons.connectingServiceIcon,
|
|
450
|
+
// animationData={getAnimationIcon(connectingServiceIcon)}
|
|
451
|
+
width: "14px", height: "14px" }),
|
|
452
|
+
React.createElement("div", null, "Conexión"))),
|
|
453
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_direct_trip) && (React.createElement("div", { className: `flex items-center gap-[10px] py-[4px] text-white px-[14px] rounded-[38px] text-[12.5px] z-20 `, style: {
|
|
454
|
+
backgroundColor: isSoldOut ? "#ddd" : colors.tooltipColor,
|
|
455
|
+
} },
|
|
456
|
+
React.createElement(LottiePlayer
|
|
457
|
+
// animationData={serviceItem.icons.directoAnim}
|
|
458
|
+
, {
|
|
459
|
+
// animationData={serviceItem.icons.directoAnim}
|
|
460
|
+
animationData: getAnimationIcon("directoAnim"), width: "14px", height: "14px" }),
|
|
461
|
+
React.createElement("div", null, translation === null || translation === void 0 ? void 0 : translation.directService))),
|
|
462
|
+
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.train_type_label) === "Tren Express (Nuevo)" && (React.createElement("div", { className: `flex items-center gap-[10px] py-[4px] text-white px-[14px] rounded-[38px] text-[12.5px] z-20 `, style: {
|
|
463
|
+
backgroundColor: isSoldOut ? "#ddd" : colors.tooltipColor,
|
|
464
|
+
} },
|
|
465
|
+
React.createElement(LottiePlayer
|
|
466
|
+
// animationData={serviceItem.icons.directoAnim}
|
|
467
|
+
, {
|
|
468
|
+
// animationData={serviceItem.icons.directoAnim}
|
|
469
|
+
animationData: getAnimationIcon("directoAnim"), width: "14px", height: "14px" }),
|
|
470
|
+
React.createElement("div", null, "Tren Express"))))))));
|
|
333
471
|
}
|
|
334
472
|
export default ServiceItemPB;
|