@roomstay/frontend 2.6.89 → 2.6.91

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 (27) hide show
  1. package/dist/4.bundle.js +1 -1
  2. package/dist/978.bundle.js +1 -1
  3. package/dist/main.bundle.js +1 -1
  4. package/dist/src/api/ReservationAPI.d.ts +2 -2
  5. package/dist/src/api/ReservationAPI.js +2 -1
  6. package/dist/src/api/ReservationAPI.js.map +1 -1
  7. package/dist/src/components/generic/HtmlContentViewer.js +20 -3
  8. package/dist/src/components/generic/HtmlContentViewer.js.map +1 -1
  9. package/dist/src/components/generic/Text.d.ts +1 -0
  10. package/dist/src/components/generic/Text.js +3 -1
  11. package/dist/src/components/generic/Text.js.map +1 -1
  12. package/dist/src/components/steps/addons/AddonCard.js +1 -1
  13. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  14. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +1 -1
  15. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
  16. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js +2 -2
  17. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js.map +1 -1
  18. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js +1 -1
  19. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js.map +1 -1
  20. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +5 -4
  21. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  22. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +9 -1
  23. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  24. package/dist/src/pages/findReservation/FindReservationResults.js +1 -1
  25. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  26. package/dist/test.bundle.js +1 -1
  27. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { IBookingPayment, IBookingQuoteRequest, IBookingQuoteResponse, IPencilReservationRequest, IPencilReservationResponse, ReservationsDTO } from '@roomstay/core';
1
+ import { IBookingExtraFields, IBookingPayment, IBookingQuoteRequest, IBookingQuoteResponse, IPencilReservationRequest, IPencilReservationResponse, ReservationsDTO } from '@roomstay/core';
2
2
  import BaseAPI from './BaseAPI';
3
3
  import BasketAddonRow from '../models/BasketAddonRow';
4
4
  import BasketRow from '../models/BasketRow';
@@ -43,7 +43,7 @@ export default class ReservationAPI extends BaseAPI {
43
43
  * @param specialReq
44
44
  * @returns
45
45
  */
46
- bookNow: (basketRows: BasketRow[], userProfiles: UserProfile[], payment: IBookingPayment, addonRows: BasketAddonRow[], comments: string, hotelId: string, sessionId: string, pencilId?: string | undefined, specialReq?: string | undefined, retryPayment?: boolean, roomstayId?: string | undefined, memberNumber?: string | undefined) => Promise<ReservationsDTO>;
46
+ bookNow: (basketRows: BasketRow[], userProfiles: UserProfile[], payment: IBookingPayment, addonRows: BasketAddonRow[], comments: string, hotelId: string, sessionId: string, pencilId?: string | undefined, specialReq?: string | undefined, retryPayment?: boolean, roomstayId?: string | undefined, memberNumber?: string | undefined, extraFields?: IBookingExtraFields) => Promise<ReservationsDTO>;
47
47
  commit: (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string, paymentId?: string) => Promise<ReservationsDTO>;
48
48
  rollback: (reservations: string[], itineraryId: string, hotelId: string) => Promise<boolean>;
49
49
  cancelReservation: (id: string, email: string, hotelId: string) => Promise<boolean>;
@@ -141,7 +141,7 @@ class ReservationAPI extends BaseAPI_1.default {
141
141
  * @param specialReq
142
142
  * @returns
143
143
  */
144
- this.bookNow = (basketRows_1, userProfiles_1, payment_1, addonRows_1, comments_1, hotelId_1, sessionId_1, ...args_1) => __awaiter(this, [basketRows_1, userProfiles_1, payment_1, addonRows_1, comments_1, hotelId_1, sessionId_1, ...args_1], void 0, function* (basketRows, userProfiles, payment, addonRows, comments, hotelId, sessionId, pencilId = undefined, specialReq = undefined, retryPayment = false, roomstayId = undefined, memberNumber = undefined) {
144
+ this.bookNow = (basketRows_1, userProfiles_1, payment_1, addonRows_1, comments_1, hotelId_1, sessionId_1, ...args_1) => __awaiter(this, [basketRows_1, userProfiles_1, payment_1, addonRows_1, comments_1, hotelId_1, sessionId_1, ...args_1], void 0, function* (basketRows, userProfiles, payment, addonRows, comments, hotelId, sessionId, pencilId = undefined, specialReq = undefined, retryPayment = false, roomstayId = undefined, memberNumber = undefined, extraFields) {
145
145
  const rooms = [];
146
146
  basketRows.forEach((row) => {
147
147
  var _a, _b;
@@ -203,6 +203,7 @@ class ReservationAPI extends BaseAPI_1.default {
203
203
  pencilId: pencilId,
204
204
  sourceUrl: window.location.href,
205
205
  roomstayId: roomstayId,
206
+ extraFields,
206
207
  }, hotelId, getParams);
207
208
  });
208
209
  this.commit = (reservations, itineraryId, hotelId, planpayCheckoutId, paymentId) => __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n IBookingPayment,\n IBookingQuoteRequest,\n IBookingQuoteResponse,\n IPencilReservationRequest,\n IPencilReservationResponse,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\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, paymentId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n paymentId,\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 {\n IBookingExtraFields,\n IBookingPayment,\n IBookingQuoteRequest,\n IBookingQuoteResponse,\n IPencilReservationRequest,\n IPencilReservationResponse,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\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 extraFields?: IBookingExtraFields\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 extraFields,\n },\n hotelId,\n getParams\n );\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string, paymentId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n paymentId,\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"]}
@@ -40,12 +40,29 @@ const HtmlContentViewer = ({ content }) => {
40
40
  const shadowRootContainer = (0, react_1.useRef)(null);
41
41
  (0, react_1.useEffect)(() => {
42
42
  if (shadowRootRef.current && !shadowRootContainer.current) {
43
- // Attach shadow DOM only once
44
43
  shadowRootContainer.current = shadowRootRef.current.attachShadow({ mode: 'open' });
45
44
  }
46
45
  if (shadowRootContainer.current) {
47
- // Update content inside the shadow DOM
48
- shadowRootContainer.current.innerHTML = content;
46
+ // If content is null, undefined, or empty, clear the shadow DOM
47
+ if (!content || content.trim() === '') {
48
+ shadowRootContainer.current.innerHTML = '';
49
+ }
50
+ else {
51
+ const hasHtmlTags = /<\/?[a-z][\s\S]*>/i.test(content);
52
+ let formattedContent;
53
+ if (hasHtmlTags) {
54
+ // HTML content → render directly without modification
55
+ formattedContent = content;
56
+ }
57
+ else {
58
+ // Plain text → replace line breaks and tabs for proper display
59
+ formattedContent = content
60
+ .replace(/\r?\n/g, '<br>') // Convert newlines to <br>
61
+ .replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;'); // Replace tabs with spaces
62
+ }
63
+ // Render inside the Shadow DOM
64
+ shadowRootContainer.current.innerHTML = formattedContent;
65
+ }
49
66
  }
50
67
  }, [content]);
51
68
  return react_1.default.createElement("div", { ref: shadowRootRef });
@@ -1 +1 @@
1
- {"version":3,"file":"HtmlContentViewer.js","sourceRoot":"/","sources":["src/components/generic/HtmlContentViewer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiD;AAE1C,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAAuB,EAAE,EAAE;IAClE,MAAM,aAAa,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAE5D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,aAAa,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACxD,8BAA8B;YAC9B,mBAAmB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC9B,uCAAuC;YACvC,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;QACpD,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,uCAAK,GAAG,EAAE,aAAa,GAAQ,CAAC;AAC3C,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B","sourcesContent":["import React, { useEffect, useRef } from 'react';\n\nexport const HtmlContentViewer = ({ content }: { content: string }) => {\n const shadowRootRef = useRef<HTMLDivElement>(null);\n const shadowRootContainer = useRef<ShadowRoot | null>(null);\n\n useEffect(() => {\n if (shadowRootRef.current && !shadowRootContainer.current) {\n // Attach shadow DOM only once\n shadowRootContainer.current = shadowRootRef.current.attachShadow({ mode: 'open' });\n }\n\n if (shadowRootContainer.current) {\n // Update content inside the shadow DOM\n shadowRootContainer.current.innerHTML = content;\n }\n }, [content]);\n\n return <div ref={shadowRootRef}></div>;\n};\n"]}
1
+ {"version":3,"file":"HtmlContentViewer.js","sourceRoot":"/","sources":["src/components/generic/HtmlContentViewer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiD;AAE1C,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAAuB,EAAE,EAAE;IAClE,MAAM,aAAa,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAE5D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,aAAa,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACxD,mBAAmB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC9B,gEAAgE;YAChE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACpC,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACJ,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,gBAAwB,CAAC;gBAE7B,IAAI,WAAW,EAAE,CAAC;oBACd,sDAAsD;oBACtD,gBAAgB,GAAG,OAAO,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACJ,+DAA+D;oBAC/D,gBAAgB,GAAG,OAAO;yBACrB,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,2BAA2B;yBACrD,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC,2BAA2B;gBAChF,CAAC;gBAED,+BAA+B;gBAC/B,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,uCAAK,GAAG,EAAE,aAAa,GAAQ,CAAC;AAC3C,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B","sourcesContent":["import React, { useEffect, useRef } from 'react';\n\nexport const HtmlContentViewer = ({ content }: { content: string }) => {\n const shadowRootRef = useRef<HTMLDivElement>(null);\n const shadowRootContainer = useRef<ShadowRoot | null>(null);\n\n useEffect(() => {\n if (shadowRootRef.current && !shadowRootContainer.current) {\n shadowRootContainer.current = shadowRootRef.current.attachShadow({ mode: 'open' });\n }\n\n if (shadowRootContainer.current) {\n // If content is null, undefined, or empty, clear the shadow DOM\n if (!content || content.trim() === '') {\n shadowRootContainer.current.innerHTML = '';\n } else {\n const hasHtmlTags = /<\\/?[a-z][\\s\\S]*>/i.test(content);\n let formattedContent: string;\n\n if (hasHtmlTags) {\n // HTML content → render directly without modification\n formattedContent = content;\n } else {\n // Plain text → replace line breaks and tabs for proper display\n formattedContent = content\n .replace(/\\r?\\n/g, '<br>') // Convert newlines to <br>\n .replace(/\\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;'); // Replace tabs with spaces\n }\n\n // Render inside the Shadow DOM\n shadowRootContainer.current.innerHTML = formattedContent;\n }\n }\n }, [content]);\n\n return <div ref={shadowRootRef}></div>;\n};\n"]}
@@ -22,6 +22,7 @@ export interface TextProps extends PropsWithChildren<any> {
22
22
  preformatted?: boolean;
23
23
  style?: React.CSSProperties;
24
24
  lineThrough?: boolean;
25
+ asDiv?: boolean;
25
26
  }
26
27
  export declare const Text: React.ForwardRefExoticComponent<Pick<TextProps, keyof TextProps> & React.RefAttributes<HTMLParagraphElement>>;
27
28
  export default Text;
@@ -66,7 +66,9 @@ exports.Text = (0, react_1.forwardRef)(function Text(props, ref) {
66
66
  if (defaultProps.color) {
67
67
  styles.color = defaultProps.color;
68
68
  }
69
- return (react_1.default.createElement("p", { className: classes, style: styles, ref: ref }, props.children));
69
+ // Use <div> if asDiv is true, otherwise <p>
70
+ const Wrapper = props.asDiv ? 'div' : 'p';
71
+ return (react_1.default.createElement(Wrapper, { className: classes, style: styles, ref: ref }, props.children));
70
72
  });
71
73
  exports.default = exports.Text;
72
74
  //# sourceMappingURL=Text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"/","sources":["src/components/generic/Text.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA6D;AAK7D,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,yCAAyC;AACzC,IAAY,aAEX;AAFD,WAAY,aAAa;IACrB,0CAAyB,CAAA;AAC7B,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB;AAgBY,QAAA,IAAI,GAAG,IAAA,kBAAU,EAAkC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACpF,MAAM,YAAY,mBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,IAChB,KAAK,CACX,CAAC;IAEF,MAAM,gBAAgB,GAAQ,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,YAAY,GAAQ,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,KAAK,CAAC,KAAK,gCAClC,CAAC,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,EAChD,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,aAAa,EAAE,KAAK,CAAC,IAAI,EACzB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,gBAAgB,EAAE,KAAK,CAAC,WAAW,IAChC,YAAY,GACZ,gBAAgB,EACrB,CAAC;IAEH,MAAM,MAAM,qBACL,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAChC,CAAC;IAEF,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,OAAO,CACH,qCAAG,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IACzC,KAAK,CAAC,QAAQ,CACf,CACP,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,kBAAe,YAAI,CAAC","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, PropsWithChildren } from 'react';\n\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport enum TextType {\n Body = 'body',\n Small = 'small',\n Caption = 'caption',\n Label = 'label',\n}\n\n// Refactor to globalize for Headings too\nexport enum TextTransform {\n Uppercase = 'u-uppercase',\n}\n\nexport interface TextProps extends PropsWithChildren<any> {\n [x: string]: React.ReactNode;\n type?: TextType;\n color?: Color;\n align?: TextAlign;\n transforms?: TextTransform[];\n className?: string;\n inline?: boolean;\n bold?: boolean;\n preformatted?: boolean;\n style?: React.CSSProperties;\n lineThrough?: boolean;\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(props, ref) {\n const defaultProps: TextProps = {\n type: TextType.Body,\n ...props,\n };\n\n const transformClasses: any = {};\n\n if (props.transforms) {\n props.transforms.forEach((transform) => (transformClasses[transform] = true));\n }\n\n const extraClasses: any = {};\n\n if (props.className) {\n props.className.split(' ').forEach((it) => (extraClasses[it] = true));\n }\n\n const classes = classNames(props.align, {\n [`text-${defaultProps.type}`]: defaultProps.type,\n 'u-inline-flex': props.inline,\n 'u-text-bold': props.bold,\n 'u-pre-wrap': props.preformatted,\n 'u-line-through': props.lineThrough,\n ...extraClasses,\n ...transformClasses,\n });\n\n const styles: any = {\n ...(defaultProps.style || {}),\n };\n\n if (defaultProps.color) {\n styles.color = defaultProps.color;\n }\n\n return (\n <p className={classes} style={styles} ref={ref}>\n {props.children}\n </p>\n );\n});\n\nexport default Text;\n"]}
1
+ {"version":3,"file":"Text.js","sourceRoot":"/","sources":["src/components/generic/Text.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA6D;AAK7D,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,yCAAyC;AACzC,IAAY,aAEX;AAFD,WAAY,aAAa;IACrB,0CAAyB,CAAA;AAC7B,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB;AAiBY,QAAA,IAAI,GAAG,IAAA,kBAAU,EAAkC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACpF,MAAM,YAAY,mBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,IAChB,KAAK,CACX,CAAC;IAEF,MAAM,gBAAgB,GAAQ,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,YAAY,GAAQ,EAAE,CAAC;IAC7B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,KAAK,CAAC,KAAK,gCAClC,CAAC,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,EAChD,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,aAAa,EAAE,KAAK,CAAC,IAAI,EACzB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,gBAAgB,EAAE,KAAK,CAAC,WAAW,IAChC,YAAY,GACZ,gBAAgB,EACrB,CAAC;IAEH,MAAM,MAAM,qBACL,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAChC,CAAC;IACF,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1C,OAAO,CACH,8BAAC,OAAO,IAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAC/C,KAAK,CAAC,QAAQ,CACT,CACb,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,kBAAe,YAAI,CAAC","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, PropsWithChildren } from 'react';\n\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport enum TextType {\n Body = 'body',\n Small = 'small',\n Caption = 'caption',\n Label = 'label',\n}\n\n// Refactor to globalize for Headings too\nexport enum TextTransform {\n Uppercase = 'u-uppercase',\n}\n\nexport interface TextProps extends PropsWithChildren<any> {\n [x: string]: React.ReactNode;\n type?: TextType;\n color?: Color;\n align?: TextAlign;\n transforms?: TextTransform[];\n className?: string;\n inline?: boolean;\n bold?: boolean;\n preformatted?: boolean;\n style?: React.CSSProperties;\n lineThrough?: boolean;\n asDiv?: boolean; // Switch between <p> and <div>\n}\n\nexport const Text = forwardRef<HTMLParagraphElement, TextProps>(function Text(props, ref) {\n const defaultProps: TextProps = {\n type: TextType.Body,\n ...props,\n };\n\n const transformClasses: any = {};\n if (props.transforms) {\n props.transforms.forEach((transform) => (transformClasses[transform] = true));\n }\n\n const extraClasses: any = {};\n if (props.className) {\n props.className.split(' ').forEach((it) => (extraClasses[it] = true));\n }\n\n const classes = classNames(props.align, {\n [`text-${defaultProps.type}`]: defaultProps.type,\n 'u-inline-flex': props.inline,\n 'u-text-bold': props.bold,\n 'u-pre-wrap': props.preformatted,\n 'u-line-through': props.lineThrough,\n ...extraClasses,\n ...transformClasses,\n });\n\n const styles: any = {\n ...(defaultProps.style || {}),\n };\n if (defaultProps.color) {\n styles.color = defaultProps.color;\n }\n\n // Use <div> if asDiv is true, otherwise <p>\n const Wrapper = props.asDiv ? 'div' : 'p';\n\n return (\n <Wrapper className={classes} style={styles} ref={ref}>\n {props.children}\n </Wrapper>\n );\n});\n\nexport default Text;\n"]}
@@ -192,7 +192,7 @@ const AddonCard = ({ addon, className }) => {
192
192
  react_1.default.createElement("div", { className: "u-flex" },
193
193
  react_1.default.createElement(Headline_1.default, { bold: true }, addon.name),
194
194
  addonBasketRow ? react_1.default.createElement(Check_1.default, null) : react_1.default.createElement(react_1.default.Fragment, null)),
195
- react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
195
+ react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, asDiv: true },
196
196
  react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: addon.description })),
197
197
  react_1.default.createElement("div", { className: "addon-card-wrapper--price u-flex u-flex-align-flex-end" },
198
198
  react_1.default.createElement("div", { className: "u-w-100" }, addonConfigurations.map((input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EAddonPricingType } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n const basketAddonRow = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n const selectedBasketRow = basketContext.currentBasketRows[0];\n if (basketAddonRow && selectedBasketRow) {\n DataLayer.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());\n }\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: priceInfo?.price && priceInfo?.quantity > 1,\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: priceInfo?.adultPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: priceInfo?.childPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n\n {/* {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )} */}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <>\n <div className=\"u-flex align-items-end\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n </>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {hotel?.enableCreditCardSurcharge || hasFees ? t(Translation.Step.Addon.ExcludingFees) : t(Translation.Step.Addon.IncludingFeesAndTaxes)}\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
1
+ {"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EAddonPricingType } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n const basketAddonRow = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n const selectedBasketRow = basketContext.currentBasketRows[0];\n if (basketAddonRow && selectedBasketRow) {\n DataLayer.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());\n }\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: priceInfo?.price && priceInfo?.quantity > 1,\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: priceInfo?.adultPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: priceInfo?.childPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small} asDiv>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n\n {/* {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )} */}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <>\n <div className=\"u-flex align-items-end\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n </>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {hotel?.enableCreditCardSurcharge || hasFees ? t(Translation.Step.Addon.ExcludingFees) : t(Translation.Step.Addon.IncludingFeesAndTaxes)}\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
@@ -61,7 +61,7 @@ const CommonAddonSummary = (props) => {
61
61
  react_1.default.createElement("div", { className: "" },
62
62
  !!price && (react_1.default.createElement("div", { className: "u-marg-top--light u-marg-bottom--light u-flex align-items-center u-flex-gap" },
63
63
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, className: "u-nowrap" }, `${addon.quantity} x`),
64
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
64
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
65
65
  react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: addon.description })))),
66
66
  !!adultPrice && (react_1.default.createElement("div", { className: "u-marg-top--light u-marg-bottom--light u-flex" },
67
67
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
@@ -1 +1 @@
1
- {"version":3,"file":"CommonAddonSummary.js","sourceRoot":"/","sources":["src/components/steps/common/CommonAddonSummary/CommonAddonSummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAsE;AACtE,kDAA0B;AAC1B,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,8EAA2E;AAC3E,kEAA2D;AAC3D,wCAAqC;AAM9B,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE;IACjE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CACxB;QACI,uCAAK,SAAS,EAAC,eAAe;YAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IACxC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CACnC,CACL;QACL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,sBAAe,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;YAE9G,OAAO,CACH,uCAAK,SAAS,EAAC,eAAe,EAAC,GAAG,EAAE,KAAK;gBACrC,uCAAK,SAAS,EAAC,sBAAsB;oBACjC,8BAAC,cAAI;wBACD,8CAAS,KAAK,CAAC,IAAI,CAAU,CAC1B,CACL;gBACN,uCAAK,SAAS,EAAC,2BAA2B;oBACtC,uCAAK,SAAS,EAAC,EAAE;wBACZ,CAAC,CAAC,KAAK,IAAI,CACR,uCAAK,SAAS,EAAC,6EAA6E;4BACxF,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,SAAS,EAAC,UAAU,IAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAQ;4BAC/E,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCACtB,8BAAC,qCAAiB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW,GAAI,CAC9C,CACL,CACT;wBACA,CAAC,CAAC,UAAU,IAAI,CACb,uCAAK,SAAS,EAAC,+CAA+C;4BAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCAAG,KAAK,CAAC,aAAa;0CAAe,CAC7D,CACT;wBACA,CAAC,CAAC,UAAU,IAAI,CACb,uCAAK,SAAS,EAAC,+CAA+C;4BAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCAAG,KAAK,CAAC,aAAa;4CAAiB,CAC/D,CACT,CACC;oBACN,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;wBAC7C,8BAAC,kBAAQ,QAAE,YAAY,CAAY,CAChC,CACL,CACJ,CACT,CAAC;QACN,CAAC,CAAC,CACH,CACN,CAAC,CAAC,CAAC,IAAI,CAAC;AACb,CAAC,CAAC;AAnDW,QAAA,kBAAkB,sBAmD7B","sourcesContent":["import { ReservationAddonDTO, TotalCalculator } from '@roomstay/core';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Currency from '@/components/generic/Currency';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\n\ntype CommonAddonSummaryProps = {\n addons: ReservationAddonDTO[];\n};\n\nexport const CommonAddonSummary = (props: CommonAddonSummaryProps) => {\n const { t } = useTranslation();\n const { addons } = props;\n\n return addons.length >= 1 ? (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Thanks.AddOnItems)}\n </Text>\n </div>\n {addons.map((addon, index) => {\n const { price, adultPrice, childPrice, displayPrice } = TotalCalculator.calculateReservationAddonTotal(addon);\n\n return (\n <div className=\"u-marg-bottom\" key={index}>\n <div className=\"u-marg-bottom--light\">\n <Text>\n <strong>{addon.name}</strong>\n </Text>\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"\">\n {!!price && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex align-items-center u-flex-gap\">\n <Text type={TextType.Small} className=\"u-nowrap\">{`${addon.quantity} x`}</Text>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={addon.description} />\n </Text>\n </div>\n )}\n {!!adultPrice && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{addon.adultQuantity} Adults</Text>\n </div>\n )}\n {!!childPrice && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{addon.childQuantity} Children</Text>\n </div>\n )}\n </div>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <Currency>{displayPrice}</Currency>\n </Text>\n </div>\n </div>\n );\n })}\n </>\n ) : null;\n};\n"]}
1
+ {"version":3,"file":"CommonAddonSummary.js","sourceRoot":"/","sources":["src/components/steps/common/CommonAddonSummary/CommonAddonSummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAsE;AACtE,kDAA0B;AAC1B,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,8EAA2E;AAC3E,kEAA2D;AAC3D,wCAAqC;AAM9B,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE;IACjE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CACxB;QACI,uCAAK,SAAS,EAAC,eAAe;YAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IACxC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CACnC,CACL;QACL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,sBAAe,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;YAE9G,OAAO,CACH,uCAAK,SAAS,EAAC,eAAe,EAAC,GAAG,EAAE,KAAK;gBACrC,uCAAK,SAAS,EAAC,sBAAsB;oBACjC,8BAAC,cAAI;wBACD,8CAAS,KAAK,CAAC,IAAI,CAAU,CAC1B,CACL;gBACN,uCAAK,SAAS,EAAC,2BAA2B;oBACtC,uCAAK,SAAS,EAAC,EAAE;wBACZ,CAAC,CAAC,KAAK,IAAI,CACR,uCAAK,SAAS,EAAC,6EAA6E;4BACxF,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,SAAS,EAAC,UAAU,IAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAQ;4BAC/E,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK;gCAC7B,8BAAC,qCAAiB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW,GAAI,CAC9C,CACL,CACT;wBACA,CAAC,CAAC,UAAU,IAAI,CACb,uCAAK,SAAS,EAAC,+CAA+C;4BAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCAAG,KAAK,CAAC,aAAa;0CAAe,CAC7D,CACT;wBACA,CAAC,CAAC,UAAU,IAAI,CACb,uCAAK,SAAS,EAAC,+CAA+C;4BAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCAAG,KAAK,CAAC,aAAa;4CAAiB,CAC/D,CACT,CACC;oBACN,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;wBAC7C,8BAAC,kBAAQ,QAAE,YAAY,CAAY,CAChC,CACL,CACJ,CACT,CAAC;QACN,CAAC,CAAC,CACH,CACN,CAAC,CAAC,CAAC,IAAI,CAAC;AACb,CAAC,CAAC;AAnDW,QAAA,kBAAkB,sBAmD7B","sourcesContent":["import { ReservationAddonDTO, TotalCalculator } from '@roomstay/core';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Currency from '@/components/generic/Currency';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\n\ntype CommonAddonSummaryProps = {\n addons: ReservationAddonDTO[];\n};\n\nexport const CommonAddonSummary = (props: CommonAddonSummaryProps) => {\n const { t } = useTranslation();\n const { addons } = props;\n\n return addons.length >= 1 ? (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Thanks.AddOnItems)}\n </Text>\n </div>\n {addons.map((addon, index) => {\n const { price, adultPrice, childPrice, displayPrice } = TotalCalculator.calculateReservationAddonTotal(addon);\n\n return (\n <div className=\"u-marg-bottom\" key={index}>\n <div className=\"u-marg-bottom--light\">\n <Text>\n <strong>{addon.name}</strong>\n </Text>\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"\">\n {!!price && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex align-items-center u-flex-gap\">\n <Text type={TextType.Small} className=\"u-nowrap\">{`${addon.quantity} x`}</Text>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={addon.description} />\n </Text>\n </div>\n )}\n {!!adultPrice && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{addon.adultQuantity} Adults</Text>\n </div>\n )}\n {!!childPrice && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{addon.childQuantity} Children</Text>\n </div>\n )}\n </div>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <Currency>{displayPrice}</Currency>\n </Text>\n </div>\n </div>\n );\n })}\n </>\n ) : null;\n};\n"]}
@@ -81,10 +81,10 @@ function StepConfirmationPolicyBlock() {
81
81
  })),
82
82
  react_1.default.createElement("div", { className: "u-marg-bottom" }, (guaranteePolicy === null || guaranteePolicy === void 0 ? void 0 : guaranteePolicy.longDescription) && !guaranteePolicy.hide && (react_1.default.createElement(react_1.default.Fragment, null,
83
83
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true, className: "u-marg-bottom--light" }, t(Translation_1.Translation.Misc.GuaranteePolicy)),
84
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
84
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
85
85
  react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: guaranteePolicy.longDescription }))))),
86
86
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true, className: "u-marg-bottom--light" }, t(Translation_1.Translation.Misc.CancellationPolicy)),
87
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
87
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
88
88
  react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: ((_b = firstRoom.room.getRate()) === null || _b === void 0 ? void 0 : _b.getCancellationPolicy()) || '' }))));
89
89
  })));
90
90
  }, [basketContext.currentBasketRows]);
@@ -1 +1 @@
1
- {"version":3,"file":"StepConfirmationPolicyBlock.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationPolicyBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Text, { TextType } from '@/components/generic/Text';\nimport BasketRow from '@/models/BasketRow';\n\nexport default function StepConfirmationPolicyBlock() {\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n const roomTranslation = t(Translation.Misc.Room);\n\n return useMemo(() => {\n const policiesGrouped: { [uniq: string]: { rooms: { index: number; room: BasketRow }[] } } = {};\n const rooms = basketContext.getAllValidRows();\n\n let roomIndex = 0;\n\n if (rooms.length > 1) {\n rooms.forEach((room) => {\n roomIndex++;\n\n const rate = room.getRate();\n let entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`];\n\n if (!entry) {\n entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`] = { rooms: [] };\n }\n\n entry.rooms.push({ index: roomIndex, room });\n });\n } else {\n policiesGrouped[0] = { rooms: [{ index: 1, room: rooms[0] }] };\n }\n\n return (\n <div className=\"u-marg-bottom step-confirmation-policy-block\">\n {Object.values(policiesGrouped).map((group, index) => {\n const firstRoom = group.rooms[0];\n const guaranteePolicy = firstRoom.room.getRate()?.getGuaranteePolicy();\n\n return (\n <div className=\"u-marg-bottom--heavy\" key={index}>\n <div className=\"u-marg-bottom\">\n {group.rooms.map((roomWithIndex) => {\n return (\n <Text key={roomWithIndex.index} type={TextType.Small}>\n <strong>\n {roomTranslation} {roomWithIndex.index}\n </strong>{' '}\n {roomWithIndex.room.getRoom().name} - {roomWithIndex.room.getRate()?.name}\n </Text>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n {guaranteePolicy?.longDescription && !guaranteePolicy.hide && (\n <>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.GuaranteePolicy)}\n </Text>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={guaranteePolicy.longDescription} />\n </Text>\n </>\n )}\n </div>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CancellationPolicy)}\n </Text>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={firstRoom.room.getRate()?.getCancellationPolicy() || ''} />\n </Text>\n </div>\n );\n })}\n </div>\n );\n }, [basketContext.currentBasketRows]);\n}\n"]}
1
+ {"version":3,"file":"StepConfirmationPolicyBlock.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationPolicyBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Text, { TextType } from '@/components/generic/Text';\nimport BasketRow from '@/models/BasketRow';\n\nexport default function StepConfirmationPolicyBlock() {\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n const roomTranslation = t(Translation.Misc.Room);\n\n return useMemo(() => {\n const policiesGrouped: { [uniq: string]: { rooms: { index: number; room: BasketRow }[] } } = {};\n const rooms = basketContext.getAllValidRows();\n\n let roomIndex = 0;\n\n if (rooms.length > 1) {\n rooms.forEach((room) => {\n roomIndex++;\n\n const rate = room.getRate();\n let entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`];\n\n if (!entry) {\n entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`] = { rooms: [] };\n }\n\n entry.rooms.push({ index: roomIndex, room });\n });\n } else {\n policiesGrouped[0] = { rooms: [{ index: 1, room: rooms[0] }] };\n }\n\n return (\n <div className=\"u-marg-bottom step-confirmation-policy-block\">\n {Object.values(policiesGrouped).map((group, index) => {\n const firstRoom = group.rooms[0];\n const guaranteePolicy = firstRoom.room.getRate()?.getGuaranteePolicy();\n\n return (\n <div className=\"u-marg-bottom--heavy\" key={index}>\n <div className=\"u-marg-bottom\">\n {group.rooms.map((roomWithIndex) => {\n return (\n <Text key={roomWithIndex.index} type={TextType.Small}>\n <strong>\n {roomTranslation} {roomWithIndex.index}\n </strong>{' '}\n {roomWithIndex.room.getRoom().name} - {roomWithIndex.room.getRate()?.name}\n </Text>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n {guaranteePolicy?.longDescription && !guaranteePolicy.hide && (\n <>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.GuaranteePolicy)}\n </Text>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={guaranteePolicy.longDescription} />\n </Text>\n </>\n )}\n </div>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CancellationPolicy)}\n </Text>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={firstRoom.room.getRate()?.getCancellationPolicy() || ''} />\n </Text>\n </div>\n );\n })}\n </div>\n );\n }, [basketContext.currentBasketRows]);\n}\n"]}
@@ -129,7 +129,7 @@ function AdditionalOffersModal(props) {
129
129
  react_1.default.createElement("div", { className: "u-marg-bottom" },
130
130
  react_1.default.createElement(Headline_1.default, { bold: true }, addon.name)),
131
131
  react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
132
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.DarkGrey },
132
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.DarkGrey, asDiv: true },
133
133
  react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: addon.description }))),
134
134
  react_1.default.createElement("div", { className: "row u-marg-top" },
135
135
  react_1.default.createElement("div", { className: "u-flex col-md-6" },
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalOffersModal.js","sourceRoot":"/","sources":["src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\n\nexport interface AdditionalOffersModalProps {\n isOpen: boolean;\n addon: Addon;\n basketAddonRow: BasketAddonRow | void;\n onClose: () => void;\n}\n\nexport default function AdditionalOffersModal(props: AdditionalOffersModalProps) {\n const { addon } = props;\n const { t } = useTranslation();\n\n const basketContext = useContext(BasketContext);\n\n const [selectedDate, setSelectedDate] = useState(props.basketAddonRow ? props.basketAddonRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState<string>(props.basketAddonRow ? props.basketAddonRow.getSelectedTime() : '');\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n const [quantity, setQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getQuantity() : 1);\n const [adultQuantity, setAdultQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getChildQuantity() : 0);\n\n React.useEffect(() => {\n if (addon) {\n if (props.basketAddonRow) {\n setPriceInfo(addon.availability[props.basketAddonRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(props.basketAddonRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(props.basketAddonRow.getSelectedTime() ?? '');\n setQuantity(props.basketAddonRow.getQuantity());\n setAdultQuantity(props.basketAddonRow.getAdultQuantity());\n setChildQuantity(props.basketAddonRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string]);\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n\n return () => {\n setQuantity(1);\n setAdultQuantity(1);\n setChildQuantity(0);\n };\n }\n }, [addon]);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n props.onClose();\n };\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: any) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n return (\n <SimpleModal open={props.isOpen} onClose={props.onClose} size={SimpleModalSize.Small} title={addon ? addon.name : ''}>\n {addon && (\n <>\n <div\n style={{\n height: '350px',\n width: '100%',\n backgroundImage: `url(\"${addon.image && ImageProvider.resizeImage(addon.image, ImageSize.Original)}\")`,\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n }}\n />\n <div className=\"u-marg-heavy u-marg@m-\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{addon.name}</Headline>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <HtmlContentViewer content={addon.description} />\n </Text>\n </div>\n\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Date</Text>\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n </div>\n </div>\n {priceInfo?.selectorTimes?.length !== 0 && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Time</Text>\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n </div>\n </div>\n )}\n {priceInfo.price && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Quantity</Text>\n <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />\n </div>\n </div>\n )}\n {priceInfo.adultPrice && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Adults</Text>\n <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />\n </div>\n </div>\n )}\n {priceInfo.childPrice && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Children</Text>\n <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />\n </div>\n </div>\n )}\n\n <div className=\"u-flex align-items-center u-marg-top\">\n {priceInfo.price && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.price}</Currency>/ Qty\n </h2>\n )}\n {priceInfo.adultPrice && priceInfo.childPrice && (\n <h2 className=\"u-marg-none\">\n <div className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.adultPrice}</Currency> / Adult\n </div>\n <br />\n <div className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.childPrice}</Currency> / Child\n </div>\n </h2>\n )}\n {priceInfo.adultPrice && !priceInfo.childPrice && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.adultPrice}</Currency> / Adult\n </h2>\n )}\n {priceInfo.childPrice && !priceInfo.adultPrice && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.childPrice}</Currency> / Child\n </h2>\n )}\n\n <BEButton filled primary onClick={onClickAddToCartHandler}>\n {props.basketAddonRow ? 'Update Cart' : 'Add to Cart'}\n </BEButton>\n </div>\n\n {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )}\n </div>\n </>\n )}\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"AdditionalOffersModal.js","sourceRoot":"/","sources":["src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\n\nexport interface AdditionalOffersModalProps {\n isOpen: boolean;\n addon: Addon;\n basketAddonRow: BasketAddonRow | void;\n onClose: () => void;\n}\n\nexport default function AdditionalOffersModal(props: AdditionalOffersModalProps) {\n const { addon } = props;\n const { t } = useTranslation();\n\n const basketContext = useContext(BasketContext);\n\n const [selectedDate, setSelectedDate] = useState(props.basketAddonRow ? props.basketAddonRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState<string>(props.basketAddonRow ? props.basketAddonRow.getSelectedTime() : '');\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n const [quantity, setQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getQuantity() : 1);\n const [adultQuantity, setAdultQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(props.basketAddonRow ? props.basketAddonRow.getChildQuantity() : 0);\n\n React.useEffect(() => {\n if (addon) {\n if (props.basketAddonRow) {\n setPriceInfo(addon.availability[props.basketAddonRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(props.basketAddonRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(props.basketAddonRow.getSelectedTime() ?? '');\n setQuantity(props.basketAddonRow.getQuantity());\n setAdultQuantity(props.basketAddonRow.getAdultQuantity());\n setChildQuantity(props.basketAddonRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string]);\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n\n return () => {\n setQuantity(1);\n setAdultQuantity(1);\n setChildQuantity(0);\n };\n }\n }, [addon]);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n props.onClose();\n };\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: any) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n return (\n <SimpleModal open={props.isOpen} onClose={props.onClose} size={SimpleModalSize.Small} title={addon ? addon.name : ''}>\n {addon && (\n <>\n <div\n style={{\n height: '350px',\n width: '100%',\n backgroundImage: `url(\"${addon.image && ImageProvider.resizeImage(addon.image, ImageSize.Original)}\")`,\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n }}\n />\n <div className=\"u-marg-heavy u-marg@m-\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{addon.name}</Headline>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small} color={Color.DarkGrey} asDiv>\n <HtmlContentViewer content={addon.description} />\n </Text>\n </div>\n\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Date</Text>\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n </div>\n </div>\n {priceInfo?.selectorTimes?.length !== 0 && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Time</Text>\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n </div>\n </div>\n )}\n {priceInfo.price && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Quantity</Text>\n <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />\n </div>\n </div>\n )}\n {priceInfo.adultPrice && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Adults</Text>\n <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />\n </div>\n </div>\n )}\n {priceInfo.childPrice && (\n <div className=\"row u-marg-top\">\n <div className=\"u-flex col-md-6\">\n <Text>Children</Text>\n <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />\n </div>\n </div>\n )}\n\n <div className=\"u-flex align-items-center u-marg-top\">\n {priceInfo.price && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.price}</Currency>/ Qty\n </h2>\n )}\n {priceInfo.adultPrice && priceInfo.childPrice && (\n <h2 className=\"u-marg-none\">\n <div className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.adultPrice}</Currency> / Adult\n </div>\n <br />\n <div className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.childPrice}</Currency> / Child\n </div>\n </h2>\n )}\n {priceInfo.adultPrice && !priceInfo.childPrice && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.adultPrice}</Currency> / Adult\n </h2>\n )}\n {priceInfo.childPrice && !priceInfo.adultPrice && (\n <h2 className=\"u-marg-none u-flex u-flex-align-center\">\n <Currency>{priceInfo.childPrice}</Currency> / Child\n </h2>\n )}\n\n <BEButton filled primary onClick={onClickAddToCartHandler}>\n {props.basketAddonRow ? 'Update Cart' : 'Add to Cart'}\n </BEButton>\n </div>\n\n {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )}\n </div>\n </>\n )}\n </SimpleModal>\n );\n}\n"]}