@roomstay/frontend 2.6.78 → 2.6.79-1

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.
Files changed (96) hide show
  1. package/dist/430.bundle.js +1 -1
  2. package/dist/456.bundle.js +1 -0
  3. package/dist/537.bundle.js +1 -1
  4. package/dist/977.bundle.js +1 -0
  5. package/dist/978.bundle.js +1 -1
  6. package/dist/main.bundle.js +1 -1
  7. package/dist/src/api/BookingAPI.d.ts +2 -0
  8. package/dist/src/api/BookingAPI.js +2 -0
  9. package/dist/src/api/BookingAPI.js.map +1 -1
  10. package/dist/src/api/ReservationAPI.js +12 -9
  11. package/dist/src/api/ReservationAPI.js.map +1 -1
  12. package/dist/src/api/TrueRewardsAPI.d.ts +4 -0
  13. package/dist/src/api/TrueRewardsAPI.js +37 -0
  14. package/dist/src/api/TrueRewardsAPI.js.map +1 -0
  15. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +1 -0
  16. package/dist/src/components/generic/BookingWizard/BookingWizard.js +7 -1
  17. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  18. package/dist/src/components/generic/Event/EventCard.js +16 -8
  19. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  20. package/dist/src/components/generic/Event/EventCarousel.js +3 -1
  21. package/dist/src/components/generic/Event/EventCarousel.js.map +1 -1
  22. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +9 -2
  23. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  24. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +11 -10
  25. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
  26. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +11 -4
  27. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  28. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +7 -0
  29. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +54 -0
  30. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +1 -0
  31. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.d.ts +2 -0
  32. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js +53 -0
  33. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map +1 -0
  34. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.d.ts +2 -0
  35. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +115 -0
  36. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -0
  37. package/dist/src/components/steps/room/AvailableUpgradesModal.js +0 -5
  38. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  39. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -2
  40. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  41. package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
  42. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  43. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +63 -11
  44. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  45. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +3 -1
  46. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  47. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +5 -2
  48. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  49. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +10 -2
  50. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  51. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +1 -0
  52. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  53. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +1 -0
  54. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  55. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +3 -0
  56. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  57. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js +8 -2
  58. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js.map +1 -1
  59. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.d.ts +2 -0
  60. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js +44 -0
  61. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js.map +1 -0
  62. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +1 -0
  63. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  64. package/dist/src/index.d.ts +1 -0
  65. package/dist/src/index.js +4 -2
  66. package/dist/src/index.js.map +1 -1
  67. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  68. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  69. package/dist/src/models/BasketRow.d.ts +2 -1
  70. package/dist/src/models/BasketRow.js +32 -2
  71. package/dist/src/models/BasketRow.js.map +1 -1
  72. package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -0
  73. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  74. package/dist/src/models/RoomstaySession.d.ts +1 -0
  75. package/dist/src/models/RoomstaySession.js.map +1 -1
  76. package/dist/src/providers/FeatureProvider.js +2 -0
  77. package/dist/src/providers/FeatureProvider.js.map +1 -1
  78. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +10 -0
  79. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +13 -0
  80. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +1 -0
  81. package/dist/src/providers/feature/Feature.d.ts +2 -0
  82. package/dist/src/providers/feature/Feature.js +4 -0
  83. package/dist/src/providers/feature/Feature.js.map +1 -1
  84. package/dist/src/providers/storage/SessionProvider.js +2 -0
  85. package/dist/src/providers/storage/SessionProvider.js.map +1 -1
  86. package/dist/src/translations/Translation.d.ts +18 -0
  87. package/dist/src/translations/Translation.js +18 -0
  88. package/dist/src/translations/Translation.js.map +1 -1
  89. package/dist/src/translations/languages/en-gb.js +18 -0
  90. package/dist/src/translations/languages/en-gb.js.map +1 -1
  91. package/dist/src/util/TotalCalculator.js.map +1 -1
  92. package/dist/test.bundle.js +1 -1
  93. package/dist/vendors.bundle.js +1 -1
  94. package/package.json +2 -2
  95. package/dist/659.bundle.js +0 -1
  96. package/dist/984.bundle.js +0 -1
@@ -6,6 +6,7 @@ import HotelAPI from './HotelAPI';
6
6
  import MemberAPI from './MemberAPI';
7
7
  import ReservationAPI from './ReservationAPI';
8
8
  import SessionAPI from './SessionAPI';
9
+ import TrueRewardsAPI from './TrueRewardsAPI';
9
10
  import ErrorAPI from './ErrorAPI';
10
11
  declare const API: {
11
12
  Availability: AvailabilityAPI;
@@ -16,6 +17,7 @@ declare const API: {
16
17
  Hotel: HotelAPI;
17
18
  Session: SessionAPI;
18
19
  Error: ErrorAPI;
20
+ TrueRewards: TrueRewardsAPI;
19
21
  enableMocks: () => void;
20
22
  };
21
23
  export default API;
@@ -11,6 +11,7 @@ const HotelAPI_1 = __importDefault(require("./HotelAPI"));
11
11
  const MemberAPI_1 = __importDefault(require("./MemberAPI"));
12
12
  const ReservationAPI_1 = __importDefault(require("./ReservationAPI"));
13
13
  const SessionAPI_1 = __importDefault(require("./SessionAPI"));
14
+ const TrueRewardsAPI_1 = __importDefault(require("./TrueRewardsAPI"));
14
15
  const ErrorAPI_1 = __importDefault(require("./ErrorAPI"));
15
16
  const API = {
16
17
  Availability: new AvailabilityAPI_1.default(),
@@ -21,6 +22,7 @@ const API = {
21
22
  Member: new MemberAPI_1.default(),
22
23
  Session: new SessionAPI_1.default(),
23
24
  Error: new ErrorAPI_1.default(),
25
+ TrueRewards: new TrueRewardsAPI_1.default(),
24
26
  enableMocks: () => {
25
27
  API.Addons = BookingAPI_1.default.Addons;
26
28
  },
@@ -1 +1 @@
1
- {"version":3,"file":"BookingAPI.js","sourceRoot":"/","sources":["src/api/BookingAPI.ts"],"names":[],"mappings":";;;;;AACA,oEAAyC;AAEzC,8DAAsC;AACtC,4EAAoD;AACpD,4EAAoD;AACpD,8DAAsC;AACtC,gEAAwC;AACxC,0EAAkD;AAClD,kEAA0C;AAE1C,0DAAkC;AAElC,MAAM,GAAG,GAUL;IACA,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,IAAI,wBAAc,EAAE;IACjC,MAAM,EAAE,IAAI,kBAAQ,EAAE;IACtB,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,MAAM,EAAE,IAAI,mBAAS,EAAE;IACvB,OAAO,EAAE,IAAI,oBAAU,EAAE;IACzB,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,GAAG,EAAE;QACd,GAAG,CAAC,MAAM,GAAG,oBAAO,CAAC,MAAM,CAAC;IAChC,CAAC;CACJ,CAAC;AAEF,kBAAe,GAAG,CAAC","sourcesContent":["import MockAddonAPI from 'mockApi/AddonAPI';\nimport MockAPI from 'mockApi/BookingAPI';\n\nimport AddonAPI from '@/api/AddonAPI';\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport ExchangeRateAPI from '@/api/ExchangeRateAPI';\nimport HotelAPI from '@/api/HotelAPI';\nimport MemberAPI from '@/api/MemberAPI';\nimport ReservationAPI from '@/api/ReservationAPI';\nimport SessionAPI from '@/api/SessionAPI';\n\nimport ErrorAPI from './ErrorAPI';\n\nconst API: {\n Availability: AvailabilityAPI;\n Reservation: ReservationAPI;\n ExchangeRate: ExchangeRateAPI;\n Addons: AddonAPI | MockAddonAPI;\n Member: MemberAPI;\n Hotel: HotelAPI;\n Session: SessionAPI;\n Error: ErrorAPI;\n enableMocks: () => void;\n} = {\n Availability: new AvailabilityAPI(),\n Hotel: new HotelAPI(),\n Reservation: new ReservationAPI(),\n Addons: new AddonAPI(),\n ExchangeRate: new ExchangeRateAPI(),\n Member: new MemberAPI(),\n Session: new SessionAPI(),\n Error: new ErrorAPI(),\n enableMocks: () => {\n API.Addons = MockAPI.Addons;\n },\n};\n\nexport default API;\n"]}
1
+ {"version":3,"file":"BookingAPI.js","sourceRoot":"/","sources":["src/api/BookingAPI.ts"],"names":[],"mappings":";;;;;AACA,oEAAyC;AAEzC,8DAAsC;AACtC,4EAAoD;AACpD,4EAAoD;AACpD,8DAAsC;AACtC,gEAAwC;AACxC,0EAAkD;AAClD,kEAA0C;AAC1C,0EAAkD;AAElD,0DAAkC;AAElC,MAAM,GAAG,GAWL;IACA,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,IAAI,wBAAc,EAAE;IACjC,MAAM,EAAE,IAAI,kBAAQ,EAAE;IACtB,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,MAAM,EAAE,IAAI,mBAAS,EAAE;IACvB,OAAO,EAAE,IAAI,oBAAU,EAAE;IACzB,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,IAAI,wBAAc,EAAE;IACjC,WAAW,EAAE,GAAG,EAAE;QACd,GAAG,CAAC,MAAM,GAAG,oBAAO,CAAC,MAAM,CAAC;IAChC,CAAC;CACJ,CAAC;AAEF,kBAAe,GAAG,CAAC","sourcesContent":["import MockAddonAPI from 'mockApi/AddonAPI';\nimport MockAPI from 'mockApi/BookingAPI';\n\nimport AddonAPI from '@/api/AddonAPI';\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport ExchangeRateAPI from '@/api/ExchangeRateAPI';\nimport HotelAPI from '@/api/HotelAPI';\nimport MemberAPI from '@/api/MemberAPI';\nimport ReservationAPI from '@/api/ReservationAPI';\nimport SessionAPI from '@/api/SessionAPI';\nimport TrueRewardsAPI from '@/api/TrueRewardsAPI';\n\nimport ErrorAPI from './ErrorAPI';\n\nconst API: {\n Availability: AvailabilityAPI;\n Reservation: ReservationAPI;\n ExchangeRate: ExchangeRateAPI;\n Addons: AddonAPI | MockAddonAPI;\n Member: MemberAPI;\n Hotel: HotelAPI;\n Session: SessionAPI;\n Error: ErrorAPI;\n TrueRewards: TrueRewardsAPI;\n enableMocks: () => void;\n} = {\n Availability: new AvailabilityAPI(),\n Hotel: new HotelAPI(),\n Reservation: new ReservationAPI(),\n Addons: new AddonAPI(),\n ExchangeRate: new ExchangeRateAPI(),\n Member: new MemberAPI(),\n Session: new SessionAPI(),\n Error: new ErrorAPI(),\n TrueRewards: new TrueRewardsAPI(),\n enableMocks: () => {\n API.Addons = MockAPI.Addons;\n },\n};\n\nexport default API;\n"]}
@@ -89,16 +89,19 @@ class ReservationAPI extends BaseAPI_1.default {
89
89
  * This ID is used to detect changes and re-fetch deposit quotes during checkout.
90
90
  */
91
91
  this.buildQuoteQueryID = (rows, memberNumber) => {
92
- const quoteRequest = this.buildQuoteRequest(rows, memberNumber);
93
- return quoteRequest.rows
92
+ return rows
94
93
  .map((row) => {
95
- const sortedKeys = Object.keys(row).sort();
96
- return sortedKeys
97
- .map((key) => {
98
- const value = row[key];
99
- return `${key}-${value}`;
100
- })
101
- .join('-');
94
+ var _a, _b, _c, _d;
95
+ return `row:${row.getID()},
96
+ room:${(_a = row.getRoom()) === null || _a === void 0 ? void 0 : _a.code},
97
+ rate:${(_b = row.getRate()) === null || _b === void 0 ? void 0 : _b.code},
98
+ promo:${row.getPromoCode()},
99
+ adults:${row.getAdults()},
100
+ children:${row.getChildren()},
101
+ infants:${row.getInfants()},
102
+ checkIn:${(_c = row.getStartDate()) === null || _c === void 0 ? void 0 : _c.format('YYYY-MM-DD')},
103
+ checkOut:${(_d = row.getEndDate()) === null || _d === void 0 ? void 0 : _d.format('YYYY-MM-DD')},
104
+ member:${memberNumber}`;
102
105
  })
103
106
  .join('-');
104
107
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import { IBookingPayment, IBookingQuoteRequest, IBookingQuoteResponse, IPencilReservationRequest, IPencilReservationResponse } from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\nimport ReservationsDTO, { ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { IRoomstayMemberBooking } from '@/models/RoomstayMembers/IRoomstayMemberBooking';\nimport UserProfile from '@/models/UserProfile';\n\nexport enum EPaymentMethod {\n PLANPAY = 'Planpay',\n CARD = 'Card',\n}\n\nexport default class ReservationAPI extends BaseAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n /**\n * Populates a booking quote request.\n */\n public buildQuoteRequest = (rows: BasketRow[], memberNumber?: string): IBookingQuoteRequest => {\n const quoteRows = rows.reduce<IBookingQuoteRequest['rows']>((acc, row) => {\n try {\n acc.push({\n rowId: row.getID(),\n roomCode: row.getRoom().code as string,\n rateCode: row.getRate()?.code as string,\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkIn: row.getStartDate().format('YYYY-MM-DD'),\n checkOut: row.getEndDate().format('YYYY-MM-DD'),\n memberNumber,\n totalDisplayedPrice: row.getTotalPrice(),\n });\n } catch (ex) {\n // Skip row if it throws\n // Fixed: The checkout step will hang indefinitely if any basket row is missing a selected room rate\n }\n return acc;\n }, []);\n\n return { rows: quoteRows };\n };\n\n /**\n * Populates a pencil reservation request based on a quote request.\n */\n public buildPencilRequest = (rows: BasketRow[], memberNumber?: string, pencilId?: string): IPencilReservationRequest => {\n const quoteRequest = this.buildQuoteRequest(rows, memberNumber);\n const pencilRequest: IPencilReservationRequest = {\n ...quoteRequest,\n pencilId: pencilId,\n };\n\n pencilRequest.rows = quoteRequest.rows.map((requestRow) => {\n const basketRow = rows.find((r) => r.getID() == requestRow.rowId);\n\n return {\n ...requestRow,\n pencilId: basketRow?.pencilId,\n };\n });\n\n return pencilRequest;\n };\n\n /**\n * Generates a unique query ID string based on basket row data.\n * This ID is used to detect changes and re-fetch deposit quotes during checkout.\n */\n public buildQuoteQueryID = (rows: BasketRow[], memberNumber?: string): string => {\n const quoteRequest: IBookingQuoteRequest = this.buildQuoteRequest(rows, memberNumber);\n return quoteRequest.rows\n .map((row) => {\n const sortedKeys = Object.keys(row).sort();\n return sortedKeys\n .map((key) => {\n const value = row[key as keyof typeof row];\n return `${key}-${value}`;\n })\n .join('-');\n })\n .join('-');\n };\n\n /**\n * Returns a quote for the given\n */\n public getPriceQuote = async (hotelId: string, rows: BasketRow[], memberNumber?: string): Promise<IBookingQuoteResponse> => {\n const quoteBody = this.buildQuoteRequest(rows, memberNumber);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'quote');\n };\n\n /**\n * Pencils a reservation for the given rooms. Returns the timeout, and quote if applicable.\n */\n public pencilReservation = async (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string): Promise<IPencilReservationResponse> => {\n const quoteBody = this.buildPencilRequest(rows, memberNumber, pencilId);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'pencil');\n };\n\n /**\n *\n * @param basketRows\n * @param userProfiles\n * @param payment\n * @param addonRows\n * @param comments\n * @param hotelId\n * @param sessionId\n * @param specialReq\n * @returns\n */\n public bookNow = async (\n basketRows: BasketRow[],\n userProfiles: UserProfile[],\n payment: IBookingPayment,\n addonRows: BasketAddonRow[],\n comments: string,\n hotelId: string,\n sessionId: string,\n pencilId: string | undefined = undefined,\n specialReq: string | undefined = undefined,\n retryPayment = false,\n roomstayId: string | undefined = undefined,\n memberNumber: string | undefined = undefined\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n roomType: row.getRoom().code || '',\n ratePlan: row.getRate()?.code || '',\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkInDate: row.getStartDate().format('YYYY-MM-DD'),\n checkOutDate: row.getEndDate().format('YYYY-MM-DD'),\n\n quoteId: row.quoteDetails?.quoteId,\n rowId: row.getID(),\n memberNumber,\n pencilId: row.pencilId,\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n code: addon.code,\n startDate: row.getSelectedDate(),\n };\n if (addon?.ratePlanCode) {\n response.ratePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.startTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.children = row.getChildQuantity();\n }\n\n if (addon.pricingType) {\n response.pricingType = addon.pricingType;\n }\n\n return response;\n });\n\n const getParams: any = {};\n\n if (retryPayment) {\n getParams.retryPayment = true;\n }\n\n return this.post(\n APIEndpoint.Reservations,\n {\n rooms: rooms,\n services: addons,\n specialRequest: specialReq,\n comments: comments,\n profiles: userProfiles,\n payment: payment,\n sessionId: sessionId,\n pencilId: pencilId,\n sourceUrl: window.location.href,\n roomstayId: roomstayId,\n },\n hotelId,\n getParams\n );\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n },\n hotelId,\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[], itineraryId: string, hotelId: string): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n },\n hotelId,\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string, hotelId: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, hotelId, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email: string, hotelId: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public linkBookingToMember = async (hotelId: string, reservationId: string, reservationEmail: string): Promise<{ message: string; booking: IRoomstayMemberBooking }> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.post(\n APIEndpoint.Reservations,\n {\n reservationId,\n reservationEmail,\n },\n hotelId,\n {},\n 'link-booking'\n );\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import { IBookingPayment, IBookingQuoteRequest, IBookingQuoteResponse, IPencilReservationRequest, IPencilReservationResponse } from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\nimport ReservationsDTO, { ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { IRoomstayMemberBooking } from '@/models/RoomstayMembers/IRoomstayMemberBooking';\nimport UserProfile from '@/models/UserProfile';\n\nexport enum EPaymentMethod {\n PLANPAY = 'Planpay',\n CARD = 'Card',\n}\n\nexport default class ReservationAPI extends BaseAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n /**\n * Populates a booking quote request.\n */\n public buildQuoteRequest = (rows: BasketRow[], memberNumber?: string): IBookingQuoteRequest => {\n const quoteRows = rows.reduce<IBookingQuoteRequest['rows']>((acc, row) => {\n try {\n acc.push({\n rowId: row.getID(),\n roomCode: row.getRoom().code as string,\n rateCode: row.getRate()?.code as string,\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkIn: row.getStartDate().format('YYYY-MM-DD'),\n checkOut: row.getEndDate().format('YYYY-MM-DD'),\n memberNumber,\n totalDisplayedPrice: row.getTotalPrice(),\n });\n } catch (ex) {\n // Skip row if it throws\n // Fixed: The checkout step will hang indefinitely if any basket row is missing a selected room rate\n }\n return acc;\n }, []);\n\n return { rows: quoteRows };\n };\n\n /**\n * Populates a pencil reservation request based on a quote request.\n */\n public buildPencilRequest = (rows: BasketRow[], memberNumber?: string, pencilId?: string): IPencilReservationRequest => {\n const quoteRequest = this.buildQuoteRequest(rows, memberNumber);\n const pencilRequest: IPencilReservationRequest = {\n ...quoteRequest,\n pencilId: pencilId,\n };\n\n pencilRequest.rows = quoteRequest.rows.map((requestRow) => {\n const basketRow = rows.find((r) => r.getID() == requestRow.rowId);\n\n return {\n ...requestRow,\n pencilId: basketRow?.pencilId,\n };\n });\n\n return pencilRequest;\n };\n\n /**\n * Generates a unique query ID string based on basket row data.\n * This ID is used to detect changes and re-fetch deposit quotes during checkout.\n */\n public buildQuoteQueryID = (rows: BasketRow[], memberNumber?: string): string => {\n return rows\n .map((row) => {\n return `row:${row.getID()},\n room:${row.getRoom()?.code},\n rate:${row.getRate()?.code},\n promo:${row.getPromoCode()},\n adults:${row.getAdults()},\n children:${row.getChildren()},\n infants:${row.getInfants()},\n checkIn:${row.getStartDate()?.format('YYYY-MM-DD')},\n checkOut:${row.getEndDate()?.format('YYYY-MM-DD')},\n member:${memberNumber}`;\n })\n .join('-');\n };\n\n /**\n * Returns a quote for the given\n */\n public getPriceQuote = async (hotelId: string, rows: BasketRow[], memberNumber?: string): Promise<IBookingQuoteResponse> => {\n const quoteBody = this.buildQuoteRequest(rows, memberNumber);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'quote');\n };\n\n /**\n * Pencils a reservation for the given rooms. Returns the timeout, and quote if applicable.\n */\n public pencilReservation = async (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string): Promise<IPencilReservationResponse> => {\n const quoteBody = this.buildPencilRequest(rows, memberNumber, pencilId);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'pencil');\n };\n\n /**\n *\n * @param basketRows\n * @param userProfiles\n * @param payment\n * @param addonRows\n * @param comments\n * @param hotelId\n * @param sessionId\n * @param specialReq\n * @returns\n */\n public bookNow = async (\n basketRows: BasketRow[],\n userProfiles: UserProfile[],\n payment: IBookingPayment,\n addonRows: BasketAddonRow[],\n comments: string,\n hotelId: string,\n sessionId: string,\n pencilId: string | undefined = undefined,\n specialReq: string | undefined = undefined,\n retryPayment = false,\n roomstayId: string | undefined = undefined,\n memberNumber: string | undefined = undefined\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n roomType: row.getRoom().code || '',\n ratePlan: row.getRate()?.code || '',\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkInDate: row.getStartDate().format('YYYY-MM-DD'),\n checkOutDate: row.getEndDate().format('YYYY-MM-DD'),\n\n quoteId: row.quoteDetails?.quoteId,\n rowId: row.getID(),\n memberNumber,\n pencilId: row.pencilId,\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n code: addon.code,\n startDate: row.getSelectedDate(),\n };\n if (addon?.ratePlanCode) {\n response.ratePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.startTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.children = row.getChildQuantity();\n }\n\n if (addon.pricingType) {\n response.pricingType = addon.pricingType;\n }\n\n return response;\n });\n\n const getParams: any = {};\n\n if (retryPayment) {\n getParams.retryPayment = true;\n }\n\n return this.post(\n APIEndpoint.Reservations,\n {\n rooms: rooms,\n services: addons,\n specialRequest: specialReq,\n comments: comments,\n profiles: userProfiles,\n payment: payment,\n sessionId: sessionId,\n pencilId: pencilId,\n sourceUrl: window.location.href,\n roomstayId: roomstayId,\n },\n hotelId,\n getParams\n );\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n },\n hotelId,\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[], itineraryId: string, hotelId: string): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n },\n hotelId,\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string, hotelId: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, hotelId, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email: string, hotelId: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public linkBookingToMember = async (hotelId: string, reservationId: string, reservationEmail: string): Promise<{ message: string; booking: IRoomstayMemberBooking }> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.post(\n APIEndpoint.Reservations,\n {\n reservationId,\n reservationEmail,\n },\n hotelId,\n {},\n 'link-booking'\n );\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import BaseAPI from './BaseAPI';
2
+ export default class TrueRewardsAPI extends BaseAPI {
3
+ fetchBalance: (cardReference: string, hotelId: string) => Promise<number | null>;
4
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const BaseAPI_1 = __importDefault(require("./BaseAPI"));
16
+ class TrueRewardsAPI extends BaseAPI_1.default {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.fetchBalance = (cardReference, hotelId) => __awaiter(this, void 0, void 0, function* () {
20
+ const response = yield fetch(`${this.getApiPath()}true-rewards/${hotelId}/balance?cardReference=${cardReference}`, {
21
+ headers: { 'Content-Type': 'application/json' },
22
+ });
23
+ if (response.status === 400) {
24
+ // Invalid card
25
+ return null;
26
+ }
27
+ const data = yield response.json();
28
+ if (response.status === 200) {
29
+ return data.balance;
30
+ }
31
+ console.error('True Rewards failed to fetch card balance', data);
32
+ throw new Error(`Failed to fetch balance: ${response.status} ${response.statusText}`);
33
+ });
34
+ }
35
+ }
36
+ exports.default = TrueRewardsAPI;
37
+ //# sourceMappingURL=TrueRewardsAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrueRewardsAPI.js","sourceRoot":"/","sources":["src/api/TrueRewardsAPI.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,4DAAoC;AAEpC,MAAqB,cAAe,SAAQ,iBAAO;IAAnD;;QACW,iBAAY,GAAG,CAAO,aAAqB,EAAE,OAAe,EAA0B,EAAE;YAC3F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,OAAO,0BAA0B,aAAa,EAAE,EAAE;gBAC/G,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAClD,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBACzB,eAAe;gBACf,OAAO,IAAI,CAAC;aACf;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBACzB,OAAO,IAAI,CAAC,OAAO,CAAC;aACvB;YAED,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAA,CAAC;IACN,CAAC;CAAA;AApBD,iCAoBC","sourcesContent":["import BaseAPI from '@/api/BaseAPI';\n\nexport default class TrueRewardsAPI extends BaseAPI {\n public fetchBalance = async (cardReference: string, hotelId: string): Promise<number | null> => {\n const response = await fetch(`${this.getApiPath()}true-rewards/${hotelId}/balance?cardReference=${cardReference}`, {\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (response.status === 400) {\n // Invalid card\n return null;\n }\n\n const data = await response.json();\n\n if (response.status === 200) {\n return data.balance;\n }\n\n console.error('True Rewards failed to fetch card balance', data);\n throw new Error(`Failed to fetch balance: ${response.status} ${response.statusText}`);\n };\n}\n"]}
@@ -22,6 +22,7 @@ export declare const StateSectionsDefault: BookingWizardContextType['stateSectio
22
22
  export interface BookingWizardProps extends BookingWizardContentProps {
23
23
  layout?: BookingWizardLayout;
24
24
  theme?: BookingWizardTheme;
25
+ useMobileButtonLayout?: boolean;
25
26
  wrapperClassname?: string;
26
27
  contentClassname?: string;
27
28
  properties: TBookingWizardProperties;
@@ -65,11 +65,17 @@ exports.StateSectionsDefault = {
65
65
  [EBookingWizardSection.Promo]: { opening: false, isFirst: false, hidden: false, inactive: false },
66
66
  };
67
67
  const BookingWizard = (props) => {
68
- const { layout = 'horizontal', theme = EBookingWizardTheme.Default, onSubmit, wrapperClassname, contentClassname: contentClassnameProps, selectedProperty, properties, defaultColors, maxAdults, disableChild, showInfants, disableRoom, hideGuestSelect, hidePromocode, hideProperty, defaultValues, overlayDirection = EBookingWizardOverlayDirection.Downward, } = props;
68
+ const { layout: propLayout = 'horizontal', theme = EBookingWizardTheme.Default, useMobileButtonLayout = false, onSubmit, wrapperClassname, contentClassname: contentClassnameProps, selectedProperty, properties, defaultColors, maxAdults, disableChild, showInfants, disableRoom, hideGuestSelect, hidePromocode, hideProperty, defaultValues, overlayDirection = EBookingWizardOverlayDirection.Downward, } = props;
69
69
  const [isOpen, setIsOpen] = react_1.default.useState(false);
70
70
  const { isMobile } = (0, WindowSize_1.useWindowSize)();
71
71
  const { t } = (0, react_i18next_1.useTranslation)();
72
72
  const [ref, bounds] = (0, react_use_measure_1.default)({ debounce: 300 });
73
+ const layout = (0, react_1.useMemo)(() => {
74
+ if (isMobile && useMobileButtonLayout) {
75
+ return 'button';
76
+ }
77
+ return propLayout;
78
+ }, [isMobile, useMobileButtonLayout, propLayout]);
73
79
  const [compOverlayType, setCompOverlayType] = (0, react_1.useState)('popup');
74
80
  const [overlayOffset, setOverlayOffset] = (0, react_1.useState)();
75
81
  const [dateSelectorOverlayOffset, setDateSelectorOverlayOffset] = (0, react_1.useState)();
@@ -1 +1 @@
1
- {"version":3,"file":"BookingWizard.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useMeasure from 'react-use-measure';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { BookingWizardContent, BookingWizardContentProps } from '@/components/generic/BookingWizard/BookingWizardContent';\nimport {\n BookingWizardContext,\n BookingWizardContextType,\n BookingWizardLayout,\n BookingWizardOverlayType,\n BookingWizardTheme,\n} from '@/components/generic/BookingWizard/BookingWizardContext';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './BookingWizard.module.scss';\n\nexport enum EBookingWizardTheme {\n Default = 'default',\n Specific = 'specific',\n Images = 'images',\n}\n\nexport enum EBookingWizardOverlayDirection {\n Upward = 'upward',\n Downward = 'downward',\n}\n\nexport enum EBookingWizardSection {\n Property = 'property',\n Date = 'date',\n Guest = 'guest',\n Promo = 'promo',\n}\n\nexport const StateSectionsDefault: BookingWizardContextType['stateSections'] = {\n [EBookingWizardSection.Property]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Date]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Guest]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Promo]: { opening: false, isFirst: false, hidden: false, inactive: false },\n};\n\nexport interface BookingWizardProps extends BookingWizardContentProps {\n layout?: BookingWizardLayout;\n theme?: BookingWizardTheme;\n\n wrapperClassname?: string;\n contentClassname?: string;\n\n properties: TBookingWizardProperties;\n selectedProperty: BookingWizardProperty;\n defaultColors: BookingWizardProperty['colors'];\n onSubmit: BookingWizardContextType['onSubmit'];\n\n overlayDirection?: EBookingWizardOverlayDirection;\n}\n\nconst BookingWizard: React.FC<BookingWizardProps> = (props) => {\n const {\n layout = 'horizontal',\n theme = EBookingWizardTheme.Default,\n onSubmit,\n wrapperClassname,\n contentClassname: contentClassnameProps,\n selectedProperty,\n properties,\n defaultColors,\n maxAdults,\n disableChild,\n showInfants,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n hideProperty,\n defaultValues,\n overlayDirection = EBookingWizardOverlayDirection.Downward,\n } = props;\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { isMobile } = useWindowSize();\n const { t } = useTranslation();\n const [ref, bounds] = useMeasure({ debounce: 300 });\n\n const [compOverlayType, setCompOverlayType] = useState<BookingWizardOverlayType>('popup');\n const [overlayOffset, setOverlayOffset] = useState<[number, number]>();\n const [dateSelectorOverlayOffset, setDateSelectorOverlayOffset] = useState<[number, number]>();\n const [overlayPlacement, setOverlayPlacement] = useState<Placement>();\n\n const isSmallContainer = useMemo(() => {\n if (!bounds.width) return false;\n return bounds.width <= ScreenSize.Medium;\n }, [bounds]);\n\n useEffect(() => {\n if ((layout === 'horizontal' || layout === 'horizontal-condensed') && !isMobile) {\n setOverlayOffset([0, 6]);\n setDateSelectorOverlayOffset([0, 6]);\n setCompOverlayType('popup');\n } else {\n setOverlayOffset([0, 10]);\n setDateSelectorOverlayOffset([0, -8]);\n setCompOverlayType('bottom-sheet');\n }\n }, [layout, isMobile, isSmallContainer]);\n\n useEffect(() => {\n if (!isMobile) {\n setOverlayPlacement(overlayDirection === EBookingWizardOverlayDirection.Downward ? 'bottom-start' : 'top-start');\n } else {\n setOverlayPlacement(overlayDirection === EBookingWizardOverlayDirection.Downward ? 'bottom' : 'top');\n }\n }, [isMobile]);\n\n const isImagesTheme = theme === EBookingWizardTheme.Images;\n const classes = classNames(\n styles.container,\n {\n [styles['--theme-specific']]: theme === EBookingWizardTheme.Specific,\n [styles['--theme-default']]: theme === EBookingWizardTheme.Default,\n [styles['--theme-images']]: isImagesTheme,\n [styles['--theme-condensed']]: layout === 'horizontal-condensed',\n [styles['--in-small-container']]: isSmallContainer,\n },\n wrapperClassname\n );\n\n const contentClassname = classNames(contentClassnameProps, { [styles['--in-small-container']]: isSmallContainer });\n\n const isImagesThemeMobile = isImagesTheme && isSmallContainer;\n const [activeSection, setActiveSection] = useState<EBookingWizardSection | null>(null);\n const [availableSections, setAvailableSections] = useState<EBookingWizardSection[]>([]);\n const [stateSections, setStateSections] = useState<BookingWizardContextType['stateSections']>(StateSectionsDefault);\n\n useEffect(() => {\n const isPromoHidden = hidePromocode || layout === 'horizontal-condensed' || isImagesThemeMobile;\n const isPropertyHidden = !!hideProperty;\n const isGuestHidden = !!hideGuestSelect;\n\n const state: BookingWizardContextType['stateSections'] = {\n [EBookingWizardSection.Property]: {\n hidden: isPropertyHidden,\n isFirst: !isPropertyHidden,\n opening: EBookingWizardSection.Property === activeSection,\n inactive: isPropertyHidden || (isImagesThemeMobile && activeSection !== null && activeSection !== EBookingWizardSection.Property),\n },\n [EBookingWizardSection.Date]: {\n hidden: false,\n isFirst: isPropertyHidden,\n opening: EBookingWizardSection.Date === activeSection,\n inactive: (isImagesThemeMobile && isPropertyHidden && activeSection === null) || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Date),\n },\n [EBookingWizardSection.Guest]: {\n hidden: isGuestHidden,\n isFirst: false,\n opening: EBookingWizardSection.Guest === activeSection,\n inactive: isGuestHidden || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Guest),\n },\n [EBookingWizardSection.Promo]: {\n hidden: isPromoHidden,\n isFirst: false,\n opening: EBookingWizardSection.Promo === activeSection,\n inactive: isPromoHidden || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Promo),\n },\n };\n\n // Extract available (i.e., not hidden) sections from state\n const enabled = Object.entries(state)\n .filter(([, value]) => !value.hidden)\n .map(([key]) => key as EBookingWizardSection);\n setAvailableSections(enabled);\n\n // If all inactive are true, then find the first section with hidden === false and set its inactive to false.\n const allInactive = Object.values(state).every((s) => s.inactive);\n if (allInactive) {\n const sections: EBookingWizardSection[] = [EBookingWizardSection.Property, EBookingWizardSection.Date, EBookingWizardSection.Guest, EBookingWizardSection.Promo];\n for (const section of sections) {\n if (!state[section].hidden) {\n state[section].opening = false;\n state[section].inactive = false;\n break;\n }\n }\n }\n\n setStateSections(state);\n }, [layout, hideProperty, hideGuestSelect, hidePromocode, activeSection, isImagesTheme, isImagesThemeMobile]);\n\n const navigateSection = (currentSection: EBookingWizardSection, direction: 1 | -1) => {\n if (!currentSection) return;\n const currentIndex = availableSections.indexOf(currentSection);\n const targetSection = availableSections[currentIndex + direction] ?? null;\n setActiveSection(targetSection);\n };\n\n const onNextHandler = (section: EBookingWizardSection) => navigateSection(section, 1);\n const onPrevHandler = (section: EBookingWizardSection) => navigateSection(section, -1);\n\n const bookingWizardContext: BookingWizardContextType = {\n layout,\n theme,\n type: compOverlayType,\n className: classes,\n isMobile,\n isSmallContainer,\n\n onSubmit,\n\n overlay: {\n offset: overlayOffset,\n placement: overlayPlacement,\n fallbackPlacements: overlayPlacement,\n dateOffset: dateSelectorOverlayOffset,\n },\n isImagesTheme,\n isImagesThemeMobile,\n activeSection,\n stateSections,\n onNextHandler,\n onPrevHandler,\n };\n\n if (layout === 'button') {\n return (\n <div className={classes}>\n <BEButton className={styles.bookNowBtn} onClick={() => setIsOpen(true)}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n\n <SimpleModal className={styles.container} size={SimpleModalSize.ExtraSmall} open={isOpen} onClose={() => setIsOpen(false)} alignCenter overflowVisible>\n <div>\n <div className={styles.title}>\n <span>{t(Translation.Misc.BookAHotel)}</span>\n <Icon className={styles.closeBtn} icon={IconType.Close} size=\"24px\" onClick={() => setIsOpen(false)} />\n </div>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <div className={classes}>\n <BookingWizardContent\n properties={properties}\n selectedProperty={selectedProperty}\n defaultColors={defaultColors}\n classname={contentClassname}\n maxAdults={maxAdults}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n defaultValues={defaultValues}\n hideGuestSelect={hideGuestSelect}\n hidePromocode={hidePromocode}\n hideProperty={hideProperty}\n />\n </div>\n </BookingWizardContext.Provider>\n </div>\n </SimpleModal>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <BookingWizardContent {...props} classname={contentClassname} disableChild={disableChild} disableRoom={disableRoom} defaultValues={defaultValues} />\n </BookingWizardContext.Provider>\n </div>\n );\n};\n\nexport default BookingWizard;\n"]}
1
+ {"version":3,"file":"BookingWizard.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizard.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4DAAoC;AACpC,+CAA4D;AAC5D,iDAA+C;AAC/C,0EAA2C;AAE3C,6EAAqD;AACrD,kGAA0H;AAC1H,kGAMiE;AACjE,uEAAgE;AAChE,sFAAsF;AACtF,mDAAmD;AAGnD,4DAAyD;AACzD,mEAA2C;AAE3C,4FAAiD;AAEjD,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC3B,0CAAmB,CAAA;IACnB,4CAAqB,CAAA;IACrB,wCAAiB,CAAA;AACrB,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B;AAED,IAAY,8BAGX;AAHD,WAAY,8BAA8B;IACtC,mDAAiB,CAAA;IACjB,uDAAqB,CAAA;AACzB,CAAC,EAHW,8BAA8B,GAA9B,sCAA8B,KAA9B,sCAA8B,QAGzC;AAED,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC7B,8CAAqB,CAAA;IACrB,sCAAa,CAAA;IACb,wCAAe,CAAA;IACf,wCAAe,CAAA;AACnB,CAAC,EALW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAKhC;AAEY,QAAA,oBAAoB,GAA8C;IAC3E,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IACpG,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IAChG,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjG,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;CACpG,CAAC;AAkBF,MAAM,aAAa,GAAiC,CAAC,KAAK,EAAE,EAAE;IAC1D,MAAM,EACF,MAAM,EAAE,UAAU,GAAG,YAAY,EACjC,KAAK,GAAG,mBAAmB,CAAC,OAAO,EACnC,qBAAqB,GAAG,KAAK,EAC7B,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAAE,qBAAqB,EACvC,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,GAAG,8BAA8B,CAAC,QAAQ,GAC7D,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,0BAAa,GAAE,CAAC;IACrC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,2BAAU,EAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACxB,IAAI,QAAQ,IAAI,qBAAqB,EAAE;YACnC,OAAO,QAA+B,CAAC;SAC1C;QACD,OAAO,UAAU,CAAC;IACtB,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC;IAElD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAA2B,OAAO,CAAC,CAAC;IAC1F,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,GAAoB,CAAC;IACvE,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,IAAA,gBAAQ,GAAoB,CAAC;IAC/F,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,GAAa,CAAC;IAEtE,MAAM,gBAAgB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAChC,OAAO,MAAM,CAAC,KAAK,IAAI,oBAAU,CAAC,MAAM,CAAC;IAC7C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7E,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM;YACH,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SACtC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE;YACX,mBAAmB,CAAC,gBAAgB,KAAK,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;SACpH;aAAM;YACH,mBAAmB,CAAC,gBAAgB,KAAK,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACxG;IACL,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,aAAa,GAAG,KAAK,KAAK,mBAAmB,CAAC,MAAM,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAA,oBAAU,EACtB,mCAAM,CAAC,SAAS,EAChB;QACI,CAAC,mCAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,KAAK,mBAAmB,CAAC,QAAQ;QACpE,CAAC,mCAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,KAAK,mBAAmB,CAAC,OAAO;QAClE,CAAC,mCAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,aAAa;QACzC,CAAC,mCAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,KAAK,sBAAsB;QAChE,CAAC,mCAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,gBAAgB;KACrD,EACD,gBAAgB,CACnB,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAA,oBAAU,EAAC,qBAAqB,EAAE,EAAE,CAAC,mCAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEnH,MAAM,mBAAmB,GAAG,aAAa,IAAI,gBAAgB,CAAC;IAC9D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAA+B,IAAI,CAAC,CAAC;IACvF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAA0B,EAAE,CAAC,CAAC;IACxF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAA4C,4BAAoB,CAAC,CAAC;IAEpH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,MAAM,aAAa,GAAG,aAAa,IAAI,MAAM,KAAK,sBAAsB,IAAI,mBAAmB,CAAC;QAChG,MAAM,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC;QACxC,MAAM,aAAa,GAAG,CAAC,CAAC,eAAe,CAAC;QAExC,MAAM,KAAK,GAA8C;YACrD,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;gBAC9B,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,CAAC,gBAAgB;gBAC1B,OAAO,EAAE,qBAAqB,CAAC,QAAQ,KAAK,aAAa;gBACzD,QAAQ,EAAE,gBAAgB,IAAI,CAAC,mBAAmB,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,qBAAqB,CAAC,QAAQ,CAAC;aACpI;YACD,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;gBAC1B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,qBAAqB,CAAC,IAAI,KAAK,aAAa;gBACrD,QAAQ,EAAE,CAAC,mBAAmB,IAAI,gBAAgB,IAAI,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,aAAa,KAAK,qBAAqB,CAAC,IAAI,CAAC;aACzJ;YACD,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;gBAC3B,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qBAAqB,CAAC,KAAK,KAAK,aAAa;gBACtD,QAAQ,EAAE,aAAa,IAAI,CAAC,mBAAmB,IAAI,aAAa,KAAK,qBAAqB,CAAC,KAAK,CAAC;aACpG;YACD,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;gBAC3B,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qBAAqB,CAAC,KAAK,KAAK,aAAa;gBACtD,QAAQ,EAAE,aAAa,IAAI,CAAC,mBAAmB,IAAI,aAAa,KAAK,qBAAqB,CAAC,KAAK,CAAC;aACpG;SACJ,CAAC;QAEF,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAA4B,CAAC,CAAC;QAClD,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9B,6GAA6G;QAC7G,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,WAAW,EAAE;YACb,MAAM,QAAQ,GAA4B,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACjK,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;oBACxB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;oBAChC,MAAM;iBACT;aACJ;SACJ;QAED,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9G,MAAM,eAAe,GAAG,CAAC,cAAqC,EAAE,SAAiB,EAAE,EAAE;;QACjF,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,MAAA,iBAAiB,CAAC,YAAY,GAAG,SAAS,CAAC,mCAAI,IAAI,CAAC;QAC1E,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,OAA8B,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,CAAC,OAA8B,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvF,MAAM,oBAAoB,GAA6B;QACnD,MAAM;QACN,KAAK;QACL,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,OAAO;QAClB,QAAQ;QACR,gBAAgB;QAEhB,QAAQ;QAER,OAAO,EAAE;YACL,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,gBAAgB;YAC3B,kBAAkB,EAAE,gBAAgB;YACpC,UAAU,EAAE,yBAAyB;SACxC;QACD,aAAa;QACb,mBAAmB;QACnB,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KAChB,CAAC;IAEF,IAAI,MAAM,KAAK,QAAQ,EAAE;QACrB,OAAO,CACH,uCAAK,SAAS,EAAE,OAAO;YACnB,8BAAC,kBAAQ,IAAC,SAAS,EAAE,mCAAM,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IACjE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CACrB;YAEX,8BAAC,qBAAW,IAAC,SAAS,EAAE,mCAAM,CAAC,SAAS,EAAE,IAAI,EAAE,6BAAe,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,QAAC,eAAe;gBAClJ;oBACI,uCAAK,SAAS,EAAE,mCAAM,CAAC,KAAK;wBACxB,4CAAO,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAQ;wBAC7C,8BAAC,cAAI,IAAC,SAAS,EAAE,mCAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAC,MAAM,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAI,CACrG;oBACN,8BAAC,2CAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB;wBACtD,uCAAK,SAAS,EAAE,OAAO;4BACnB,8BAAC,2CAAoB,IACjB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAC5B,CACA,CACsB,CAC9B,CACI,CACZ,CACT,CAAC;KACL;IAED,OAAO,CACH,uCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO;QAC7B,8BAAC,2CAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB;YACtD,8BAAC,2CAAoB,oBAAK,KAAK,IAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,IAAI,CACxH,CAC9B,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useMeasure from 'react-use-measure';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { BookingWizardContent, BookingWizardContentProps } from '@/components/generic/BookingWizard/BookingWizardContent';\nimport {\n BookingWizardContext,\n BookingWizardContextType,\n BookingWizardLayout,\n BookingWizardOverlayType,\n BookingWizardTheme,\n} from '@/components/generic/BookingWizard/BookingWizardContext';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './BookingWizard.module.scss';\n\nexport enum EBookingWizardTheme {\n Default = 'default',\n Specific = 'specific',\n Images = 'images',\n}\n\nexport enum EBookingWizardOverlayDirection {\n Upward = 'upward',\n Downward = 'downward',\n}\n\nexport enum EBookingWizardSection {\n Property = 'property',\n Date = 'date',\n Guest = 'guest',\n Promo = 'promo',\n}\n\nexport const StateSectionsDefault: BookingWizardContextType['stateSections'] = {\n [EBookingWizardSection.Property]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Date]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Guest]: { opening: false, isFirst: false, hidden: false, inactive: false },\n [EBookingWizardSection.Promo]: { opening: false, isFirst: false, hidden: false, inactive: false },\n};\n\nexport interface BookingWizardProps extends BookingWizardContentProps {\n layout?: BookingWizardLayout;\n theme?: BookingWizardTheme;\n useMobileButtonLayout?: boolean;\n\n wrapperClassname?: string;\n contentClassname?: string;\n\n properties: TBookingWizardProperties;\n selectedProperty: BookingWizardProperty;\n defaultColors: BookingWizardProperty['colors'];\n onSubmit: BookingWizardContextType['onSubmit'];\n\n overlayDirection?: EBookingWizardOverlayDirection;\n}\n\nconst BookingWizard: React.FC<BookingWizardProps> = (props) => {\n const {\n layout: propLayout = 'horizontal',\n theme = EBookingWizardTheme.Default,\n useMobileButtonLayout = false,\n onSubmit,\n wrapperClassname,\n contentClassname: contentClassnameProps,\n selectedProperty,\n properties,\n defaultColors,\n maxAdults,\n disableChild,\n showInfants,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n hideProperty,\n defaultValues,\n overlayDirection = EBookingWizardOverlayDirection.Downward,\n } = props;\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { isMobile } = useWindowSize();\n const { t } = useTranslation();\n const [ref, bounds] = useMeasure({ debounce: 300 });\n\n const layout = useMemo(() => {\n if (isMobile && useMobileButtonLayout) {\n return 'button' as BookingWizardLayout;\n }\n return propLayout;\n }, [isMobile, useMobileButtonLayout, propLayout]);\n\n const [compOverlayType, setCompOverlayType] = useState<BookingWizardOverlayType>('popup');\n const [overlayOffset, setOverlayOffset] = useState<[number, number]>();\n const [dateSelectorOverlayOffset, setDateSelectorOverlayOffset] = useState<[number, number]>();\n const [overlayPlacement, setOverlayPlacement] = useState<Placement>();\n\n const isSmallContainer = useMemo(() => {\n if (!bounds.width) return false;\n return bounds.width <= ScreenSize.Medium;\n }, [bounds]);\n\n useEffect(() => {\n if ((layout === 'horizontal' || layout === 'horizontal-condensed') && !isMobile) {\n setOverlayOffset([0, 6]);\n setDateSelectorOverlayOffset([0, 6]);\n setCompOverlayType('popup');\n } else {\n setOverlayOffset([0, 10]);\n setDateSelectorOverlayOffset([0, -8]);\n setCompOverlayType('bottom-sheet');\n }\n }, [layout, isMobile, isSmallContainer]);\n\n useEffect(() => {\n if (!isMobile) {\n setOverlayPlacement(overlayDirection === EBookingWizardOverlayDirection.Downward ? 'bottom-start' : 'top-start');\n } else {\n setOverlayPlacement(overlayDirection === EBookingWizardOverlayDirection.Downward ? 'bottom' : 'top');\n }\n }, [isMobile]);\n\n const isImagesTheme = theme === EBookingWizardTheme.Images;\n const classes = classNames(\n styles.container,\n {\n [styles['--theme-specific']]: theme === EBookingWizardTheme.Specific,\n [styles['--theme-default']]: theme === EBookingWizardTheme.Default,\n [styles['--theme-images']]: isImagesTheme,\n [styles['--theme-condensed']]: layout === 'horizontal-condensed',\n [styles['--in-small-container']]: isSmallContainer,\n },\n wrapperClassname\n );\n\n const contentClassname = classNames(contentClassnameProps, { [styles['--in-small-container']]: isSmallContainer });\n\n const isImagesThemeMobile = isImagesTheme && isSmallContainer;\n const [activeSection, setActiveSection] = useState<EBookingWizardSection | null>(null);\n const [availableSections, setAvailableSections] = useState<EBookingWizardSection[]>([]);\n const [stateSections, setStateSections] = useState<BookingWizardContextType['stateSections']>(StateSectionsDefault);\n\n useEffect(() => {\n const isPromoHidden = hidePromocode || layout === 'horizontal-condensed' || isImagesThemeMobile;\n const isPropertyHidden = !!hideProperty;\n const isGuestHidden = !!hideGuestSelect;\n\n const state: BookingWizardContextType['stateSections'] = {\n [EBookingWizardSection.Property]: {\n hidden: isPropertyHidden,\n isFirst: !isPropertyHidden,\n opening: EBookingWizardSection.Property === activeSection,\n inactive: isPropertyHidden || (isImagesThemeMobile && activeSection !== null && activeSection !== EBookingWizardSection.Property),\n },\n [EBookingWizardSection.Date]: {\n hidden: false,\n isFirst: isPropertyHidden,\n opening: EBookingWizardSection.Date === activeSection,\n inactive: (isImagesThemeMobile && isPropertyHidden && activeSection === null) || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Date),\n },\n [EBookingWizardSection.Guest]: {\n hidden: isGuestHidden,\n isFirst: false,\n opening: EBookingWizardSection.Guest === activeSection,\n inactive: isGuestHidden || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Guest),\n },\n [EBookingWizardSection.Promo]: {\n hidden: isPromoHidden,\n isFirst: false,\n opening: EBookingWizardSection.Promo === activeSection,\n inactive: isPromoHidden || (isImagesThemeMobile && activeSection !== EBookingWizardSection.Promo),\n },\n };\n\n // Extract available (i.e., not hidden) sections from state\n const enabled = Object.entries(state)\n .filter(([, value]) => !value.hidden)\n .map(([key]) => key as EBookingWizardSection);\n setAvailableSections(enabled);\n\n // If all inactive are true, then find the first section with hidden === false and set its inactive to false.\n const allInactive = Object.values(state).every((s) => s.inactive);\n if (allInactive) {\n const sections: EBookingWizardSection[] = [EBookingWizardSection.Property, EBookingWizardSection.Date, EBookingWizardSection.Guest, EBookingWizardSection.Promo];\n for (const section of sections) {\n if (!state[section].hidden) {\n state[section].opening = false;\n state[section].inactive = false;\n break;\n }\n }\n }\n\n setStateSections(state);\n }, [layout, hideProperty, hideGuestSelect, hidePromocode, activeSection, isImagesTheme, isImagesThemeMobile]);\n\n const navigateSection = (currentSection: EBookingWizardSection, direction: 1 | -1) => {\n if (!currentSection) return;\n const currentIndex = availableSections.indexOf(currentSection);\n const targetSection = availableSections[currentIndex + direction] ?? null;\n setActiveSection(targetSection);\n };\n\n const onNextHandler = (section: EBookingWizardSection) => navigateSection(section, 1);\n const onPrevHandler = (section: EBookingWizardSection) => navigateSection(section, -1);\n\n const bookingWizardContext: BookingWizardContextType = {\n layout,\n theme,\n type: compOverlayType,\n className: classes,\n isMobile,\n isSmallContainer,\n\n onSubmit,\n\n overlay: {\n offset: overlayOffset,\n placement: overlayPlacement,\n fallbackPlacements: overlayPlacement,\n dateOffset: dateSelectorOverlayOffset,\n },\n isImagesTheme,\n isImagesThemeMobile,\n activeSection,\n stateSections,\n onNextHandler,\n onPrevHandler,\n };\n\n if (layout === 'button') {\n return (\n <div className={classes}>\n <BEButton className={styles.bookNowBtn} onClick={() => setIsOpen(true)}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n\n <SimpleModal className={styles.container} size={SimpleModalSize.ExtraSmall} open={isOpen} onClose={() => setIsOpen(false)} alignCenter overflowVisible>\n <div>\n <div className={styles.title}>\n <span>{t(Translation.Misc.BookAHotel)}</span>\n <Icon className={styles.closeBtn} icon={IconType.Close} size=\"24px\" onClick={() => setIsOpen(false)} />\n </div>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <div className={classes}>\n <BookingWizardContent\n properties={properties}\n selectedProperty={selectedProperty}\n defaultColors={defaultColors}\n classname={contentClassname}\n maxAdults={maxAdults}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n defaultValues={defaultValues}\n hideGuestSelect={hideGuestSelect}\n hidePromocode={hidePromocode}\n hideProperty={hideProperty}\n />\n </div>\n </BookingWizardContext.Provider>\n </div>\n </SimpleModal>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <BookingWizardContent {...props} classname={contentClassname} disableChild={disableChild} disableRoom={disableRoom} defaultValues={defaultValues} />\n </BookingWizardContext.Provider>\n </div>\n );\n};\n\nexport default BookingWizard;\n"]}
@@ -29,20 +29,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const classnames_1 = __importDefault(require("classnames"));
30
30
  const dayjs_1 = __importDefault(require("dayjs"));
31
31
  const react_1 = __importStar(require("react"));
32
+ const react_i18next_1 = require("react-i18next");
32
33
  const AutoAutoHeight_1 = __importDefault(require("../../../animations/AutoAutoHeight"));
33
34
  const Icon_1 = __importStar(require("../Icon/Icon"));
34
35
  const RatioImage_1 = __importDefault(require("../RatioImage/RatioImage"));
35
36
  const Text_1 = __importStar(require("../Text"));
37
+ const Translation_1 = require("../../../translations/Translation");
36
38
  const Color_1 = require("../../../util/Color");
37
39
  const TextAlignment_1 = require("../../../util/TextAlignment");
38
40
  const EventCard_module_scss_1 = __importDefault(require("./EventCard.module.scss"));
39
41
  const EventCard = ({ event, ratio }) => {
40
42
  var _a, _b, _c, _d, _e, _f;
43
+ const { t } = (0, react_i18next_1.useTranslation)();
41
44
  const [collapsed, setCollapsed] = (0, react_1.useState)(true);
42
- const toggleCollapse = (_event) => {
45
+ const onClickToggleCollapse = (buttonEvent) => {
43
46
  setCollapsed(!collapsed);
44
- _event.preventDefault();
45
- _event.stopPropagation();
47
+ buttonEvent.preventDefault();
48
+ buttonEvent.stopPropagation();
49
+ };
50
+ const onClickMoreLink = (buttonEvent) => {
51
+ window.open(event.url, '_blank', 'noreferrer');
52
+ buttonEvent.preventDefault();
53
+ buttonEvent.stopPropagation();
46
54
  };
47
55
  const displayEventTime = () => {
48
56
  const startDate = event.startDate ? (0, dayjs_1.default)(event.startDate) : undefined;
@@ -66,22 +74,22 @@ const EventCard = ({ event, ratio }) => {
66
74
  react_1.default.createElement("div", { className: EventCard_module_scss_1.default.categoryMask },
67
75
  react_1.default.createElement(Text_1.default, { align: TextAlignment_1.TextAlign.Right, color: Color_1.Color.White, bold: true }, (_c = (_b = event.tags) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.display_name)),
68
76
  react_1.default.createElement("div", { className: EventCard_module_scss_1.default.content },
69
- react_1.default.createElement("div", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.header, 'u-cursor-pointer'), onClick: toggleCollapse },
77
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.header) },
70
78
  react_1.default.createElement("div", null,
71
79
  react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)({
72
80
  'u-text-overflow-ellipsis-1': collapsed,
73
81
  'u-text-overflow-ellipsis-2': !collapsed,
74
82
  }), bold: true, color: Color_1.Color.Navy }, event.name),
75
83
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, bold: true }, event.eventTimeDescription ? event.eventTimeDescription : displayEventTime())),
76
- react_1.default.createElement("div", { className: EventCard_module_scss_1.default.collapButton },
77
- react_1.default.createElement(Icon_1.default, { color: Color_1.Color.Accent, icon: collapsed ? Icon_1.IconType.ArrowUp3 : Icon_1.IconType.ArrowDown3, size: "18px" }))),
84
+ react_1.default.createElement("button", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.collapButton, 'u-cursor-pointer', '--no-icon-animate'), onClick: onClickToggleCollapse },
85
+ react_1.default.createElement(Icon_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.buttonIcon), color: Color_1.Color.Accent, icon: collapsed ? Icon_1.IconType.ArrowUp3 : Icon_1.IconType.ArrowDown3, size: "18px" }))),
78
86
  react_1.default.createElement(AutoAutoHeight_1.default, { open: !collapsed },
79
87
  react_1.default.createElement("div", { className: "u-pad-top--light" },
80
88
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Accent }, [(_d = event === null || event === void 0 ? void 0 : event.address) === null || _d === void 0 ? void 0 : _d.line1, (_e = event === null || event === void 0 ? void 0 : event.address) === null || _e === void 0 ? void 0 : _e.line2, (_f = event === null || event === void 0 ? void 0 : event.address) === null || _f === void 0 ? void 0 : _f.city].filter((item) => !!item).join(', ')),
81
89
  react_1.default.createElement(Text_1.default, { className: "u-text-overflow-ellipsis-3", color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small }, event.summary)),
82
- event.url && (react_1.default.createElement("a", { href: event.url, target: "_blank", rel: "noreferrer", className: (0, classnames_1.default)(EventCard_module_scss_1.default.link) },
90
+ event.url && (react_1.default.createElement("button", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.linkButton, '--no-icon-animate'), onClick: onClickMoreLink },
83
91
  react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center'), type: Text_1.TextType.Label, color: Color_1.Color.Accent },
84
- react_1.default.createElement("div", null, "More Info"),
92
+ react_1.default.createElement("div", null, t(Translation_1.Translation.Misc.MoreInfo)),
85
93
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight }))))))));
86
94
  };
87
95
  exports.default = EventCard;
@@ -1 +1 @@
1
- {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const toggleCollapse = (_event: any) => {\n setCollapsed(!collapsed);\n _event.preventDefault();\n _event.stopPropagation();\n };\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header, 'u-cursor-pointer')} onClick={toggleCollapse}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <div className={styles.collapButton}>\n <Icon color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </div>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n\n {event.url && (\n <a href={event.url} target=\"_blank\" rel=\"noreferrer\" className={classNames(styles.link)}>\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n {/*TODO translation*/}\n <div>More Info</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </a>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
1
+ {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4DAAoC;AACpC,kDAA0B;AAC1B,+CAA4C;AAC5C,iDAA+C;AAE/C,iFAAyD;AACzD,uEAAgE;AAChE,4FAAoE;AACpE,kEAA2D;AAC3D,4DAAyD;AACzD,wCAAqC;AACrC,wDAAiD;AAEjD,oFAA6C;AAO7C,MAAM,SAAS,GAA2B,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;;IAC3D,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,IAAI,CAAC,CAAC;IAE1D,MAAM,qBAAqB,GAAG,CAAC,WAA4D,EAAE,EAAE;QAC3F,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;QACzB,WAAW,CAAC,cAAc,EAAE,CAAC;QAC7B,WAAW,CAAC,eAAe,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,WAA4D,EAAE,EAAE;QACrF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/C,WAAW,CAAC,cAAc,EAAE,CAAC;QAC7B,WAAW,CAAC,eAAe,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;YAC5C,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACtI;aAAM;YACH,IAAI,SAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;gBACpC,OAAO,GAAG,SAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,OAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;aACpF;;gBAAM,OAAO,GAAG,SAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,OAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC;SACvG;IACL,CAAC,CAAC;IAEF,OAAO,CACH,uCAAK,SAAS,EAAE,+BAAM,CAAC,IAAI;QACvB,8BAAC,oBAAU,IACP,GAAG,EAAE,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,GAAG,EAAE,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACH,gBAAgB,EAAE,WAAW;gBAC7B,kBAAkB,EAAE,YAAY;aACnC,GACH;QACF,uCAAK,SAAS,EAAE,+BAAM,CAAC,YAAY;YAC/B,8BAAC,cAAI,IAAC,KAAK,EAAE,yBAAS,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,IAAI,UACjD,MAAA,MAAA,KAAK,CAAC,IAAI,0CAAG,CAAC,CAAC,0CAAE,YAAY,CAC3B,CACL;QACN,uCAAK,SAAS,EAAE,+BAAM,CAAC,OAAO;YAC1B,uCAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,MAAM,CAAC;gBACrC;oBACI,8BAAC,cAAI,IACD,SAAS,EAAE,IAAA,oBAAU,EAAC;4BAClB,4BAA4B,EAAE,SAAS;4BACvC,4BAA4B,EAAE,CAAC,SAAS;yBAC3C,CAAC,EACF,IAAI,QACJ,KAAK,EAAE,aAAK,CAAC,IAAI,IAEhB,KAAK,CAAC,IAAI,CACR;oBACP,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,MAAM,EAAE,IAAI,UAC1B,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAC1E,CACL;gBACN,0CAAQ,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,qBAAqB;oBACvH,8BAAC,cAAI,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,aAAK,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,eAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAQ,CAAC,UAAU,EAAE,IAAI,EAAC,MAAM,GAAG,CACzI,CACP;YACN,8BAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,SAAS;gBAC5B,uCAAK,SAAS,EAAC,kBAAkB;oBAC7B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,MAAM,IAC1C,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtG;oBACP,8BAAC,cAAI,IAAC,SAAS,EAAC,4BAA4B,EAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IACnF,KAAK,CAAC,OAAO,CACX,CACL;gBAEL,KAAK,CAAC,GAAG,IAAI,CACV,0CAAQ,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,eAAe;oBAC3F,8BAAC,cAAI,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,MAAM;wBACvI,2CAAM,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAO;wBACzC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,UAAU,GAAI,CAChC,CACF,CACZ,CACY,CACf,CACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const { t } = useTranslation();\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const onClickToggleCollapse = (buttonEvent: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setCollapsed(!collapsed);\n buttonEvent.preventDefault();\n buttonEvent.stopPropagation();\n };\n\n const onClickMoreLink = (buttonEvent: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n window.open(event.url, '_blank', 'noreferrer');\n buttonEvent.preventDefault();\n buttonEvent.stopPropagation();\n };\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header)}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <button className={classNames(styles.collapButton, 'u-cursor-pointer', '--no-icon-animate')} onClick={onClickToggleCollapse}>\n <Icon className={classNames(styles.buttonIcon)} color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </button>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n\n {event.url && (\n <button className={classNames(styles.linkButton, '--no-icon-animate')} onClick={onClickMoreLink}>\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n <div>{t(Translation.Misc.MoreInfo)}</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </button>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
@@ -63,7 +63,9 @@ const EventCarousel = ({ small = false, data = [], defaultExpanded = false }) =>
63
63
  react_1.default.createElement("div", { className: "u-pad-top--medium" },
64
64
  react_1.default.createElement("div", { className: EventCarousel_module_scss_1.default.swiperContainer },
65
65
  react_1.default.createElement("div", { className: "container" },
66
- react_1.default.createElement(react_2.Swiper, { navigation: !small, modules: [swiper_1.Navigation], spaceBetween: small ? 20 : 30, slidesPerView: small ? 1.2 : 'auto' }, data.map((event, index) => (react_1.default.createElement(react_2.SwiperSlide, { style: {
66
+ react_1.default.createElement(react_2.Swiper, { navigation: !small, modules: [swiper_1.Navigation], spaceBetween: small ? 20 : 30, slidesPerView: small ? 1.2 : 'auto',
67
+ // Prevent Swiper Slide move on click event
68
+ noSwipingSelector: "button" }, data.map((event, index) => (react_1.default.createElement(react_2.SwiperSlide, { style: {
67
69
  width: small ? undefined : 524,
68
70
  }, key: index },
69
71
  react_1.default.createElement(EventCard_1.default, { ratio: small ? 380 / 345 : 380 / 524, event: event })))))))))));
@@ -1 +1 @@
1
- {"version":3,"file":"EventCarousel.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCarousel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport React, { FC, PropsWithChildren, useMemo, useState } from 'react';\nimport { Navigation } from 'swiper';\nimport { Swiper, SwiperSlide } from 'swiper/react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport EventCard from '@/components/generic/Event/EventCard';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\n\nimport styles from './EventCarousel.module.scss';\n\nexport interface EventCarouselProps {\n small?: boolean;\n data?: IRoomstayEvent[];\n defaultExpanded?: boolean;\n}\n\nconst EventCarousel: FC<EventCarouselProps> = ({ small = false, data = [], defaultExpanded = false }) => {\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n const commonTitleProps = useMemo(\n () => ({\n color: Color.Accent,\n className: classNames({\n [styles.titleWidthLimited]: small,\n }),\n }),\n [small]\n );\n const headlineProps = useMemo(\n () =>\n small\n ? {\n ...commonTitleProps,\n type: TextType.Body,\n bold: true,\n }\n : {\n ...commonTitleProps,\n size: 'large',\n },\n [small]\n );\n\n const [TitleComponent, titleProps]: [FC, PropsWithChildren<any>] = useMemo(() => [small ? Text : Headline, headlineProps], [small]);\n\n return (\n <div className=\"u-w-fluid u-pad-bottom\">\n <div className=\"container\">\n <div\n className={styles.headline}\n onClick={() => {\n setExpanded(!expanded);\n }}\n >\n <div\n className={classNames('u-flex u-w-100', 'u-flex-nowrap', 'u-flex-gap', 'u-flex-align-center', {\n 'u-flex-justify-flex-start': !small,\n 'u-flex-justify-space-between': small,\n })}\n >\n <TitleComponent {...titleProps}>We recommend during your stay</TitleComponent>\n <Icon icon={!expanded ? IconType.ArrowDown3 : IconType.ArrowUp3} color={Color.Accent} size={small ? '18px' : '32px'} />\n </div>\n </div>\n </div>\n <AutoAutoHeight open={expanded} startOpen={expanded}>\n <div className=\"u-pad-top--medium\">\n <div className={styles.swiperContainer}>\n <div className=\"container\">\n <Swiper navigation={!small} modules={[Navigation]} spaceBetween={small ? 20 : 30} slidesPerView={small ? 1.2 : 'auto'}>\n {data.map((event, index) => (\n <SwiperSlide\n style={{\n width: small ? undefined : 524,\n }}\n key={index}\n >\n <EventCard ratio={small ? 380 / 345 : 380 / 524} event={event} />\n </SwiperSlide>\n ))}\n </Swiper>\n </div>\n </div>\n </div>\n </AutoAutoHeight>\n </div>\n );\n};\n\nexport default EventCarousel;\n"]}
1
+ {"version":3,"file":"EventCarousel.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCarousel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport React, { FC, PropsWithChildren, useMemo, useState } from 'react';\nimport { Navigation } from 'swiper';\nimport { Swiper, SwiperSlide } from 'swiper/react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport EventCard from '@/components/generic/Event/EventCard';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\n\nimport styles from './EventCarousel.module.scss';\n\nexport interface EventCarouselProps {\n small?: boolean;\n data?: IRoomstayEvent[];\n defaultExpanded?: boolean;\n}\n\nconst EventCarousel: FC<EventCarouselProps> = ({ small = false, data = [], defaultExpanded = false }) => {\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n const commonTitleProps = useMemo(\n () => ({\n color: Color.Accent,\n className: classNames({\n [styles.titleWidthLimited]: small,\n }),\n }),\n [small]\n );\n const headlineProps = useMemo(\n () =>\n small\n ? {\n ...commonTitleProps,\n type: TextType.Body,\n bold: true,\n }\n : {\n ...commonTitleProps,\n size: 'large',\n },\n [small]\n );\n\n const [TitleComponent, titleProps]: [FC, PropsWithChildren<any>] = useMemo(() => [small ? Text : Headline, headlineProps], [small]);\n\n return (\n <div className=\"u-w-fluid u-pad-bottom\">\n <div className=\"container\">\n <div\n className={styles.headline}\n onClick={() => {\n setExpanded(!expanded);\n }}\n >\n <div\n className={classNames('u-flex u-w-100', 'u-flex-nowrap', 'u-flex-gap', 'u-flex-align-center', {\n 'u-flex-justify-flex-start': !small,\n 'u-flex-justify-space-between': small,\n })}\n >\n <TitleComponent {...titleProps}>We recommend during your stay</TitleComponent>\n <Icon icon={!expanded ? IconType.ArrowDown3 : IconType.ArrowUp3} color={Color.Accent} size={small ? '18px' : '32px'} />\n </div>\n </div>\n </div>\n <AutoAutoHeight open={expanded} startOpen={expanded}>\n <div className=\"u-pad-top--medium\">\n <div className={styles.swiperContainer}>\n <div className=\"container\">\n <Swiper\n navigation={!small}\n modules={[Navigation]}\n spaceBetween={small ? 20 : 30}\n slidesPerView={small ? 1.2 : 'auto'}\n // Prevent Swiper Slide move on click event\n noSwipingSelector=\"button\"\n >\n {data.map((event, index) => (\n <SwiperSlide\n style={{\n width: small ? undefined : 524,\n }}\n key={index}\n >\n <EventCard ratio={small ? 380 / 345 : 380 / 524} event={event} />\n </SwiperSlide>\n ))}\n </Swiper>\n </div>\n </div>\n </div>\n </AutoAutoHeight>\n </div>\n );\n};\n\nexport default EventCarousel;\n"]}
@@ -49,7 +49,7 @@ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildren
49
49
  const [ref, setRef] = (0, react_1.useState)(null);
50
50
  const [open, setOpen] = (0, react_1.useState)(false);
51
51
  const option = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;
52
- const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, style: isSubOption ? undefined : { paddingRight: '35px' }, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
52
+ const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
53
53
  if (option === null || option === void 0 ? void 0 : option.disabled)
54
54
  return;
55
55
  if (isGroup)
@@ -57,13 +57,20 @@ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildren
57
57
  else if ((option === null || option === void 0 ? void 0 : option.value) && (option === null || option === void 0 ? void 0 : option.value) !== valueProp)
58
58
  onChange === null || onChange === void 0 ? void 0 : onChange(option.value, optionProp.value);
59
59
  }, label: option === null || option === void 0 ? void 0 : option.label, disabled: option === null || option === void 0 ? void 0 : option.disabled, renderContent: option === null || option === void 0 ? void 0 : option.renderContent }));
60
+ const isSelected = !isGroup && (option === null || option === void 0 ? void 0 : option.value) === valueProp;
61
+ const isExpanded = isGroup && open;
62
+ const dropDownIndicatorStyle = !(option === null || option === void 0 ? void 0 : option.renderContent) && !isGroup
63
+ ? { transform: 'translateX(1px) translateY(-2px) rotate(270deg)' }
64
+ : isSelected || isExpanded
65
+ ? { transform: 'scaleY(-1) translateY(2px)' }
66
+ : undefined;
60
67
  if ((option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.disabledReason)) {
61
68
  return (react_1.default.createElement(Tooltip_1.default, { key: option === null || option === void 0 ? void 0 : option.value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: option === null || option === void 0 ? void 0 : option.disabledReason }, radioButton));
62
69
  }
63
70
  return (react_1.default.createElement(react_1.default.Fragment, null,
64
71
  react_1.default.createElement("div", { key: option === null || option === void 0 ? void 0 : option.value, className: RadioButtonGroup_module_scss_1.default.wrapper },
65
72
  radioButton,
66
- !isSubOption && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator, style: (!options && (option === null || option === void 0 ? void 0 : option.value) === valueProp) || (options && open) ? { transform: 'scaleY(-1) translateY(2px)' } : undefined },
73
+ !isSubOption && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator, style: dropDownIndicatorStyle },
67
74
  react_1.default.createElement(Icon_1.default, { size: "24px", icon: Icon_1.IconType.Dropdown })))),
68
75
  options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "bottom-start" },
69
76
  react_1.default.createElement(RadioButtonGroup, { options: options.map((option) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubGroup?: boolean;\n}\n\nconst Option = <TValue extends string = string>({\n option: optionProp,\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubOption,\n}: {\n option: IRadioButtonOption<TValue>;\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubOption?: boolean;\n}): JSX.Element => {\n const options = optionProp.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n style={isSubOption ? undefined : { paddingRight: '35px' }}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value, optionProp.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {!isSubOption && (\n <div\n className={styles.childrenIndicator}\n style={(!options && option?.value === valueProp) || (options && open) ? { transform: 'scaleY(-1) translateY(2px)' } : undefined}\n >\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"bottom-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(subValue) => {\n onChange?.(optionProp.value, subValue);\n setOpen(false);\n }}\n value={valueProp}\n isSubGroup\n />\n </Overlay>\n )}\n </>\n );\n};\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubGroup,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => (\n <Option key={rawOption.value} option={rawOption} value={valueProp} onChange={onChange} renderChildrenContent={renderChildrenContent} isSubOption={isSubGroup} />\n ))}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
1
+ {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubGroup?: boolean;\n}\n\nconst Option = <TValue extends string = string>({\n option: optionProp,\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubOption,\n}: {\n option: IRadioButtonOption<TValue>;\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubOption?: boolean;\n}): JSX.Element => {\n const options = optionProp.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value, optionProp.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n const isSelected = !isGroup && option?.value === valueProp;\n const isExpanded = isGroup && open;\n const dropDownIndicatorStyle: React.CSSProperties | undefined =\n !option?.renderContent && !isGroup\n ? { transform: 'translateX(1px) translateY(-2px) rotate(270deg)' }\n : isSelected || isExpanded\n ? { transform: 'scaleY(-1) translateY(2px)' }\n : undefined;\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {!isSubOption && (\n <div className={styles.childrenIndicator} style={dropDownIndicatorStyle}>\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"bottom-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(subValue) => {\n onChange?.(optionProp.value, subValue);\n setOpen(false);\n }}\n value={valueProp}\n isSubGroup\n />\n </Overlay>\n )}\n </>\n );\n};\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubGroup,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => (\n <Option key={rawOption.value} option={rawOption} value={valueProp} onChange={onChange} renderChildrenContent={renderChildrenContent} isSubOption={isSubGroup} />\n ))}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}