@roomstay/frontend 2.5.24 → 2.6.0

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 (53) hide show
  1. package/dist/201.bundle.js +1 -1
  2. package/dist/279.bundle.js +1 -1
  3. package/dist/370.bundle.js +1 -1
  4. package/dist/449.bundle.js +1 -1
  5. package/dist/468.bundle.js +1 -1
  6. package/dist/537.bundle.js +1 -1
  7. package/dist/572.bundle.js +1 -1
  8. package/dist/736.bundle.js +1 -1
  9. package/dist/903.bundle.js +1 -1
  10. package/dist/main.bundle.js +1 -1
  11. package/dist/src/api/AvailabilityAPI.d.ts +20 -2
  12. package/dist/src/api/AvailabilityAPI.js +35 -16
  13. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  14. package/dist/src/api/BaseAPI.js +2 -1
  15. package/dist/src/api/BaseAPI.js.map +1 -1
  16. package/dist/src/components/generic/Tooltip/Tooltip.d.ts +3 -0
  17. package/dist/src/components/generic/Tooltip/Tooltip.js +20 -4
  18. package/dist/src/components/generic/Tooltip/Tooltip.js.map +1 -1
  19. package/dist/src/components/generic/date/DatePicker.d.ts +4 -1
  20. package/dist/src/components/generic/date/DatePicker.js +78 -32
  21. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  22. package/dist/src/components/generic/date/DatePickerDay.js +125 -7
  23. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  24. package/dist/src/components/generic/date/FloatingDatePicker.js +5 -3
  25. package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
  26. package/dist/src/components/steps/DaysSelectedInformer.js +3 -1
  27. package/dist/src/components/steps/DaysSelectedInformer.js.map +1 -1
  28. package/dist/src/components/steps/MinimumNightStayPill.js +8 -1
  29. package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
  30. package/dist/src/components/steps/date/StepOneNextStepButton.js +15 -1
  31. package/dist/src/components/steps/date/StepOneNextStepButton.js.map +1 -1
  32. package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js +2 -2
  33. package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +1 -1
  34. package/dist/src/config.d.ts +4 -0
  35. package/dist/src/config.js +7 -0
  36. package/dist/src/config.js.map +1 -0
  37. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -1
  38. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  39. package/dist/src/contexts/DatePickerContext.d.ts +4 -0
  40. package/dist/src/contexts/DatePickerContext.js.map +1 -1
  41. package/dist/src/hooks/index.d.ts +1 -0
  42. package/dist/src/hooks/index.js +1 -0
  43. package/dist/src/hooks/index.js.map +1 -1
  44. package/dist/src/hooks/useCalendarNightStay.d.ts +39 -0
  45. package/dist/src/hooks/useCalendarNightStay.js +133 -0
  46. package/dist/src/hooks/useCalendarNightStay.js.map +1 -0
  47. package/dist/src/translations/Translation.d.ts +12 -0
  48. package/dist/src/translations/Translation.js +12 -0
  49. package/dist/src/translations/Translation.js.map +1 -1
  50. package/dist/src/translations/languages/en-gb.js +12 -0
  51. package/dist/src/translations/languages/en-gb.js.map +1 -1
  52. package/dist/test.bundle.js +1 -1
  53. package/package.json +1 -1
@@ -35,12 +35,14 @@ function FloatingDatePicker(props) {
35
35
  const [isOpen, setIsOpen] = (0, react_1.useState)(false);
36
36
  const [startDate, setStartDate] = (0, react_1.useState)(null);
37
37
  const thisElement = (0, react_1.useRef)(null);
38
- const selectedDateChanged = (endDate) => {
38
+ const selectedDateChanged = (endDate, selectionState) => {
39
39
  DataLayer_1.default.instance.sendInteraction('Check Out Date', DataLayer_1.InteractionType.CALENDAR, DataLayer_1.InteractionStep.ROOMS);
40
40
  if (props.selectedDateChanged && startDate) {
41
41
  props.selectedDateChanged(startDate, endDate);
42
42
  }
43
- setIsOpen(false);
43
+ if (endDate) {
44
+ setIsOpen(!!(selectionState === null || selectionState === void 0 ? void 0 : selectionState.validationMinNightStay) || !!(selectionState === null || selectionState === void 0 ? void 0 : selectionState.validationMaxNightStay)); //Close popup after selecting end date
45
+ }
44
46
  };
45
47
  const onStartDateChangedHandler = (date) => {
46
48
  DataLayer_1.default.instance.sendInteraction('Check In Date', DataLayer_1.InteractionType.CALENDAR, DataLayer_1.InteractionStep.ROOMS);
@@ -53,7 +55,7 @@ function FloatingDatePicker(props) {
53
55
  setIsOpen(true);
54
56
  };
55
57
  const inner = (react_1.default.createElement("div", { className: "d-flex align-items-center flex-column" },
56
- react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: props.startDate, showMultipleMonths: false, supportsMultiSelecting: true, onStartDateChanged: onStartDateChangedHandler, onEndDateChanged: selectedDateChanged, showMinNightStay: true, supportsWeek: false })));
58
+ react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: props.startDate, showMultipleMonths: false, supportsMultiSelecting: true, onStartDateChanged: onStartDateChangedHandler, onEndDateChanged: selectedDateChanged, showMinNightStay: true, supportsWeek: false, selectedStartDate: props.startDate, selectedEndDate: props.endDate })));
57
59
  return (react_1.default.createElement(react_1.default.Fragment, null,
58
60
  react_1.default.createElement("div", { ref: thisElement, className: props.className, onClick: onOverlayOpen }, props.children),
59
61
  react_1.default.createElement(Overlay_1.Overlay, { open: isOpen, onClose: onOverlayClose, container: (_b = (_a = thisElement.current) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement, followElement: thisElement.current, className: "floating-roomstay-calendar", isAboveNav: props.isAboveNav }, inner)));
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAgD;AAEhD,sFAA8D;AAC9D,kEAA+D;AAC/D,8DAA+E;AAa/E,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,EAAE;QACjD,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAEtG,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5C,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACV,uCAAK,SAAS,EAAC,uCAAuC;QAClD,8BAAC,oBAAU,IACP,eAAe,EAAE,KAAK,CAAC,SAAS,EAChC,kBAAkB,EAAE,KAAK,EACzB,sBAAsB,QACtB,kBAAkB,EAAE,yBAAyB,EAC7C,gBAAgB,EAAE,mBAAmB,EACrC,gBAAgB,QAChB,YAAY,EAAE,KAAK,GACrB,CACA,CACT,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,IACpE,KAAK,CAAC,QAAQ,CACb;QACN,8BAAC,iBAAO,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,0CAAE,aAAa,EAC5D,aAAa,EAAE,WAAW,CAAC,OAAO,EAClC,SAAS,EAAC,4BAA4B,EACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAE3B,KAAK,CACA,CACX,CACN,CAAC;AACN,CAAC;AA7DD,qCA6DC","sourcesContent":["import dayjs from 'dayjs';\nimport React, { useRef, useState } from 'react';\n\nimport DatePicker from '@/components/generic/date/DatePicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport interface FloatingDatePickerProps {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n isAboveNav?: boolean;\n}\n\nexport default function FloatingDatePicker(props: FloatingDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement>(null);\n\n const selectedDateChanged = (endDate: dayjs.Dayjs) => {\n DataLayer.instance.sendInteraction('Check Out Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n\n if (props.selectedDateChanged && startDate) {\n props.selectedDateChanged(startDate, endDate);\n }\n\n setIsOpen(false);\n };\n\n const onStartDateChangedHandler = (date: any) => {\n DataLayer.instance.sendInteraction('Check In Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DatePicker\n showMonthOnLoad={props.startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showMinNightStay\n supportsWeek={false}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={props.className} onClick={onOverlayOpen}>\n {props.children}\n </div>\n <Overlay\n open={isOpen}\n onClose={onOverlayClose}\n container={thisElement.current?.parentElement?.parentElement}\n followElement={thisElement.current}\n className=\"floating-roomstay-calendar\"\n isAboveNav={props.isAboveNav}\n >\n {inner}\n </Overlay>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAgD;AAEhD,sFAA8D;AAC9D,kEAA+D;AAC/D,8DAA+E;AAa/E,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,cAAiG,EAAE,EAAE;QACpJ,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAEtG,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,IAAI,OAAO,EAAE;YACT,SAAS,CAAC,CAAC,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,CAAA,IAAI,CAAC,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,CAAA,CAAC,CAAC,CAAC,sCAAsC;SAC1I;IACL,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5C,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACV,uCAAK,SAAS,EAAC,uCAAuC;QAClD,8BAAC,oBAAU,IACP,eAAe,EAAE,KAAK,CAAC,SAAS,EAChC,kBAAkB,EAAE,KAAK,EACzB,sBAAsB,QACtB,kBAAkB,EAAE,yBAAyB,EAC7C,gBAAgB,EAAE,mBAAmB,EACrC,gBAAgB,QAChB,YAAY,EAAE,KAAK,EACnB,iBAAiB,EAAE,KAAK,CAAC,SAAS,EAClC,eAAe,EAAE,KAAK,CAAC,OAAO,GAChC,CACA,CACT,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,IACpE,KAAK,CAAC,QAAQ,CACb;QACN,8BAAC,iBAAO,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,0CAAE,aAAa,EAC5D,aAAa,EAAE,WAAW,CAAC,OAAO,EAClC,SAAS,EAAC,4BAA4B,EACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAE3B,KAAK,CACA,CACX,CACN,CAAC;AACN,CAAC;AAjED,qCAiEC","sourcesContent":["import dayjs from 'dayjs';\nimport React, { useRef, useState } from 'react';\n\nimport DatePicker from '@/components/generic/date/DatePicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport interface FloatingDatePickerProps {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n isAboveNav?: boolean;\n}\n\nexport default function FloatingDatePicker(props: FloatingDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement>(null);\n\n const selectedDateChanged = (endDate: dayjs.Dayjs, selectionState?: { validationMinNightStay: number | null; validationMaxNightStay: number | null }) => {\n DataLayer.instance.sendInteraction('Check Out Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n\n if (props.selectedDateChanged && startDate) {\n props.selectedDateChanged(startDate, endDate);\n }\n\n if (endDate) {\n setIsOpen(!!selectionState?.validationMinNightStay || !!selectionState?.validationMaxNightStay); //Close popup after selecting end date\n }\n };\n\n const onStartDateChangedHandler = (date: any) => {\n DataLayer.instance.sendInteraction('Check In Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DatePicker\n showMonthOnLoad={props.startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showMinNightStay\n supportsWeek={false}\n selectedStartDate={props.startDate}\n selectedEndDate={props.endDate}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={props.className} onClick={onOverlayOpen}>\n {props.children}\n </div>\n <Overlay\n open={isOpen}\n onClose={onOverlayClose}\n container={thisElement.current?.parentElement?.parentElement}\n followElement={thisElement.current}\n className=\"floating-roomstay-calendar\"\n isAboveNav={props.isAboveNav}\n >\n {inner}\n </Overlay>\n </>\n );\n}\n"]}
@@ -32,12 +32,14 @@ const Color_1 = require("../../util/Color");
32
32
  function DaysSelectedInformer() {
33
33
  const dpContext = (0, react_1.useContext)(contexts_1.DatePickerContext);
34
34
  const { t } = (0, react_i18next_1.useTranslation)();
35
- const { startDate, endDate, hoveredMonth: hoveredDate } = dpContext;
35
+ const { startDate, endDate, hoveredMonth: hoveredDate, nightStayRequirements } = dpContext;
36
36
  let daysPicked = 0;
37
37
  const correctEndDate = hoveredDate !== null && hoveredDate !== void 0 ? hoveredDate : endDate;
38
38
  if (startDate && correctEndDate) {
39
39
  daysPicked = correctEndDate.diff(dpContext.startDate, 'day');
40
40
  }
41
+ if (nightStayRequirements.length)
42
+ return react_1.default.createElement(react_1.default.Fragment, null);
41
43
  return (react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Success, type: Text_1.TextType.Small }, daysPicked > 0 ? (react_1.default.createElement(react_1.default.Fragment, null,
42
44
  t(Translation_1.Translation.Step.Room.RoomInfo.Selected),
43
45
  " ",
@@ -1 +1 @@
1
- {"version":3,"file":"DaysSelectedInformer.js","sourceRoot":"/","sources":["src/components/steps/DaysSelectedInformer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuD;AACvD,+CAA0C;AAC1C,iDAA+C;AAE/C,kEAA2D;AAC3D,4DAAyD;AACzD,wCAAqC;AAErC,SAAwB,oBAAoB;IACxC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,4BAAiB,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IAEpE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,cAAc,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC;IAE9C,IAAI,SAAS,IAAI,cAAc,EAAE;QAC7B,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,OAAO,CACH,8BAAC,cAAI,IAAC,IAAI,QAAC,KAAK,EAAE,aAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IAChD,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CACd;QACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;QAAG,UAAU;;QAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;cAAI,SAAS,aAAT,SAAS;QAAT,SAAS,CAAE,MAAM,CAAC,OAAO,CAAC;;QAAG,GAAG;QAC5I,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;aAAG,cAAc,aAAd,cAAc;QAAd,cAAc,CAAE,MAAM,CAAC,OAAO,CAAC,CACxE,CACN,CAAC,CAAC,CAAC,CACA,8DAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAI,CACxD,CACE,CACV,CAAC;AACN,CAAC;AAzBD,uCAyBC","sourcesContent":["import { DatePickerContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nexport default function DaysSelectedInformer() {\n const dpContext = useContext(DatePickerContext);\n const { t } = useTranslation();\n\n const { startDate, endDate, hoveredMonth: hoveredDate } = dpContext;\n\n let daysPicked = 0;\n const correctEndDate = hoveredDate ?? endDate;\n\n if (startDate && correctEndDate) {\n daysPicked = correctEndDate.diff(dpContext.startDate, 'day');\n }\n\n return (\n <Text bold color={Color.Success} type={TextType.Small}>\n {daysPicked > 0 ? (\n <>\n {t(Translation.Step.Room.RoomInfo.Selected)} {daysPicked} {t(Translation.Misc.Night_plural).toLowerCase()}, {startDate?.format('D MMM')},{' '}\n {t(Translation.Misc.To).toLowerCase()} {correctEndDate?.format('D MMM')}\n </>\n ) : (\n <>{t(Translation.Step.Date.PleaseSelectYourDates)}</>\n )}\n </Text>\n );\n}\n"]}
1
+ {"version":3,"file":"DaysSelectedInformer.js","sourceRoot":"/","sources":["src/components/steps/DaysSelectedInformer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuD;AACvD,+CAA0C;AAC1C,iDAA+C;AAE/C,kEAA2D;AAC3D,4DAAyD;AACzD,wCAAqC;AAErC,SAAwB,oBAAoB;IACxC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,4BAAiB,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAE3F,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,cAAc,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC;IAE9C,IAAI,SAAS,IAAI,cAAc,EAAE;QAC7B,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,IAAI,qBAAqB,CAAC,MAAM;QAAE,OAAO,6DAAK,CAAC;IAE/C,OAAO,CACH,8BAAC,cAAI,IAAC,IAAI,QAAC,KAAK,EAAE,aAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IAChD,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CACd;QACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;QAAG,UAAU;;QAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;cAAI,SAAS,aAAT,SAAS;QAAT,SAAS,CAAE,MAAM,CAAC,OAAO,CAAC;;QAAG,GAAG;QAC5I,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;aAAG,cAAc,aAAd,cAAc;QAAd,cAAc,CAAE,MAAM,CAAC,OAAO,CAAC,CACxE,CACN,CAAC,CAAC,CAAC,CACA,8DAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAI,CACxD,CACE,CACV,CAAC;AACN,CAAC;AA3BD,uCA2BC","sourcesContent":["import { DatePickerContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nexport default function DaysSelectedInformer() {\n const dpContext = useContext(DatePickerContext);\n const { t } = useTranslation();\n\n const { startDate, endDate, hoveredMonth: hoveredDate, nightStayRequirements } = dpContext;\n\n let daysPicked = 0;\n const correctEndDate = hoveredDate ?? endDate;\n\n if (startDate && correctEndDate) {\n daysPicked = correctEndDate.diff(dpContext.startDate, 'day');\n }\n\n if (nightStayRequirements.length) return <></>;\n\n return (\n <Text bold color={Color.Success} type={TextType.Small}>\n {daysPicked > 0 ? (\n <>\n {t(Translation.Step.Room.RoomInfo.Selected)} {daysPicked} {t(Translation.Misc.Night_plural).toLowerCase()}, {startDate?.format('D MMM')},{' '}\n {t(Translation.Misc.To).toLowerCase()} {correctEndDate?.format('D MMM')}\n </>\n ) : (\n <>{t(Translation.Step.Date.PleaseSelectYourDates)}</>\n )}\n </Text>\n );\n}\n"]}
@@ -37,11 +37,15 @@ const BookingAPI_1 = __importDefault(require("../../api/BookingAPI"));
37
37
  const Icon_1 = require("../generic/Icon/Icon");
38
38
  const SmallSpinner_1 = __importDefault(require("../generic/loader/SmallSpinner"));
39
39
  const Pill_1 = __importStar(require("../generic/Pill"));
40
+ const Text_1 = __importStar(require("../generic/Text"));
40
41
  const useExternalMember_1 = require("../../hooks/useExternalMember");
42
+ const Color_1 = require("../../util/Color");
41
43
  function MinimumNightStayPill() {
42
44
  var _a;
43
45
  const { hotel } = (0, hooks_1.useCurrentHotel)();
44
46
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
47
+ const dpContext = (0, react_1.useContext)(contexts_1.DatePickerContext);
48
+ const { nightStayRequirements } = dpContext;
45
49
  const { t } = (0, react_i18next_1.useTranslation)();
46
50
  const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
47
51
  const [isLoading, setIsLoading] = (0, react_1.useState)(false);
@@ -83,7 +87,10 @@ function MinimumNightStayPill() {
83
87
  if (!hotel) {
84
88
  return null;
85
89
  }
86
- return (react_1.default.createElement("div", { className: "u-mh-30" }, isLoading ? (react_1.default.createElement(SmallSpinner_1.default, null)) : minNights !== -1 ? (react_1.default.createElement(Pill_1.default, { type: Pill_1.PillType.Primary, icon: Icon_1.IconType.Info }, t(Translation_1.Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights }))) : (react_1.default.createElement(react_1.default.Fragment, null))));
90
+ if (nightStayRequirements.length) {
91
+ return (react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Alert, type: Text_1.TextType.Small }, nightStayRequirements.join(' ')));
92
+ }
93
+ return (react_1.default.createElement("div", null, isLoading ? (react_1.default.createElement(SmallSpinner_1.default, null)) : minNights !== -1 ? (react_1.default.createElement(Pill_1.default, { type: Pill_1.PillType.Primary, icon: Icon_1.IconType.Info }, t(Translation_1.Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights }))) : (react_1.default.createElement(react_1.default.Fragment, null))));
87
94
  }
88
95
  exports.default = MinimumNightStayPill;
89
96
  //# sourceMappingURL=MinimumNightStayPill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MinimumNightStayPill.js","sourceRoot":"/","sources":["src/components/steps/MinimumNightStayPill.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { captureException } from '@sentry/browser';\nimport { NoHotelSelectedError } from 'errors/NoHotelSelectedError';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { useExternalMember } from '@/hooks/useExternalMember';\n\nexport default function MinimumNightStayPill() {\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const { t } = useTranslation();\n const { memberNumber } = useExternalMember();\n\n const [isLoading, setIsLoading] = useState(false);\n const [minNights, setMinNights] = useState(-1);\n\n const [loadIndex, setLoadIndex] = useState(0);\n\n const selectedBasketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[0];\n\n const startDate = selectedBasketRow?.getStartDate();\n const endDate = selectedBasketRow?.getEndDate();\n\n useEffect(() => {\n if (!hotel) {\n return;\n }\n\n let cancelled = false;\n setLoadIndex((oldLoadIndex) => oldLoadIndex + 1);\n\n if (endDate?.isValid()) {\n setIsLoading(true);\n\n API.Availability.fetchMinNightStayData(selectedBasketRow, hotel.hotelID, memberNumber)\n .then((response) => {\n if (!cancelled) {\n setIsLoading(false);\n if (response.Status === 'MinStay' && endDate?.diff(startDate, 'day') < response.Quantity) {\n setMinNights(response.Quantity);\n } else {\n setMinNights(-1);\n }\n }\n })\n .catch((ex) => {\n if (!(ex instanceof NoHotelSelectedError)) {\n captureException(ex);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [selectedBasketRow, startDate, endDate, memberNumber]);\n\n if (!hotel) {\n return null;\n }\n\n return (\n <div className=\"u-mh-30\">\n {isLoading ? (\n <SmallSpinner />\n ) : minNights !== -1 ? (\n <Pill type={PillType.Primary} icon={IconType.Info}>\n {t(Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights })}\n </Pill>\n ) : (\n <></>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"MinimumNightStayPill.js","sourceRoot":"/","sources":["src/components/steps/MinimumNightStayPill.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { captureException } from '@sentry/browser';\nimport { NoHotelSelectedError } from 'errors/NoHotelSelectedError';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Color } from '@/util/Color';\n\nexport default function MinimumNightStayPill() {\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const dpContext = useContext(DatePickerContext);\n const { nightStayRequirements } = dpContext;\n const { t } = useTranslation();\n const { memberNumber } = useExternalMember();\n\n const [isLoading, setIsLoading] = useState(false);\n const [minNights, setMinNights] = useState(-1);\n\n const [loadIndex, setLoadIndex] = useState(0);\n\n const selectedBasketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[0];\n\n const startDate = selectedBasketRow?.getStartDate();\n const endDate = selectedBasketRow?.getEndDate();\n\n useEffect(() => {\n if (!hotel) {\n return;\n }\n\n let cancelled = false;\n setLoadIndex((oldLoadIndex) => oldLoadIndex + 1);\n\n if (endDate?.isValid()) {\n setIsLoading(true);\n\n API.Availability.fetchMinNightStayData(selectedBasketRow, hotel.hotelID, memberNumber)\n .then((response) => {\n if (!cancelled) {\n setIsLoading(false);\n if (response.Status === 'MinStay' && endDate?.diff(startDate, 'day') < response.Quantity) {\n setMinNights(response.Quantity);\n } else {\n setMinNights(-1);\n }\n }\n })\n .catch((ex) => {\n if (!(ex instanceof NoHotelSelectedError)) {\n captureException(ex);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [selectedBasketRow, startDate, endDate, memberNumber]);\n\n if (!hotel) {\n return null;\n }\n\n if (nightStayRequirements.length) {\n return (\n <Text bold color={Color.Alert} type={TextType.Small}>\n {nightStayRequirements.join(' ')}\n </Text>\n );\n }\n\n return (\n <div>\n {isLoading ? (\n <SmallSpinner />\n ) : minNights !== -1 ? (\n <Pill type={PillType.Primary} icon={IconType.Info}>\n {t(Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights })}\n </Pill>\n ) : (\n <></>\n )}\n </div>\n );\n}\n"]}
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  const contexts_1 = require("../../../contexts/index.js");
39
+ const hooks_1 = require("../../../hooks/index.js");
39
40
  const react_1 = __importStar(require("react"));
40
41
  const react_i18next_1 = require("react-i18next");
41
42
  const Translation_1 = require("translations/Translation");
@@ -44,6 +45,14 @@ const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
44
45
  function StepOneNextStepButton() {
45
46
  const { t } = (0, react_i18next_1.useTranslation)();
46
47
  const context = (0, react_1.useContext)(contexts_1.BasketContext);
48
+ const { getLastValidDay } = (0, hooks_1.useCalendarNightStay)({ basketContext: context });
49
+ const [nightStayValidation, setNightStayValidation] = (0, react_1.useState)({
50
+ init: false,
51
+ arrivalMinNightStay: null,
52
+ arrivalMaxNightStay: null,
53
+ validationMinNightStay: null,
54
+ validationMaxNightStay: null,
55
+ });
47
56
  let label = '';
48
57
  if (!context.startDate) {
49
58
  label = Translation_1.Translation.Step.Date.SelectStartDate;
@@ -68,7 +77,12 @@ function StepOneNextStepButton() {
68
77
  }
69
78
  return true;
70
79
  });
71
- return react_1.default.createElement(NextStepButton_1.default, { text: t(label), disabled: !context.endDate, hideIcon: !context.endDate, onClick: buttonOnClickHandler });
80
+ (0, react_1.useEffect)(() => {
81
+ getLastValidDay(context.startDate, context.endDate).then((result) => {
82
+ setNightStayValidation(result === null || result === void 0 ? void 0 : result.nightStayValidation);
83
+ });
84
+ }, [context.startDate, context.endDate]);
85
+ return (react_1.default.createElement(NextStepButton_1.default, { text: t(label), disabled: !context.endDate || !!nightStayValidation.validationMinNightStay || !!nightStayValidation.validationMaxNightStay, hideIcon: !context.endDate, onClick: buttonOnClickHandler }));
72
86
  }
73
87
  exports.default = StepOneNextStepButton;
74
88
  //# sourceMappingURL=StepOneNextStepButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StepOneNextStepButton.js","sourceRoot":"/","sources":["src/components/steps/date/StepOneNextStepButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAA0C;AAC1C,iDAA+C;AAC/C,0DAAuD;AAEvD,iGAAyE;AACzE,8DAA+E;AAE/E,SAAwB,qBAAqB;IACzC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAE1C,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACpB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;KACjD;SAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACzB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;KACpD;SAAM;QACH,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;KACnD;IAED,MAAM,oBAAoB,GAAG,GAAS,EAAE;;QACpC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAExG,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,YAAY,EAAE,EAAE;YAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAExF,IAAI,gBAAgB,CAAC,MAAM,EAAE;gBACzB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC7B,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC3D,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;aACN;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA,CAAC;IAEF,OAAO,8BAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAI,CAAC;AACrI,CAAC;AAjCD,wCAiCC","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport NextStepButton from '@/components/generic/buttons/NextStepButton';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function StepOneNextStepButton() {\n const { t } = useTranslation();\n\n const context = useContext(BasketContext);\n\n let label = '';\n\n if (!context.startDate) {\n label = Translation.Step.Date.SelectStartDate;\n } else if (!context.endDate) {\n label = Translation.Step.Date.SelectCheckoutDate;\n } else {\n label = Translation.Step.Date.CheckAvailability;\n }\n\n const buttonOnClickHandler = async () => {\n DataLayer.instance.sendInteraction('Check Availability', InteractionType.BUTTON, InteractionStep.DATES);\n\n if (context.selectedBasketRow?.getPromoCode()) {\n const rowsWithoutPromo = context.currentBasketRows.filter((row) => !row.getPromoCode());\n\n if (rowsWithoutPromo.length) {\n rowsWithoutPromo.forEach((row) => {\n row.setPromoCode(context.selectedBasketRow.getPromoCode());\n context.updateBasketRow(row);\n });\n }\n }\n\n return true;\n };\n\n return <NextStepButton text={t(label)} disabled={!context.endDate} hideIcon={!context.endDate} onClick={buttonOnClickHandler} />;\n}\n"]}
1
+ {"version":3,"file":"StepOneNextStepButton.js","sourceRoot":"/","sources":["src/components/steps/date/StepOneNextStepButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,2CAA6E;AAC7E,+CAA+D;AAC/D,iDAA+C;AAC/C,0DAAuD;AAEvD,iGAAyE;AACzE,8DAA+E;AAE/E,SAAwB,qBAAqB;IACzC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAC1C,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,4BAAoB,EAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAuB;QACjF,IAAI,EAAE,KAAK;QACX,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,IAAI;QACzB,sBAAsB,EAAE,IAAI;QAC5B,sBAAsB,EAAE,IAAI;KAC/B,CAAC,CAAC;IACH,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACpB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;KACjD;SAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACzB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;KACpD;SAAM;QACH,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;KACnD;IAED,MAAM,oBAAoB,GAAG,GAAS,EAAE;;QACpC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAExG,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,YAAY,EAAE,EAAE;YAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAExF,IAAI,gBAAgB,CAAC,MAAM,EAAE;gBACzB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC7B,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC3D,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;aACN;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChE,sBAAsB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzC,OAAO,CACH,8BAAC,wBAAc,IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EACd,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,IAAI,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,EAC1H,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAC1B,OAAO,EAAE,oBAAoB,GAC/B,CACL,CAAC;AACN,CAAC;AArDD,wCAqDC","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { INightStayValidation, useCalendarNightStay } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport NextStepButton from '@/components/generic/buttons/NextStepButton';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function StepOneNextStepButton() {\n const { t } = useTranslation();\n\n const context = useContext(BasketContext);\n const { getLastValidDay } = useCalendarNightStay({ basketContext: context });\n const [nightStayValidation, setNightStayValidation] = useState<INightStayValidation>({\n init: false,\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n validationMinNightStay: null,\n validationMaxNightStay: null,\n });\n let label = '';\n\n if (!context.startDate) {\n label = Translation.Step.Date.SelectStartDate;\n } else if (!context.endDate) {\n label = Translation.Step.Date.SelectCheckoutDate;\n } else {\n label = Translation.Step.Date.CheckAvailability;\n }\n\n const buttonOnClickHandler = async () => {\n DataLayer.instance.sendInteraction('Check Availability', InteractionType.BUTTON, InteractionStep.DATES);\n\n if (context.selectedBasketRow?.getPromoCode()) {\n const rowsWithoutPromo = context.currentBasketRows.filter((row) => !row.getPromoCode());\n\n if (rowsWithoutPromo.length) {\n rowsWithoutPromo.forEach((row) => {\n row.setPromoCode(context.selectedBasketRow.getPromoCode());\n context.updateBasketRow(row);\n });\n }\n }\n\n return true;\n };\n\n useEffect(() => {\n getLastValidDay(context.startDate, context.endDate).then((result) => {\n setNightStayValidation(result?.nightStayValidation);\n });\n }, [context.startDate, context.endDate]);\n\n return (\n <NextStepButton\n text={t(label)}\n disabled={!context.endDate || !!nightStayValidation.validationMinNightStay || !!nightStayValidation.validationMaxNightStay}\n hideIcon={!context.endDate}\n onClick={buttonOnClickHandler}\n />\n );\n}\n"]}
@@ -48,12 +48,12 @@ const Text_1 = __importDefault(require("../../../generic/Text"));
48
48
  const TextBox_1 = __importDefault(require("../../../generic/TextBox"));
49
49
  const contexts_1 = require("../../../../contexts");
50
50
  const hooks_1 = require("../../../../hooks");
51
+ const useExternalMember_1 = require("../../../../hooks/useExternalMember");
52
+ const HotelDTO_1 = require("../../../../models/Api/HotelDTO");
51
53
  const RoomstayThemeEngine_1 = __importDefault(require("../../../../providers/RoomstayThemeEngine"));
52
54
  const Translation_1 = require("../../../../translations/Translation");
53
55
  const Color_1 = require("../../../../util/Color");
54
56
  const Big4MemberModal_module_scss_1 = __importDefault(require("./Big4MemberModal.module.scss"));
55
- const useExternalMember_1 = require("../../../../hooks/useExternalMember");
56
- const HotelDTO_1 = require("../../../../models/Api/HotelDTO");
57
57
  const ExternalMemberModal = ({ isOpen, onClose }) => {
58
58
  const { hotel } = (0, hooks_1.useCurrentHotel)();
59
59
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useContext, useState } from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './Big4MemberModal.module.scss';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { EIntegration } from '@/models/Api/HotelDTO';\n\ninterface Big4MemberModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ninterface Big4MemberFormValues {\n memberNumber: string;\n familyName: string;\n}\n\nconst ExternalMemberModal: FC<Big4MemberModalProps> = ({ isOpen, onClose }) => {\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const { externalMemberType } = useExternalMember();\n\n const {\n register,\n formState: { errors },\n handleSubmit,\n } = useForm<Big4MemberFormValues>({\n mode: 'onChange',\n });\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n const getValidationClass = (name: keyof Big4MemberFormValues) => {\n if (errors) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n const onSubmit: SubmitHandler<Big4MemberFormValues> = async ({ familyName, memberNumber }) => {\n setIsLoading(true);\n setErrorMessage('');\n try {\n const number = await API.Member.signInBig4Member(memberNumber, familyName, hotel?.hotelID as string);\n localStorage.setItem('hotel' + hotel?.hotelID + 'isFromBig4', number.memberId);\n ccx.signUserIn(number.memberId.toString(), true);\n } catch (e: any) {\n if (e.Message) {\n setErrorMessage(e.Message);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const { t } = useTranslation();\n\n const { title, image } = (() => {\n switch (externalMemberType) {\n default:\n case EIntegration.Big4:\n return { title: t(Translation.ExternalMemberPopup.Big4Title), image: 'big4-login.svg' };\n case EIntegration.Top10:\n return { title: t(Translation.ExternalMemberPopup.Top10Title), image: 'top10-login.jpeg' };\n }\n })();\n\n return (\n <SimpleModal open={isOpen} onClose={onClose} size={SimpleModalSize.Normal} alignCenter bodyClassName={styles.root}>\n <div className={styles.container}>\n <div className={styles.logoSection}>\n <img className={styles.img} src={RoomstayThemeEngine.getImageAssetUrl(image)} alt={`${externalMemberType} Logo`} />\n </div>\n <div>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Headline bold color={modalPrimaryColor}>\n {title}\n </Headline>\n <div className=\"u-marg-top\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Star}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.MemberNumber)}\n required\n validationStatus={getValidationClass('memberNumber')}\n {...register('memberNumber', {\n required: true,\n pattern: {\n value: /^[0-9]*$/,\n message: 'Please enter a valid member number',\n },\n })}\n />\n </InputGroup>\n <div className=\"u-marg-top--light\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Person}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.FamilyName)}\n required\n validationStatus={getValidationClass('familyName')}\n {...register('familyName', {\n required: true,\n })}\n />\n </InputGroup>\n </div>\n </div>\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
1
+ {"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useContext, useState } from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { EIntegration } from '@/models/Api/HotelDTO';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './Big4MemberModal.module.scss';\n\ninterface Big4MemberModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ninterface Big4MemberFormValues {\n memberNumber: string;\n familyName: string;\n}\n\nconst ExternalMemberModal: FC<Big4MemberModalProps> = ({ isOpen, onClose }) => {\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const { externalMemberType } = useExternalMember();\n\n const {\n register,\n formState: { errors },\n handleSubmit,\n } = useForm<Big4MemberFormValues>({\n mode: 'onChange',\n });\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n const getValidationClass = (name: keyof Big4MemberFormValues) => {\n if (errors) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n const onSubmit: SubmitHandler<Big4MemberFormValues> = async ({ familyName, memberNumber }) => {\n setIsLoading(true);\n setErrorMessage('');\n try {\n const number = await API.Member.signInBig4Member(memberNumber, familyName, hotel?.hotelID as string);\n localStorage.setItem('hotel' + hotel?.hotelID + 'isFromBig4', number.memberId);\n ccx.signUserIn(number.memberId.toString(), true);\n } catch (e: any) {\n if (e.Message) {\n setErrorMessage(e.Message);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const { t } = useTranslation();\n\n const { title, image } = (() => {\n switch (externalMemberType) {\n default:\n case EIntegration.Big4:\n return { title: t(Translation.ExternalMemberPopup.Big4Title), image: 'big4-login.svg' };\n case EIntegration.Top10:\n return { title: t(Translation.ExternalMemberPopup.Top10Title), image: 'top10-login.jpeg' };\n }\n })();\n\n return (\n <SimpleModal open={isOpen} onClose={onClose} size={SimpleModalSize.Normal} alignCenter bodyClassName={styles.root}>\n <div className={styles.container}>\n <div className={styles.logoSection}>\n <img className={styles.img} src={RoomstayThemeEngine.getImageAssetUrl(image)} alt={`${externalMemberType} Logo`} />\n </div>\n <div>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Headline bold color={modalPrimaryColor}>\n {title}\n </Headline>\n <div className=\"u-marg-top\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Star}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.MemberNumber)}\n required\n validationStatus={getValidationClass('memberNumber')}\n {...register('memberNumber', {\n required: true,\n pattern: {\n value: /^[0-9]*$/,\n message: 'Please enter a valid member number',\n },\n })}\n />\n </InputGroup>\n <div className=\"u-marg-top--light\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Person}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.FamilyName)}\n required\n validationStatus={getValidationClass('familyName')}\n {...register('familyName', {\n required: true,\n })}\n />\n </InputGroup>\n </div>\n </div>\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
@@ -0,0 +1,4 @@
1
+ export declare let ROOMSTAY_FRONTEND_API_URL: string;
2
+ export declare const RoomstayGlobalConfig: {
3
+ RoomstayApiUrl: string;
4
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoomstayGlobalConfig = void 0;
4
+ exports.RoomstayGlobalConfig = {
5
+ RoomstayApiUrl: exports.ROOMSTAY_FRONTEND_API_URL,
6
+ };
7
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"/","sources":["src/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAG;IAChC,cAAc,EAAE,iCAAyB;CAC5C,CAAC","sourcesContent":["export declare let ROOMSTAY_FRONTEND_API_URL: string;\n\nexport const RoomstayGlobalConfig = {\n RoomstayApiUrl: ROOMSTAY_FRONTEND_API_URL,\n};\n"]}
@@ -295,7 +295,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
295
295
  };
296
296
  const hotel = getHotel();
297
297
  const existingUser = localStorage.getItem('hotel' + (hotel === null || hotel === void 0 ? void 0 : hotel.hotelID) + 'user');
298
- const isBig4 = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.integrations) === null || _a === void 0 ? void 0 : _a.some((provider) => provider === HotelDTO_1.EIntegration.Big4);
298
+ const isBig4 = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.integrations) === null || _a === void 0 ? void 0 : _a.some((provider) => provider === HotelDTO_1.EIntegration.Big4 || provider === HotelDTO_1.EIntegration.Top10);
299
299
  const memberNumber = isBig4 && existingUser ? existingUser : undefined;
300
300
  BookingAPI_1.default.Availability.getCheapestPricePerDay(row.getStartDate(), row.getEndDate(), row.getAdults(), row.getChildren(), row.getInfants(), row.getPromoCode(), targetHotel.hotelID, memberNumber).then((prices) => {
301
301
  let wasSet = false;
@@ -1 +1 @@
1
- {"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, CompanyContextType } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { EIntegration } from '@/models/Api/HotelDTO';\nimport BasketRow from '@/models/BasketRow';\nimport type { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from '@/models/Client/Hotel/Hotel';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport { Language } from '@/providers/LanguageProvider';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer from '@/util/DataLayer';\nimport StepManager from '@/util/StepManager';\nimport TimeHelper from '@/util/TimeHelper';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [brandSuffix, setBrandSuffix] = useState(company.brandSuffix);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = useState<IPromotion | null>(null);\n\n const [signedInUser, setSignedInUser] = useState<string | null>(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n const [isHidingPromoField, setIsHidingPromoField] = useState(false);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return { ...callback(mappingHotel) };\n }\n\n return { ...newHotel };\n }\n\n return { ...mappingHotel };\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n }\n\n return newHotelArray;\n });\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n const details = await API.Hotel.fetchData(currentLanguage, newHotel);\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.cardProcessor = details.cardProcessor;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n updatedHotel.hotelUrl = details.hotelUrl || updatedHotel.hotelUrl || '';\n updatedHotel.heroImage = details.heroImage || updatedHotel.heroImage || '';\n updatedHotel.images = details.images || [];\n\n updatedHotel.email = details.email;\n updatedHotel.roomGroups = details.roomGroups;\n updatedHotel.requireDeposit = details.requireDeposit;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as IHotelColorScheme;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n updatedHotel.childConfiguration = details.childConfiguration;\n resolve(updatedHotel);\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setBrandSuffix(company.brandSuffix);\n\n DataLayer.instance.setBrandSuffix(company.brandSuffix);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel | undefined = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n if (StepManager.getFirstStep() !== StepHotel) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n currencyHelper.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n DataLayer.instance.setProviderHotelID(selectedHotel.providerHotelID);\n DataLayer.instance.setHotelName(selectedHotel.name);\n\n if (selectedHotel.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(selectedHotel);\n }\n\n beContext.engine.getSessionProvider().setHotelID(selectedHotelID);\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n const existingUser = localStorage.getItem('hotel' + selectedHotel.hotelID + 'user');\n const userFromBig4 = localStorage.getItem('hotel' + selectedHotel.hotelID + 'isFromBig4');\n\n if (existingUser) {\n setSignedInUser(existingUser);\n\n if (userFromBig4) {\n setIsHidingPromoField(true);\n }\n }\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.setProviderHotelID('');\n DataLayer.instance.setHotelName(name);\n if (company?.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(company);\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n memberOnlyModalPromotion,\n\n name,\n companyShort,\n logo,\n logoLink,\n brandSuffix,\n\n colors,\n hotels,\n\n signedInUser: signedInUser as string,\n isSigningIn,\n isHidingPromoField,\n\n selectedHotelID: selectedHotelID as string,\n\n updateLowestPricePerNight: (hotel: string | Hotel, row: BasketRow) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel && row) {\n const resetPriceToZero = (isLoading = false) => {\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: 0, isLoading } }));\n };\n\n resetPriceToZero(true);\n\n const getHotel = () => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n };\n const hotel = getHotel();\n const existingUser = localStorage.getItem('hotel' + hotel?.hotelID + 'user');\n const isBig4 = hotel?.integrations?.some((provider) => provider === EIntegration.Big4);\n\n const memberNumber = isBig4 && existingUser ? existingUser : undefined;\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n targetHotel.hotelID,\n memberNumber\n ).then((prices) => {\n let wasSet = false;\n if (prices) {\n let lowest = 0;\n const allPrices = Object.values(prices);\n if (allPrices?.length > 0) {\n lowest = Object.values(prices).reduce((prevValue, newValue) => (prevValue > newValue ? newValue : prevValue));\n\n wasSet = true;\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: lowest, isLoading: false } }));\n }\n }\n\n if (!wasSet) {\n resetPriceToZero();\n }\n });\n }\n },\n\n changeHotel: (hotel: string | Hotel) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setIsSigningIn(false);\n\n setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (promotion?: IPromotion) => {\n setIsSigningIn(true);\n\n if (promotion) {\n setMemberOnlyModalPromotion(promotion);\n }\n },\n signUserIn: (user: string, hidePromoField = false) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion));\n\n DataLayer.instance.sendMemberSignUp();\n workingContext.closeMemberSignupModal();\n\n localStorage.setItem('hotel' + selectedHotelID + 'user', user);\n setSignedInUser(user);\n\n setIsHidingPromoField(hidePromoField);\n },\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
1
+ {"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, CompanyContextType } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { EIntegration } from '@/models/Api/HotelDTO';\nimport BasketRow from '@/models/BasketRow';\nimport type { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from '@/models/Client/Hotel/Hotel';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport { Language } from '@/providers/LanguageProvider';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer from '@/util/DataLayer';\nimport StepManager from '@/util/StepManager';\nimport TimeHelper from '@/util/TimeHelper';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [brandSuffix, setBrandSuffix] = useState(company.brandSuffix);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = useState<IPromotion | null>(null);\n\n const [signedInUser, setSignedInUser] = useState<string | null>(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n const [isHidingPromoField, setIsHidingPromoField] = useState(false);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return { ...callback(mappingHotel) };\n }\n\n return { ...newHotel };\n }\n\n return { ...mappingHotel };\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n }\n\n return newHotelArray;\n });\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n const details = await API.Hotel.fetchData(currentLanguage, newHotel);\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.cardProcessor = details.cardProcessor;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n updatedHotel.hotelUrl = details.hotelUrl || updatedHotel.hotelUrl || '';\n updatedHotel.heroImage = details.heroImage || updatedHotel.heroImage || '';\n updatedHotel.images = details.images || [];\n\n updatedHotel.email = details.email;\n updatedHotel.roomGroups = details.roomGroups;\n updatedHotel.requireDeposit = details.requireDeposit;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as IHotelColorScheme;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n updatedHotel.childConfiguration = details.childConfiguration;\n resolve(updatedHotel);\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setBrandSuffix(company.brandSuffix);\n\n DataLayer.instance.setBrandSuffix(company.brandSuffix);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel | undefined = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n if (StepManager.getFirstStep() !== StepHotel) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n currencyHelper.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n DataLayer.instance.setProviderHotelID(selectedHotel.providerHotelID);\n DataLayer.instance.setHotelName(selectedHotel.name);\n\n if (selectedHotel.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(selectedHotel);\n }\n\n beContext.engine.getSessionProvider().setHotelID(selectedHotelID);\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n const existingUser = localStorage.getItem('hotel' + selectedHotel.hotelID + 'user');\n const userFromBig4 = localStorage.getItem('hotel' + selectedHotel.hotelID + 'isFromBig4');\n\n if (existingUser) {\n setSignedInUser(existingUser);\n\n if (userFromBig4) {\n setIsHidingPromoField(true);\n }\n }\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.setProviderHotelID('');\n DataLayer.instance.setHotelName(name);\n if (company?.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(company);\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n memberOnlyModalPromotion,\n\n name,\n companyShort,\n logo,\n logoLink,\n brandSuffix,\n\n colors,\n hotels,\n\n signedInUser: signedInUser as string,\n isSigningIn,\n isHidingPromoField,\n\n selectedHotelID: selectedHotelID as string,\n\n updateLowestPricePerNight: (hotel: string | Hotel, row: BasketRow) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel && row) {\n const resetPriceToZero = (isLoading = false) => {\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: 0, isLoading } }));\n };\n\n resetPriceToZero(true);\n\n const getHotel = () => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n };\n const hotel = getHotel();\n const existingUser = localStorage.getItem('hotel' + hotel?.hotelID + 'user');\n const isBig4 = hotel?.integrations?.some((provider) => provider === EIntegration.Big4 || provider === EIntegration.Top10);\n\n const memberNumber = isBig4 && existingUser ? existingUser : undefined;\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n targetHotel.hotelID,\n memberNumber\n ).then((prices) => {\n let wasSet = false;\n if (prices) {\n let lowest = 0;\n const allPrices = Object.values(prices);\n if (allPrices?.length > 0) {\n lowest = Object.values(prices).reduce((prevValue, newValue) => (prevValue > newValue ? newValue : prevValue));\n\n wasSet = true;\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: lowest, isLoading: false } }));\n }\n }\n\n if (!wasSet) {\n resetPriceToZero();\n }\n });\n }\n },\n\n changeHotel: (hotel: string | Hotel) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setIsSigningIn(false);\n\n setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (promotion?: IPromotion) => {\n setIsSigningIn(true);\n\n if (promotion) {\n setMemberOnlyModalPromotion(promotion);\n }\n },\n signUserIn: (user: string, hidePromoField = false) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion));\n\n DataLayer.instance.sendMemberSignUp();\n workingContext.closeMemberSignupModal();\n\n localStorage.setItem('hotel' + selectedHotelID + 'user', user);\n setSignedInUser(user);\n\n setIsHidingPromoField(hidePromoField);\n },\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
@@ -1,3 +1,4 @@
1
+ import { IArrivalNightStay, INightStayValidation } from '../hooks/index.js';
1
2
  import { Dayjs } from 'dayjs';
2
3
  import React from 'react';
3
4
  export interface IDatePickerContext {
@@ -11,5 +12,8 @@ export interface IDatePickerContext {
11
12
  onHoverOver: (date: Dayjs) => void;
12
13
  onDayClicked: (date: Dayjs) => void;
13
14
  setMaxPrice: (price: number) => void;
15
+ arrivalNightStay: IArrivalNightStay;
16
+ nightStayValidation: INightStayValidation;
17
+ nightStayRequirements: string[];
14
18
  }
15
19
  export declare const DatePickerContext: React.Context<IDatePickerContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerContext.js","sourceRoot":"/","sources":["src/contexts/DatePickerContext.tsx"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAeb,QAAA,iBAAiB,GAAG,eAAK,CAAC,aAAa,CAAqB,EAAwB,CAAC,CAAC","sourcesContent":["import { Dayjs } from 'dayjs';\nimport React from 'react';\n\nexport interface IDatePickerContext {\n todayInUnix: number;\n today: Dayjs | null;\n startDate: Dayjs | null;\n endDate: Dayjs | null;\n hoveredMonth: Dayjs | null;\n currentMonth: Dayjs | null;\n maxPrice: number;\n onHoverOver: (date: Dayjs) => void;\n onDayClicked: (date: Dayjs) => void;\n setMaxPrice: (price: number) => void;\n}\n\nexport const DatePickerContext = React.createContext<IDatePickerContext>({} as IDatePickerContext);\n"]}
1
+ {"version":3,"file":"DatePickerContext.js","sourceRoot":"/","sources":["src/contexts/DatePickerContext.tsx"],"names":[],"mappings":";;;;;;AAEA,kDAA0B;AAkBb,QAAA,iBAAiB,GAAG,eAAK,CAAC,aAAa,CAAqB,EAAwB,CAAC,CAAC","sourcesContent":["import { IArrivalNightStay, INightStayValidation } from '@frontend/hooks';\nimport { Dayjs } from 'dayjs';\nimport React from 'react';\n\nexport interface IDatePickerContext {\n todayInUnix: number;\n today: Dayjs | null;\n startDate: Dayjs | null;\n endDate: Dayjs | null;\n hoveredMonth: Dayjs | null;\n currentMonth: Dayjs | null;\n maxPrice: number;\n onHoverOver: (date: Dayjs) => void;\n onDayClicked: (date: Dayjs) => void;\n setMaxPrice: (price: number) => void;\n arrivalNightStay: IArrivalNightStay;\n nightStayValidation: INightStayValidation;\n nightStayRequirements: string[];\n}\n\nexport const DatePickerContext = React.createContext<IDatePickerContext>({} as IDatePickerContext);\n"]}
@@ -4,3 +4,4 @@ export * from './ElementSortHook';
4
4
  export * from './EventHook';
5
5
  export * from './LoggedInUserHook';
6
6
  export * from './ScrollFocusHook';
7
+ export * from './useCalendarNightStay';
@@ -20,4 +20,5 @@ __exportStar(require("./ElementSortHook"), exports);
20
20
  __exportStar(require("./EventHook"), exports);
21
21
  __exportStar(require("./LoggedInUserHook"), exports);
22
22
  __exportStar(require("./ScrollFocusHook"), exports);
23
+ __exportStar(require("./useCalendarNightStay"), exports);
23
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,2DAAyC;AACzC,0DAAwC;AACxC,oDAAkC;AAClC,2DAAyC;AACzC,0DAAwC","sourcesContent":["export * from '@/hooks/BodyClickHook';\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/ElementSortHook';\nexport * from '@/hooks/EventHook';\nexport * from '@/hooks/LoggedInUserHook';\nexport * from '@/hooks/ScrollFocusHook';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,2DAAyC;AACzC,0DAAwC;AACxC,oDAAkC;AAClC,2DAAyC;AACzC,0DAAwC;AACxC,+DAA6C","sourcesContent":["export * from '@/hooks/BodyClickHook';\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/ElementSortHook';\nexport * from '@/hooks/EventHook';\nexport * from '@/hooks/LoggedInUserHook';\nexport * from '@/hooks/ScrollFocusHook';\nexport * from '@/hooks/useCalendarNightStay';\n"]}
@@ -0,0 +1,39 @@
1
+ import { BasketContextType } from '../contexts/index.js';
2
+ import { Dayjs } from 'dayjs';
3
+ interface UseCalendarNightStayProps {
4
+ basketContext: BasketContextType;
5
+ }
6
+ export interface INightStayValidation {
7
+ init: boolean;
8
+ arrivalMinNightStay: number | null;
9
+ arrivalMaxNightStay: number | null;
10
+ validationMinNightStay: number | null;
11
+ validationMaxNightStay: number | null;
12
+ }
13
+ export interface IArrivalNightStay {
14
+ arrivalMinNightStay: number | null;
15
+ arrivalMaxNightStay: number | null;
16
+ }
17
+ export interface IAvailableNightStay {
18
+ minDate: Dayjs | null;
19
+ maxDate: Dayjs | null;
20
+ available: boolean;
21
+ }
22
+ export declare const useCalendarNightStay: ({ basketContext, }: UseCalendarNightStayProps) => {
23
+ getLastValidDay: (fromDate: Dayjs, toDate: Dayjs) => Promise<{
24
+ lastValidDay: Dayjs;
25
+ nightStayValidation: INightStayValidation;
26
+ isValidNightStay: boolean;
27
+ }>;
28
+ getArrivalNightStay: (fromDate: Dayjs) => Promise<IArrivalNightStay>;
29
+ checkAvailableNightStay: ({ arrivalNightStay, startDate, dateToCheck }: {
30
+ arrivalNightStay: IArrivalNightStay;
31
+ startDate: Dayjs | null;
32
+ dateToCheck: Dayjs | null;
33
+ }) => {
34
+ minDate: Dayjs | null;
35
+ maxDate: Dayjs | null;
36
+ available: boolean;
37
+ };
38
+ };
39
+ export {};