@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.
@@ -1,153 +1,166 @@
1
- import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
- import { useState as v, useRef as H, useEffect as m } from "react";
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 S } from "../../stringUtils-CvWpky85.js";
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 B } from "../Banners/UnavailableDate/UnavailableDate.js";
8
- import { e as V, f as j, d as w, g as T, h as E } from "../../index-gse40uZM.js";
9
- import { HotelChains as G } from "../../definitions/HotelChains.js";
10
- import U, { ERatingColor as z } from "../Banners/Ratings/Ratings.js";
11
- import { getBookingOptions as D, getHotelImageUrls as L } from "../../utilities/hotelUtils/hotelUtils.js";
12
- import { CashValue as M } from "@odynn/awayz-core";
13
- const O = (...e) => e.join(" ");
14
- function P(e) {
15
- if (!e || isNaN(e) || e < 0) return "N/A";
16
- let i = e == null ? void 0 : e.toString().split(".")[0];
17
- return i == null ? void 0 : i.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
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: e,
21
- onHotelSelect: i,
22
- onViewDetails: f,
23
- customStyling: C = !1,
24
- isSelected: l,
25
- showBookableTag: R = !1,
26
- customBookableTag: y = "Bookable"
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 N;
29
- const [r, d] = v(l), u = H(null), {
30
- transferPartners: a,
31
- bestBookingOption: c,
32
- alternateBookingOption: s,
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: p,
35
- cashCurrency: I,
36
- isHotelChain: A
37
- } = D(e), [n, b] = v(0), h = a == null ? void 0 : a[n], g = (h == null ? void 0 : h.value) > 0 || (c == null ? void 0 : c.value) > 0 || (s == null ? void 0 : s.value) > 0 || p > 0;
38
- return m(() => {
39
- l !== void 0 && d(l);
40
- }, [l]), m(() => {
41
- const k = setTimeout(() => {
42
- const x = n >= (a == null ? void 0 : a.length) - 1 ? 0 : n + 1;
43
- return b(x), () => {
44
- clearTimeout(k);
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
- }, [n, a == null ? void 0 : a.length]), m(() => {
48
- r && u.current.scrollIntoView({
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
- }, [r]), /* @__PURE__ */ o(
65
+ }, [E]), /* @__PURE__ */ C(
53
66
  "div",
54
67
  {
55
- ref: u,
56
- className: O(
57
- C ? "hotel-result" : "awayz-hotel-result",
68
+ ref: d,
69
+ className: _(
70
+ i ? "hotel-result" : "awayz-hotel-result",
58
71
  // insufficient_points ? 'insufficient-points' : '',
59
- r ? "go-to-journey-button" : ""
72
+ E ? "go-to-journey-button" : ""
60
73
  ),
61
74
  "data-testid": "search-result",
62
75
  children: [
63
- /* @__PURE__ */ o(
76
+ /* @__PURE__ */ C(
64
77
  "div",
65
78
  {
66
79
  className: "content",
67
80
  onClick: () => {
68
- d(!r), i(e);
81
+ v(!E), I(A);
69
82
  },
70
83
  children: [
71
- /* @__PURE__ */ o("div", { className: "details", children: [
72
- /* @__PURE__ */ t(
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(${L(e.images)[0]})`
90
+ backgroundImage: `url(${j})`
78
91
  },
79
- children: /* @__PURE__ */ o("div", { className: "hotel-chain", children: [
80
- /* @__PURE__ */ t(V, {}),
81
- /* @__PURE__ */ t("p", { children: G.toString(e.hotelGroup) })
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__ */ o("div", { className: "info", children: [
86
- /* @__PURE__ */ o("div", { className: "hotel-data", children: [
87
- /* @__PURE__ */ o("div", { className: "hotel-information", children: [
88
- !!((N = e.cashBookingOffers) != null && N.accommodationId) && R && /* @__PURE__ */ o("div", { children: [
89
- /* @__PURE__ */ t(j, {}),
90
- /* @__PURE__ */ t("p", { children: y })
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__ */ t(
93
- U,
105
+ /* @__PURE__ */ Q(
106
+ V,
94
107
  {
95
- starRating: e.chainRating ?? 0,
96
- starColor: z.PRIMARY,
97
- userRating: e.reviewRating ?? "",
108
+ starRating: A.chainRating ?? 0,
109
+ starColor: y.PRIMARY,
110
+ userRating: A.reviewRating ?? "",
98
111
  fill: !0
99
112
  }
100
113
  ),
101
- e.freeNight && /* @__PURE__ */ o("div", { children: [
102
- /* @__PURE__ */ t(w, {}),
103
- /* @__PURE__ */ t("p", { children: "Free Night" })
114
+ A.freeNight && /* @__PURE__ */ C("div", { children: [
115
+ /* @__PURE__ */ Q(G, {}),
116
+ /* @__PURE__ */ Q("p", { children: "Free Night" })
104
117
  ] }),
105
- typeof e.nthNightFree == "number" && e.nthNightFree > 0 && /* @__PURE__ */ o("div", { children: [
106
- /* @__PURE__ */ t(T, {}),
107
- /* @__PURE__ */ o("p", { children: [
108
- S(e.nthNightFree),
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__ */ t("p", { className: "hotel-name", children: e.name }),
114
- /* @__PURE__ */ t("p", { className: "hotel-address", children: e.address })
126
+ /* @__PURE__ */ Q("p", { className: "hotel-name", children: A.name }),
127
+ /* @__PURE__ */ Q("p", { className: "hotel-address", children: A.address })
115
128
  ] }),
116
- /* @__PURE__ */ t(
117
- B,
129
+ /* @__PURE__ */ Q(
130
+ K,
118
131
  {
119
132
  hasPoints: F,
120
- isAvailable: g,
133
+ isAvailable: H,
121
134
  selectedHotel: () => {
122
135
  },
123
- chainName: e.hotelGroup
136
+ chainName: A.hotelGroup
124
137
  }
125
138
  )
126
139
  ] })
127
140
  ] }),
128
- g && /* @__PURE__ */ o("div", { className: "payments", children: [
129
- A && /* @__PURE__ */ o("div", { className: "payment-details", children: [
130
- /* @__PURE__ */ t("p", { children: "POINTS" }),
131
- /* @__PURE__ */ t("p", { children: P(e.awardPoints) }),
132
- e.bestValue === "points" && /* @__PURE__ */ t("p", { className: "best-value", children: "Best Value" })
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__ */ o("div", { className: "payment-details", children: [
135
- /* @__PURE__ */ t("p", { children: "CASH" }),
136
- /* @__PURE__ */ t(M, { amount: p, currency: I }),
137
- e.bestValue === "cash" && /* @__PURE__ */ t("p", { className: "best-value", children: "Best Value" })
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__ */ t(
156
+ /* @__PURE__ */ Q(
144
157
  "button",
145
158
  {
146
159
  "data-testid": "go-to-journey-button",
147
160
  onClick: () => {
148
- f(e);
161
+ S(A);
149
162
  },
150
- children: /* @__PURE__ */ t(E, {})
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
- oe as HotelResult
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: s,
10
+ checkinDate: t,
11
11
  checkoutDate: e,
12
- updateHotel: t
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: s,
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 ?? [], t(o.hotelId, o.hotelGroup, n);
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: s,
48
+ checkinDate: t,
49
49
  checkoutDate: e,
50
- guests: t,
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: s,
62
+ checkinDate: t,
63
63
  checkoutDate: e,
64
64
  accommodationId: o.cashBookingOffers.accommodationId,
65
- guests: c(t),
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, s, e) => {
80
- const { success: t, data: n } = await f.getRecommendations({
81
- days: s,
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 t ? {
85
+ return s ? {
86
86
  bestCheckout: n,
87
87
  isAvailable: n.nightlyPointsCost > 0 || n.nightlyCashCost > 0
88
88
  } : {
89
- bestCheckout: C(o, s),
89
+ bestCheckout: C(o, t),
90
90
  isAvailable: !1
91
91
  };
92
- }, C = (o, s) => {
93
- var t, n;
92
+ }, C = (o, t) => {
93
+ var s, n;
94
94
  return {
95
95
  bestCheckoutMethod: l.isHotelChain(o.hotelGroup) ? o.bestValue : m.CASH,
96
- nightlyCashCost: ((t = o.cashValue) == null ? void 0 : t.amount) || 0,
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) * s,
100
- totalPointsCost: (o.points || 0) * s,
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, s, e) => {
110
- let t = o;
111
- return s && (t = {
110
+ }, B = (o, t, e) => {
111
+ let s = o;
112
+ return t && (s = {
112
113
  ...o,
113
- points: s.points,
114
- awardPoints: s.awardPoints,
115
- pointsType: s.pointsType,
116
- bestValue: s.bestValue
117
- }), e && (t = {
118
- ...t,
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
- }), t;
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 { useAwayzContext as T, useWallet as B, awayzClient as f } from "@odynn/awayz-core";
8
- import { g as G } from "../../dateUtils-C1hKW8MF.js";
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 x } from "../../utilities/hotelUtils/freeNightUtils.js";
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 } = T(), { userCards: y } = B(), {
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 = G(o, r), h = e.data.map((c) => ({
75
+ const { checkinDate: o, checkoutDate: r } = e, n = T(o, r), h = e.data.map((c) => ({
76
76
  ...c,
77
- nthNightFree: x({
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
- f.invalidateQueries({ queryKey: [k.SEARCH_LIMIT] });
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
- f.invalidateQueries({ queryKey: [k.SEARCH_LIMIT] });
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 m } from "../../objectUtils-CyIaVmog.js";
9
- import { E as d } from "../../DateFormats-DZD30Nea.js";
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 h } from "@odynn/awayz-core";
13
- import { EBestCheckoutType as _ } from "../../enums/EBestCheckoutType.js";
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 S } from "./BestCheckoutHelper.js";
16
- class w {
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 h.get(
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: r, search_type: p, description: c, coordinates: g, city: y } = a, u = {
39
- searchId: r,
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: c,
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 h.post(l.SEARCH_HOTELS, {
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: m(
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 h.post(l.GET_HOTEL_DATA, {
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: m(
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 h.get(
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 m(e.data);
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(d.ServerDate),
128
- check_out_date: s.checkoutDate.format(d.ServerDate)
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 h.post(
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 : m(a)
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 S(s.hotels).getConvertedHotels(
151
+ hotels: (await new P(s.hotels).getConvertedHotels(
152
152
  s.userCurrency
153
- )).map((c) => ({
154
- hotel_id: c.hotelId,
155
- hotel_group: c.hotelGroup,
156
- cash_value: c.cashValue,
157
- currency: c.cashValue.currency,
158
- award_points: c.awardPoints,
159
- points: c.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 h.post(
163
+ }, { data: a } = await _.post(
164
164
  l.GET_BEST_CHECKOUT,
165
165
  t
166
- ), r = a.data[0];
166
+ ), c = a.data[0];
167
167
  return {
168
168
  success: !0,
169
169
  data: {
170
- totalPointsCost: r.total_hotel_points_cost,
171
- nightlyPointsCost: r.points,
172
- totalCashCost: r.total_cash_cost,
173
- nightlyCashCost: r.cash_value.amount,
174
- currency: r.cash_value.currency,
175
- sufficientPoints: r.user_has_sufficient_points,
176
- awardPoints: r.award_points,
177
- rewardsProgram: r.hotel_rewards_program,
178
- bestCheckoutMethod: r.best_user_checkout_method === H.CASH ? _.CASH : _.POINTS,
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
- remainingPointsBalance: r.optimal_user_program_checkout.primary_offer_remaining_points_balance,
181
- programs: r.optimal_user_program_checkout.programs.map(
182
- (c) => ({
183
- convertedPoints: c.converted_program_points,
184
- program: c.program,
185
- pointsUsed: c.program_points_used
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 F = new w();
205
+ const V = new S();
202
206
  export {
203
- F as HotelService
207
+ V as HotelService
204
208
  };
@@ -1,5 +1,5 @@
1
- import { HotelChains as f } from "../../definitions/HotelChains.js";
2
- var h = class y {
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 y.checkThanosType(t), y.checkAvengersType(o), o.map((i, r) => ({ member: i, index: r, rating: this.similarity(t, i) })).sort((i, r) => i.rating - r.rating);
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 h {
19
+ }, g = class extends p {
20
20
  similarity(e, t) {
21
- h.checkThanosType(e), h.checkRivalType(t);
22
- let [o, i] = h.initParams(e, t), [r, a] = [o.length, i.length];
23
- if (!o.length && !i.length || o === i) return 1;
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 s = o.slice(n, n + 2), p = c.has(s) ? c.get(s) + 1 : 1;
28
- c.set(s, p);
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 s = i.slice(n, n + 2), p = c.has(s) ? c.get(s) : 0;
33
- p > 0 && (c.set(s, p - 1), ++l);
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 p;
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
- }, i = 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 : i, s = f.isHotelChain(e.hotelGroup);
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: ((p = e.partners) == null ? void 0 : p.map((u) => ({
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: s
59
+ isHotelChain: i
60
60
  };
61
- }, C = (e) => (e == null ? void 0 : e.hotelGroup) === f.IHG ? e.freeNight || e.nthNightFree ? e.awardPoints : e.points : e.awardPoints;
62
- function k(e) {
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 v = (e, t) => {
66
- const o = e.toLowerCase().trim(), i = t.toLowerCase().trim();
67
- return d.diceCoefficient.similarity(o, i) * 100;
68
- }, A = (e, t, o, i) => {
69
- const r = e.toLowerCase().trim(), a = i.map((n) => {
70
- const s = n.description.toLowerCase().trim();
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: s
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, s) => s.score - n.score), l.sort(
82
- (n, s) => o[n.searchType] - o[s.searchType]
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
- k as getHotelImageUrls,
89
- C as getPointsValue,
90
- A as sortLocationResults
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.2",
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.9",
64
+ "@odynn/awayz-core": "^0.3.11",
65
65
  "@tanstack/react-query": "^5.66.9",
66
66
  "string-comparison": "^1.3.0"
67
67
  }