@roomstay/frontend 2.6.89-0 → 2.6.89-3

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.
@@ -30,12 +30,29 @@ const HtmlContentViewer = ({ content }) => {
30
30
  const shadowRootContainer = (0, react_1.useRef)(null);
31
31
  (0, react_1.useEffect)(() => {
32
32
  if (shadowRootRef.current && !shadowRootContainer.current) {
33
- // Attach shadow DOM only once
34
33
  shadowRootContainer.current = shadowRootRef.current.attachShadow({ mode: 'open' });
35
34
  }
36
35
  if (shadowRootContainer.current) {
37
- // Update content inside the shadow DOM
38
- shadowRootContainer.current.innerHTML = content;
36
+ // If content is null, undefined, or empty, clear the shadow DOM
37
+ if (!content || content.trim() === '') {
38
+ shadowRootContainer.current.innerHTML = '';
39
+ }
40
+ else {
41
+ const hasHtmlTags = /<\/?[a-z][\s\S]*>/i.test(content);
42
+ let formattedContent;
43
+ if (hasHtmlTags) {
44
+ // HTML content → render directly without modification
45
+ formattedContent = content;
46
+ }
47
+ else {
48
+ // Plain text → replace line breaks and tabs for proper display
49
+ formattedContent = content
50
+ .replace(/\r?\n/g, '<br>') // Convert newlines to <br>
51
+ .replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;'); // Replace tabs with spaces
52
+ }
53
+ // Render inside the Shadow DOM
54
+ shadowRootContainer.current.innerHTML = formattedContent;
55
+ }
39
56
  }
40
57
  }, [content]);
41
58
  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;YACvD,8BAA8B;YAC9B,mBAAmB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SACtF;QAED,IAAI,mBAAmB,CAAC,OAAO,EAAE;YAC7B,uCAAuC;YACvC,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;SACnD;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;YACvD,mBAAmB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SACtF;QAED,IAAI,mBAAmB,CAAC,OAAO,EAAE;YAC7B,gEAAgE;YAChE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnC,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;aAC9C;iBAAM;gBACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,gBAAwB,CAAC;gBAE7B,IAAI,WAAW,EAAE;oBACb,sDAAsD;oBACtD,gBAAgB,GAAG,OAAO,CAAC;iBAC9B;qBAAM;oBACH,+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;iBAC/E;gBAED,+BAA+B;gBAC/B,mBAAmB,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;aAC5D;SACJ;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"]}
@@ -40,7 +40,7 @@ const Text_1 = __importStar(require("../../../generic/Text"));
40
40
  const ImageProvider_1 = __importStar(require("../../../../providers/ImageProvider"));
41
41
  const Color_1 = require("../../../../util/Color");
42
42
  function AdditionalOffersModal(props) {
43
- var _a;
43
+ var _a, _b;
44
44
  const { addon } = props;
45
45
  const { t } = (0, react_i18next_1.useTranslation)();
46
46
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
@@ -106,14 +106,11 @@ function AdditionalOffersModal(props) {
106
106
  setSelectedTime(selected);
107
107
  };
108
108
  return (react_1.default.createElement(SimpleModal_1.default, { open: props.isOpen, onClose: props.onClose, size: SimpleModal_1.SimpleModalSize.Small, title: addon ? addon.name : '' }, addon && (react_1.default.createElement(react_1.default.Fragment, null,
109
- react_1.default.createElement("div", { style: {
110
- height: '350px',
109
+ react_1.default.createElement("div", { className: "rs-additional-offers-modal-image" }, ((_a = addon === null || addon === void 0 ? void 0 : addon.image) === null || _a === void 0 ? void 0 : _a.length) ? (react_1.default.createElement("img", { src: ImageProvider_1.default.resizeImage(addon.image, ImageProvider_1.ImageSize.Original), alt: addon.name || 'Addon Image', style: {
111
110
  width: '100%',
112
- backgroundImage: `url("${addon.image && ImageProvider_1.default.resizeImage(addon.image, ImageProvider_1.ImageSize.Original)}")`,
113
- backgroundPosition: 'center',
114
- backgroundRepeat: 'no-repeat',
115
- backgroundSize: 'cover',
116
- } }),
111
+ height: 'auto',
112
+ display: 'block',
113
+ } })) : (react_1.default.createElement("div", { style: { height: '350px', width: '100%' } }))),
117
114
  react_1.default.createElement("div", { className: "u-marg-heavy u-marg@m-" },
118
115
  react_1.default.createElement("div", { className: "u-marg-bottom" },
119
116
  react_1.default.createElement(Headline_1.default, { bold: true }, addon.name)),
@@ -124,7 +121,7 @@ function AdditionalOffersModal(props) {
124
121
  react_1.default.createElement("div", { className: "u-flex col-md-6" },
125
122
  react_1.default.createElement(Text_1.default, null, "Date"),
126
123
  react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: addon.selectorDates, value: selectedDate, onChange: setDateOnChange, keyName: "value", labelName: "text", className: "u-flex align-items-center" }))),
127
- ((_a = priceInfo === null || priceInfo === void 0 ? void 0 : priceInfo.selectorTimes) === null || _a === void 0 ? void 0 : _a.length) !== 0 && (react_1.default.createElement("div", { className: "row u-marg-top" },
124
+ ((_b = priceInfo === null || priceInfo === void 0 ? void 0 : priceInfo.selectorTimes) === null || _b === void 0 ? void 0 : _b.length) !== 0 && (react_1.default.createElement("div", { className: "row u-marg-top" },
128
125
  react_1.default.createElement("div", { className: "u-flex col-md-6" },
129
126
  react_1.default.createElement(Text_1.default, null, "Time"),
130
127
  react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: (priceInfo === null || priceInfo === void 0 ? void 0 : priceInfo.selectorTimes) || [], value: selectedTime, onChange: setSelectedTimeOnChange, keyName: "value", labelName: "text", className: "u-flex align-items-center" })))),
@@ -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} 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"]}
1
+ {"version":3,"file":"AdditionalOffersModal.js","sourceRoot":"/","sources":["src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAAoD;AACpD,iDAA+C;AAE/C,6EAAqD;AACrD,6EAAqD;AACrD,6EAAqD;AACrD,8EAA2E;AAC3E,sFAAsF;AACtF,2FAAmE;AACnE,+DAAkF;AAClF,kEAA2D;AAG3D,2EAAqE;AACrE,wCAAqC;AASrC,SAAwB,qBAAqB,CAAC,KAAiC;;IAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7H,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvH,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvH,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;;QACjB,IAAI,KAAK,EAAE;YACP,IAAI,KAAK,CAAC,cAAc,EAAE;gBACtB,YAAY,CAAC,MAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,mCAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC,CAAC;gBAC1H,eAAe,CAAC,MAAA,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,mCAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3E,eAAe,CAAC,MAAA,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,mCAAI,EAAE,CAAC,CAAC;gBAC9D,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChD,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC1D,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC;aAC7D;iBAAM;gBACH,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC,CAAC;gBAC5D,eAAe,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC;gBAC3C,eAAe,CAAC,CAAA,MAAA,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAmB,CAAC,0CAAE,aAAa,0CAAG,CAAC,CAAC,0CAAE,KAAK,KAAI,EAAE,CAAC,CAAC;aACnG;YAED,OAAO,GAAG,EAAE;gBACR,WAAW,CAAC,CAAC,CAAC,CAAC;gBACf,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACpB,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC;SACL;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,EAAE;;QAC1B,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,CAAA,MAAA,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,0CAAE,aAAa,0CAAG,CAAC,CAAC,0CAAE,KAAK,KAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,EAAE;YAC9C,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;SAClD;IACL,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,aAAa,CAAC,kBAAkB,CAC5B,KAAK,EACL;YACI,QAAQ;YACR,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;SACvB,EACD,YAAY,EACZ,YAAY,CACf,CAAC;QACF,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,CAAC,GAAQ,EAAE,EAAE;QACrC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,yBAAyB,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC3C,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,MAAM,wBAAwB,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC1C,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,QAAa,EAAE,EAAE;QACtC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,CAAC,QAAa,EAAE,EAAE;QAC9C,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CACH,8BAAC,qBAAW,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,6BAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAC/G,KAAK,IAAI,CACN;QACI,uCAAK,SAAS,EAAC,kCAAkC,IAC5C,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,MAAM,EAAC,CAAC,CAAC,CACpB,uCACI,GAAG,EAAE,uBAAa,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAS,CAAC,QAAQ,CAAC,EAC/D,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,aAAa,EAChC,KAAK,EAAE;gBACH,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,OAAO;aACnB,GACH,CACL,CAAC,CAAC,CAAC,CACA,uCAAK,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAQ,CACzD,CACC;QACN,uCAAK,SAAS,EAAC,wBAAwB;YACnC,uCAAK,SAAS,EAAC,eAAe;gBAC1B,8BAAC,kBAAQ,IAAC,IAAI,UAAE,KAAK,CAAC,IAAI,CAAY,CACpC;YACN,uCAAK,SAAS,EAAC,sBAAsB;gBACjC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,KAAK;oBACpD,8BAAC,qCAAiB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW,GAAI,CAC9C,CACL;YAEN,uCAAK,SAAS,EAAC,gBAAgB;gBAC3B,uCAAK,SAAS,EAAC,iBAAiB;oBAC5B,8BAAC,cAAI,eAAY;oBACjB,8BAAC,eAAM,IACH,cAAc,QACd,OAAO,EAAE,KAAK,CAAC,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,MAAM,EAChB,SAAS,EAAC,2BAA2B,GACvC,CACA,CACJ;YACL,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,0CAAE,MAAM,MAAK,CAAC,IAAI,CACvC,uCAAK,SAAS,EAAC,gBAAgB;gBAC3B,uCAAK,SAAS,EAAC,iBAAiB;oBAC5B,8BAAC,cAAI,eAAY;oBACjB,8BAAC,eAAM,IACH,cAAc,QACd,OAAO,EAAE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,KAAI,EAAE,EACvC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,MAAM,EAChB,SAAS,EAAC,2BAA2B,GACvC,CACA,CACJ,CACT;YACA,SAAS,CAAC,KAAK,IAAI,CAChB,uCAAK,SAAS,EAAC,gBAAgB;gBAC3B,uCAAK,SAAS,EAAC,iBAAiB;oBAC5B,8BAAC,cAAI,mBAAgB;oBACrB,8BAAC,yBAAe,IAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,GAAI,CACnG,CACJ,CACT;YACA,SAAS,CAAC,UAAU,IAAI,CACrB,uCAAK,SAAS,EAAC,gBAAgB;gBAC3B,uCAAK,SAAS,EAAC,iBAAiB;oBAC5B,8BAAC,cAAI,iBAAc;oBACnB,8BAAC,yBAAe,IAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,yBAAyB,GAAI,CAC9H,CACJ,CACT;YACA,SAAS,CAAC,UAAU,IAAI,CACrB,uCAAK,SAAS,EAAC,gBAAgB;gBAC3B,uCAAK,SAAS,EAAC,iBAAiB;oBAC5B,8BAAC,cAAI,mBAAgB;oBACrB,8BAAC,yBAAe,IAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,wBAAwB,GAAI,CAC7H,CACJ,CACT;YAED,uCAAK,SAAS,EAAC,sCAAsC;gBAChD,SAAS,CAAC,KAAK,IAAI,CAChB,sCAAI,SAAS,EAAC,wCAAwC;oBAClD,8BAAC,kBAAQ,QAAE,SAAS,CAAC,KAAK,CAAY;4BACrC,CACR;gBACA,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,CAC7C,sCAAI,SAAS,EAAC,aAAa;oBACvB,uCAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAC,kBAAQ,QAAE,SAAS,CAAC,UAAU,CAAY;mCACzC;oBACN,yCAAM;oBACN,uCAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAC,kBAAQ,QAAE,SAAS,CAAC,UAAU,CAAY;mCACzC,CACL,CACR;gBACA,SAAS,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAC9C,sCAAI,SAAS,EAAC,wCAAwC;oBAClD,8BAAC,kBAAQ,QAAE,SAAS,CAAC,UAAU,CAAY;+BAC1C,CACR;gBACA,SAAS,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAC9C,sCAAI,SAAS,EAAC,wCAAwC;oBAClD,8BAAC,kBAAQ,QAAE,SAAS,CAAC,UAAU,CAAY;+BAC1C,CACR;gBAED,8BAAC,kBAAQ,IAAC,MAAM,QAAC,OAAO,QAAC,OAAO,EAAE,uBAAuB,IACpD,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAC9C,CACT;YAEL,KAAK,CAAC,oBAAoB,IAAI,CAC3B;gBACI,sCAAI,SAAS,EAAC,iCAAiC,gBAAe;gBAC9D,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,KAAK,CAAC,oBAAoB,CAAQ,CAC7D,CACP,CACN;YACA,KAAK,CAAC,aAAa,IAAI,CACpB;gBACI,sCAAI,SAAS,EAAC,iCAAiC,0BAAyB;gBACxE,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,KAAK,CAAC,aAAa,CAAQ,CACtD,CACP,CACN,CACC,CACP,CACN,CACS,CACjB,CAAC;AACN,CAAC;AApND,wCAoNC","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 className=\"rs-additional-offers-modal-image\">\n {addon?.image?.length ? (\n <img\n src={ImageProvider.resizeImage(addon.image, ImageSize.Original)}\n alt={addon.name || 'Addon Image'}\n style={{\n width: '100%',\n height: 'auto',\n display: 'block',\n }}\n />\n ) : (\n <div style={{ height: '350px', width: '100%' }}></div>\n )}\n </div>\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"]}