@roomstay/frontend 2.6.57 → 2.6.59

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 (130) hide show
  1. package/dist/493.bundle.js +1 -1
  2. package/dist/537.bundle.js +1 -0
  3. package/dist/903.bundle.js +1 -1
  4. package/dist/main.bundle.js +1 -1
  5. package/dist/src/api/AvailabilityAPI.js +8 -6
  6. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  7. package/dist/src/components/generic/BookNowPayLaterInfoBlock.js +1 -1
  8. package/dist/src/components/generic/BookNowPayLaterInfoBlock.js.map +1 -1
  9. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +9 -1
  10. package/dist/src/components/generic/BookingWizard/BookingWizard.js +86 -1
  11. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  12. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.d.ts +14 -1
  13. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +27 -0
  14. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
  15. package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +19 -0
  16. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +116 -30
  17. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
  18. package/dist/src/components/generic/BookingWizard/BookingWizardContext.d.ts +12 -1
  19. package/dist/src/components/generic/BookingWizard/BookingWizardContext.js.map +1 -1
  20. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.d.ts +6 -2
  21. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js +96 -29
  22. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js.map +1 -1
  23. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.d.ts +18 -3
  24. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js +118 -27
  25. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js.map +1 -1
  26. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js +53 -18
  27. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js.map +1 -1
  28. package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js +5 -2
  29. package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js.map +1 -1
  30. package/dist/src/components/generic/DateRangePicker/DateRangePicker.d.ts +6 -0
  31. package/dist/src/components/generic/DateRangePicker/DateRangePicker.js +8 -7
  32. package/dist/src/components/generic/DateRangePicker/DateRangePicker.js.map +1 -1
  33. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.d.ts +2 -0
  34. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js +11 -2
  35. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js.map +1 -1
  36. package/dist/src/components/generic/Event/EventCard.js +6 -2
  37. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  38. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js +19 -4
  39. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js.map +1 -1
  40. package/dist/src/components/generic/RadioButtonGroup/RadioButton.d.ts +1 -0
  41. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js +2 -2
  42. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js.map +1 -1
  43. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.d.ts +3 -2
  44. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +10 -10
  45. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  46. package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
  47. package/dist/src/components/generic/date/DatePicker.js +7 -3
  48. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  49. package/dist/src/components/generic/date/DatePickerDay.js +13 -3
  50. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  51. package/dist/src/components/reservation/ReservationItem.js +5 -2
  52. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  53. package/dist/src/components/reservation/ReservationList.js +1 -1
  54. package/dist/src/components/reservation/ReservationList.js.map +1 -1
  55. package/dist/src/components/steps/confirmation/PaymentInformation.js +4 -1
  56. package/dist/src/components/steps/confirmation/PaymentInformation.js.map +1 -1
  57. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +7 -1
  58. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
  59. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +7 -4
  60. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  61. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js +3 -1
  62. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js.map +1 -1
  63. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +1 -1
  64. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  65. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -0
  66. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  67. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +9 -7
  68. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  69. package/dist/src/contexts/DatePickerContext.d.ts +1 -0
  70. package/dist/src/contexts/DatePickerContext.js.map +1 -1
  71. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +3 -0
  72. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
  73. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +3 -3
  74. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
  75. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +9 -2
  76. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  77. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +10 -10
  78. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  79. package/dist/src/handlers/payment/PaymentHandler.d.ts +1 -0
  80. package/dist/src/handlers/payment/PaymentHandler.js.map +1 -1
  81. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js +13 -35
  82. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js.map +1 -1
  83. package/dist/src/index.d.ts +1 -0
  84. package/dist/src/index.js +5 -2
  85. package/dist/src/index.js.map +1 -1
  86. package/dist/src/models/Api/HotelDTO.d.ts +1 -1
  87. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  88. package/dist/src/models/BasketRow.d.ts +3 -6
  89. package/dist/src/models/BasketRow.js +11 -15
  90. package/dist/src/models/BasketRow.js.map +1 -1
  91. package/dist/src/models/BookingWizard/BookingWizardProperty.d.ts +4 -0
  92. package/dist/src/models/BookingWizard/BookingWizardProperty.js.map +1 -1
  93. package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -0
  94. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  95. package/dist/src/models/Confirmation.d.ts +1 -2
  96. package/dist/src/models/Confirmation.js.map +1 -1
  97. package/dist/src/models/Room/Room.d.ts +7 -0
  98. package/dist/src/models/Room/Room.js +13 -0
  99. package/dist/src/models/Room/Room.js.map +1 -1
  100. package/dist/src/models/Room/RoomRate.js +3 -0
  101. package/dist/src/models/Room/RoomRate.js.map +1 -1
  102. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  103. package/dist/src/pages/findReservation/FindReservationResults.js +12 -8
  104. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  105. package/dist/src/providers/RoomstayThemeEngine.d.ts +1 -1
  106. package/dist/src/providers/RoomstayThemeEngine.js +20 -5
  107. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  108. package/dist/src/stories/RadioButtonGroup.stories.d.ts +1 -1
  109. package/dist/src/translations/Translation.d.ts +7 -1
  110. package/dist/src/translations/Translation.js +7 -1
  111. package/dist/src/translations/Translation.js.map +1 -1
  112. package/dist/src/translations/languages/en-gb.js +7 -1
  113. package/dist/src/translations/languages/en-gb.js.map +1 -1
  114. package/dist/src/util/Analytics/GoogleAnalytics4.js +27 -12
  115. package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
  116. package/dist/src/util/Analytics/UniversalAnalytics.js +3 -3
  117. package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
  118. package/dist/src/util/DataLayer.d.ts +5 -1
  119. package/dist/src/util/DataLayer.js +9 -2
  120. package/dist/src/util/DataLayer.js.map +1 -1
  121. package/dist/src/util/EventsHelper.d.ts +4 -1
  122. package/dist/src/util/EventsHelper.js +15 -4
  123. package/dist/src/util/EventsHelper.js.map +1 -1
  124. package/dist/test.bundle.js +1 -1
  125. package/dist/tests/offline/entry/config/hotelSpecDefault.js +1 -1
  126. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  127. package/dist/vendors.bundle.js +1 -1
  128. package/package.json +2 -2
  129. package/dist/586.bundle.js +0 -1
  130. package/dist/850.bundle.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDateRangePicker.js","sourceRoot":"/","sources":["src/components/generic/DateRangePicker/FloatingDateRangePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport * as dayjs from 'dayjs';\nimport React, { useRef, useState } from 'react';\n\nimport DateRangePicker, { DatePickerProps } from '@/components/generic/DateRangePicker/DateRangePicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nimport { EBookingWizardTheme } from '../BookingWizard/BookingWizard';\nimport styles from './DateRangePicker.module.scss';\n\nexport interface FloatingDateRangePickerProps extends Omit<DatePickerProps, 'selectedStartDate' | 'selectedEndDate' | 'onStartDateChanged' | 'onEndDateChanged'> {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs | null;\n endDate?: dayjs.Dayjs | null;\n overlayOffset?: [number, number];\n fixedStartDate?: boolean;\n container?: HTMLElement;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n\n overlay?: {\n placement?: Placement;\n fallbackPlacements?: Placement;\n };\n}\n\nexport interface FloatingDateRangePickerHandle {\n closePicker: () => void;\n openPicker: () => void;\n toggle: () => void;\n}\n\nconst FloatingDateRangePicker = React.forwardRef<FloatingDateRangePickerHandle, FloatingDateRangePickerProps>((props, ref) => {\n const {\n children,\n startDate: startDateProp,\n endDate: endDateProp,\n selectedDateChanged: selectedDateChangedProp,\n className,\n overlay,\n showYearOnCalendar,\n yearDisplayOption,\n ...DatePickerProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n closePicker: onOverlayClose,\n openPicker: onOverlayOpen,\n toggle: () => setIsOpen(!isOpen),\n }),\n []\n );\n\n const selectedDateChanged = (endDate: dayjs.Dayjs) => {\n if (selectedDateChangedProp && startDate) {\n selectedDateChangedProp(startDate, endDate);\n }\n\n if (endDate) {\n setIsOpen(false);\n }\n };\n\n const onStartDateChangedHandler = (date: any) => {\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 <DateRangePicker\n selectedStartDate={startDateProp}\n selectedEndDate={endDateProp}\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n {...DatePickerProps}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={className} onClick={onOverlayOpen}>\n {children}\n </div>\n <Overlay\n offset={props.overlayOffset}\n open={isOpen}\n onClose={onOverlayClose}\n container={props.container || thisElement.current?.parentElement?.parentElement}\n followElement={props.container || thisElement.current}\n {...(overlay || {})}\n className={classNames(styles['floating-roomstay-calendar'], {\n [styles['--small']]: DatePickerProps.small,\n [styles['--specific']]: props.theme === EBookingWizardTheme.Specific,\n [styles['--single']]: !DatePickerProps.showMultipleMonths,\n })}\n >\n {inner}\n </Overlay>\n </>\n );\n});\n\nFloatingDateRangePicker.displayName = 'FloatingDateRangePicker';\n\nexport default FloatingDateRangePicker;\n"]}
1
+ {"version":3,"file":"FloatingDateRangePicker.js","sourceRoot":"/","sources":["src/components/generic/DateRangePicker/FloatingDateRangePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport * as dayjs from 'dayjs';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport DateRangePicker, { DatePickerProps } from '@/components/generic/DateRangePicker/DateRangePicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nimport { EBookingWizardTheme } from '../BookingWizard/BookingWizard';\nimport styles from './DateRangePicker.module.scss';\n\nexport interface FloatingDateRangePickerProps extends Omit<DatePickerProps, 'selectedStartDate' | 'selectedEndDate' | 'onStartDateChanged' | 'onEndDateChanged'> {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs | null;\n endDate?: dayjs.Dayjs | null;\n overlayOffset?: [number, number];\n fixedStartDate?: boolean;\n container?: HTMLElement;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n\n overlay?: {\n placement?: Placement;\n fallbackPlacements?: Placement;\n };\n notes?: React.ReactNode;\n onOverlayOpenChange?: (isOpen: boolean) => void;\n}\n\nexport interface FloatingDateRangePickerHandle {\n closePicker: () => void;\n openPicker: () => void;\n toggle: () => void;\n}\n\nconst FloatingDateRangePicker = React.forwardRef<FloatingDateRangePickerHandle, FloatingDateRangePickerProps>((props, ref) => {\n const {\n children,\n notes,\n startDate: startDateProp,\n endDate: endDateProp,\n selectedDateChanged: selectedDateChangedProp,\n className,\n overlay,\n showYearOnCalendar,\n yearDisplayOption,\n onOverlayOpenChange,\n ...DatePickerProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n React.useImperativeHandle(\n ref,\n () => ({\n closePicker: onOverlayClose,\n openPicker: onOverlayOpen,\n toggle: () => setIsOpen(!isOpen),\n }),\n []\n );\n\n const selectedDateChanged = (endDate: dayjs.Dayjs) => {\n if (selectedDateChangedProp && startDate) {\n selectedDateChangedProp(startDate, endDate);\n }\n\n if (endDate) {\n setIsOpen(false);\n }\n };\n\n const onStartDateChangedHandler = (date: any) => {\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n useEffect(() => {\n onOverlayOpenChange?.(isOpen);\n return () => {\n onOverlayOpenChange?.(false);\n };\n }, [isOpen]);\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DateRangePicker\n selectedStartDate={startDateProp}\n selectedEndDate={endDateProp}\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n {...DatePickerProps}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={className} onClick={onOverlayOpen}>\n {children}\n </div>\n <Overlay\n offset={props.overlayOffset}\n open={isOpen}\n onClose={onOverlayClose}\n container={props.container || thisElement.current?.parentElement?.parentElement}\n followElement={props.container || thisElement.current}\n {...(overlay || {})}\n className={classNames(styles['floating-roomstay-calendar'], {\n [styles['--small']]: DatePickerProps.small,\n [styles['--specific']]: props.theme === EBookingWizardTheme.Specific,\n [styles['--images']]: props.theme === EBookingWizardTheme.Images,\n [styles['--single']]: !DatePickerProps.showMultipleMonths,\n })}\n >\n {inner}\n {notes}\n </Overlay>\n </>\n );\n});\n\nFloatingDateRangePicker.displayName = 'FloatingDateRangePicker';\n\nexport default FloatingDateRangePicker;\n"]}
@@ -39,7 +39,11 @@ const EventCard_module_scss_1 = __importDefault(require("./EventCard.module.scss
39
39
  const EventCard = ({ event, ratio }) => {
40
40
  var _a, _b, _c, _d, _e, _f;
41
41
  const [collapsed, setCollapsed] = (0, react_1.useState)(true);
42
- const toggleCollapse = () => setCollapsed(!collapsed);
42
+ const toggleCollapse = (_event) => {
43
+ setCollapsed(!collapsed);
44
+ _event.preventDefault();
45
+ _event.stopPropagation();
46
+ };
43
47
  const displayEventTime = () => {
44
48
  const startDate = event.startDate ? (0, dayjs_1.default)(event.startDate) : undefined;
45
49
  const endDate = event.endDate ? (0, dayjs_1.default)(event.endDate) : undefined;
@@ -75,7 +79,7 @@ const EventCard = ({ event, ratio }) => {
75
79
  react_1.default.createElement("div", { className: "u-pad-top--light" },
76
80
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Accent }, [(_d = event === null || event === void 0 ? void 0 : event.address) === null || _d === void 0 ? void 0 : _d.line1, (_e = event === null || event === void 0 ? void 0 : event.address) === null || _e === void 0 ? void 0 : _e.line2, (_f = event === null || event === void 0 ? void 0 : event.address) === null || _f === void 0 ? void 0 : _f.city].filter((item) => !!item).join(', ')),
77
81
  react_1.default.createElement(Text_1.default, { className: "u-text-overflow-ellipsis-3", color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small }, event.summary)),
78
- event.url && (react_1.default.createElement("a", { href: event.url, target: "_blank", rel: "noreferrer" },
82
+ event.url && (react_1.default.createElement("a", { href: event.url, target: "_blank", rel: "noreferrer", className: (0, classnames_1.default)(EventCard_module_scss_1.default.link) },
79
83
  react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center'), type: Text_1.TextType.Label, color: Color_1.Color.Accent },
80
84
  react_1.default.createElement("div", null, "More Info"),
81
85
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight }))))))));
@@ -1 +1 @@
1
- {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const toggleCollapse = () => setCollapsed(!collapsed);\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header, 'u-cursor-pointer')} onClick={toggleCollapse}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <div className={styles.collapButton}>\n <Icon color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </div>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n {event.url && (\n <a href={event.url} target=\"_blank\" rel=\"noreferrer\">\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n {/*TODO translation*/}\n <div>More Info</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </a>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
1
+ {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const toggleCollapse = (_event: any) => {\n setCollapsed(!collapsed);\n _event.preventDefault();\n _event.stopPropagation();\n };\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header, 'u-cursor-pointer')} onClick={toggleCollapse}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <div className={styles.collapButton}>\n <Icon color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </div>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n\n {event.url && (\n <a href={event.url} target=\"_blank\" rel=\"noreferrer\" className={classNames(styles.link)}>\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n {/*TODO translation*/}\n <div>More Info</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </a>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
@@ -54,6 +54,7 @@ const Fade_1 = __importDefault(require("../../../animations/Fade"));
54
54
  const BEButton_1 = __importDefault(require("../BEButton"));
55
55
  const PaymentCardInput_module_scss_1 = __importDefault(require("./PaymentCardInput.module.scss"));
56
56
  const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {
57
+ var _a, _b;
57
58
  const { user, fullName } = (0, LoggedInUserHook_1.useMember)();
58
59
  const { t } = (0, react_i18next_1.useTranslation)();
59
60
  const [errors, setErrors] = (0, react_1.useState)({});
@@ -63,6 +64,15 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
63
64
  const [isMarkingAsDefault, setIsMarkingAsDefault] = (0, react_1.useState)(false);
64
65
  const isCardDefault = (user === null || user === void 0 ? void 0 : user.defaultCard) === (card === null || card === void 0 ? void 0 : card.cardId);
65
66
  const inputsDisabled = !!(card === null || card === void 0 ? void 0 : card.cardId);
67
+ const formatExpiry = (expiry) => {
68
+ if (!/^\d{4}$/.test(expiry)) {
69
+ return '••/••';
70
+ }
71
+ const month = expiry.slice(0, 2);
72
+ const year = expiry.slice(2);
73
+ return `${month}/${year}`;
74
+ };
75
+ const last4Digits = (_a = card === null || card === void 0 ? void 0 : card.cardNumber) === null || _a === void 0 ? void 0 : _a.substring(((_b = card === null || card === void 0 ? void 0 : card.cardNumber) === null || _b === void 0 ? void 0 : _b.length) - 4);
66
76
  const css = {
67
77
  fontSize: '13px',
68
78
  lineHeight: '18px',
@@ -83,7 +93,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
83
93
  successColor: '#4F8A10',
84
94
  errorColor: '#D8000C',
85
95
  showCardIcon: false,
86
- placeholder: '5913 2207 9578 4291',
96
+ placeholder: inputsDisabled ? `•••• •••• •••• ${last4Digits}` : '5913 2207 9578 4291',
87
97
  disabled: inputsDisabled,
88
98
  },
89
99
  },
@@ -91,7 +101,12 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
91
101
  name: 'card-name',
92
102
  label: t(Translation_1.Translation.Step.Confirmation.Inputs.NameOnCard),
93
103
  type: 'text',
94
- vgsProps: { validations: ['required'], css, disabled: inputsDisabled, placeholder: fullName },
104
+ vgsProps: {
105
+ validations: ['required'],
106
+ css,
107
+ disabled: inputsDisabled,
108
+ placeholder: inputsDisabled ? '—' : fullName,
109
+ },
95
110
  },
96
111
  {
97
112
  name: 'expiration-date',
@@ -101,7 +116,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
101
116
  validations: ['required', 'validCardExpirationDate'],
102
117
  css,
103
118
  disabled: inputsDisabled,
104
- placeholder: '12/27',
119
+ placeholder: inputsDisabled ? formatExpiry(card.expiry) : '12/27',
105
120
  },
106
121
  },
107
122
  {
@@ -112,7 +127,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
112
127
  validations: ['required', 'validCardSecurityCode'],
113
128
  css,
114
129
  disabled: inputsDisabled,
115
- placeholder: '552',
130
+ placeholder: inputsDisabled ? '•••' : '552',
116
131
  },
117
132
  },
118
133
  ], 'members');
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentCardInput.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/PaymentCardInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport { CardTypeSelect } from '@/components/generic/PaymentCard/CardTypeSelect';\nimport { PaymentCard as GenericPaymentCard } from '@/components/generic/PaymentCard/PaymentCard';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { useVgsCollect } from '@/hooks/VGSHooks';\nimport { ECardType } from '@/models/PaymentCard';\nimport { Translation } from '@/translations/Translation';\nimport { getAuth } from '@/util/AsyncAuth';\nimport { Color } from '@/util/Color';\n\nimport FadeAnimation from '../../../animations/Fade';\nimport BEButton from '../BEButton';\nimport styles from './PaymentCardInput.module.scss';\n\nexport interface PaymentCardInputProps {\n card: IRoomstayMemberCards;\n onSubmit?: (card: IRoomstayMemberCards) => Promise<IRoomstayMemberCards>;\n onDeleteClicked: (card: IRoomstayMemberCards) => Promise<void>;\n onMarkedAsDefaultClicked: (card: IRoomstayMemberCards) => Promise<void>;\n}\n\nexport const PaymentCardInput: FC<PaymentCardInputProps> = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {\n const { user, fullName } = useMember();\n const { t } = useTranslation();\n\n const [errors, setErrors] = useState<{ [x: string]: string }>({});\n const [cardType, setCardType] = useState<ECardType | null>(null);\n\n const [isSavingVGSDetails, setIsSavingVGSDetails] = useState(false);\n const [isDeletingCard, setIsDeletingCard] = useState(false);\n const [isMarkingAsDefault, setIsMarkingAsDefault] = useState(false);\n\n const isCardDefault = user?.defaultCard === card?.cardId;\n\n const inputsDisabled = !!card?.cardId;\n\n const css = {\n fontSize: '13px',\n lineHeight: '18px',\n '&::placeholder': {\n color: '#8B8F9A',\n opacity: 1,\n },\n };\n\n const {\n fields: [cardNumber, cardHolder, expiryDate, securityCode],\n triggerFieldUpdate,\n vgsForm,\n } = useVgsCollect(\n [\n {\n name: 'credit-card',\n label: t(Translation.Step.Confirmation.Inputs.CardNumber),\n type: 'card-number',\n vgsProps: {\n validations: ['required', 'validCardNumber'],\n css,\n autoComplete: ['cc-number'],\n successColor: '#4F8A10',\n errorColor: '#D8000C',\n showCardIcon: false,\n placeholder: '5913 2207 9578 4291',\n disabled: inputsDisabled,\n },\n },\n {\n name: 'card-name',\n label: t(Translation.Step.Confirmation.Inputs.NameOnCard),\n type: 'text',\n vgsProps: { validations: ['required'], css, disabled: inputsDisabled, placeholder: fullName },\n },\n {\n name: 'expiration-date',\n label: t(Translation.Step.Confirmation.Inputs.CardExpiry),\n type: 'card-expiration-date',\n vgsProps: {\n validations: ['required', 'validCardExpirationDate'],\n css,\n disabled: inputsDisabled,\n placeholder: '12/27',\n },\n },\n {\n name: 'security-code',\n label: t(Translation.Step.Confirmation.Inputs.SecurityCode),\n type: 'card-security-code',\n vgsProps: {\n validations: ['required', 'validCardSecurityCode'],\n css,\n disabled: inputsDisabled,\n placeholder: '552',\n },\n },\n ],\n 'members'\n );\n\n useEffect(() => {\n triggerFieldUpdate();\n }, [card]);\n\n useEffect(() => {\n if (cardNumber?.state.cardType) {\n setCardType(cardNumber.state.cardType);\n }\n }, [cardNumber]);\n\n const inputNames = ['credit-card', 'card-name', 'expiration-date', 'security-code'];\n const setErrorsOnFaults = (faults: any) => {\n const newErrors: { [x: string]: string } = {};\n\n Object.keys(faults).forEach((input) => {\n let name = '';\n\n switch (input) {\n case 'credit-card':\n name = t(Translation.Step.Confirmation.Inputs.CardNumber);\n break;\n case 'expiration-date':\n name = t(Translation.Step.Confirmation.Inputs.CardExpiry);\n break;\n case 'security-code':\n name = t(Translation.Step.Confirmation.Inputs.SecurityCode);\n break;\n default:\n name = t(Translation.Step.Confirmation.Inputs.NameOnCard);\n break;\n }\n\n newErrors[input] = name + ' ' + faults[input].errorMessages[faults[input].errorMessages.length - 1];\n });\n\n setErrors(newErrors);\n };\n\n const onChangeSubmit = async (): Promise<void> => {\n const Auth = await getAuth();\n if (vgsForm) {\n setIsSavingVGSDetails(true);\n Auth.currentAuthenticatedUser().then((cognitoData: any) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n vgsForm.submit(\n '/members/vgs-hide',\n {\n serializer: 'deep',\n methods: 'POST',\n headers: {\n Authorization: jwtToken,\n },\n },\n async (status: any, cardData: any) => {\n const expMatch = cardData['expiration-date'].match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n if (!expMatch || expMatch[1].length > 2 || (expMatch[2].length !== 4 && expMatch[2].length !== 2)) {\n setErrorsOnFaults({\n 'expiration-date': {\n errorMessages: [t(Translation.Step.Confirmation.InputErrors.CardExpiry.Invalid)],\n },\n });\n return;\n }\n\n const expiration = (expMatch[1].length === 1 ? '0' : '') + expMatch[1] + (expMatch[2].length === 2 ? expMatch[2] : expMatch[2].substr(2));\n const newCard: IRoomstayMemberCards = {\n username: card.username,\n cardId: card.cardId as string,\n securityCode: cardData['security-code'],\n expiry: expiration,\n name: cardData['card-name'],\n\n cardNumber: cardData['credit-card'],\n type: cardType as ECardType,\n };\n\n const newAddedCard = await onSubmit?.(newCard);\n onMarkAsDefault(newAddedCard as IRoomstayMemberCards);\n vgsForm.reset();\n setIsSavingVGSDetails(false);\n },\n (error: any) => {\n setErrorsOnFaults(error);\n setIsSavingVGSDetails(false);\n }\n );\n });\n } else {\n console.error('VGS not on element, problem has occurred');\n }\n };\n\n const onDeleteCardClicked = () => {\n setIsDeletingCard(true);\n\n onDeleteClicked?.(card as IRoomstayMemberCards).finally(() => {\n setIsDeletingCard(false);\n });\n };\n\n const onMarkAsDefault = (newCard: IRoomstayMemberCards) => {\n setIsMarkingAsDefault(true);\n\n onMarkedAsDefaultClicked?.(newCard as IRoomstayMemberCards).finally(() => {\n setIsMarkingAsDefault(false);\n });\n };\n\n const onMarkAsDefaultClicked = () => {\n onMarkAsDefault(card);\n };\n\n return (\n <>\n <div className={styles['card-inputs']}>\n <div className=\"u-marg-bottom--medium u-marg-top--heavy@l-\">\n <CardTypeSelect value={cardType || undefined} />\n </div>\n <div className=\"u-margin-bottom\">\n {inputNames.map((name) => {\n const errorMessage = errors[name];\n return (\n <AutoAutoHeight open={!!errorMessage} key={name}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardNumber)}\n </Text>\n </div>\n <div className={cardNumber.getClasses()} ref={cardNumber.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n <InputGroup dimensions=\"2/2\">\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardExpiry)}\n </Text>\n </div>\n <div className={expiryDate.getClasses()} ref={expiryDate.ref} />\n </>\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.SecurityCode)}\n </Text>\n </div>\n <div className={securityCode.getClasses()} ref={securityCode.ref} />\n </>\n </InputGroup>\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.NameOnCard)}\n </Text>\n </div>\n <div className={cardHolder.getClasses()} ref={cardHolder.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n {card?.cardId ? (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isDeletingCard}\n textColor={Color.Danger}\n isText\n icon={IconType.Delete}\n onClick={onDeleteCardClicked}\n stopIconAnimation\n >\n {t(Translation.UserPortal.PaymentInformationScreen.DeleteCard)}\n </BEButton>\n ) : (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isSavingVGSDetails}\n rounded\n primary\n filled\n mobileWidth\n onClick={onChangeSubmit}\n >\n {t(Translation.UserPortal.PaymentInformationScreen.SaveCard)}\n </BEButton>\n )}\n </div>\n </div>\n <FadeAnimation open={!!card?.cardId}>\n <div className={styles['card-large']}>\n <GenericPaymentCard card={card} />\n <div className=\"u-marg-top u-marg-top--heavy@l-\">\n <BEButton onClick={onMarkAsDefaultClicked} isLoading={isMarkingAsDefault} disabled={isCardDefault} filled primary size=\"small\">\n Mark as Default\n </BEButton>\n </div>\n </div>\n </FadeAnimation>\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"PaymentCardInput.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/PaymentCardInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport { CardTypeSelect } from '@/components/generic/PaymentCard/CardTypeSelect';\nimport { PaymentCard as GenericPaymentCard } from '@/components/generic/PaymentCard/PaymentCard';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { useVgsCollect } from '@/hooks/VGSHooks';\nimport { ECardType } from '@/models/PaymentCard';\nimport { Translation } from '@/translations/Translation';\nimport { getAuth } from '@/util/AsyncAuth';\nimport { Color } from '@/util/Color';\n\nimport FadeAnimation from '../../../animations/Fade';\nimport BEButton from '../BEButton';\nimport styles from './PaymentCardInput.module.scss';\n\nexport interface PaymentCardInputProps {\n card: IRoomstayMemberCards;\n onSubmit?: (card: IRoomstayMemberCards) => Promise<IRoomstayMemberCards>;\n onDeleteClicked: (card: IRoomstayMemberCards) => Promise<void>;\n onMarkedAsDefaultClicked: (card: IRoomstayMemberCards) => Promise<void>;\n}\n\nexport const PaymentCardInput: FC<PaymentCardInputProps> = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {\n const { user, fullName } = useMember();\n const { t } = useTranslation();\n\n const [errors, setErrors] = useState<{ [x: string]: string }>({});\n const [cardType, setCardType] = useState<ECardType | null>(null);\n\n const [isSavingVGSDetails, setIsSavingVGSDetails] = useState(false);\n const [isDeletingCard, setIsDeletingCard] = useState(false);\n const [isMarkingAsDefault, setIsMarkingAsDefault] = useState(false);\n\n const isCardDefault = user?.defaultCard === card?.cardId;\n\n const inputsDisabled = !!card?.cardId;\n\n const formatExpiry = (expiry: string) => {\n if (!/^\\d{4}$/.test(expiry)) {\n return '••/••';\n }\n const month = expiry.slice(0, 2);\n const year = expiry.slice(2);\n return `${month}/${year}`;\n };\n\n const last4Digits = card?.cardNumber?.substring(card?.cardNumber?.length - 4);\n\n const css = {\n fontSize: '13px',\n lineHeight: '18px',\n '&::placeholder': {\n color: '#8B8F9A',\n opacity: 1,\n },\n };\n\n const {\n fields: [cardNumber, cardHolder, expiryDate, securityCode],\n triggerFieldUpdate,\n vgsForm,\n } = useVgsCollect(\n [\n {\n name: 'credit-card',\n label: t(Translation.Step.Confirmation.Inputs.CardNumber),\n type: 'card-number',\n vgsProps: {\n validations: ['required', 'validCardNumber'],\n css,\n autoComplete: ['cc-number'],\n successColor: '#4F8A10',\n errorColor: '#D8000C',\n showCardIcon: false,\n placeholder: inputsDisabled ? `•••• •••• •••• ${last4Digits}` : '5913 2207 9578 4291',\n disabled: inputsDisabled,\n },\n },\n {\n name: 'card-name',\n label: t(Translation.Step.Confirmation.Inputs.NameOnCard),\n type: 'text',\n vgsProps: {\n validations: ['required'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? '—' : fullName,\n },\n },\n {\n name: 'expiration-date',\n label: t(Translation.Step.Confirmation.Inputs.CardExpiry),\n type: 'card-expiration-date',\n vgsProps: {\n validations: ['required', 'validCardExpirationDate'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? formatExpiry(card.expiry) : '12/27',\n },\n },\n {\n name: 'security-code',\n label: t(Translation.Step.Confirmation.Inputs.SecurityCode),\n type: 'card-security-code',\n vgsProps: {\n validations: ['required', 'validCardSecurityCode'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? '•••' : '552',\n },\n },\n ],\n 'members'\n );\n\n useEffect(() => {\n triggerFieldUpdate();\n }, [card]);\n\n useEffect(() => {\n if (cardNumber?.state.cardType) {\n setCardType(cardNumber.state.cardType);\n }\n }, [cardNumber]);\n\n const inputNames = ['credit-card', 'card-name', 'expiration-date', 'security-code'];\n const setErrorsOnFaults = (faults: any) => {\n const newErrors: { [x: string]: string } = {};\n\n Object.keys(faults).forEach((input) => {\n let name = '';\n\n switch (input) {\n case 'credit-card':\n name = t(Translation.Step.Confirmation.Inputs.CardNumber);\n break;\n case 'expiration-date':\n name = t(Translation.Step.Confirmation.Inputs.CardExpiry);\n break;\n case 'security-code':\n name = t(Translation.Step.Confirmation.Inputs.SecurityCode);\n break;\n default:\n name = t(Translation.Step.Confirmation.Inputs.NameOnCard);\n break;\n }\n\n newErrors[input] = name + ' ' + faults[input].errorMessages[faults[input].errorMessages.length - 1];\n });\n\n setErrors(newErrors);\n };\n\n const onChangeSubmit = async (): Promise<void> => {\n const Auth = await getAuth();\n if (vgsForm) {\n setIsSavingVGSDetails(true);\n Auth.currentAuthenticatedUser().then((cognitoData: any) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n vgsForm.submit(\n '/members/vgs-hide',\n {\n serializer: 'deep',\n methods: 'POST',\n headers: {\n Authorization: jwtToken,\n },\n },\n async (status: any, cardData: any) => {\n const expMatch = cardData['expiration-date'].match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n if (!expMatch || expMatch[1].length > 2 || (expMatch[2].length !== 4 && expMatch[2].length !== 2)) {\n setErrorsOnFaults({\n 'expiration-date': {\n errorMessages: [t(Translation.Step.Confirmation.InputErrors.CardExpiry.Invalid)],\n },\n });\n return;\n }\n\n const expiration = (expMatch[1].length === 1 ? '0' : '') + expMatch[1] + (expMatch[2].length === 2 ? expMatch[2] : expMatch[2].substr(2));\n const newCard: IRoomstayMemberCards = {\n username: card.username,\n cardId: card.cardId as string,\n securityCode: cardData['security-code'],\n expiry: expiration,\n name: cardData['card-name'],\n\n cardNumber: cardData['credit-card'],\n type: cardType as ECardType,\n };\n\n const newAddedCard = await onSubmit?.(newCard);\n onMarkAsDefault(newAddedCard as IRoomstayMemberCards);\n vgsForm.reset();\n setIsSavingVGSDetails(false);\n },\n (error: any) => {\n setErrorsOnFaults(error);\n setIsSavingVGSDetails(false);\n }\n );\n });\n } else {\n console.error('VGS not on element, problem has occurred');\n }\n };\n\n const onDeleteCardClicked = () => {\n setIsDeletingCard(true);\n\n onDeleteClicked?.(card as IRoomstayMemberCards).finally(() => {\n setIsDeletingCard(false);\n });\n };\n\n const onMarkAsDefault = (newCard: IRoomstayMemberCards) => {\n setIsMarkingAsDefault(true);\n\n onMarkedAsDefaultClicked?.(newCard as IRoomstayMemberCards).finally(() => {\n setIsMarkingAsDefault(false);\n });\n };\n\n const onMarkAsDefaultClicked = () => {\n onMarkAsDefault(card);\n };\n\n return (\n <>\n <div className={styles['card-inputs']}>\n <div className=\"u-marg-bottom--medium u-marg-top--heavy@l-\">\n <CardTypeSelect value={cardType || undefined} />\n </div>\n <div className=\"u-margin-bottom\">\n {inputNames.map((name) => {\n const errorMessage = errors[name];\n return (\n <AutoAutoHeight open={!!errorMessage} key={name}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardNumber)}\n </Text>\n </div>\n <div className={cardNumber.getClasses()} ref={cardNumber.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n <InputGroup dimensions=\"2/2\">\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardExpiry)}\n </Text>\n </div>\n <div className={expiryDate.getClasses()} ref={expiryDate.ref} />\n </>\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.SecurityCode)}\n </Text>\n </div>\n <div className={securityCode.getClasses()} ref={securityCode.ref} />\n </>\n </InputGroup>\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.NameOnCard)}\n </Text>\n </div>\n <div className={cardHolder.getClasses()} ref={cardHolder.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n {card?.cardId ? (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isDeletingCard}\n textColor={Color.Danger}\n isText\n icon={IconType.Delete}\n onClick={onDeleteCardClicked}\n stopIconAnimation\n >\n {t(Translation.UserPortal.PaymentInformationScreen.DeleteCard)}\n </BEButton>\n ) : (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isSavingVGSDetails}\n rounded\n primary\n filled\n mobileWidth\n onClick={onChangeSubmit}\n >\n {t(Translation.UserPortal.PaymentInformationScreen.SaveCard)}\n </BEButton>\n )}\n </div>\n </div>\n <FadeAnimation open={!!card?.cardId}>\n <div className={styles['card-large']}>\n <GenericPaymentCard card={card} />\n <div className=\"u-marg-top u-marg-top--heavy@l-\">\n <BEButton onClick={onMarkAsDefaultClicked} isLoading={isMarkingAsDefault} disabled={isCardDefault} filled primary size=\"small\">\n Mark as Default\n </BEButton>\n </div>\n </div>\n </FadeAnimation>\n </>\n );\n};\n"]}
@@ -7,6 +7,7 @@ export interface RadioButtonProps {
7
7
  renderContent?: () => ReactNode;
8
8
  className?: string;
9
9
  headerRef?: LegacyRef<HTMLDivElement>;
10
+ style?: React.CSSProperties;
10
11
  }
11
12
  declare const ForwardedRefRadioButton: React.ForwardRefExoticComponent<RadioButtonProps & React.RefAttributes<HTMLDivElement>>;
12
13
  export { ForwardedRefRadioButton as RadioButton };
@@ -31,11 +31,11 @@ const classnames_1 = __importDefault(require("classnames"));
31
31
  const react_1 = __importStar(require("react"));
32
32
  const AutoAutoHeight_1 = __importDefault(require("../../../animations/AutoAutoHeight"));
33
33
  const RadioButton_module_scss_1 = __importDefault(require("./RadioButton.module.scss"));
34
- const RadioButton = ({ checked, onChange, disabled, label, renderContent, className, headerRef }, ref) => {
34
+ const RadioButton = ({ checked, onChange, disabled, label, renderContent, className, headerRef, style }, ref) => {
35
35
  return (react_1.default.createElement("div", { className: (0, classnames_1.default)(RadioButton_module_scss_1.default.root, className, {
36
36
  [RadioButton_module_scss_1.default.disabled]: disabled,
37
37
  [RadioButton_module_scss_1.default.checked]: checked,
38
- }), onClick: onChange, ref: ref },
38
+ }), onClick: onChange, ref: ref, style: style },
39
39
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.header, ref: headerRef },
40
40
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.design }),
41
41
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.text }, label)),
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA0F;AAE1F,iFAAyD;AAEzD,wFAA+C;AAY/C,MAAM,WAAW,GAA+D,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;IACjK,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC,EACF,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,GAAG;QAER,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS;YACzC,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,uCAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACL,aAAa,IAAI,OAAO,IAAI,CACzB,8BAAC,wBAAc,IAAC,IAAI;YAChB,uCAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAC1C,CACpB,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;AAEpB,8CAAW","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, ForwardRefRenderFunction, LegacyRef, ReactNode } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\n\nimport styles from './RadioButton.module.scss';\n\nexport interface RadioButtonProps {\n checked: boolean;\n onChange: JSX.IntrinsicElements['div']['onChange'];\n label?: ReactNode;\n disabled?: boolean;\n renderContent?: () => ReactNode;\n className?: string;\n headerRef?: LegacyRef<HTMLDivElement>;\n}\n\nconst RadioButton: ForwardRefRenderFunction<HTMLDivElement, RadioButtonProps> = ({ checked, onChange, disabled, label, renderContent, className, headerRef }, ref) => {\n return (\n <div\n className={classNames(styles.root, className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n })}\n onClick={onChange}\n ref={ref}\n >\n <div className={styles.header} ref={headerRef}>\n <div className={styles.design} />\n <div className={styles.text}>{label}</div>\n </div>\n {renderContent && checked && (\n <AutoAutoHeight open>\n <div className={styles.content}>{renderContent()}</div>\n </AutoAutoHeight>\n )}\n </div>\n );\n};\n\nconst ForwardedRefRadioButton = forwardRef(RadioButton);\n\nexport { ForwardedRefRadioButton as RadioButton };\n"]}
1
+ {"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA0F;AAE1F,iFAAyD;AAEzD,wFAA+C;AAa/C,MAAM,WAAW,GAA+D,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACxK,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC,EACF,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK;QAEZ,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS;YACzC,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,uCAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACL,aAAa,IAAI,OAAO,IAAI,CACzB,8BAAC,wBAAc,IAAC,IAAI;YAChB,uCAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAC1C,CACpB,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;AAEpB,8CAAW","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, ForwardRefRenderFunction, LegacyRef, ReactNode } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\n\nimport styles from './RadioButton.module.scss';\n\nexport interface RadioButtonProps {\n checked: boolean;\n onChange: JSX.IntrinsicElements['div']['onChange'];\n label?: ReactNode;\n disabled?: boolean;\n renderContent?: () => ReactNode;\n className?: string;\n headerRef?: LegacyRef<HTMLDivElement>;\n style?: React.CSSProperties;\n}\n\nconst RadioButton: ForwardRefRenderFunction<HTMLDivElement, RadioButtonProps> = ({ checked, onChange, disabled, label, renderContent, className, headerRef, style }, ref) => {\n return (\n <div\n className={classNames(styles.root, className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n })}\n onClick={onChange}\n ref={ref}\n style={style}\n >\n <div className={styles.header} ref={headerRef}>\n <div className={styles.design} />\n <div className={styles.text}>{label}</div>\n </div>\n {renderContent && checked && (\n <AutoAutoHeight open>\n <div className={styles.content}>{renderContent()}</div>\n </AutoAutoHeight>\n )}\n </div>\n );\n};\n\nconst ForwardedRefRadioButton = forwardRef(RadioButton);\n\nexport { ForwardedRefRadioButton as RadioButton };\n"]}
@@ -11,8 +11,9 @@ export interface IRadioButtonOption<TValue extends string = string> {
11
11
  export interface IRadioButtonGroupProps<TValue extends string = string> {
12
12
  options?: IRadioButtonOption<TValue>[];
13
13
  value?: TValue;
14
- onChange?: (value: TValue) => void;
14
+ onChange?: (value: TValue, optionValue?: TValue) => void;
15
15
  renderChildrenContent?: boolean;
16
+ isSubGroup?: boolean;
16
17
  }
17
- declare const RadioButtonGroup: <TValue extends string = string>({ options, value: valueProp, onChange, renderChildrenContent, }: IRadioButtonGroupProps<TValue>) => ReactElement | null;
18
+ declare const RadioButtonGroup: <TValue extends string = string>({ options, value: valueProp, onChange, renderChildrenContent, isSubGroup, }: IRadioButtonGroupProps<TValue>) => ReactElement | null;
18
19
  export default RadioButtonGroup;
@@ -43,19 +43,19 @@ const Overlay_1 = require("../Overlay/Overlay");
43
43
  const RadioButton_1 = require("./RadioButton");
44
44
  const Tooltip_1 = __importDefault(require("../Tooltip/Tooltip"));
45
45
  const RadioButtonGroup_module_scss_1 = __importDefault(require("./RadioButtonGroup.module.scss"));
46
- const Option = ({ option: optionProp, value: valueProp, onChange, renderChildrenContent, }) => {
46
+ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildrenContent, isSubOption, }) => {
47
47
  const options = optionProp.options;
48
48
  const isGroup = !!(options === null || options === void 0 ? void 0 : options.length);
49
49
  const [ref, setRef] = (0, react_1.useState)(null);
50
50
  const [open, setOpen] = (0, react_1.useState)(false);
51
51
  const option = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;
52
- const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
52
+ const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, style: isSubOption ? undefined : { paddingRight: '35px' }, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
53
53
  if (option === null || option === void 0 ? void 0 : option.disabled)
54
54
  return;
55
55
  if (isGroup)
56
56
  setOpen(!open);
57
57
  else if ((option === null || option === void 0 ? void 0 : option.value) && (option === null || option === void 0 ? void 0 : option.value) !== valueProp)
58
- onChange === null || onChange === void 0 ? void 0 : onChange(option.value);
58
+ onChange === null || onChange === void 0 ? void 0 : onChange(option.value, optionProp.value);
59
59
  }, label: option === null || option === void 0 ? void 0 : option.label, disabled: option === null || option === void 0 ? void 0 : option.disabled, renderContent: option === null || option === void 0 ? void 0 : option.renderContent }));
60
60
  if ((option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.disabledReason)) {
61
61
  return (react_1.default.createElement(Tooltip_1.default, { key: option === null || option === void 0 ? void 0 : option.value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: option === null || option === void 0 ? void 0 : option.disabledReason }, radioButton));
@@ -63,21 +63,21 @@ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildren
63
63
  return (react_1.default.createElement(react_1.default.Fragment, null,
64
64
  react_1.default.createElement("div", { key: option === null || option === void 0 ? void 0 : option.value, className: RadioButtonGroup_module_scss_1.default.wrapper },
65
65
  radioButton,
66
- options && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator },
66
+ !isSubOption && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator, style: (!options && (option === null || option === void 0 ? void 0 : option.value) === valueProp) || (options && open) ? { transform: 'scaleY(-1) translateY(2px)' } : undefined },
67
67
  react_1.default.createElement(Icon_1.default, { size: "24px", icon: Icon_1.IconType.Dropdown })))),
68
- options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "top-start" },
68
+ options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "bottom-start" },
69
69
  react_1.default.createElement(RadioButtonGroup, { options: options.map((option) => {
70
70
  const { renderContent } = option, rest = __rest(option, ["renderContent"]);
71
71
  if (!renderChildrenContent)
72
72
  return rest;
73
73
  return option;
74
- }), onChange: (value) => {
75
- onChange === null || onChange === void 0 ? void 0 : onChange(value);
74
+ }), onChange: (subValue) => {
75
+ onChange === null || onChange === void 0 ? void 0 : onChange(optionProp.value, subValue);
76
76
  setOpen(false);
77
- }, value: valueProp })))));
77
+ }, value: valueProp, isSubGroup: true })))));
78
78
  };
79
- const RadioButtonGroup = ({ options = [], value: valueProp, onChange, renderChildrenContent, }) => {
80
- return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => (react_1.default.createElement(Option, { key: rawOption.value, option: rawOption, value: valueProp, onChange: onChange, renderChildrenContent: renderChildrenContent })))));
79
+ const RadioButtonGroup = ({ options = [], value: valueProp, onChange, renderChildrenContent, isSubGroup, }) => {
80
+ return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => (react_1.default.createElement(Option, { key: rawOption.value, option: rawOption, value: valueProp, onChange: onChange, renderChildrenContent: renderChildrenContent, isSubOption: isSubGroup })))));
81
81
  };
82
82
  exports.default = RadioButtonGroup;
83
83
  //# sourceMappingURL=RadioButtonGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue) => void;\n renderChildrenContent?: boolean;\n}\n\nconst Option = <TValue extends string = string>({\n option: optionProp,\n value: valueProp,\n onChange,\n renderChildrenContent,\n}: {\n option: IRadioButtonOption<TValue>;\n value?: TValue;\n onChange?: (value: TValue) => void;\n renderChildrenContent?: boolean;\n}): ReactElement | null => {\n const options = optionProp.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {options && (\n <div className={styles.childrenIndicator}>\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"top-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(value) => {\n onChange?.(value);\n setOpen(false);\n }}\n value={valueProp}\n />\n </Overlay>\n )}\n </>\n );\n};\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => (\n <Option key={rawOption.value} option={rawOption} value={valueProp} onChange={onChange} renderChildrenContent={renderChildrenContent} />\n ))}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
1
+ {"version":3,"file":"RadioButtonGroup.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButtonGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement, ReactNode, useState } from 'react';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport { RadioButton } from '@/components/generic/RadioButtonGroup/RadioButton';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\n\nimport styles from './RadioButtonGroup.module.scss';\n\nexport interface IRadioButtonOption<TValue extends string = string> {\n value: TValue;\n label?: ReactNode;\n disabled?: boolean;\n /** Enabled a tooltip that gives more info on why the field is disabled */\n disabledReason?: string;\n renderContent?: () => ReactNode;\n options?: IRadioButtonOption<TValue>[];\n}\n\nexport interface IRadioButtonGroupProps<TValue extends string = string> {\n options?: IRadioButtonOption<TValue>[];\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubGroup?: boolean;\n}\n\nconst Option = <TValue extends string = string>({\n option: optionProp,\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubOption,\n}: {\n option: IRadioButtonOption<TValue>;\n value?: TValue;\n onChange?: (value: TValue, optionValue?: TValue) => void;\n renderChildrenContent?: boolean;\n isSubOption?: boolean;\n}): JSX.Element => {\n const options = optionProp.options;\n const isGroup = !!options?.length;\n const [ref, setRef] = useState<HTMLDivElement | null>(null);\n const [open, setOpen] = useState<boolean>(false);\n const option: IRadioButtonOption<TValue> | undefined = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;\n const radioButton = (\n <RadioButton\n headerRef={setRef}\n className={styles.item}\n style={isSubOption ? undefined : { paddingRight: '35px' }}\n key={option?.value}\n checked={!option?.disabled && option?.value === valueProp}\n onChange={() => {\n if (option?.disabled) return;\n if (isGroup) setOpen(!open);\n else if (option?.value && option?.value !== valueProp) onChange?.(option.value, optionProp.value);\n }}\n label={option?.label}\n disabled={option?.disabled}\n renderContent={option?.renderContent}\n />\n );\n\n if (option?.disabled && option?.disabledReason) {\n return (\n <Tooltip key={option?.value} wrapperClasses={styles.wrapper} title={option?.disabledReason}>\n {radioButton}\n </Tooltip>\n );\n }\n\n return (\n <>\n <div key={option?.value} className={styles.wrapper}>\n {radioButton}\n {!isSubOption && (\n <div\n className={styles.childrenIndicator}\n style={(!options && option?.value === valueProp) || (options && open) ? { transform: 'scaleY(-1) translateY(2px)' } : undefined}\n >\n <Icon size=\"24px\" icon={IconType.Dropdown} />\n </div>\n )}\n </div>\n {options && (\n <Overlay\n onClose={() => setOpen(false)}\n className={styles.overlay}\n hideStyles\n containerClassName=\"u-w-100\"\n open={open}\n followElement={ref || undefined}\n offset={[0, 0]}\n placement=\"bottom-start\"\n >\n <RadioButtonGroup\n options={options.map((option) => {\n const { renderContent, ...rest } = option;\n if (!renderChildrenContent) return rest;\n return option;\n })}\n onChange={(subValue) => {\n onChange?.(optionProp.value, subValue);\n setOpen(false);\n }}\n value={valueProp}\n isSubGroup\n />\n </Overlay>\n )}\n </>\n );\n};\n\nconst RadioButtonGroup = <TValue extends string = string>({\n options = [],\n value: valueProp,\n onChange,\n renderChildrenContent,\n isSubGroup,\n}: IRadioButtonGroupProps<TValue>): ReactElement | null => {\n return (\n <div className={styles.root}>\n {options.map((rawOption) => (\n <Option key={rawOption.value} option={rawOption} value={valueProp} onChange={onChange} renderChildrenContent={renderChildrenContent} isSubOption={isSubGroup} />\n ))}\n </div>\n );\n};\n\nexport default RadioButtonGroup;\n"]}
@@ -18,5 +18,10 @@ export interface DatePickerProps {
18
18
  }) => void;
19
19
  readOnly?: boolean;
20
20
  className?: string;
21
+ /**
22
+ * Filters availability/calendar results by the provided room code.
23
+ * If undefined, falls back to the room code from the selected basket row.
24
+ */
25
+ roomCode?: string;
21
26
  }
22
27
  export default function DatePicker(props: DatePickerProps): JSX.Element;
@@ -100,14 +100,17 @@ function DatePicker(props) {
100
100
  arrivalMinNightStay: null,
101
101
  arrivalMaxNightStay: null,
102
102
  });
103
+ const { selectedBasketRow } = basketContext;
104
+ const roomCode = (0, react_1.useMemo)(() => {
105
+ var _a, _b;
106
+ return (_b = (_a = props === null || props === void 0 ? void 0 : props.roomCode) !== null && _a !== void 0 ? _a : selectedBasketRow === null || selectedBasketRow === void 0 ? void 0 : selectedBasketRow.getRoomCode()) !== null && _b !== void 0 ? _b : '';
107
+ }, [props === null || props === void 0 ? void 0 : props.roomCode, selectedBasketRow]);
103
108
  const onClickDate = (newDate) => __awaiter(this, void 0, void 0, function* () {
104
109
  let newPickingState = null;
105
- const selectedBasketRow = basketContext.selectedBasketRow;
106
110
  const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;
107
111
  const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;
108
112
  const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;
109
113
  const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';
110
- const roomCode = selectedBasketRow ? selectedBasketRow.getRoomCode() : '';
111
114
  const newDatePrice = yield BookingAPI_1.default.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, roomCode, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber, false);
112
115
  switch (pickingState) {
113
116
  default:
@@ -237,12 +240,13 @@ function DatePicker(props) {
237
240
  arrivalNightStay,
238
241
  nightStayValidation,
239
242
  nightStayRequirements,
243
+ roomCode: roomCode,
240
244
  };
241
245
  const printMonths = (0, react_1.useMemo)(() => (react_1.default.createElement(react_1.default.Fragment, null, calendarStyle === 'Month' ? (react_1.default.createElement(react_1.default.Fragment, null,
242
246
  react_1.default.createElement(DatePickerMonth_1.default, { small: props.small, showingMonth: currentMonth, readOnly: props.readOnly }),
243
247
  props.showMultipleMonths && react_1.default.createElement(DatePickerMonth_1.default, { showingMonth: currentMonth.add(1, 'month'), readOnly: props.readOnly }))) : (react_1.default.createElement(react_1.default.Fragment, null,
244
248
  react_1.default.createElement(react_1.default.Suspense, { fallback: react_1.default.createElement(WeekViewSkeleton_1.default, null) },
245
- react_1.default.createElement(DatePickerWeek, null)))))), [currentMonth, props.showMultipleMonths, calendarStyle, props.readOnly]);
249
+ react_1.default.createElement(DatePickerWeek, null)))))), [currentMonth, props.showMultipleMonths, calendarStyle, props.readOnly, roomCode]);
246
250
  const calendarClassNames = (0, classnames_1.default)('diji-calendar', {
247
251
  '--single': !props.showMultipleMonths,
248
252
  '--small': props.small,