@odynn/awayz-hotels 0.3.2 → 0.3.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/components/HotelResult/HotelResult.js +103 -90
- package/dist/hooks/useHotelDetails/useHotelDetails.api.js +30 -29
- package/dist/hooks/useHotelSearch/useHotelSearch.js +9 -9
- package/dist/lib/components/HotelResult/HotelResult.d.ts +5 -1
- package/dist/lib/hooks/useHotelDetails/useHotelDetails.types.d.ts +24 -0
- package/dist/lib/utilities/hotelUtils/hotelUtils.d.ts +12 -0
- package/dist/services/hotel/HotelService.js +51 -47
- package/dist/utilities/hotelUtils/hotelUtils.js +36 -29
- package/package.json +2 -2
|
@@ -1,153 +1,166 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
1
|
+
import { jsxs as C, jsx as Q } from "react/jsx-runtime";
|
|
2
|
+
import { useState as l, useRef as T, useEffect as t } from "react";
|
|
3
3
|
import '../../assets/_styles.css';/* empty css */
|
|
4
|
-
import { o as
|
|
4
|
+
import { o as Y } from "../../stringUtils-CvWpky85.js";
|
|
5
5
|
import "../../moment-BGjjqtLQ.js";
|
|
6
6
|
import "../../arrayExtensions-CFEBYUok.js";
|
|
7
|
-
import { UnavailableDate as
|
|
8
|
-
import { e as
|
|
9
|
-
import { HotelChains as
|
|
10
|
-
import
|
|
11
|
-
import { getBookingOptions as
|
|
12
|
-
import { CashValue as
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
import { UnavailableDate as K } from "../Banners/UnavailableDate/UnavailableDate.js";
|
|
8
|
+
import { e as R, f as k, d as G, g as m, h as J } from "../../index-gse40uZM.js";
|
|
9
|
+
import { HotelChains as x } from "../../definitions/HotelChains.js";
|
|
10
|
+
import V, { ERatingColor as y } from "../Banners/Ratings/Ratings.js";
|
|
11
|
+
import { getHotelImageUrls as b, getBookingOptions as z, loadImageWithFallback as M } from "../../utilities/hotelUtils/hotelUtils.js";
|
|
12
|
+
import { CashValue as Z } from "@odynn/awayz-core";
|
|
13
|
+
import { EHotelSortOption as $ } from "../../enums/index.js";
|
|
14
|
+
const _ = (...A) => A.join(" ");
|
|
15
|
+
function AA(A) {
|
|
16
|
+
if (!A || isNaN(A) || A < 0) return "N/A";
|
|
17
|
+
let I = A == null ? void 0 : A.toString().split(".")[0];
|
|
18
|
+
return I == null ? void 0 : I.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
18
19
|
}
|
|
19
|
-
const oe = ({
|
|
20
|
-
details:
|
|
21
|
-
onHotelSelect:
|
|
22
|
-
onViewDetails:
|
|
23
|
-
customStyling:
|
|
24
|
-
isSelected:
|
|
25
|
-
showBookableTag:
|
|
26
|
-
customBookableTag:
|
|
20
|
+
const QA = "data:image/png;base64,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", dA = ({
|
|
21
|
+
details: A,
|
|
22
|
+
onHotelSelect: I,
|
|
23
|
+
onViewDetails: S,
|
|
24
|
+
customStyling: i = !1,
|
|
25
|
+
isSelected: B,
|
|
26
|
+
showBookableTag: U = !1,
|
|
27
|
+
customBookableTag: p = $.BOOKABLE,
|
|
28
|
+
customFallbackImage: D = QA
|
|
27
29
|
}) => {
|
|
28
|
-
var
|
|
29
|
-
const [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
var P, w, h, q;
|
|
31
|
+
const [E, v] = l(B), d = T(null), [j, u] = l(""), f = b(A.images)[0], c = ((h = (w = (P = A.cashBookingOffers) == null ? void 0 : P.photos) == null ? void 0 : w[0]) == null ? void 0 : h.url) ?? "", N = async () => {
|
|
32
|
+
const o = await M(
|
|
33
|
+
f,
|
|
34
|
+
c,
|
|
35
|
+
D
|
|
36
|
+
);
|
|
37
|
+
u(o);
|
|
38
|
+
};
|
|
39
|
+
t(() => {
|
|
40
|
+
N();
|
|
41
|
+
}, [f, c]);
|
|
42
|
+
const {
|
|
43
|
+
transferPartners: g,
|
|
44
|
+
bestBookingOption: a,
|
|
45
|
+
alternateBookingOption: n,
|
|
33
46
|
hasPoints: F,
|
|
34
|
-
cashAmount:
|
|
35
|
-
cashCurrency:
|
|
36
|
-
isHotelChain:
|
|
37
|
-
} =
|
|
38
|
-
return
|
|
39
|
-
|
|
40
|
-
}, [
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
return
|
|
44
|
-
clearTimeout(
|
|
47
|
+
cashAmount: s,
|
|
48
|
+
cashCurrency: L,
|
|
49
|
+
isHotelChain: X
|
|
50
|
+
} = z(A), [e, O] = l(0), r = g == null ? void 0 : g[e], H = (r == null ? void 0 : r.value) > 0 || (a == null ? void 0 : a.value) > 0 || (n == null ? void 0 : n.value) > 0 || s > 0;
|
|
51
|
+
return t(() => {
|
|
52
|
+
B !== void 0 && v(B);
|
|
53
|
+
}, [B]), t(() => {
|
|
54
|
+
const o = setTimeout(() => {
|
|
55
|
+
const W = e >= (g == null ? void 0 : g.length) - 1 ? 0 : e + 1;
|
|
56
|
+
return O(W), () => {
|
|
57
|
+
clearTimeout(o);
|
|
45
58
|
};
|
|
46
59
|
}, 2e3);
|
|
47
|
-
}, [
|
|
48
|
-
|
|
60
|
+
}, [e, g == null ? void 0 : g.length]), t(() => {
|
|
61
|
+
E && d.current.scrollIntoView({
|
|
49
62
|
behavior: "smooth",
|
|
50
63
|
block: "center"
|
|
51
64
|
});
|
|
52
|
-
}, [
|
|
65
|
+
}, [E]), /* @__PURE__ */ C(
|
|
53
66
|
"div",
|
|
54
67
|
{
|
|
55
|
-
ref:
|
|
56
|
-
className:
|
|
57
|
-
|
|
68
|
+
ref: d,
|
|
69
|
+
className: _(
|
|
70
|
+
i ? "hotel-result" : "awayz-hotel-result",
|
|
58
71
|
// insufficient_points ? 'insufficient-points' : '',
|
|
59
|
-
|
|
72
|
+
E ? "go-to-journey-button" : ""
|
|
60
73
|
),
|
|
61
74
|
"data-testid": "search-result",
|
|
62
75
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
76
|
+
/* @__PURE__ */ C(
|
|
64
77
|
"div",
|
|
65
78
|
{
|
|
66
79
|
className: "content",
|
|
67
80
|
onClick: () => {
|
|
68
|
-
|
|
81
|
+
v(!E), I(A);
|
|
69
82
|
},
|
|
70
83
|
children: [
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
/* @__PURE__ */
|
|
84
|
+
/* @__PURE__ */ C("div", { className: "details", children: [
|
|
85
|
+
/* @__PURE__ */ Q(
|
|
73
86
|
"div",
|
|
74
87
|
{
|
|
75
88
|
className: "hotel-image",
|
|
76
89
|
style: {
|
|
77
|
-
backgroundImage: `url(${
|
|
90
|
+
backgroundImage: `url(${j})`
|
|
78
91
|
},
|
|
79
|
-
children: /* @__PURE__ */
|
|
80
|
-
/* @__PURE__ */
|
|
81
|
-
/* @__PURE__ */
|
|
92
|
+
children: /* @__PURE__ */ C("div", { className: "hotel-chain", children: [
|
|
93
|
+
/* @__PURE__ */ Q(R, {}),
|
|
94
|
+
/* @__PURE__ */ Q("p", { children: x.toString(A.hotelGroup) })
|
|
82
95
|
] })
|
|
83
96
|
}
|
|
84
97
|
),
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
/* @__PURE__ */
|
|
87
|
-
/* @__PURE__ */
|
|
88
|
-
!!((
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
-
/* @__PURE__ */
|
|
98
|
+
/* @__PURE__ */ C("div", { className: "info", children: [
|
|
99
|
+
/* @__PURE__ */ C("div", { className: "hotel-data", children: [
|
|
100
|
+
/* @__PURE__ */ C("div", { className: "hotel-information", children: [
|
|
101
|
+
!!((q = A.cashBookingOffers) != null && q.accommodationId) && U && /* @__PURE__ */ C("div", { children: [
|
|
102
|
+
/* @__PURE__ */ Q(k, {}),
|
|
103
|
+
/* @__PURE__ */ Q("p", { children: p })
|
|
91
104
|
] }),
|
|
92
|
-
/* @__PURE__ */
|
|
93
|
-
|
|
105
|
+
/* @__PURE__ */ Q(
|
|
106
|
+
V,
|
|
94
107
|
{
|
|
95
|
-
starRating:
|
|
96
|
-
starColor:
|
|
97
|
-
userRating:
|
|
108
|
+
starRating: A.chainRating ?? 0,
|
|
109
|
+
starColor: y.PRIMARY,
|
|
110
|
+
userRating: A.reviewRating ?? "",
|
|
98
111
|
fill: !0
|
|
99
112
|
}
|
|
100
113
|
),
|
|
101
|
-
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
-
/* @__PURE__ */
|
|
114
|
+
A.freeNight && /* @__PURE__ */ C("div", { children: [
|
|
115
|
+
/* @__PURE__ */ Q(G, {}),
|
|
116
|
+
/* @__PURE__ */ Q("p", { children: "Free Night" })
|
|
104
117
|
] }),
|
|
105
|
-
typeof
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
-
|
|
118
|
+
typeof A.nthNightFree == "number" && A.nthNightFree > 0 && /* @__PURE__ */ C("div", { children: [
|
|
119
|
+
/* @__PURE__ */ Q(m, {}),
|
|
120
|
+
/* @__PURE__ */ C("p", { children: [
|
|
121
|
+
Y(A.nthNightFree),
|
|
109
122
|
" Night Free"
|
|
110
123
|
] })
|
|
111
124
|
] })
|
|
112
125
|
] }),
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
/* @__PURE__ */
|
|
126
|
+
/* @__PURE__ */ Q("p", { className: "hotel-name", children: A.name }),
|
|
127
|
+
/* @__PURE__ */ Q("p", { className: "hotel-address", children: A.address })
|
|
115
128
|
] }),
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
|
|
129
|
+
/* @__PURE__ */ Q(
|
|
130
|
+
K,
|
|
118
131
|
{
|
|
119
132
|
hasPoints: F,
|
|
120
|
-
isAvailable:
|
|
133
|
+
isAvailable: H,
|
|
121
134
|
selectedHotel: () => {
|
|
122
135
|
},
|
|
123
|
-
chainName:
|
|
136
|
+
chainName: A.hotelGroup
|
|
124
137
|
}
|
|
125
138
|
)
|
|
126
139
|
] })
|
|
127
140
|
] }),
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
/* @__PURE__ */
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
-
|
|
141
|
+
H && /* @__PURE__ */ C("div", { className: "payments", children: [
|
|
142
|
+
X && /* @__PURE__ */ C("div", { className: "payment-details", children: [
|
|
143
|
+
/* @__PURE__ */ Q("p", { children: "POINTS" }),
|
|
144
|
+
/* @__PURE__ */ Q("p", { children: AA(A.awardPoints) }),
|
|
145
|
+
A.bestValue === "points" && /* @__PURE__ */ Q("p", { className: "best-value", children: "Best Value" })
|
|
133
146
|
] }),
|
|
134
|
-
/* @__PURE__ */
|
|
135
|
-
/* @__PURE__ */
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
|
|
147
|
+
/* @__PURE__ */ C("div", { className: "payment-details", children: [
|
|
148
|
+
/* @__PURE__ */ Q("p", { children: "CASH" }),
|
|
149
|
+
/* @__PURE__ */ Q(Z, { amount: s, currency: L }),
|
|
150
|
+
A.bestValue === "cash" && /* @__PURE__ */ Q("p", { className: "best-value", children: "Best Value" })
|
|
138
151
|
] })
|
|
139
152
|
] })
|
|
140
153
|
]
|
|
141
154
|
}
|
|
142
155
|
),
|
|
143
|
-
/* @__PURE__ */
|
|
156
|
+
/* @__PURE__ */ Q(
|
|
144
157
|
"button",
|
|
145
158
|
{
|
|
146
159
|
"data-testid": "go-to-journey-button",
|
|
147
160
|
onClick: () => {
|
|
148
|
-
|
|
161
|
+
S(A);
|
|
149
162
|
},
|
|
150
|
-
children: /* @__PURE__ */
|
|
163
|
+
children: /* @__PURE__ */ Q(J, {})
|
|
151
164
|
}
|
|
152
165
|
)
|
|
153
166
|
]
|
|
@@ -155,5 +168,5 @@ const oe = ({
|
|
|
155
168
|
);
|
|
156
169
|
};
|
|
157
170
|
export {
|
|
158
|
-
|
|
171
|
+
dA as HotelResult
|
|
159
172
|
};
|
|
@@ -7,9 +7,9 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
7
7
|
l.toProgram(o)
|
|
8
8
|
), T = async ({
|
|
9
9
|
hotel: o,
|
|
10
|
-
checkinDate:
|
|
10
|
+
checkinDate: t,
|
|
11
11
|
checkoutDate: e,
|
|
12
|
-
updateHotel:
|
|
12
|
+
updateHotel: s
|
|
13
13
|
}) => {
|
|
14
14
|
let n = o, i = o.rooms ?? [];
|
|
15
15
|
if (!o.liveScrapingCheckNeeded || o.hotelGroup === l.Marriott)
|
|
@@ -22,7 +22,7 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
22
22
|
const a = await f.hotelPointsCheck({
|
|
23
23
|
hotelGroup: o.hotelGroup,
|
|
24
24
|
hotelId: o.hotelId,
|
|
25
|
-
checkinDate:
|
|
25
|
+
checkinDate: t,
|
|
26
26
|
checkoutDate: e
|
|
27
27
|
});
|
|
28
28
|
r = a.success, c = a.data;
|
|
@@ -37,7 +37,7 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
37
37
|
points: a.points.pointsValue,
|
|
38
38
|
pointsType: a.points.pointsType,
|
|
39
39
|
bestValue: u ? m.NONE : o.bestValue
|
|
40
|
-
}, i = a.rooms ?? o.rooms ?? [],
|
|
40
|
+
}, i = a.rooms ?? o.rooms ?? [], s(o.hotelId, o.hotelGroup, n);
|
|
41
41
|
}
|
|
42
42
|
return {
|
|
43
43
|
pointsHotelDetails: n,
|
|
@@ -45,9 +45,9 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
45
45
|
};
|
|
46
46
|
}, A = async ({
|
|
47
47
|
hotel: o,
|
|
48
|
-
checkinDate:
|
|
48
|
+
checkinDate: t,
|
|
49
49
|
checkoutDate: e,
|
|
50
|
-
guests:
|
|
50
|
+
guests: s,
|
|
51
51
|
rooms: n,
|
|
52
52
|
updateHotel: i,
|
|
53
53
|
numberOfNights: r
|
|
@@ -59,10 +59,10 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
59
59
|
cashRooms: []
|
|
60
60
|
};
|
|
61
61
|
const c = (h) => Array.from({ length: h }, () => ({ type: y.ADULT })), a = await d.getAvailableRooms({
|
|
62
|
-
checkinDate:
|
|
62
|
+
checkinDate: t,
|
|
63
63
|
checkoutDate: e,
|
|
64
64
|
accommodationId: o.cashBookingOffers.accommodationId,
|
|
65
|
-
guests: c(
|
|
65
|
+
guests: c(s),
|
|
66
66
|
rooms: n
|
|
67
67
|
}), p = {
|
|
68
68
|
...o,
|
|
@@ -76,49 +76,50 @@ const w = async (o) => await f.getTransferPartners(
|
|
|
76
76
|
cashHotelDetails: p,
|
|
77
77
|
cashRooms: a.availableRooms
|
|
78
78
|
};
|
|
79
|
-
}, G = async (o,
|
|
80
|
-
const { success:
|
|
81
|
-
days:
|
|
79
|
+
}, G = async (o, t, e) => {
|
|
80
|
+
const { success: s, data: n } = await f.getRecommendations({
|
|
81
|
+
days: t,
|
|
82
82
|
hotels: [o],
|
|
83
83
|
userCurrency: e
|
|
84
84
|
});
|
|
85
|
-
return
|
|
85
|
+
return s ? {
|
|
86
86
|
bestCheckout: n,
|
|
87
87
|
isAvailable: n.nightlyPointsCost > 0 || n.nightlyCashCost > 0
|
|
88
88
|
} : {
|
|
89
|
-
bestCheckout: C(o,
|
|
89
|
+
bestCheckout: C(o, t),
|
|
90
90
|
isAvailable: !1
|
|
91
91
|
};
|
|
92
|
-
}, C = (o,
|
|
93
|
-
var
|
|
92
|
+
}, C = (o, t) => {
|
|
93
|
+
var s, n;
|
|
94
94
|
return {
|
|
95
95
|
bestCheckoutMethod: l.isHotelChain(o.hotelGroup) ? o.bestValue : m.CASH,
|
|
96
|
-
nightlyCashCost: ((
|
|
96
|
+
nightlyCashCost: ((s = o.cashValue) == null ? void 0 : s.amount) || 0,
|
|
97
97
|
nightlyPointsCost: o.points || 0,
|
|
98
98
|
awardPoints: o.points || 0,
|
|
99
|
-
totalCashCost: (((n = o.cashValue) == null ? void 0 : n.amount) || 0) *
|
|
100
|
-
totalPointsCost: (o.points || 0) *
|
|
99
|
+
totalCashCost: (((n = o.cashValue) == null ? void 0 : n.amount) || 0) * t,
|
|
100
|
+
totalPointsCost: (o.points || 0) * t,
|
|
101
101
|
currency: "USD",
|
|
102
102
|
sufficientPoints: !0,
|
|
103
103
|
rewardsProgram: l.toProgram(o.hotelGroup),
|
|
104
104
|
optimalProgram: {
|
|
105
105
|
programs: [],
|
|
106
|
-
remainingPointsBalance: 0
|
|
106
|
+
remainingPointsBalance: 0,
|
|
107
|
+
totalProgramPointsValuation: 0
|
|
107
108
|
}
|
|
108
109
|
};
|
|
109
|
-
}, B = (o,
|
|
110
|
-
let
|
|
111
|
-
return
|
|
110
|
+
}, B = (o, t, e) => {
|
|
111
|
+
let s = o;
|
|
112
|
+
return t && (s = {
|
|
112
113
|
...o,
|
|
113
|
-
points:
|
|
114
|
-
awardPoints:
|
|
115
|
-
pointsType:
|
|
116
|
-
bestValue:
|
|
117
|
-
}), e && (
|
|
118
|
-
...
|
|
114
|
+
points: t.points,
|
|
115
|
+
awardPoints: t.awardPoints,
|
|
116
|
+
pointsType: t.pointsType,
|
|
117
|
+
bestValue: t.bestValue
|
|
118
|
+
}), e && (s = {
|
|
119
|
+
...s,
|
|
119
120
|
cashValue: e.cashValue,
|
|
120
121
|
rooms: e.rooms
|
|
121
|
-
}),
|
|
122
|
+
}), s;
|
|
122
123
|
};
|
|
123
124
|
export {
|
|
124
125
|
B as combineUpdatedHotelData,
|
|
@@ -4,12 +4,12 @@ import { ESearchType as p } from "../../services/hotel/HotelService.types.js";
|
|
|
4
4
|
import { HotelChains as s } from "../../definitions/HotelChains.js";
|
|
5
5
|
import { h as a } from "../../moment-BGjjqtLQ.js";
|
|
6
6
|
import P from "../../stores/useHotelsStore.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { E as k } from "../../enums-CY3zsgNW.js";
|
|
7
|
+
import { g as T } from "../../dateUtils-C1hKW8MF.js";
|
|
8
|
+
import { E as f } from "../../enums-CY3zsgNW.js";
|
|
10
9
|
import "../../arrayExtensions-CFEBYUok.js";
|
|
11
10
|
import "react";
|
|
12
|
-
import { checkNthNightFree as
|
|
11
|
+
import { checkNthNightFree as B } from "../../utilities/hotelUtils/freeNightUtils.js";
|
|
12
|
+
import { useAwayzContext as G, useWallet as x, awayzClient as k } from "@odynn/awayz-core";
|
|
13
13
|
const A = (t) => {
|
|
14
14
|
if (!t.checkinDate || !t.checkoutDate)
|
|
15
15
|
throw new Error("Check-in and checkout dates are required.");
|
|
@@ -35,7 +35,7 @@ const A = (t) => {
|
|
|
35
35
|
`Invalid hotel group: ${t.hotelGroup}. Please use one of the following: ${s.toList().join(", ")}`
|
|
36
36
|
);
|
|
37
37
|
}, Y = () => {
|
|
38
|
-
const { setHotels: t, hotels: i, setSearchParams: l } = P(), { config: u } =
|
|
38
|
+
const { setHotels: t, hotels: i, setSearchParams: l } = P(), { config: u } = G(), { userCards: y } = x(), {
|
|
39
39
|
mutate: D,
|
|
40
40
|
isPending: w,
|
|
41
41
|
status: S,
|
|
@@ -72,9 +72,9 @@ const A = (t) => {
|
|
|
72
72
|
},
|
|
73
73
|
onSuccess: (e) => {
|
|
74
74
|
if (e.success) {
|
|
75
|
-
const { checkinDate: o, checkoutDate: r } = e, n =
|
|
75
|
+
const { checkinDate: o, checkoutDate: r } = e, n = T(o, r), h = e.data.map((c) => ({
|
|
76
76
|
...c,
|
|
77
|
-
nthNightFree:
|
|
77
|
+
nthNightFree: B({
|
|
78
78
|
hotel: c,
|
|
79
79
|
cards: y ?? [],
|
|
80
80
|
nights: n
|
|
@@ -84,7 +84,7 @@ const A = (t) => {
|
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
onSettled: () => {
|
|
87
|
-
|
|
87
|
+
k.invalidateQueries({ queryKey: [f.SEARCH_LIMIT] });
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
90
|
function C(e, o) {
|
|
@@ -134,7 +134,7 @@ const A = (t) => {
|
|
|
134
134
|
t(e);
|
|
135
135
|
},
|
|
136
136
|
onSettled: () => {
|
|
137
|
-
|
|
137
|
+
k.invalidateQueries({ queryKey: [f.SEARCH_LIMIT] });
|
|
138
138
|
}
|
|
139
139
|
});
|
|
140
140
|
return {
|
|
@@ -29,6 +29,10 @@ export interface IHotelResultProps {
|
|
|
29
29
|
* Custom message to display when the hotel is bookable.
|
|
30
30
|
*/
|
|
31
31
|
customBookableTag?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Fallback image URL to use when the hotel image fails to load.
|
|
34
|
+
*/
|
|
35
|
+
customFallbackImage?: string;
|
|
32
36
|
}
|
|
33
|
-
declare const HotelResult: ({ details, onHotelSelect, onViewDetails, customStyling, isSelected, showBookableTag, customBookableTag }: IHotelResultProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
declare const HotelResult: ({ details, onHotelSelect, onViewDetails, customStyling, isSelected, showBookableTag, customBookableTag, customFallbackImage }: IHotelResultProps) => import("react/jsx-runtime").JSX.Element;
|
|
34
38
|
export { HotelResult };
|
|
@@ -32,6 +32,14 @@ export interface IBestCheckout {
|
|
|
32
32
|
* `IBestCheckoutResponse.optimal_user_program_checkout`
|
|
33
33
|
*/
|
|
34
34
|
optimalProgram: {
|
|
35
|
+
/**
|
|
36
|
+
* ---
|
|
37
|
+
* ### The total valuation of points.
|
|
38
|
+
*
|
|
39
|
+
* Maps to:
|
|
40
|
+
* `IBestCheckoutResponse.optimal_user_program_checkout.total_program_points_valuation`
|
|
41
|
+
*/
|
|
42
|
+
totalProgramPointsValuation: number;
|
|
35
43
|
/**
|
|
36
44
|
* ---
|
|
37
45
|
* ### The remaining points balance after the booking.
|
|
@@ -72,6 +80,22 @@ export interface IBestCheckout {
|
|
|
72
80
|
* `IBestCheckoutResponse.optimal_user_program_checkout.programs.program_points_used`
|
|
73
81
|
*/
|
|
74
82
|
pointsUsed: number;
|
|
83
|
+
/**
|
|
84
|
+
* ---
|
|
85
|
+
* ### The transfer ratio for this program.
|
|
86
|
+
*
|
|
87
|
+
* Maps to:
|
|
88
|
+
* `IBestCheckoutResponse.optimal_user_program_checkout.programs.program_transfer_ratio`
|
|
89
|
+
*/
|
|
90
|
+
transferRatio: number;
|
|
91
|
+
/**
|
|
92
|
+
* ---
|
|
93
|
+
* ### The value of points in cents.
|
|
94
|
+
*
|
|
95
|
+
* Maps to:
|
|
96
|
+
* `IBestCheckoutResponse.optimal_user_program_checkout.programs.program_points_value`
|
|
97
|
+
*/
|
|
98
|
+
centsPerPoint: number;
|
|
75
99
|
}[];
|
|
76
100
|
};
|
|
77
101
|
/**
|
|
@@ -43,6 +43,18 @@ type ImageObject = {
|
|
|
43
43
|
};
|
|
44
44
|
type ImageData = ImageUrl | ImageObject;
|
|
45
45
|
export declare function getHotelImageUrls(images?: ImageData[] | null): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Asynchronously returns the appropriate image URL, preferring a priority image if it successfully loads.
|
|
48
|
+
* If the priority image fails to load, it falls back to the secondary image.
|
|
49
|
+
* If both fail, it falls back to a customizable placeholder image. For example (`no-hotel-image.png`).
|
|
50
|
+
*
|
|
51
|
+
* @param {string} priorityImage - The priority image URL to attempt to load if available.
|
|
52
|
+
* @param {string} secondaryImage - The secondary image URL to use if the priority image fails to load.
|
|
53
|
+
* @param {string } customFallbackImage - The custom fallback image to use if both the priority and secondary images fail to load.
|
|
54
|
+
*
|
|
55
|
+
* @returns {Promise<string>} - A promise that resolves to the image URL to be used.
|
|
56
|
+
*/
|
|
57
|
+
export declare const loadImageWithFallback: (priorityImage: string, secondaryImage: string, customFallbackImage: string) => Promise<string>;
|
|
46
58
|
export declare const calculateStringSimilarity: (searchQuery: string, searchText: string) => number;
|
|
47
59
|
/**
|
|
48
60
|
* Sorts search results based on their relevance to the user query and predefined search types
|
|
@@ -5,19 +5,19 @@ import { ESearchType as C } from "./HotelService.types.js";
|
|
|
5
5
|
import { s as T } from "../../stringUtils-CvWpky85.js";
|
|
6
6
|
import "../../moment-BGjjqtLQ.js";
|
|
7
7
|
import "../../arrayExtensions-CFEBYUok.js";
|
|
8
|
-
import { c as
|
|
9
|
-
import { E as
|
|
8
|
+
import { c as h } from "../../objectUtils-CyIaVmog.js";
|
|
9
|
+
import { E as m } from "../../DateFormats-DZD30Nea.js";
|
|
10
10
|
import "react";
|
|
11
11
|
import { EHotelEndpoints as l } from "../../configs/endpoints.js";
|
|
12
|
-
import { clientInstance as
|
|
13
|
-
import { EBestCheckoutType as
|
|
12
|
+
import { clientInstance as _ } from "@odynn/awayz-core";
|
|
13
|
+
import { EBestCheckoutType as d } from "../../enums/EBestCheckoutType.js";
|
|
14
14
|
import { EBestValueType as H } from "../../enums/EBestValueType.js";
|
|
15
|
-
import { BestCheckoutHelper as
|
|
16
|
-
class
|
|
15
|
+
import { BestCheckoutHelper as P } from "./BestCheckoutHelper.js";
|
|
16
|
+
class S {
|
|
17
17
|
constructor() {
|
|
18
18
|
n(this, "getLocations", async (s) => {
|
|
19
19
|
try {
|
|
20
|
-
const { data: e } = await
|
|
20
|
+
const { data: e } = await _.get(
|
|
21
21
|
l.GET_LOCATIONS,
|
|
22
22
|
{
|
|
23
23
|
params: {
|
|
@@ -35,10 +35,10 @@ class w {
|
|
|
35
35
|
success: !0,
|
|
36
36
|
data: e.data.cities.map(
|
|
37
37
|
(a) => {
|
|
38
|
-
const { search_id:
|
|
39
|
-
searchId:
|
|
38
|
+
const { search_id: c, search_type: p, description: r, coordinates: g, city: y } = a, u = {
|
|
39
|
+
searchId: c,
|
|
40
40
|
searchType: p,
|
|
41
|
-
description:
|
|
41
|
+
description: r,
|
|
42
42
|
coordinates: g,
|
|
43
43
|
city: y
|
|
44
44
|
};
|
|
@@ -61,13 +61,13 @@ class w {
|
|
|
61
61
|
n(this, "searchByCoords", async (s) => {
|
|
62
62
|
var e, o;
|
|
63
63
|
try {
|
|
64
|
-
const { data: t } = await
|
|
64
|
+
const { data: t } = await _.post(l.SEARCH_HOTELS, {
|
|
65
65
|
...s,
|
|
66
66
|
use_duffel: !0
|
|
67
67
|
});
|
|
68
68
|
return t != null && t.success ? {
|
|
69
69
|
success: !0,
|
|
70
|
-
data:
|
|
70
|
+
data: h(
|
|
71
71
|
(e = t.data) == null ? void 0 : e.hotels
|
|
72
72
|
)
|
|
73
73
|
} : {
|
|
@@ -84,13 +84,13 @@ class w {
|
|
|
84
84
|
n(this, "searchByHotelId", async (s) => {
|
|
85
85
|
var e, o;
|
|
86
86
|
try {
|
|
87
|
-
const { data: t } = await
|
|
87
|
+
const { data: t } = await _.post(l.GET_HOTEL_DATA, {
|
|
88
88
|
...s,
|
|
89
89
|
use_duffel: !0
|
|
90
90
|
});
|
|
91
91
|
return t != null && t.success ? {
|
|
92
92
|
success: !0,
|
|
93
|
-
data:
|
|
93
|
+
data: h(
|
|
94
94
|
(e = t.data) == null ? void 0 : e.hotels
|
|
95
95
|
)
|
|
96
96
|
} : {
|
|
@@ -106,7 +106,7 @@ class w {
|
|
|
106
106
|
});
|
|
107
107
|
n(this, "getTransferPartners", async (s) => {
|
|
108
108
|
try {
|
|
109
|
-
const { data: e } = await
|
|
109
|
+
const { data: e } = await _.get(
|
|
110
110
|
l.GET_TRANSFER_PARTNERS,
|
|
111
111
|
{
|
|
112
112
|
params: {
|
|
@@ -114,7 +114,7 @@ class w {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
);
|
|
117
|
-
return
|
|
117
|
+
return h(e.data);
|
|
118
118
|
} catch {
|
|
119
119
|
return [];
|
|
120
120
|
}
|
|
@@ -124,17 +124,17 @@ class w {
|
|
|
124
124
|
const e = {
|
|
125
125
|
hotel_group: s.hotelGroup,
|
|
126
126
|
hotel_id: s.hotelId,
|
|
127
|
-
check_in_date: s.checkinDate.format(
|
|
128
|
-
check_out_date: s.checkoutDate.format(
|
|
127
|
+
check_in_date: s.checkinDate.format(m.ServerDate),
|
|
128
|
+
check_out_date: s.checkoutDate.format(m.ServerDate)
|
|
129
129
|
};
|
|
130
130
|
try {
|
|
131
|
-
const { data: t } = await
|
|
131
|
+
const { data: t } = await _.post(
|
|
132
132
|
l.HOTEL_POINTS_CHECK,
|
|
133
133
|
e
|
|
134
134
|
), a = ((o = t.data) == null ? void 0 : o.length) > 0 ? t.data[0] : null;
|
|
135
135
|
return {
|
|
136
136
|
success: t.success,
|
|
137
|
-
data: a == null ? null :
|
|
137
|
+
data: a == null ? null : h(a)
|
|
138
138
|
};
|
|
139
139
|
} catch (t) {
|
|
140
140
|
const a = t;
|
|
@@ -148,41 +148,45 @@ class w {
|
|
|
148
148
|
n(this, "getRecommendations", async (s) => {
|
|
149
149
|
try {
|
|
150
150
|
const t = {
|
|
151
|
-
hotels: (await new
|
|
151
|
+
hotels: (await new P(s.hotels).getConvertedHotels(
|
|
152
152
|
s.userCurrency
|
|
153
|
-
)).map((
|
|
154
|
-
hotel_id:
|
|
155
|
-
hotel_group:
|
|
156
|
-
cash_value:
|
|
157
|
-
currency:
|
|
158
|
-
award_points:
|
|
159
|
-
points:
|
|
153
|
+
)).map((r) => ({
|
|
154
|
+
hotel_id: r.hotelId,
|
|
155
|
+
hotel_group: r.hotelGroup,
|
|
156
|
+
cash_value: r.cashValue,
|
|
157
|
+
currency: r.cashValue.currency,
|
|
158
|
+
award_points: r.awardPoints,
|
|
159
|
+
points: r.points
|
|
160
160
|
})),
|
|
161
161
|
days: s.days,
|
|
162
162
|
cash_or_points: ["cash", "points"]
|
|
163
|
-
}, { data: a } = await
|
|
163
|
+
}, { data: a } = await _.post(
|
|
164
164
|
l.GET_BEST_CHECKOUT,
|
|
165
165
|
t
|
|
166
|
-
),
|
|
166
|
+
), c = a.data[0];
|
|
167
167
|
return {
|
|
168
168
|
success: !0,
|
|
169
169
|
data: {
|
|
170
|
-
totalPointsCost:
|
|
171
|
-
nightlyPointsCost:
|
|
172
|
-
totalCashCost:
|
|
173
|
-
nightlyCashCost:
|
|
174
|
-
currency:
|
|
175
|
-
sufficientPoints:
|
|
176
|
-
awardPoints:
|
|
177
|
-
rewardsProgram:
|
|
178
|
-
bestCheckoutMethod:
|
|
170
|
+
totalPointsCost: c.total_hotel_points_cost,
|
|
171
|
+
nightlyPointsCost: c.points,
|
|
172
|
+
totalCashCost: c.total_cash_cost,
|
|
173
|
+
nightlyCashCost: c.cash_value.amount,
|
|
174
|
+
currency: c.cash_value.currency,
|
|
175
|
+
sufficientPoints: c.user_has_sufficient_points,
|
|
176
|
+
awardPoints: c.award_points,
|
|
177
|
+
rewardsProgram: c.hotel_rewards_program,
|
|
178
|
+
bestCheckoutMethod: c.best_user_checkout_method === H.CASH ? d.CASH : d.POINTS,
|
|
179
179
|
optimalProgram: {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
180
|
+
totalProgramPointsValuation: c.optimal_user_program_checkout.total_program_points_valuation,
|
|
181
|
+
remainingPointsBalance: c.optimal_user_program_checkout.primary_offer_remaining_points_balance,
|
|
182
|
+
programs: c.optimal_user_program_checkout.programs.map(
|
|
183
|
+
(r) => ({
|
|
184
|
+
convertedPoints: r.converted_program_points,
|
|
185
|
+
program: r.program,
|
|
186
|
+
pointsUsed: r.program_points_used,
|
|
187
|
+
transferRatio: r.program_transfer_ratio,
|
|
188
|
+
centsPerPoint: r.program_value_cents,
|
|
189
|
+
programPointsValue: r.program_points_value
|
|
186
190
|
})
|
|
187
191
|
)
|
|
188
192
|
}
|
|
@@ -198,7 +202,7 @@ class w {
|
|
|
198
202
|
});
|
|
199
203
|
}
|
|
200
204
|
}
|
|
201
|
-
const
|
|
205
|
+
const V = new S();
|
|
202
206
|
export {
|
|
203
|
-
|
|
207
|
+
V as HotelService
|
|
204
208
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { HotelChains as
|
|
2
|
-
var
|
|
1
|
+
import { HotelChains as y } from "../../definitions/HotelChains.js";
|
|
2
|
+
var p = class f {
|
|
3
3
|
static initParams(t, o) {
|
|
4
4
|
return [t.replace(/\s+/g, "").toLowerCase(), o.replace(/\s+/g, "").toLowerCase()];
|
|
5
5
|
}
|
|
@@ -14,23 +14,23 @@ var h = class y {
|
|
|
14
14
|
if (t.find((o) => typeof o != "string")) throw new Error("second argument should be an array of strings");
|
|
15
15
|
}
|
|
16
16
|
sortMatch(t, o) {
|
|
17
|
-
return
|
|
17
|
+
return f.checkThanosType(t), f.checkAvengersType(o), o.map((s, r) => ({ member: s, index: r, rating: this.similarity(t, s) })).sort((s, r) => s.rating - r.rating);
|
|
18
18
|
}
|
|
19
|
-
}, g = class extends
|
|
19
|
+
}, g = class extends p {
|
|
20
20
|
similarity(e, t) {
|
|
21
|
-
|
|
22
|
-
let [o,
|
|
23
|
-
if (!o.length && !
|
|
21
|
+
p.checkThanosType(e), p.checkRivalType(t);
|
|
22
|
+
let [o, s] = p.initParams(e, t), [r, a] = [o.length, s.length];
|
|
23
|
+
if (!o.length && !s.length || o === s) return 1;
|
|
24
24
|
if (r < 2 || a < 2) return 0;
|
|
25
25
|
let c = /* @__PURE__ */ new Map();
|
|
26
26
|
for (let n = 0; n < r - 1; n++) {
|
|
27
|
-
let
|
|
28
|
-
c.set(
|
|
27
|
+
let i = o.slice(n, n + 2), h = c.has(i) ? c.get(i) + 1 : 1;
|
|
28
|
+
c.set(i, h);
|
|
29
29
|
}
|
|
30
30
|
let l = 0;
|
|
31
31
|
for (let n = 0; n < a - 1; n++) {
|
|
32
|
-
let
|
|
33
|
-
|
|
32
|
+
let i = s.slice(n, n + 2), h = c.has(i) ? c.get(i) : 0;
|
|
33
|
+
h > 0 && (c.set(i, h - 1), ++l);
|
|
34
34
|
}
|
|
35
35
|
return 2 * l / (r + a - 2);
|
|
36
36
|
}
|
|
@@ -39,13 +39,13 @@ var h = class y {
|
|
|
39
39
|
}
|
|
40
40
|
}, m = new g(), w = { diceCoefficient: m }, d = w;
|
|
41
41
|
const b = (e) => {
|
|
42
|
-
var
|
|
42
|
+
var h;
|
|
43
43
|
const t = e.freeNight || e.nthNightFree !== 0 ? e.awardPoints : e.points, o = {
|
|
44
44
|
type: "",
|
|
45
45
|
value: -1
|
|
46
|
-
},
|
|
46
|
+
}, s = typeof e.cashValue.amount == "number" ? e.cashValue.amount : parseFloat(e.cashValue.amount), r = { ...o }, { cashBookingOffers: a } = e, { currency: c } = e.cashValue, l = a == null ? void 0 : a.cheapestRateTotalAmount, n = l && l > 0 ? l : s, i = y.isHotelChain(e.hotelGroup);
|
|
47
47
|
return e.bestValue === "cash" ? (o.type = "cash", o.value = n, r.type = "points", r.value = t || -1) : e.bestValue === "points" && (o.type = "points", o.value = t || -1, r.type = "cash", r.value = n), {
|
|
48
|
-
transferPartners: ((
|
|
48
|
+
transferPartners: ((h = e.partners) == null ? void 0 : h.map((u) => ({
|
|
49
49
|
...u,
|
|
50
50
|
value: t ? Math.ceil(t * u.ratio) : -1
|
|
51
51
|
}))) || [],
|
|
@@ -56,36 +56,43 @@ const b = (e) => {
|
|
|
56
56
|
cashAmount: n,
|
|
57
57
|
cashCurrency: c,
|
|
58
58
|
duffelCashBookingOffers: a,
|
|
59
|
-
isHotelChain:
|
|
59
|
+
isHotelChain: i
|
|
60
60
|
};
|
|
61
|
-
},
|
|
62
|
-
function
|
|
61
|
+
}, k = (e) => (e == null ? void 0 : e.hotelGroup) === y.IHG ? e.freeNight || e.nthNightFree ? e.awardPoints : e.points : e.awardPoints;
|
|
62
|
+
function C(e) {
|
|
63
63
|
return !e || !Array.isArray(e) || e.length === 0 ? [] : e.map((t) => typeof t == "string" ? t : t && typeof t == "object" && "url" in t ? t.url : "").filter((t) => t !== "");
|
|
64
64
|
}
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
const A = async (e, t, o) => {
|
|
66
|
+
const s = (r) => new Promise((a, c) => {
|
|
67
|
+
const l = new Image();
|
|
68
|
+
l.src = r, l.onload = () => a(r), l.onerror = () => c();
|
|
69
|
+
});
|
|
70
|
+
return e && await s(e).catch(() => !1) ? e : t && await s(t).catch(() => !1) ? t : o;
|
|
71
|
+
}, v = (e, t) => {
|
|
72
|
+
const o = e.toLowerCase().trim(), s = t.toLowerCase().trim();
|
|
73
|
+
return d.diceCoefficient.similarity(o, s) * 100;
|
|
74
|
+
}, P = (e, t, o, s) => {
|
|
75
|
+
const r = e.toLowerCase().trim(), a = s.map((n) => {
|
|
76
|
+
const i = n.description.toLowerCase().trim();
|
|
71
77
|
return {
|
|
72
78
|
...n,
|
|
73
79
|
score: v(e, n.description),
|
|
74
|
-
startsWithText:
|
|
80
|
+
startsWithText: i
|
|
75
81
|
};
|
|
76
82
|
}), c = a.filter(
|
|
77
83
|
(n) => n.startsWithText.startsWith(r) && n.score >= t
|
|
78
84
|
), l = a.filter(
|
|
79
85
|
(n) => n.score < t
|
|
80
86
|
);
|
|
81
|
-
return c.sort((n,
|
|
82
|
-
(n,
|
|
87
|
+
return c.sort((n, i) => i.score - n.score), l.sort(
|
|
88
|
+
(n, i) => o[n.searchType] - o[i.searchType]
|
|
83
89
|
), [...c, ...l];
|
|
84
90
|
};
|
|
85
91
|
export {
|
|
86
92
|
v as calculateStringSimilarity,
|
|
87
93
|
b as getBookingOptions,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
A as
|
|
94
|
+
C as getHotelImageUrls,
|
|
95
|
+
k as getPointsValue,
|
|
96
|
+
A as loadImageWithFallback,
|
|
97
|
+
P as sortLocationResults
|
|
91
98
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odynn/awayz-hotels",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist"
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@odynn/awayz-core": "^0.3.
|
|
64
|
+
"@odynn/awayz-core": "^0.3.11",
|
|
65
65
|
"@tanstack/react-query": "^5.66.9",
|
|
66
66
|
"string-comparison": "^1.3.0"
|
|
67
67
|
}
|