kupos-ui-components-lib 9.6.2 → 9.6.4
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/assets/images/anims/service_list/female_anim.json +1 -0
- package/dist/components/ServiceItem/ServiceItemDesktop.d.ts +1 -1
- package/dist/components/ServiceItem/ServiceItemDesktop.js +7 -3
- package/dist/components/ServiceItem/ServiceItemMobile.js +9 -6
- package/dist/components/ServiceItem/mobileTypes.d.ts +5 -0
- package/dist/components/ServiceItem/types.d.ts +7 -3
- package/dist/styles.css +2 -2
- package/dist/types.d.ts +1 -0
- package/dist/ui/BottomAmenities/BottomAmenities.d.ts +2 -0
- package/dist/ui/BottomAmenities/BottomAmenities.js +4 -0
- package/dist/ui/FemaleBlock.d.ts +9 -0
- package/dist/ui/FemaleBlock.js +19 -0
- package/dist/ui/OfferBanner.d.ts +2 -1
- package/dist/ui/OfferBanner.js +17 -6
- package/dist/ui/SeatSection/SeatSection.d.ts +2 -1
- package/dist/ui/SeatSection/SeatSection.js +33 -15
- package/dist/ui/mobileweb/BottomAmenitiesMobile.d.ts +4 -1
- package/dist/ui/mobileweb/BottomAmenitiesMobile.js +8 -1
- package/dist/ui/mobileweb/DateTimeSectionMobile.d.ts +2 -1
- package/dist/ui/mobileweb/DateTimeSectionMobile.js +2 -2
- package/dist/ui/mobileweb/ExpandedDropdownMobile.d.ts +3 -1
- package/dist/ui/mobileweb/ExpandedDropdownMobile.js +8 -1
- package/dist/ui/mobileweb/SeatSectionMobile.d.ts +2 -1
- package/dist/ui/mobileweb/SeatSectionMobile.js +30 -18
- package/dist/utils/CommonService.js +4 -2
- package/package.json +1 -1
- package/src/assets/images/anims/service_list/female_anim.json +1 -0
- package/src/components/ServiceItem/ServiceItemDesktop.tsx +7 -0
- package/src/components/ServiceItem/ServiceItemMobile.tsx +11 -71
- package/src/components/ServiceItem/mobileTypes.ts +5 -0
- package/src/components/ServiceItem/types.ts +7 -3
- package/src/types.ts +1 -0
- package/src/ui/BottomAmenities/BottomAmenities.tsx +14 -0
- package/src/ui/FemaleBlock.tsx +45 -0
- package/src/ui/OfferBanner.tsx +24 -6
- package/src/ui/SeatSection/SeatSection.tsx +38 -14
- package/src/ui/mobileweb/BottomAmenitiesMobile.tsx +27 -0
- package/src/ui/mobileweb/DateTimeSectionMobile.tsx +3 -0
- package/src/ui/mobileweb/ExpandedDropdownMobile.tsx +15 -0
- package/src/ui/mobileweb/SeatSectionMobile.tsx +41 -31
- package/src/utils/CommonService.ts +7 -2
|
@@ -11,6 +11,8 @@ interface ExpandedDropdownMobileProps {
|
|
|
11
11
|
petFriendlyAnim?: any;
|
|
12
12
|
isSoldOut?: boolean;
|
|
13
13
|
isChangeTicket?: boolean;
|
|
14
|
+
ladiesBookedSeats?: string;
|
|
15
|
+
isDpEnabled?: boolean;
|
|
14
16
|
}
|
|
15
|
-
declare function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket, }: ExpandedDropdownMobileProps): React.ReactElement;
|
|
17
|
+
declare function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket, ladiesBookedSeats, isDpEnabled, }: ExpandedDropdownMobileProps): React.ReactElement;
|
|
16
18
|
export default ExpandedDropdownMobile;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import LottiePlayer from "../../assets/LottiePlayer";
|
|
3
|
-
function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket = false, }) {
|
|
3
|
+
function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket = false, ladiesBookedSeats, isDpEnabled, }) {
|
|
4
4
|
return (React.createElement("div", { className: "px-[12px] pt-[22px] pb-[12px] relative -z-9", style: {
|
|
5
5
|
backgroundColor: "#ffefef",
|
|
6
6
|
borderRadius: "0 0 14px 14px",
|
|
@@ -24,6 +24,13 @@ function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyA
|
|
|
24
24
|
React.createElement("span", null,
|
|
25
25
|
React.createElement("span", { className: "bold-text" }, "Pasaje flexible:"),
|
|
26
26
|
" Esta empresa no permite cambios de pasajes")))),
|
|
27
|
+
ladiesBookedSeats &&
|
|
28
|
+
String(ladiesBookedSeats).trim() !== "" &&
|
|
29
|
+
isDpEnabled === true && (React.createElement("div", { className: "flex gap-[6px]" },
|
|
30
|
+
React.createElement("span", { style: { marginTop: "2px" } }, "\u2022"),
|
|
31
|
+
React.createElement("span", null,
|
|
32
|
+
React.createElement("span", { className: "bold-text" }, "Asientos para damas:"),
|
|
33
|
+
" Esta empresa cuenta con asientos recomendados para mujeres."))),
|
|
27
34
|
petSeatInfo && Object.keys(petSeatInfo).length > 0 ? (React.createElement("div", { className: "flex items-center" },
|
|
28
35
|
React.createElement("div", { className: `relative group cursor-default ` },
|
|
29
36
|
React.createElement("div", { className: "flex items-center" },
|
|
@@ -15,6 +15,7 @@ interface SeatSectionMobileProps {
|
|
|
15
15
|
serviceItem?: any;
|
|
16
16
|
tooltipBgColor?: string;
|
|
17
17
|
showLastSeats?: boolean;
|
|
18
|
+
discountSeatPriceColor?: string;
|
|
18
19
|
}
|
|
19
|
-
declare function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPriceColor, currencySign, availableSeats, removeDuplicateSeats, serviceItem, tooltipBgColor, showLastSeats, }: SeatSectionMobileProps): React.ReactElement;
|
|
20
|
+
declare function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPriceColor, currencySign, availableSeats, removeDuplicateSeats, serviceItem, tooltipBgColor, showLastSeats, discountSeatPriceColor, }: SeatSectionMobileProps): React.ReactElement;
|
|
20
21
|
export default SeatSectionMobile;
|
|
@@ -42,7 +42,7 @@ const getUniqueSeats = (data, limit) => {
|
|
|
42
42
|
.sort((a, b) => a.fare - b.fare)
|
|
43
43
|
.slice(0, limit);
|
|
44
44
|
};
|
|
45
|
-
function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPriceColor, currencySign, availableSeats, removeDuplicateSeats, serviceItem, tooltipBgColor, showLastSeats, }) {
|
|
45
|
+
function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPriceColor, currencySign, availableSeats, removeDuplicateSeats, serviceItem, tooltipBgColor, showLastSeats, discountSeatPriceColor, }) {
|
|
46
46
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
47
47
|
const hasMultipleTypes = ((_a = seatTypesData === null || seatTypesData === void 0 ? void 0 : seatTypesData.length) !== null && _a !== void 0 ? _a : 0) > 2;
|
|
48
48
|
const getFare = (fare) => {
|
|
@@ -97,10 +97,6 @@ function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPr
|
|
|
97
97
|
React.createElement("span", { className: "flex items-center gap-[4px] min-[420]:text-[13px] text-[14px] bold-text", style: { color: priceColor } },
|
|
98
98
|
((_a = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.icons) === null || _a === void 0 ? void 0 : _a.fireIcon) ? (React.createElement("img", { src: serviceItem.icons.fireIcon, alt: "dp", className: "h-[14px] w-[14px] object-contain", style: { filter: isSoldOut ? "grayscale(1)" : "" } })) : null,
|
|
99
99
|
commonService.currency(discountedPrice, currencySign))),
|
|
100
|
-
showLastSeats ? (React.createElement("div", { className: "flex justify-end" }, (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) < 10 &&
|
|
101
|
-
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.available_seats) > 0 && (React.createElement("div", { className: "text-[10px] text-center mt-[3px]", style: {
|
|
102
|
-
color: tooltipBgColor,
|
|
103
|
-
} }, "\u00A1\u00DAltimos Asientos!")))) : null,
|
|
104
100
|
isSoldOut ? (React.createElement("div", { className: "flex justify-end" },
|
|
105
101
|
React.createElement("span", { className: "min-[420]:text-[13px] text-[12px] text-[#464647]", style: { opacity: isSoldOut ? 0.5 : 1 } }, "Agotado"))) : null));
|
|
106
102
|
};
|
|
@@ -129,17 +125,29 @@ function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPr
|
|
|
129
125
|
: discountedSeats === null || discountedSeats === void 0 ? void 0 : discountedSeats.some((s) => s.originalPrice !== s.discountedPrice);
|
|
130
126
|
const discountSeat = isPeru && peruDiscountCalc
|
|
131
127
|
? Object.assign({ label: "", fare: peruLowestFare }, peruDiscountCalc) : (_d = discountedSeats === null || discountedSeats === void 0 ? void 0 : discountedSeats.filter((seat) => !EXCEPTIONS.includes(seat.label))) === null || _d === void 0 ? void 0 : _d.sort((a, b) => a.discountedPrice - b.discountedPrice)[0];
|
|
132
|
-
const discountValue = (
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
? serviceItem.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
128
|
+
const discountValue = (() => {
|
|
129
|
+
if ((serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.discount_type) === "percentage" &&
|
|
130
|
+
typeof (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.discount_value) === "number") {
|
|
131
|
+
return Math.round(serviceItem.discount_value);
|
|
132
|
+
}
|
|
133
|
+
if ((serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.discount_type) === "fixed" && discountSeat) {
|
|
134
|
+
const { originalPrice, discountedPrice } = discountSeat;
|
|
135
|
+
if (originalPrice > 0 && originalPrice !== discountedPrice) {
|
|
136
|
+
return Math.round(((originalPrice - discountedPrice) / originalPrice) * 100);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
})();
|
|
141
|
+
const getMinValue = (data) => {
|
|
142
|
+
const vals = (Array.isArray(data) ? data : Object.values(data || {})).map(Number);
|
|
143
|
+
if (!vals.length)
|
|
144
|
+
return undefined;
|
|
145
|
+
const min = Math.min(...vals);
|
|
146
|
+
return isFinite(min) ? min : undefined;
|
|
147
|
+
};
|
|
148
|
+
const originalDpPrice = getMinValue(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.original_dp_price);
|
|
149
|
+
const dpDiscountPercent = getMinValue(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.dp_discount_percents);
|
|
150
|
+
const firstSeatFare = (_f = (_e = seatTypesData === null || seatTypesData === void 0 ? void 0 : seatTypesData.filter((item) => getFilteredSeats(item.label) && !EXCEPTIONS.includes(item.label))) === null || _e === void 0 ? void 0 : _e.sort((a, b) => a.fare - b.fare)[0]) === null || _f === void 0 ? void 0 : _f.fare;
|
|
143
151
|
const hasDpDiscount = (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.dp_discounted_seats) &&
|
|
144
152
|
(serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.dp_discount_percents) &&
|
|
145
153
|
originalDpPrice != null &&
|
|
@@ -175,7 +183,9 @@ function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPr
|
|
|
175
183
|
transformOrigin: "center",
|
|
176
184
|
} })),
|
|
177
185
|
React.createElement("span", { className: "min-[420]:text-[13px] text-[12px] leading-[24px]", style: { color: isSoldOut ? "#bbb" : "#464647" } }, "Desde"),
|
|
178
|
-
React.createElement("span", { className: "flex items-center justify-end gap-[4px] text-[14px] bold-text leading-[24px]", style: {
|
|
186
|
+
React.createElement("span", { className: "flex items-center justify-end gap-[4px] text-[14px] bold-text leading-[24px]", style: {
|
|
187
|
+
color: isSoldOut ? "#bbb" : discountSeatPriceColor || "#ff5964",
|
|
188
|
+
} },
|
|
179
189
|
((_h = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.icons) === null || _h === void 0 ? void 0 : _h.fireIcon) ? (React.createElement("img", { src: serviceItem.icons.fireIcon, alt: "discount", className: "h-[16px] w-[16px] object-contain", style: { filter: isSoldOut ? "grayscale" : "" } })) : null,
|
|
180
190
|
commonService.discountedCurrency(Number(firstSeatFare), currencySign)),
|
|
181
191
|
isSoldOut ? (React.createElement("span", { className: "col-span-2 min-[420]:text-[13px] text-right text-[12px] text-[#ccc]" }, "Agotado")) : null)) : hasDiscount && discountSeat ? (React.createElement("div", null,
|
|
@@ -207,7 +217,9 @@ function SeatSectionMobile({ seatTypes: seatTypesData, isSoldOut, isPeru, seatPr
|
|
|
207
217
|
transformOrigin: "center",
|
|
208
218
|
} })),
|
|
209
219
|
React.createElement("span", { className: "min-[420]:text-[13px] text-[12px] leading-[24px]", style: { color: isSoldOut ? "#bbb" : "#464647" } }, "Desde"),
|
|
210
|
-
React.createElement("span", { className: "flex items-center justify-end gap-[4px] text-[14px] bold-text leading-[24px]", style: {
|
|
220
|
+
React.createElement("span", { className: "flex items-center justify-end gap-[4px] text-[14px] bold-text leading-[24px]", style: {
|
|
221
|
+
color: isSoldOut ? "#bbb" : discountSeatPriceColor || "#ff5964",
|
|
222
|
+
} },
|
|
211
223
|
((_j = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.icons) === null || _j === void 0 ? void 0 : _j.fireIcon) ? (React.createElement("img", { src: serviceItem.icons.fireIcon, alt: "discount", className: "h-[16px] w-[16px] object-contain", style: { opacity: isSoldOut ? 0.5 : 1 } })) : null,
|
|
212
224
|
commonService.discountedCurrency(discountSeat.discountedPrice, currencySign))))) : (React.createElement("div", { className: "flex flex-col justify-between h-[2.5rem] ", style: {
|
|
213
225
|
gap: isSoldOut ? "0px" : "5px",
|
|
@@ -282,12 +282,14 @@ const commonService = {
|
|
|
282
282
|
return { originalPrice: price, discountedPrice: price };
|
|
283
283
|
}
|
|
284
284
|
const { discount_type, discount_value, max_discount } = serviceItem;
|
|
285
|
+
const fixedDiscount = discount_type === "fixed" && discount_value != null ? discount_value : 0;
|
|
285
286
|
const percentageDiscount = discount_type === "percentage" && discount_value != null
|
|
286
287
|
? (price * discount_value) / 100
|
|
287
288
|
: 0;
|
|
289
|
+
const rawDiscount = fixedDiscount || percentageDiscount;
|
|
288
290
|
const finalDiscount = max_discount != null && max_discount > 0
|
|
289
|
-
? Math.min(
|
|
290
|
-
:
|
|
291
|
+
? Math.min(rawDiscount, max_discount)
|
|
292
|
+
: rawDiscount;
|
|
291
293
|
const discountedPrice = Math.max(0, price - finalDiscount);
|
|
292
294
|
return { originalPrice: price, discountedPrice };
|
|
293
295
|
},
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nm":"Main Scene","h":389.908,"w":378.169,"meta":{"g":"@lottiefiles/creator@1.90.1"},"layers":[{"ty":0,"nm":"Precomp Layer Main Scene_1","sr":1,"st":0,"op":180,"ip":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[189,195]},"s":{"a":0,"k":[104.157,104.157]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[189.084,236.954]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":378,"h":390,"refId":"precomp_Main Scene_jM9TeYrW1Y_3d99d97a-abbe-4c5f-99bc-d6c3a9ec0397_6ced1adb-81c6-4f2a-81fe-41ec223cce28","ind":1,"tp":2},{"ty":4,"nm":"Ellipse 2","sr":1,"st":0,"op":180,"ip":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[106.977,106.977]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[189.084,194.954]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"el","nm":"Ellipse Shape 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[348.546,348.546]}},{"ty":"fl","nm":"Fill","c":{"a":0,"k":[1,0.937,0.937]},"r":1,"o":{"a":0,"k":100}}],"ind":2},{"ty":4,"nm":"Ellipse 1","sr":1,"st":0,"op":180,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[106.977,106.977]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[189.084,194.954]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"el","nm":"Ellipse Shape 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[348.546,348.546]}},{"ty":"fl","nm":"Fill","c":{"a":0,"k":[1,0.937,0.937]},"r":1,"o":{"a":0,"k":100}}],"ind":3},{"ty":0,"nm":"Nested Scene 2","sr":1,"st":0,"op":0,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":378,"h":390,"refId":"precomp_newScene_pAg4ss2wXg_138db0d9-ba9c-43eb-990d-ed6033f0b644_471ef448-e667-4911-b181-2b927ec28255","ind":4}],"v":"5.7.0","fr":60,"op":180,"ip":0,"assets":[{"nm":"Nested Scene 1","id":"precomp_newScene_eEKvnUyRwM_1e5c472e-e670-4951-b2be-c78f3b3c23a8_936e2ff8-1715-4d83-ac9b-e003a62870fb","fr":60,"layers":[]},{"nm":"Nested Scene 2","id":"precomp_newScene_pAg4ss2wXg_138db0d9-ba9c-43eb-990d-ed6033f0b644_471ef448-e667-4911-b181-2b927ec28255","fr":60,"layers":[]},{"nm":"Main Scene_1","id":"precomp_Main Scene_jM9TeYrW1Y_3d99d97a-abbe-4c5f-99bc-d6c3a9ec0397_6ced1adb-81c6-4f2a-81fe-41ec223cce28","fr":60,"layers":[{"ty":3,"nm":"Main Stroke width - Color Ctrl","sr":1,"st":0,"op":180,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ef":[{"ty":5,"nm":"Stroke width","en":1,"ef":[{"ty":0,"nm":"Slider","v":{"a":0,"k":16}}]},{"ty":5,"nm":"Highlight width","en":1,"ef":[{"ty":0,"nm":"Slider","v":{"a":0,"k":18}}]},{"ty":5,"nm":"Base Color","en":1,"ef":[{"ty":2,"nm":"Color","v":{"a":0,"k":[1,0.361,0.377]}}]},{"ty":5,"nm":"Highlight","en":1,"ef":[{"ty":2,"nm":"Color","v":{"a":0,"k":[1,0.361,0.377]}}]}],"ind":1,"parent":8},{"ty":4,"nm":"bubble","sr":1,"st":0,"op":10798.799,"ip":0,"hd":true,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[272.075,245.691,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[272.207,146.933],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[307.207,110.933],"t":57.018,"ti":[0,0,0],"to":[0,0,0]},{"s":[272.207,146.933],"t":123.158}]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.489,"y":1},"s":[0],"t":6.842},{"o":{"x":0.494,"y":0},"i":{"x":0.519,"y":1},"s":[-16.557],"t":41.93},{"o":{"x":0.547,"y":0},"i":{"x":0.551,"y":1},"s":[8.915],"t":77.018},{"o":{"x":0.385,"y":0},"i":{"x":0.43,"y":1.633},"s":[-3.821],"t":103.334},{"s":[0],"t":130}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Group 1","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[44.97,0],[0,-44.97],[-12.308,-14.265],[0,0],[0,0],[-10.847,0],[0,44.969]],"o":[[-44.97,0],[0,20.319],[0,0],[0,0],[9.464,3.85],[44.97,0],[0,-44.97]],"v":[[0,-83.691],[-81.425,-2.266],[-61.672,50.898],[-68.116,83.691],[-30.66,73.182],[0,79.158],[81.425,-2.266]]}}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":14},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[340.075,162.191]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Group 2","it":[{"ty":"gr","nm":"Group 2","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[328.207,192.589],[351.944,192.589]]}}},{"ty":"st","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":14},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Group 3","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[340.075,169.05],[340.075,206.849]]}}},{"ty":"st","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":14},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Group 4","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-15.567],[15.641,0],[0,15.567],[-15.641,0]],"o":[[0,15.567],[-15.641,0],[0,-15.567],[15.641,0]],"v":[[28.321,0],[0,28.187],[-28.321,0],[0,-28.187]]}}},{"ty":"st","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":14},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[340.075,140.863]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"tr","a":{"a":0,"k":[340.075,141.762]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[340.075,141.762]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.489,"y":1},"s":[0],"t":11},{"o":{"x":0.494,"y":0},"i":{"x":0.519,"y":1},"s":[-16.557],"t":46.088},{"o":{"x":0.547,"y":0},"i":{"x":0.551,"y":1},"s":[8.915],"t":81.176},{"o":{"x":0.385,"y":0},"i":{"x":0.43,"y":1.633},"s":[-3.821],"t":107.492},{"s":[0],"t":134.158}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Head","sr":1,"st":0,"op":10798.799,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[191.364,297.865,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,200.095],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.189,"y":1},"s":[191.514,212.095],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.651,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,194.095],"t":60,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,212.095],"t":90,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[191.514,199.095],"t":114,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[191.514,199.095],"t":138.42},{"s":[191.514,202.095],"t":155}]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.475,"y":1},"s":[0],"t":4.838},{"o":{"x":0.426,"y":0},"i":{"x":0.339,"y":1},"s":[-8],"t":34},{"o":{"x":0.582,"y":0},"i":{"x":0.525,"y":1},"s":[5],"t":64},{"o":{"x":0.603,"y":0},"i":{"x":0.601,"y":1},"s":[-5],"t":94},{"o":{"x":0.422,"y":0},"i":{"x":0.681,"y":1.31},"s":[3],"t":118.193},{"s":[0],"t":142.58}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Group 1","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[4.662,4.662]],"o":[[-4.662,4.662],[0,0]],"v":[[8.441,-2.331],[-8.441,-2.331]]}],"t":0},{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[2.38,1.849]],"o":[[-2.38,1.849],[0,0]],"v":[[4.308,-0.924],[-4.308,-0.924]]}],"t":60},{"s":[{"c":false,"i":[[0,0],[4.662,4.662]],"o":[[-4.662,4.662],[0,0]],"v":[[8.441,-2.331],[-8.441,-2.331]]}],"t":120}]}},{"ty":"st","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":11},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,260.977]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Group 2","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.157,16.6],[25.37,0],[0,0],[-27.113,0],[0,27.113]],"o":[[-17.187,0],[-15.163,17.991],[0,0],[0,27.113],[27.114,0],[0,0]],"v":[[49.092,-24.529],[14.136,-53.952],[-49.092,-24.529],[-49.092,4.859],[-0.001,53.952],[49.092,4.859]]}}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":11},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,243.365]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Head 2","sr":1,"st":0,"op":10798.799,"ip":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[191.364,297.865,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,199.095],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.189,"y":1},"s":[191.514,212.095],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.651,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,194.095],"t":60,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[191.514,212.095],"t":90,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[191.514,199.095],"t":114,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[191.514,199.095],"t":138.42},{"s":[191.514,202.095],"t":155}]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.475,"y":1},"s":[0],"t":4.838},{"o":{"x":0.426,"y":0},"i":{"x":0.339,"y":1},"s":[-8],"t":34},{"o":{"x":0.582,"y":0},"i":{"x":0.525,"y":1},"s":[5],"t":64},{"o":{"x":0.603,"y":0},"i":{"x":0.601,"y":1},"s":[-5],"t":94},{"o":{"x":0.422,"y":0},"i":{"x":0.681,"y":1.31},"s":[3],"t":118.193},{"s":[0],"t":142.58}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Group 2","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.157,16.6],[25.37,0],[0,0],[-27.113,0],[0,27.113]],"o":[[-17.187,0],[-15.163,17.991],[0,0],[0,27.113],[27.114,0],[0,0]],"v":[[49.092,-24.529],[14.136,-53.952],[-49.092,-24.529],[-49.092,4.859],[-0.001,53.952],[49.092,4.859]]}}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[1,0.361,0.377]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,243.365]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"Body","sr":1,"st":0,"op":10798.799,"ip":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[191.364,352.25,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,257.295]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Group 1","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[-12.718,0],[0,12.719],[0,0]],"o":[[0,0],[0,12.719],[12.719,0],[0,0],[0,0]],"v":[[-23.029,-26.591],[-23.029,3.561],[-0.001,26.591],[23.029,3.561],[23.029,-26.591]]}}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":11},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,309.591]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","nm":"Group 2","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.788,-37.88],[-112.864,0.172],[-113.136,75.974],[114.717,76.586],[112.864,0.172],[82.789,-37.88],[22.669,-52.154]]}}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":11},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,369.345]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5,"tp":4},{"ty":4,"nm":"Mask","sr":1,"st":0,"op":10798.799,"ip":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[250.066,250.098,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250.066,154.143]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Body 2","it":[{"ty":"gr","nm":"Group 2","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.788,-37.88],[-112.864,0.172],[-112.864,52.155],[112.864,52.155],[112.864,0.172],[82.789,-37.88],[22.669,-52.154]]}],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.652,-46.38],[-112.728,-8.328],[-112.864,52.155],[112.864,52.155],[113,-8.328],[82.925,-46.38],[22.669,-52.154]]}],"t":30},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.788,-37.88],[-112.864,0.172],[-112.864,52.155],[112.864,52.155],[112.864,0.172],[82.789,-37.88],[22.669,-52.154]]}],"t":60},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.652,-46.38],[-112.728,-8.328],[-112.864,52.155],[112.864,52.155],[113,-8.328],[82.925,-46.38],[22.669,-52.154]]}],"t":90},{"s":[{"c":false,"i":[[0,0],[0,0],[0,-18.119],[0,0],[0,0],[0,0],[17.629,4.186],[0,0]],"o":[[0,0],[-17.63,4.186],[0,0],[0,0],[0,0],[0,-18.119],[0,0],[0,0]],"v":[[-22.669,-52.154],[-82.788,-37.88],[-112.864,0.172],[-112.864,52.155],[112.864,52.155],[112.864,0.172],[82.789,-37.88],[22.669,-52.154]]}],"t":120}]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[1,0.361,0.377]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,369.345]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"tr","a":{"a":0,"k":[191.364,352.25]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,352.25]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"Hair","sr":1,"st":0,"op":10798.799,"ip":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[191.364,175.258,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,179.258]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.475,"y":1},"s":[0],"t":16},{"o":{"x":0.426,"y":0},"i":{"x":0.339,"y":1},"s":[-8],"t":45.162},{"o":{"x":0.582,"y":0},"i":{"x":0.525,"y":1},"s":[5],"t":75.162},{"o":{"x":0.603,"y":0},"i":{"x":0.601,"y":1},"s":[-5],"t":105.162},{"o":{"x":0.422,"y":0},"i":{"x":0.681,"y":1.31},"s":[3],"t":129.355},{"s":[0],"t":153.742}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"Group 1","it":[{"ty":"sh","nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[60.022,27.729],[0,13.706],[-3.82,6.033],[0,0],[0,20.738],[-47.742,0],[0,-47.741],[-11.095,-17.52],[0,0],[0,-7.141],[10.939,-6.599]],"o":[[-10.939,-6.599],[0,-7.141],[0,0],[11.095,-17.52],[0,-47.741],[47.741,0],[0,20.738],[0,0],[3.821,6.033],[0,13.706],[-60.022,27.729]],"v":[[-94.604,87.706],[-112.864,55.413],[-107.015,35.244],[-103.428,29.579],[-86.443,-28.992],[0.001,-115.436],[86.444,-28.992],[103.428,29.579],[107.016,35.244],[112.865,55.413],[94.604,87.706]]}}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":11},"c":{"a":0,"k":[1,0.361,0.377]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191.364,248.725]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7,"parent":3,"tp":6},{"ty":3,"nm":"Zero | troke width - Color Ctrl","sr":1,"st":0,"op":180,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,151.045]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ind":8}]}]}
|
|
@@ -26,6 +26,7 @@ import opsitesPriorityStageAnimation from "../../assets/images/anims/service_lis
|
|
|
26
26
|
import bombAnimation from "../../assets/images/anims/service_list/bomb.json";
|
|
27
27
|
import dotAnimation from "../../assets/images/anims/service_list/dot_animation.json";
|
|
28
28
|
import starAnimation from "../../assets/images/anims/service_list/star_anim.json";
|
|
29
|
+
import femaleAnimation from "../../assets/images/anims/service_list/female_anim.json";
|
|
29
30
|
|
|
30
31
|
import RatingBlock from "../../ui/RatingBlock";
|
|
31
32
|
import DurationBlock from "../../ui/DurationBlock";
|
|
@@ -76,6 +77,9 @@ const ANIMATION_MAP: Record<string, Record<string, any>> = {
|
|
|
76
77
|
starAnimation: {
|
|
77
78
|
kupos: starAnimation,
|
|
78
79
|
},
|
|
80
|
+
femaaleAnimation: {
|
|
81
|
+
kupos: femaleAnimation,
|
|
82
|
+
},
|
|
79
83
|
};
|
|
80
84
|
|
|
81
85
|
function ServiceItemPB({
|
|
@@ -111,6 +115,7 @@ function ServiceItemPB({
|
|
|
111
115
|
viewersConfig,
|
|
112
116
|
showLoginModal,
|
|
113
117
|
isLoggedIn,
|
|
118
|
+
showLoginOption
|
|
114
119
|
}: ServiceItemProps & { currencySign?: string }): React.ReactElement {
|
|
115
120
|
const getAnimationIcon = (icon: string) => {
|
|
116
121
|
const animation = ANIMATION_MAP[icon];
|
|
@@ -430,6 +435,7 @@ function ServiceItemPB({
|
|
|
430
435
|
showLoginModal={showLoginModal}
|
|
431
436
|
viewersConfig={viewersConfig}
|
|
432
437
|
getAnimationIcon={getAnimationIcon}
|
|
438
|
+
showLoginOption={showLoginOption}
|
|
433
439
|
/>
|
|
434
440
|
)}
|
|
435
441
|
<div
|
|
@@ -518,6 +524,7 @@ function ServiceItemPB({
|
|
|
518
524
|
removeDuplicateSeats={removeDuplicateSeats}
|
|
519
525
|
isPeru={isPeru}
|
|
520
526
|
renderIcon={renderIcon}
|
|
527
|
+
discountSeatPriceColor={colors.discountSeatPriceColor}
|
|
521
528
|
/>
|
|
522
529
|
</div>
|
|
523
530
|
|
|
@@ -247,6 +247,7 @@ function ServiceItemMobile({
|
|
|
247
247
|
removeDuplicateSeats={removeDuplicateSeats}
|
|
248
248
|
serviceItem={serviceItem}
|
|
249
249
|
showLastSeats={showLastSeats}
|
|
250
|
+
discountSeatPriceColor={colors.discountSeatPriceColor}
|
|
250
251
|
/>
|
|
251
252
|
|
|
252
253
|
{hasDiscount && (
|
|
@@ -269,7 +270,7 @@ function ServiceItemMobile({
|
|
|
269
270
|
color: colors.tooltipBgColor,
|
|
270
271
|
}}
|
|
271
272
|
>
|
|
272
|
-
|
|
273
|
+
¡Últimos Asientos!
|
|
273
274
|
</div>
|
|
274
275
|
)}
|
|
275
276
|
</div>
|
|
@@ -302,6 +303,9 @@ function ServiceItemMobile({
|
|
|
302
303
|
setIsExpanded(isItemExpanded ? null : serviceItem.id);
|
|
303
304
|
}}
|
|
304
305
|
isPeru={isPeru}
|
|
306
|
+
femaleAnim={serviceItem.icons.femaleAnim}
|
|
307
|
+
ladiesBookedSeats={serviceItem.ladies_booked_seats}
|
|
308
|
+
isDpEnabled={serviceItem.is_dp_enabled}
|
|
305
309
|
/>
|
|
306
310
|
</div>
|
|
307
311
|
|
|
@@ -332,7 +336,10 @@ function ServiceItemMobile({
|
|
|
332
336
|
style={{ lineHeight: 1.6 }}
|
|
333
337
|
>
|
|
334
338
|
<div className="flex justify-between items-center">
|
|
335
|
-
{serviceItem?.is_dp_enabled
|
|
339
|
+
{serviceItem?.is_dp_enabled &&
|
|
340
|
+
Object.keys(serviceItem?.dp_discount_percents ?? {}).length ===
|
|
341
|
+
0 &&
|
|
342
|
+
(serviceItem?.dp_discounted_seats ?? []).length === 0 ? (
|
|
336
343
|
<div className="flex items-center gap-[6px]">
|
|
337
344
|
{/* {renderIcon("whiteFireIcon", "14px")} */}
|
|
338
345
|
<LottiePlayer
|
|
@@ -414,77 +421,8 @@ function ServiceItemMobile({
|
|
|
414
421
|
</span>
|
|
415
422
|
</span>
|
|
416
423
|
</div>
|
|
417
|
-
{/* <div className="flex items-center">
|
|
418
|
-
<span className="whitespace-nowrap">
|
|
419
|
-
{serviceItem?.is_dp_enabled ? null : "Quedan pocos • "}
|
|
420
|
-
<span
|
|
421
|
-
className="bold-text"
|
|
422
|
-
ref={(node) =>
|
|
423
|
-
commonService.startComprandoCount(node, 4, 16)
|
|
424
|
-
}
|
|
425
|
-
style={{ fontVariantNumeric: "tabular-nums" }}
|
|
426
|
-
/>{" "}
|
|
427
|
-
comprando
|
|
428
|
-
</span>
|
|
429
|
-
</div> */}
|
|
430
424
|
</div>
|
|
431
425
|
</div>
|
|
432
|
-
{/* <div className="flex flex-col gap-[4px]">
|
|
433
|
-
<div
|
|
434
|
-
className={`flex ${isLongOfferText ? "items-start" : "items-center"}`}
|
|
435
|
-
>
|
|
436
|
-
<div className={isLongOfferText ? "mt-[2px]" : ""}>
|
|
437
|
-
<LottiePlayer
|
|
438
|
-
animationData={serviceItem.icons.bombAnim}
|
|
439
|
-
width="12px"
|
|
440
|
-
height="12px"
|
|
441
|
-
/>
|
|
442
|
-
</div>
|
|
443
|
-
<div
|
|
444
|
-
className={`ml-[6px] flex-1 outline-none ${isLongOfferText ? "mt-[2px]" : ""}`}
|
|
445
|
-
style={{
|
|
446
|
-
color: "#fff",
|
|
447
|
-
lineHeight: 1.4,
|
|
448
|
-
}}
|
|
449
|
-
>
|
|
450
|
-
<span className="min-[380px]:text-[12px] bold-text">
|
|
451
|
-
{serviceItem?.offer_text || ""}
|
|
452
|
-
</span>{" "}
|
|
453
|
-
<span className="min-[380px]:text-[12px]">|</span>{" "}
|
|
454
|
-
<span className="whitespace-nowrap min-[380px]:text-[12px]">
|
|
455
|
-
Termina en
|
|
456
|
-
<span
|
|
457
|
-
className="bold-text"
|
|
458
|
-
ref={(node) => commonService.startCountdown(node, 599)}
|
|
459
|
-
style={{
|
|
460
|
-
fontVariantNumeric: "tabular-nums",
|
|
461
|
-
display: "inline-block",
|
|
462
|
-
}}
|
|
463
|
-
/>
|
|
464
|
-
</span>
|
|
465
|
-
</div>
|
|
466
|
-
</div>
|
|
467
|
-
<div
|
|
468
|
-
className="flex items-start"
|
|
469
|
-
style={{
|
|
470
|
-
color: "#fff",
|
|
471
|
-
}}
|
|
472
|
-
>
|
|
473
|
-
<div>{renderIcon("personIcon", "16px")}</div>
|
|
474
|
-
<span className="flex-1" style={{ lineHeight: 1.4 }}>
|
|
475
|
-
<span
|
|
476
|
-
className="bold-text"
|
|
477
|
-
ref={(node) => commonService.startViewerCount(node, viewersConfig)}
|
|
478
|
-
style={{ fontVariantNumeric: "tabular-nums" }}
|
|
479
|
-
/>{" "}
|
|
480
|
-
<span className="bold-text">personas</span>{" "}
|
|
481
|
-
<span>
|
|
482
|
-
{" "}
|
|
483
|
-
{viewersConfig.label || " están viendo este viaje"}
|
|
484
|
-
</span>
|
|
485
|
-
</span>
|
|
486
|
-
</div>
|
|
487
|
-
</div> */}
|
|
488
426
|
</div>
|
|
489
427
|
</div>
|
|
490
428
|
)}
|
|
@@ -516,6 +454,8 @@ function ServiceItemMobile({
|
|
|
516
454
|
petFriendlyAnim={serviceItem.icons.petFriendlyAnim}
|
|
517
455
|
isSoldOut={isSoldOut}
|
|
518
456
|
isChangeTicket={serviceItem.is_change_ticket === true}
|
|
457
|
+
ladiesBookedSeats={serviceItem.ladies_booked_seats}
|
|
458
|
+
isDpEnabled={serviceItem.is_dp_enabled}
|
|
519
459
|
/>
|
|
520
460
|
</div>
|
|
521
461
|
</div>
|
|
@@ -37,11 +37,14 @@ export interface MobileServiceItemProps {
|
|
|
37
37
|
change_ticket_hours?: number;
|
|
38
38
|
duration?: number;
|
|
39
39
|
train_type_label?: string;
|
|
40
|
+
ladies_booked_seats?: string;
|
|
40
41
|
is_dp_enabled?: boolean;
|
|
41
42
|
offer_text?: string;
|
|
42
43
|
is_direct_trip?: boolean;
|
|
43
44
|
is_train_type?: boolean;
|
|
44
45
|
operator_service_name?: string;
|
|
46
|
+
dp_discount_percents?: Record<string, number>;
|
|
47
|
+
dp_discounted_seats?: string[];
|
|
45
48
|
dep_validation_text?: string;
|
|
46
49
|
metaData?: {};
|
|
47
50
|
is_tracking_enabled?: boolean;
|
|
@@ -123,6 +126,7 @@ export interface MobileServiceItemProps {
|
|
|
123
126
|
fireIcon?: string;
|
|
124
127
|
directoIcon?: string;
|
|
125
128
|
whiteFireIcon?: string
|
|
129
|
+
femaleAnim?:string
|
|
126
130
|
[key: string]: string | Record<string, string | undefined> | undefined;
|
|
127
131
|
};
|
|
128
132
|
useLottieFor?: string[];
|
|
@@ -171,6 +175,7 @@ export interface MobileServiceItemProps {
|
|
|
171
175
|
seatPriceColor?: string;
|
|
172
176
|
rightGradiantColor?: string;
|
|
173
177
|
leftGradiantColor?: string;
|
|
178
|
+
discountSeatPriceColor?: string
|
|
174
179
|
};
|
|
175
180
|
isCiva?: boolean;
|
|
176
181
|
currencySign?: string;
|
|
@@ -41,15 +41,16 @@ export interface ServiceItemProps {
|
|
|
41
41
|
offer_text?: string;
|
|
42
42
|
is_direct_trip?: boolean;
|
|
43
43
|
is_dp_enabled?: boolean;
|
|
44
|
-
dp_discount_percents?:
|
|
45
|
-
dp_discounted_seats?:
|
|
46
|
-
original_dp_price?:
|
|
44
|
+
dp_discount_percents?: any;
|
|
45
|
+
dp_discounted_seats?: any;
|
|
46
|
+
original_dp_price?: any;
|
|
47
47
|
discount_type?: string;
|
|
48
48
|
discount_value?: number;
|
|
49
49
|
max_discount?: number;
|
|
50
50
|
is_transpordo?: boolean;
|
|
51
51
|
is_train_type?: boolean;
|
|
52
52
|
operator_service_name?: string;
|
|
53
|
+
ladies_booked_seats?: string;
|
|
53
54
|
dep_validation_text?: string;
|
|
54
55
|
metaData?: {};
|
|
55
56
|
is_tracking_enabled?: boolean;
|
|
@@ -129,6 +130,7 @@ export interface ServiceItemProps {
|
|
|
129
130
|
downArrow?:string
|
|
130
131
|
personIcon?: string
|
|
131
132
|
whiteFireIcon?: string
|
|
133
|
+
fireIcon?: string
|
|
132
134
|
|
|
133
135
|
[key: string]: string | Record<string, string | undefined> | undefined;
|
|
134
136
|
};
|
|
@@ -159,6 +161,7 @@ export interface ServiceItemProps {
|
|
|
159
161
|
seatPriceColor?: string;
|
|
160
162
|
rightGradiantColor?: string;
|
|
161
163
|
leftGradiantColor?: string;
|
|
164
|
+
discountSeatPriceColor?: string
|
|
162
165
|
};
|
|
163
166
|
cityOrigin?: { value: number; label: string };
|
|
164
167
|
cityDestination?: { value: number; label: string };
|
|
@@ -222,5 +225,6 @@ export interface ServiceItemProps {
|
|
|
222
225
|
};
|
|
223
226
|
showLoginModal?: any
|
|
224
227
|
isLoggedIn?: any
|
|
228
|
+
showLoginOption?: boolean
|
|
225
229
|
|
|
226
230
|
}
|
package/src/types.ts
CHANGED
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import LottiePlayer from "../../assets/LottiePlayer";
|
|
3
3
|
import FlexibleBlock from "../FlexibleBlock";
|
|
4
4
|
import PetBlock from "../PetBlock";
|
|
5
|
+
import FemaleBlock from "../FemaleBlock";
|
|
5
6
|
|
|
6
7
|
interface ItemEntry {
|
|
7
8
|
key: string;
|
|
@@ -15,6 +16,8 @@ interface BottomAmenitiesProps {
|
|
|
15
16
|
is_tracking_enabled?: boolean;
|
|
16
17
|
is_change_ticket?: boolean;
|
|
17
18
|
pet_seat_info?: Record<string, any>;
|
|
19
|
+
ladies_booked_seats?: any;
|
|
20
|
+
is_dp_enabled?: boolean;
|
|
18
21
|
};
|
|
19
22
|
grayscaleClass: string;
|
|
20
23
|
isSoldOut: boolean;
|
|
@@ -86,6 +89,17 @@ function BottomAmenities({
|
|
|
86
89
|
isSoldOut={isSoldOut}
|
|
87
90
|
/>
|
|
88
91
|
)}
|
|
92
|
+
{serviceItem.ladies_booked_seats &&
|
|
93
|
+
String(serviceItem.ladies_booked_seats).trim() !== "" &&
|
|
94
|
+
serviceItem?.is_dp_enabled === true && (
|
|
95
|
+
<FemaleBlock
|
|
96
|
+
translation={translation}
|
|
97
|
+
getAnimationIcon={getAnimationIcon}
|
|
98
|
+
colors={colors}
|
|
99
|
+
serviceItem={serviceItem}
|
|
100
|
+
isSoldOut={isSoldOut}
|
|
101
|
+
/>
|
|
102
|
+
)}
|
|
89
103
|
{hasPetInfo && (
|
|
90
104
|
<PetBlock
|
|
91
105
|
translation={translation}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import LottiePlayer from "../assets/LottiePlayer";
|
|
3
|
+
|
|
4
|
+
const FemaleBlock = ({
|
|
5
|
+
translation,
|
|
6
|
+
getAnimationIcon,
|
|
7
|
+
colors,
|
|
8
|
+
serviceItem,
|
|
9
|
+
isSoldOut,
|
|
10
|
+
}) => (
|
|
11
|
+
<div className="flex items-center">
|
|
12
|
+
<div className="relative group cursor-pointer">
|
|
13
|
+
<div className="flex items-center">
|
|
14
|
+
<div className={`mr-[5px] ${isSoldOut ? "grayscale" : ""}`}>
|
|
15
|
+
<LottiePlayer
|
|
16
|
+
// animationData={serviceItem.icons.flexibleAnim}
|
|
17
|
+
animationData={getAnimationIcon("femaaleAnimation")}
|
|
18
|
+
width="20px"
|
|
19
|
+
height="20px"
|
|
20
|
+
/>
|
|
21
|
+
</div>
|
|
22
|
+
{/* <div className="h-auto mr-[4px] text-[13px] text-[#464647]">
|
|
23
|
+
<span>{translation?.flexible}</span>
|
|
24
|
+
</div> */}
|
|
25
|
+
</div>
|
|
26
|
+
<div
|
|
27
|
+
className="hidden group-hover:block absolute top-[24px] left-1/2 -translate-x-1/2 text-white p-3 rounded-[14px] whitespace-normal z-10 mt-2.5 w-[230px] text-center break-normal shadow-service text-[12px]"
|
|
28
|
+
style={{
|
|
29
|
+
backgroundColor: colors.bottomStripColor,
|
|
30
|
+
lineHeight: "1.5",
|
|
31
|
+
zIndex: "1000",
|
|
32
|
+
}}
|
|
33
|
+
>
|
|
34
|
+
{/* Tooltip arrow */}
|
|
35
|
+
<div
|
|
36
|
+
className="tooltip-arrow absolute -top-[7px] left-1/2 -translate-x-1/2 w-0 h-0 border-l-8 border-r-8 border-b-8 border-l-transparent border-r-transparent "
|
|
37
|
+
style={{ borderBottomColor: colors.bottomStripColor }}
|
|
38
|
+
></div>
|
|
39
|
+
Esta empresa cuenta con asientos recomendados para mujeres.
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
export default FemaleBlock;
|
package/src/ui/OfferBanner.tsx
CHANGED
|
@@ -8,13 +8,17 @@ interface OfferBannerProps {
|
|
|
8
8
|
isSoldOut: boolean;
|
|
9
9
|
serviceItem: Pick<
|
|
10
10
|
ServiceItemProps["serviceItem"],
|
|
11
|
-
|
|
11
|
+
| "is_dp_enabled"
|
|
12
|
+
| "offer_text"
|
|
13
|
+
| "dp_discount_percents"
|
|
14
|
+
| "dp_discounted_seats"
|
|
12
15
|
>;
|
|
13
16
|
renderIcon: (name: string, size: string) => React.ReactNode;
|
|
14
17
|
isLoggedIn: any;
|
|
15
18
|
showLoginModal: any;
|
|
16
19
|
viewersConfig: ServiceItemProps["viewersConfig"];
|
|
17
20
|
getAnimationIcon: (name: string) => any;
|
|
21
|
+
showLoginOption?: boolean
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
const OfferBanner: React.FC<OfferBannerProps> = ({
|
|
@@ -26,6 +30,7 @@ const OfferBanner: React.FC<OfferBannerProps> = ({
|
|
|
26
30
|
showLoginModal,
|
|
27
31
|
viewersConfig,
|
|
28
32
|
getAnimationIcon,
|
|
33
|
+
showLoginOption
|
|
29
34
|
}) => {
|
|
30
35
|
return (
|
|
31
36
|
<div
|
|
@@ -38,7 +43,9 @@ const OfferBanner: React.FC<OfferBannerProps> = ({
|
|
|
38
43
|
>
|
|
39
44
|
<div className="flex justify-between items-center w-full">
|
|
40
45
|
<div className="flex items-center ">
|
|
41
|
-
{serviceItem?.is_dp_enabled
|
|
46
|
+
{serviceItem?.is_dp_enabled &&
|
|
47
|
+
Object.keys(serviceItem?.dp_discount_percents ?? {}).length === 0 &&
|
|
48
|
+
(serviceItem?.dp_discounted_seats ?? []).length === 0 ? (
|
|
42
49
|
<div className="flex items-center gap-[5px]">
|
|
43
50
|
{/* {renderIcon("whiteFireIcon", "14px")} */}
|
|
44
51
|
<LottiePlayer
|
|
@@ -57,18 +64,24 @@ const OfferBanner: React.FC<OfferBannerProps> = ({
|
|
|
57
64
|
height="18px"
|
|
58
65
|
/>
|
|
59
66
|
<div className="flex items-center mt-[2px]">
|
|
60
|
-
<span
|
|
67
|
+
<span
|
|
68
|
+
className="bold-text"
|
|
69
|
+
style={{
|
|
70
|
+
marginLeft: serviceItem?.offer_text ? "6px" : "3px",
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
61
73
|
{(serviceItem?.offer_text || "").length > 30
|
|
62
74
|
? (serviceItem?.offer_text || "").slice(0, 30) + "..."
|
|
63
75
|
: serviceItem?.offer_text || ""}{" "}
|
|
64
|
-
{isLoggedIn ? null : (
|
|
76
|
+
{isLoggedIn && showLoginOption ? null : (
|
|
65
77
|
<span onClick={showLoginModal} className="cursor-pointer">
|
|
66
78
|
- registro
|
|
67
79
|
</span>
|
|
68
80
|
)}{" "}
|
|
69
81
|
|
|
70
82
|
</span>{" "}
|
|
71
|
-
|
|
|
83
|
+
{serviceItem?.offer_text ? "|" : ""}
|
|
84
|
+
Termina en
|
|
72
85
|
<span
|
|
73
86
|
className="bold-text text-end"
|
|
74
87
|
ref={(node) => CommonService.startCountdown(node, 599)}
|
|
@@ -102,7 +115,12 @@ const OfferBanner: React.FC<OfferBannerProps> = ({
|
|
|
102
115
|
{" "}
|
|
103
116
|
{viewersConfig?.label || " viendo"} |{" "}
|
|
104
117
|
<span className="">
|
|
105
|
-
{serviceItem?.is_dp_enabled
|
|
118
|
+
{serviceItem?.is_dp_enabled &&
|
|
119
|
+
Object.keys(serviceItem?.dp_discount_percents ?? {}).length ===
|
|
120
|
+
0 &&
|
|
121
|
+
(serviceItem?.dp_discounted_seats ?? []).length === 0
|
|
122
|
+
? null
|
|
123
|
+
: "Quedan pocos • "}
|
|
106
124
|
<span
|
|
107
125
|
className="bold-text"
|
|
108
126
|
ref={(node) => CommonService.startComprandoCount(node, 4, 16)}
|