@tripian/react 9.3.28 → 9.3.30

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.
@@ -34,6 +34,7 @@ interface IPoiInfo {
34
34
  loadingFeedback: boolean;
35
35
  feedbackSubjects: Model.FeedbackSubjects[];
36
36
  isBookingClicked: boolean;
37
+ onBookableTabClick?: () => void;
37
38
  timezone?: string;
38
39
  sendFeedback: (value: Model.FeedbackRequest) => Promise<void>;
39
40
  placeInfoCallBack: () => void;
@@ -22,6 +22,7 @@ interface IPoiInfoText {
22
22
  ticketProducts: Model.BookingProduct[];
23
23
  isBookingClicked?: boolean;
24
24
  getTourInfo?: (productId: string, poi: Model.Poi) => void;
25
+ onBookableTabClick?: () => void;
25
26
  sendFeedback: (value: Model.FeedbackRequest) => Promise<void>;
26
27
  t: (value: Model.TranslationKey) => string;
27
28
  plans?: Model.Plan[];
@@ -34,6 +34,7 @@ interface IStepInfo {
34
34
  placeInfoCallBack: () => void;
35
35
  showStepScoreDetails: boolean;
36
36
  isBookingClicked: boolean;
37
+ onBookableTabClick?: () => void;
37
38
  timezone?: string;
38
39
  onImageModalChange?: (isOpen: boolean) => void;
39
40
  t: (value: Model.TranslationKey) => string;
package/index.js CHANGED
@@ -59919,7 +59919,7 @@ const PoiInfo = ({ poi, favorite, toggleFavorite, close, addRemoveReplacePoi, da
59919
59919
  // TICKET_PROVIDER_IDS,
59920
59920
  RESTAURANT_RESERVATION_PROVIDER_IDS, myOffers, isLoadingOffer, offerButtonClick, offerCardClicked, hideOffers,
59921
59921
  // offerClicked,
59922
- loadingFeedback, feedbackSubjects, isBookingClicked, timezone = 'UTC', sendFeedback, redeemClicked, onImageModalChange, stepType, t, plans, currentDayIndex, onTimelineAdd, }) => {
59922
+ loadingFeedback, feedbackSubjects, isBookingClicked, onBookableTabClick, timezone = 'UTC', sendFeedback, redeemClicked, onImageModalChange, stepType, t, plans, currentDayIndex, onTimelineAdd, }) => {
59923
59923
  var _a, _b, _c;
59924
59924
  const [optInModalWarningMessage, setOptInModalWarningMessage] = (0, react_1.useState)([]);
59925
59925
  const [showShareModal, setShowShareModal] = (0, react_1.useState)(false);
@@ -59972,7 +59972,7 @@ loadingFeedback, feedbackSubjects, isBookingClicked, timezone = 'UTC', sendFeedb
59972
59972
  react_1.default.createElement("div", { className: PoiInfo_scss_1.default.content },
59973
59973
  react_1.default.createElement("div", { className: PoiInfo_scss_1.default.gallery },
59974
59974
  react_1.default.createElement(PoiInfoImageDesktop_1.default, { poi: poi, onImageModalChange: onImageModalChange, t: t, stepType: stepType }))),
59975
- react_1.default.createElement(PoiInfoText_1.default, { poi: poi, hideFeatures: hideFeatures, hideCuisine: hideCuisine, hideTours: hideTours, reservationUrl: reservationUrl, hideBookingButton: hideBookingButton, reservationButtonClick: reservationButtonClick, tourProducts: tourProducts, ticketProducts: ticketProducts, addRemoveReplacePoi: addRemoveReplacePoi, partOfDay: partOfDay, hideActionButtons: hideActionButtons, replace: replace, stepOrder: stepOrder, getTourInfo: getTourInfo, tourTicketProductsLoading: tourTicketProductsLoading, RESTAURANT_RESERVATION_PROVIDER_IDS: RESTAURANT_RESERVATION_PROVIDER_IDS, loadingFeedback: loadingFeedback, feedbackSubjects: feedbackSubjects, sendFeedback: sendFeedback, isBookingClicked: isBookingClicked, t: t, plans: plans, currentDayIndex: currentDayIndex, onTimelineAdd: onTimelineAdd }),
59975
+ react_1.default.createElement(PoiInfoText_1.default, { poi: poi, hideFeatures: hideFeatures, hideCuisine: hideCuisine, hideTours: hideTours, reservationUrl: reservationUrl, hideBookingButton: hideBookingButton, reservationButtonClick: reservationButtonClick, tourProducts: tourProducts, ticketProducts: ticketProducts, addRemoveReplacePoi: addRemoveReplacePoi, partOfDay: partOfDay, hideActionButtons: hideActionButtons, replace: replace, stepOrder: stepOrder, getTourInfo: getTourInfo, tourTicketProductsLoading: tourTicketProductsLoading, RESTAURANT_RESERVATION_PROVIDER_IDS: RESTAURANT_RESERVATION_PROVIDER_IDS, loadingFeedback: loadingFeedback, feedbackSubjects: feedbackSubjects, sendFeedback: sendFeedback, isBookingClicked: isBookingClicked, onBookableTabClick: onBookableTabClick, t: t, plans: plans, currentDayIndex: currentDayIndex, onTimelineAdd: onTimelineAdd }),
59976
59976
  !hideOffers && poi.offers && poi.offers.length > 0 && (react_1.default.createElement("div", { className: "col col12 px5 pb5" },
59977
59977
  poi.offers.map((offer, i) => {
59978
59978
  var _a, _b;
@@ -60271,7 +60271,7 @@ const PoiActionButton_1 = __importDefault(__webpack_require__(169));
60271
60271
  const TourCard_1 = __importDefault(__webpack_require__(443));
60272
60272
  const PreLoading_1 = __importDefault(__webpack_require__(15));
60273
60273
  const PoiInfoText_scss_1 = __importDefault(__webpack_require__(1029));
60274
- const PoiInfoText = ({ poi, hideFeatures, hideCuisine, reservationUrl, hideBookingButton = false, hideActionButtons = false, replace = false, stepOrder = -1, addRemoveReplacePoi, partOfDay, reservationButtonClick, tourTicketProductsLoading, hideFeedback = false, loadingFeedback, feedbackSubjects, tourProducts, ticketProducts, isBookingClicked = false, getTourInfo, hideTours, sendFeedback, RESTAURANT_RESERVATION_PROVIDER_IDS, t, plans, currentDayIndex, onTimelineAdd, }) => {
60274
+ const PoiInfoText = ({ poi, hideFeatures, hideCuisine, reservationUrl, hideBookingButton = false, hideActionButtons = false, replace = false, stepOrder = -1, addRemoveReplacePoi, partOfDay, reservationButtonClick, tourTicketProductsLoading, hideFeedback = false, loadingFeedback, feedbackSubjects, tourProducts, ticketProducts, isBookingClicked = false, getTourInfo, hideTours, sendFeedback, onBookableTabClick, RESTAURANT_RESERVATION_PROVIDER_IDS, t, plans, currentDayIndex, onTimelineAdd, }) => {
60275
60275
  var _a, _b;
60276
60276
  const [activeTab, setActiveTab] = (0, react_1.useState)('overview');
60277
60277
  const [activeBookableTab, setActiveBookableTab] = (0, react_1.useState)('tickets');
@@ -60418,7 +60418,7 @@ const PoiInfoText = ({ poi, hideFeatures, hideCuisine, reservationUrl, hideBooki
60418
60418
  react_1.default.createElement("div", { className: `hide-m ${PoiInfoText_scss_1.default.dot}` }),
60419
60419
  react_1.default.createElement("div", { className: PoiInfoText_scss_1.default.tabs, role: "tablist", ref: tabsRef },
60420
60420
  react_1.default.createElement("button", { className: `${PoiInfoText_scss_1.default.tab} ${activeTab === 'overview' ? PoiInfoText_scss_1.default.active : ''}`, onClick: () => setActiveTab('overview'), role: "tab", "aria-selected": activeTab === 'overview', type: "button" }, t('overview.desktop')),
60421
- react_1.default.createElement("button", { className: `${PoiInfoText_scss_1.default.tab} ${activeTab === 'bookable' ? PoiInfoText_scss_1.default.active : ''}`, onClick: () => setActiveTab('bookable'), role: "tab", "aria-selected": activeTab === 'bookable', type: "button" }, t('bookable.desktop'))),
60421
+ react_1.default.createElement("button", { className: `${PoiInfoText_scss_1.default.tab} ${activeTab === 'bookable' ? PoiInfoText_scss_1.default.active : ''}`, onClick: () => { setActiveTab('bookable'); onBookableTabClick === null || onBookableTabClick === void 0 ? void 0 : onBookableTabClick(); }, role: "tab", "aria-selected": activeTab === 'bookable', type: "button" }, t('bookable.desktop'))),
60422
60422
  activeTab === 'overview' && (react_1.default.createElement(react_1.default.Fragment, null,
60423
60423
  poi.description && (react_1.default.createElement(react_1.default.Fragment, null,
60424
60424
  react_1.default.createElement("div", { className: PoiInfoText_scss_1.default.description, dangerouslySetInnerHTML: { __html: dompurify_1.default.sanitize(poi.description) } }),
@@ -92307,14 +92307,14 @@ const StepInfo = ({ step, favorite, toggleFavorite, removeStep, close, dayNumber
92307
92307
  hidePartOfDay, hideFeatures, hideCuisine, reservationButtonClick, planDate, favoriteLoading, reservationUrl, hideBookingButton, hideTours, getTourInfo, tourProducts, ticketProducts, tourTicketProductsLoading,
92308
92308
  // TOUR_PROVIDER_IDS,
92309
92309
  // TICKET_PROVIDER_IDS,
92310
- RESTAURANT_RESERVATION_PROVIDER_IDS, myOffers, isLoadingOffer, offerButtonClick, offerCardClicked, hideOffers, loadingFeedback, feedbackSubjects, sendFeedback, placeInfoCallBack, isBookingClicked, timezone, onImageModalChange, t, }) => (react_1.default.createElement(PoiInfo_1.default, { dayNumbers: dayNumbers, poi: step.poi, favorite: favorite, toggleFavorite: toggleFavorite, close: close, addRemoveReplacePoi: () => {
92310
+ RESTAURANT_RESERVATION_PROVIDER_IDS, myOffers, isLoadingOffer, offerButtonClick, offerCardClicked, hideOffers, loadingFeedback, feedbackSubjects, sendFeedback, placeInfoCallBack, isBookingClicked, onBookableTabClick, timezone, onImageModalChange, t, }) => (react_1.default.createElement(PoiInfo_1.default, { dayNumbers: dayNumbers, poi: step.poi, favorite: favorite, toggleFavorite: toggleFavorite, close: close, addRemoveReplacePoi: () => {
92311
92311
  removeStep(step.id);
92312
92312
  }, stepOrder: step.order, hideActionButtons: hideActionButtons, hideFavoriteIcon: hideFavoriteIcon,
92313
92313
  // hideScore={hideScore}
92314
92314
  hidePartOfDay: hidePartOfDay, hideFeatures: hideFeatures, hideCuisine: hideCuisine, reservationButtonClick: reservationButtonClick, planDate: planDate, favoriteLoading: favoriteLoading, reservationUrl: reservationUrl, hideBookingButton: hideBookingButton, square: false, hideTours: hideTours, getTourInfo: getTourInfo, tourProducts: tourProducts, ticketProducts: ticketProducts, tourTicketProductsLoading: tourTicketProductsLoading,
92315
92315
  // TOUR_PROVIDER_IDS={TOUR_PROVIDER_IDS}
92316
92316
  // TICKET_PROVIDER_IDS={TICKET_PROVIDER_IDS}
92317
- RESTAURANT_RESERVATION_PROVIDER_IDS: RESTAURANT_RESERVATION_PROVIDER_IDS, myOffers: myOffers, isLoadingOffer: isLoadingOffer, offerButtonClick: offerButtonClick, offerCardClicked: offerCardClicked, hideOffers: hideOffers, loadingFeedback: loadingFeedback, feedbackSubjects: feedbackSubjects, sendFeedback: sendFeedback, placeInfoCallBack: placeInfoCallBack, isBookingClicked: isBookingClicked, timezone: timezone, onImageModalChange: onImageModalChange, stepType: step.stepType, t: t }));
92317
+ RESTAURANT_RESERVATION_PROVIDER_IDS: RESTAURANT_RESERVATION_PROVIDER_IDS, myOffers: myOffers, isLoadingOffer: isLoadingOffer, offerButtonClick: offerButtonClick, offerCardClicked: offerCardClicked, hideOffers: hideOffers, loadingFeedback: loadingFeedback, feedbackSubjects: feedbackSubjects, sendFeedback: sendFeedback, placeInfoCallBack: placeInfoCallBack, isBookingClicked: isBookingClicked, onBookableTabClick: onBookableTabClick, timezone: timezone, onImageModalChange: onImageModalChange, stepType: step.stepType, t: t }));
92318
92318
  exports.default = StepInfo;
92319
92319
 
92320
92320
 
@@ -93684,7 +93684,13 @@ const KiwiHotelCard_scss_1 = __importDefault(__webpack_require__(1134));
93684
93684
  const KiwiHotelCardImage_1 = __importDefault(__webpack_require__(1135));
93685
93685
  const KiwiVisaBenefitsModal_1 = __importDefault(__webpack_require__(450));
93686
93686
  const currencySymbol_1 = __webpack_require__(123);
93687
- const KiwiHotelCard = ({ hotel, isFavorite, onFavoriteToggle, showVisaBadge, onHover, onSpecialOffersClick, t }) => {
93687
+ const buildBookingUrl = (catalogUrl, checkIn, checkOut, adults, children) => {
93688
+ const base = catalogUrl.replace(/\/$/, '');
93689
+ if (!checkIn || !checkOut)
93690
+ return base;
93691
+ return `${base}/${checkIn}/${checkOut}/${adults !== null && adults !== void 0 ? adults : 2}/${children !== null && children !== void 0 ? children : 0}/1`;
93692
+ };
93693
+ const KiwiHotelCard = ({ hotel, isFavorite, onFavoriteToggle, showVisaBadge, onHover, onSpecialOffersClick, onCardClick, checkIn, checkOut, adults, children, t }) => {
93688
93694
  const [visaModalOpen, setVisaModalOpen] = (0, react_1.useState)(false);
93689
93695
  const starCount = Math.min(5, Math.round(parseFloat(hotel.starRating) || 0));
93690
93696
  const score = parseFloat(hotel.kiwiOverallScore) || 0;
@@ -93709,10 +93715,7 @@ const KiwiHotelCard = ({ hotel, isFavorite, onFavoriteToggle, showVisaBadge, onH
93709
93715
  const hasInfoTable = perks.length > 0 || hasSpecialOffer || roomCount || settings || styles;
93710
93716
  return (
93711
93717
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
93712
- react_1.default.createElement("div", { className: KiwiHotelCard_scss_1.default.card, onMouseEnter: () => onHover === null || onHover === void 0 ? void 0 : onHover(hotel.code), onMouseLeave: () => onHover === null || onHover === void 0 ? void 0 : onHover(null), onClick: () => {
93713
- if (hotel.catalogUrl)
93714
- window.open(hotel.catalogUrl, '_blank', 'noopener,noreferrer');
93715
- }, role: hotel.websiteURL ? 'button' : undefined, tabIndex: hotel.websiteURL ? 0 : undefined },
93718
+ react_1.default.createElement("div", { className: KiwiHotelCard_scss_1.default.card, onMouseEnter: () => onHover === null || onHover === void 0 ? void 0 : onHover(hotel.code), onMouseLeave: () => onHover === null || onHover === void 0 ? void 0 : onHover(null), onClick: () => onCardClick === null || onCardClick === void 0 ? void 0 : onCardClick(hotel), role: onCardClick ? 'button' : undefined, tabIndex: onCardClick ? 0 : undefined },
93716
93719
  react_1.default.createElement("div", { className: KiwiHotelCard_scss_1.default.imageArea },
93717
93720
  react_1.default.createElement(KiwiHotelCardImage_1.default, { images: imageUrls, alt: hotel.title, isFavorite: isFavorite, onFavoriteToggle: onFavoriteToggle ? () => onFavoriteToggle(hotel) : undefined })),
93718
93721
  react_1.default.createElement("div", { className: KiwiHotelCard_scss_1.default.content },
@@ -93729,7 +93732,7 @@ const KiwiHotelCard = ({ hotel, isFavorite, onFavoriteToggle, showVisaBadge, onH
93729
93732
  react_1.default.createElement("button", { type: "button", className: KiwiHotelCard_scss_1.default.bookBtn, onClick: (e) => {
93730
93733
  e.stopPropagation();
93731
93734
  if (hotel.catalogUrl)
93732
- window.open(hotel.catalogUrl, '_blank', 'noopener,noreferrer');
93735
+ window.open(buildBookingUrl(hotel.catalogUrl, checkIn, checkOut, adults, children), '_blank', 'noopener,noreferrer');
93733
93736
  } }, t('kiwi.card.book')))),
93734
93737
  react_1.default.createElement("div", { className: KiwiHotelCard_scss_1.default.row2 },
93735
93738
  react_1.default.createElement("span", { className: KiwiHotelCard_scss_1.default.name }, hotel.title),
@@ -94806,15 +94809,14 @@ const KiwiHotelInfoModal = ({ hotel, onClose, fetchPropertyDetail, fetchProperty
94806
94809
  react_1.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
94807
94810
  react_1.default.createElement("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
94808
94811
  react_1.default.createElement("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" }))))),
94809
- (onCreateReservation || onBookNow) && (react_1.default.createElement("button", { type: "button", className: KiwiHotelInfoModal_scss_1.default.bookNowBtn, onClick: () => {
94812
+ hotel.catalogUrl && (react_1.default.createElement("button", { type: "button", className: KiwiHotelInfoModal_scss_1.default.bookNowBtn, onClick: () => {
94810
94813
  if (onBookNowClick)
94811
94814
  onBookNowClick(hotel, room, rate);
94812
- if (onCreateReservation) {
94813
- setBookingModal({ room, rate, currency: rateCurrency });
94814
- }
94815
- else if (onBookNow) {
94816
- onBookNow(hotel, room, rate);
94817
- }
94815
+ const base = hotel.catalogUrl.replace(/\/$/, '');
94816
+ const url = internalCheckIn && internalCheckOut
94817
+ ? `${base}/${internalCheckIn}/${internalCheckOut}/${internalAdults}/${internalChildren}/1`
94818
+ : base;
94819
+ window.open(url, '_blank', 'noopener,noreferrer');
94818
94820
  } }, t('kiwi.common.bookNow'))))),
94819
94821
  (rate.description || (rate.policies && Object.values(rate.policies).some(Boolean))) && (react_1.default.createElement("button", { type: "button", className: KiwiHotelInfoModal_scss_1.default.seeMoreBtn, onClick: () => { setRoomRateModal({ roomTitle: room.title, rate, currency: rateCurrency }); if (onSeeMoreDetails)
94820
94822
  onSeeMoreDetails(hotel, room, rate); } },
@@ -94889,17 +94891,13 @@ const KiwiHotelInfoModal = ({ hotel, onClose, fetchPropertyDetail, fetchProperty
94889
94891
  react_1.default.createElement("polyline", { points: "9 18 15 12 9 6" })))))))),
94890
94892
  visaModalOpen && react_1.default.createElement(KiwiVisaBenefitsModal_1.default, { onClose: () => setVisaModalOpen(false), t: t }),
94891
94893
  offersModalOpen && (react_1.default.createElement(KiwiSpecialOffersModal_1.default, { hotelName: data.title, specialOffers: loadingDetail ? undefined : ((_b = propertyDetail === null || propertyDetail === void 0 ? void 0 : propertyDetail.specialOffers) !== null && _b !== void 0 ? _b : []), onClose: () => setOffersModalOpen(false), t: t })),
94892
- roomRateModal && (react_1.default.createElement(KiwiRoomRateModal_1.default, { roomTitle: roomRateModal.roomTitle, rate: roomRateModal.rate, currency: roomRateModal.currency, nightCount: nightCount, onClose: () => setRoomRateModal(undefined), t: t, onBookNow: onCreateReservation || onBookNow ? () => {
94893
- const { rate: rr, currency: rc } = roomRateModal;
94894
- const matchingRoom = availabilityData === null || availabilityData === void 0 ? void 0 : availabilityData.rooms.find((r) => { var _a; return (_a = r.rates) === null || _a === void 0 ? void 0 : _a.some((rt) => rt.code === rr.code); });
94894
+ roomRateModal && (react_1.default.createElement(KiwiRoomRateModal_1.default, { roomTitle: roomRateModal.roomTitle, rate: roomRateModal.rate, currency: roomRateModal.currency, nightCount: nightCount, onClose: () => setRoomRateModal(undefined), t: t, onBookNow: hotel.catalogUrl ? () => {
94895
94895
  setRoomRateModal(undefined);
94896
- if (onCreateReservation) {
94897
- if (matchingRoom)
94898
- setBookingModal({ room: matchingRoom, rate: rr, currency: rc });
94899
- }
94900
- else if (onBookNow && matchingRoom) {
94901
- onBookNow(hotel, matchingRoom, rr);
94902
- }
94896
+ const base = hotel.catalogUrl.replace(/\/$/, '');
94897
+ const url = internalCheckIn && internalCheckOut
94898
+ ? `${base}/${internalCheckIn}/${internalCheckOut}/${internalAdults}/${internalChildren}/1`
94899
+ : base;
94900
+ window.open(url, '_blank', 'noopener,noreferrer');
94903
94901
  } : undefined })),
94904
94902
  bookingModal && onCreateReservation && (react_1.default.createElement(KiwiBookingModal_1.default, { hotelName: data.title, roomTitle: bookingModal.room.title, rate: bookingModal.rate, currency: bookingModal.currency, checkIn: internalCheckIn, checkOut: internalCheckOut, nightCount: nightCount, adults: internalAdults, children: internalChildren, propertyCode: hotel.code, roomCode: bookingModal.room.code, generateExternalId: generateExternalId || (() => `${hotel.code}-${Date.now()}`), onClose: () => setBookingModal(undefined), onCreateReservation: async (req) => {
94905
94903
  const res = await onCreateReservation(req);