@roomstay/frontend 2.6.66 → 2.6.68

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 (32) hide show
  1. package/dist/537.bundle.js +1 -1
  2. package/dist/686.bundle.js +1 -1
  3. package/dist/950.bundle.js +1 -1
  4. package/dist/main.bundle.js +1 -1
  5. package/dist/src/components/generic/modal/SigninModal/AuthenticatedUserModal.d.ts +1 -0
  6. package/dist/src/components/generic/modal/SigninModal/AuthenticatedUserModal.js +33 -27
  7. package/dist/src/components/generic/modal/SigninModal/AuthenticatedUserModal.js.map +1 -1
  8. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +6 -0
  9. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  10. package/dist/src/events/index.d.ts +1 -0
  11. package/dist/src/events/index.js +1 -0
  12. package/dist/src/events/index.js.map +1 -1
  13. package/dist/src/events/state/SelectedHotelChangeEvent.d.ts +7 -0
  14. package/dist/src/events/state/SelectedHotelChangeEvent.js +15 -0
  15. package/dist/src/events/state/SelectedHotelChangeEvent.js.map +1 -0
  16. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js +2 -2
  17. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js.map +1 -1
  18. package/dist/src/hooks/CurrentHotelHook.d.ts +4 -0
  19. package/dist/src/hooks/CurrentHotelHook.js +5 -0
  20. package/dist/src/hooks/CurrentHotelHook.js.map +1 -1
  21. package/dist/src/hooks/VGSHooks.js +2 -2
  22. package/dist/src/hooks/VGSHooks.js.map +1 -1
  23. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  24. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  25. package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -0
  26. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  27. package/dist/src/pages/account/AccountHome/AccountHomePage.js +7 -5
  28. package/dist/src/pages/account/AccountHome/AccountHomePage.js.map +1 -1
  29. package/dist/src/pages/account/AccountRouter.js +3 -1
  30. package/dist/src/pages/account/AccountRouter.js.map +1 -1
  31. package/dist/test.bundle.js +1 -1
  32. package/package.json +1 -1
@@ -16,5 +16,6 @@ export type MenuItemType = {
16
16
  icon: IconType;
17
17
  text: string;
18
18
  link: string;
19
+ enabled?: boolean;
19
20
  };
20
21
  export declare const AuthenticatedUserModal: (props: AuthenticatedUserModalProps) => ReactElement | null;
@@ -28,6 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.AuthenticatedUserModal = void 0;
30
30
  const contexts_1 = require("../../../../contexts/index.js");
31
+ const hooks_1 = require("../../../../hooks/index.js");
31
32
  const classnames_1 = __importDefault(require("classnames"));
32
33
  const react_1 = __importStar(require("react"));
33
34
  const react_i18next_1 = require("react-i18next");
@@ -44,6 +45,7 @@ const ScreenSize_1 = __importDefault(require("../../../../util/ScreenSize"));
44
45
  const AuthenticatedUserModal_module_scss_1 = __importDefault(require("./AuthenticatedUserModal.module.scss"));
45
46
  const AuthenticatedUserModal = (props) => {
46
47
  const { open, anchorEl, containerEl, menuItems, placement, fallbackPlacements, onSignedOut, onClose, onCloseMenu } = props;
48
+ const { hotel, isMemberPaymentInformationAvailable } = (0, hooks_1.useCurrentHotel)();
47
49
  const { logout } = (0, react_1.useContext)(contexts_1.AuthenticationContext);
48
50
  const { t } = (0, react_i18next_1.useTranslation)();
49
51
  const { screenSize } = (0, contexts_1.useBookingEngine)();
@@ -56,33 +58,37 @@ const AuthenticatedUserModal = (props) => {
56
58
  onSignedOut === null || onSignedOut === void 0 ? void 0 : onSignedOut();
57
59
  logout();
58
60
  };
59
- const items = menuItems || [
60
- {
61
- icon: Icon_1.IconType.Person,
62
- text: 'Account',
63
- link: AccountRoutes_1.AccountRoutes.Home.path,
64
- },
65
- {
66
- icon: Icon_1.IconType.Bed,
67
- text: t(Translation_1.Translation.Navigation.Menu.YourReservations),
68
- link: AccountRoutes_1.AccountRoutes.Reservations.path,
69
- },
70
- {
71
- icon: Icon_1.IconType.Edit,
72
- text: t(Translation_1.Translation.Navigation.Menu.ProfileInformation),
73
- link: AccountRoutes_1.AccountRoutes.ProfileDetails.path,
74
- },
75
- {
76
- icon: Icon_1.IconType.CreditCard,
77
- text: t(Translation_1.Translation.Navigation.Menu.PaymentInformation),
78
- link: AccountRoutes_1.AccountRoutes.CardDetails.path,
79
- },
80
- {
81
- icon: Icon_1.IconType.Info,
82
- text: t(Translation_1.Translation.Navigation.Menu.NeedHelp),
83
- link: AccountRoutes_1.AccountRoutes.Help.path,
84
- },
85
- ];
61
+ const items = (0, react_1.useMemo)(() => {
62
+ return (menuItems ||
63
+ [
64
+ {
65
+ icon: Icon_1.IconType.Person,
66
+ text: 'Account',
67
+ link: AccountRoutes_1.AccountRoutes.Home.path,
68
+ },
69
+ {
70
+ icon: Icon_1.IconType.Bed,
71
+ text: t(Translation_1.Translation.Navigation.Menu.YourReservations),
72
+ link: AccountRoutes_1.AccountRoutes.Reservations.path,
73
+ },
74
+ {
75
+ icon: Icon_1.IconType.Edit,
76
+ text: t(Translation_1.Translation.Navigation.Menu.ProfileInformation),
77
+ link: AccountRoutes_1.AccountRoutes.ProfileDetails.path,
78
+ },
79
+ {
80
+ icon: Icon_1.IconType.CreditCard,
81
+ text: t(Translation_1.Translation.Navigation.Menu.PaymentInformation),
82
+ link: AccountRoutes_1.AccountRoutes.CardDetails.path,
83
+ enabled: isMemberPaymentInformationAvailable,
84
+ },
85
+ {
86
+ icon: Icon_1.IconType.Info,
87
+ text: t(Translation_1.Translation.Navigation.Menu.NeedHelp),
88
+ link: AccountRoutes_1.AccountRoutes.Help.path,
89
+ },
90
+ ].filter((item) => item.enabled !== false));
91
+ }, [hotel]);
86
92
  return (react_1.default.createElement(Overlay_1.Overlay, { preventScroll: shouldBreakpoint, usePortal: true, followElement: shouldBreakpoint ? null : anchorEl, placement: placement || 'auto-end', fallbackPlacements: fallbackPlacements, container: containerEl, open: open, onClose: onClose, strategy: "fixed", className: AuthenticatedUserModal_module_scss_1.default['logged-in-overlay'], containerClassName: (0, classnames_1.default)({
87
93
  [AuthenticatedUserModal_module_scss_1.default['logged-in-overlay-container--fixed']]: shouldBreakpoint,
88
94
  }) },
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticatedUserModal.js","sourceRoot":"/","sources":["src/components/generic/modal/SigninModal/AuthenticatedUserModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AuthenticationContext, useBookingEngine } from '@frontend/contexts';\nimport { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { ReactElement, useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { NavLink, useLocation } from 'react-router-dom';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Text from '@/components/generic/Text';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './AuthenticatedUserModal.module.scss';\n\nexport type AuthenticatedUserModalProps = {\n open: boolean;\n anchorEl?: HTMLElement | null;\n placement?: Placement;\n fallbackPlacements?: Placement;\n containerEl?: HTMLElement;\n menuItems?: MenuItemType[];\n onClose?: () => void;\n onSignedOut?: () => void;\n onCloseMenu?: () => void;\n};\n\nexport type MenuItemType = {\n icon: IconType;\n text: string;\n link: string;\n};\n\nexport const AuthenticatedUserModal = (props: AuthenticatedUserModalProps): ReactElement | null => {\n const { open, anchorEl, containerEl, menuItems, placement, fallbackPlacements, onSignedOut, onClose, onCloseMenu } = props;\n\n const { logout } = useContext(AuthenticationContext);\n const { t } = useTranslation();\n const { screenSize } = useBookingEngine();\n const windowSize = useWindowSize();\n const isMobile = screenSize < ScreenSize.Large;\n const shouldBreakpoint = isMobile && (windowSize.height || 0) <= 705;\n const location = useLocation();\n\n const onLogoutClick = () => {\n onClose?.();\n onSignedOut?.();\n logout();\n };\n\n const items: MenuItemType[] = menuItems || [\n {\n icon: IconType.Person,\n text: 'Account',\n link: AccountRoutes.Home.path,\n },\n {\n icon: IconType.Bed,\n text: t(Translation.Navigation.Menu.YourReservations),\n link: AccountRoutes.Reservations.path,\n },\n {\n icon: IconType.Edit,\n text: t(Translation.Navigation.Menu.ProfileInformation),\n link: AccountRoutes.ProfileDetails.path,\n },\n {\n icon: IconType.CreditCard,\n text: t(Translation.Navigation.Menu.PaymentInformation),\n link: AccountRoutes.CardDetails.path,\n },\n {\n icon: IconType.Info,\n text: t(Translation.Navigation.Menu.NeedHelp),\n link: AccountRoutes.Help.path,\n },\n ];\n\n return (\n <Overlay\n preventScroll={shouldBreakpoint}\n usePortal\n followElement={shouldBreakpoint ? null : anchorEl}\n placement={placement || 'auto-end'}\n fallbackPlacements={fallbackPlacements}\n container={containerEl}\n open={open}\n onClose={onClose}\n strategy=\"fixed\"\n className={styles['logged-in-overlay']}\n containerClassName={classNames({\n [styles['logged-in-overlay-container--fixed']]: shouldBreakpoint,\n })}\n >\n <div className={styles['list-items']}>\n {items.map((item, index) => {\n return (\n <NavLink\n to={item.link}\n className={({ isActive }) => {\n const isCurrentPath = !!item?.link && location.pathname.toLowerCase().includes(item.link.toLowerCase());\n return classNames(styles['list-item'], {\n [styles['--selected']]: isActive || isCurrentPath,\n });\n }}\n key={index}\n onClick={() => {\n onClose?.();\n onCloseMenu?.();\n }}\n >\n <div className={styles['list-item--icon']}>\n <Icon icon={item.icon} color={Color.Grey} size=\"24px\" />\n </div>\n <Text>{item.text}</Text>\n </NavLink>\n );\n })}\n <LineBreak />\n <div className={styles['list-item']} onClick={onLogoutClick}>\n <div className={styles['list-item--icon']}>\n <Icon icon={IconType.LogOut} color={Color.Alert} size=\"24px\" />\n </div>\n <Text color={Color.Alert}>{t(Translation.Misc.LogOut)}</Text>\n </div>\n </div>\n </Overlay>\n );\n};\n"]}
1
+ {"version":3,"file":"AuthenticatedUserModal.js","sourceRoot":"/","sources":["src/components/generic/modal/SigninModal/AuthenticatedUserModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AuthenticationContext, useBookingEngine } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { ReactElement, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { NavLink, useLocation } from 'react-router-dom';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Text from '@/components/generic/Text';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './AuthenticatedUserModal.module.scss';\n\nexport type AuthenticatedUserModalProps = {\n open: boolean;\n anchorEl?: HTMLElement | null;\n placement?: Placement;\n fallbackPlacements?: Placement;\n containerEl?: HTMLElement;\n menuItems?: MenuItemType[];\n onClose?: () => void;\n onSignedOut?: () => void;\n onCloseMenu?: () => void;\n};\n\nexport type MenuItemType = {\n icon: IconType;\n text: string;\n link: string;\n enabled?: boolean;\n};\n\nexport const AuthenticatedUserModal = (props: AuthenticatedUserModalProps): ReactElement | null => {\n const { open, anchorEl, containerEl, menuItems, placement, fallbackPlacements, onSignedOut, onClose, onCloseMenu } = props;\n\n const { hotel, isMemberPaymentInformationAvailable } = useCurrentHotel();\n const { logout } = useContext(AuthenticationContext);\n const { t } = useTranslation();\n const { screenSize } = useBookingEngine();\n const windowSize = useWindowSize();\n const isMobile = screenSize < ScreenSize.Large;\n const shouldBreakpoint = isMobile && (windowSize.height || 0) <= 705;\n const location = useLocation();\n\n const onLogoutClick = () => {\n onClose?.();\n onSignedOut?.();\n logout();\n };\n\n const items: MenuItemType[] = useMemo(() => {\n return (\n menuItems ||\n [\n {\n icon: IconType.Person,\n text: 'Account',\n link: AccountRoutes.Home.path,\n },\n {\n icon: IconType.Bed,\n text: t(Translation.Navigation.Menu.YourReservations),\n link: AccountRoutes.Reservations.path,\n },\n {\n icon: IconType.Edit,\n text: t(Translation.Navigation.Menu.ProfileInformation),\n link: AccountRoutes.ProfileDetails.path,\n },\n {\n icon: IconType.CreditCard,\n text: t(Translation.Navigation.Menu.PaymentInformation),\n link: AccountRoutes.CardDetails.path,\n enabled: isMemberPaymentInformationAvailable,\n },\n {\n icon: IconType.Info,\n text: t(Translation.Navigation.Menu.NeedHelp),\n link: AccountRoutes.Help.path,\n },\n ].filter((item) => item.enabled !== false)\n );\n }, [hotel]);\n\n return (\n <Overlay\n preventScroll={shouldBreakpoint}\n usePortal\n followElement={shouldBreakpoint ? null : anchorEl}\n placement={placement || 'auto-end'}\n fallbackPlacements={fallbackPlacements}\n container={containerEl}\n open={open}\n onClose={onClose}\n strategy=\"fixed\"\n className={styles['logged-in-overlay']}\n containerClassName={classNames({\n [styles['logged-in-overlay-container--fixed']]: shouldBreakpoint,\n })}\n >\n <div className={styles['list-items']}>\n {items.map((item, index) => {\n return (\n <NavLink\n to={item.link}\n className={({ isActive }) => {\n const isCurrentPath = !!item?.link && location.pathname.toLowerCase().includes(item.link.toLowerCase());\n return classNames(styles['list-item'], {\n [styles['--selected']]: isActive || isCurrentPath,\n });\n }}\n key={index}\n onClick={() => {\n onClose?.();\n onCloseMenu?.();\n }}\n >\n <div className={styles['list-item--icon']}>\n <Icon icon={item.icon} color={Color.Grey} size=\"24px\" />\n </div>\n <Text>{item.text}</Text>\n </NavLink>\n );\n })}\n <LineBreak />\n <div className={styles['list-item']} onClick={onLogoutClick}>\n <div className={styles['list-item--icon']}>\n <Icon icon={IconType.LogOut} color={Color.Alert} size=\"24px\" />\n </div>\n <Text color={Color.Alert}>{t(Translation.Misc.LogOut)}</Text>\n </div>\n </div>\n </Overlay>\n );\n};\n"]}
@@ -51,6 +51,7 @@ const currencyHelper = __importStar(require("../../util/CurrencyHelper"));
51
51
  const DataLayer_1 = __importDefault(require("../../util/DataLayer"));
52
52
  const StepManager_1 = __importDefault(require("../../util/StepManager"));
53
53
  const TimeHelper_1 = __importDefault(require("../../util/TimeHelper"));
54
+ const RoomstayThemeEngine_1 = __importDefault(require("../../providers/RoomstayThemeEngine"));
54
55
  const CompanyContextWrapper = ({ configCompany: company, children }) => {
55
56
  var _a, _b, _c, _d;
56
57
  const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
@@ -109,6 +110,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
109
110
  provider === core_1.EIntegration.Gday ||
110
111
  provider === core_1.EIntegration.Salesforce)) || false;
111
112
  setIsExternalMemberHotel(isExternalProvider);
113
+ raise(new events_1.SelectedHotelChangeEvent(selectedHotel));
112
114
  }, [selectedHotel]);
113
115
  const { raise } = (0, hooks_1.useEvent)();
114
116
  const getHotelFromArrayWithId = (id, arrayOfHotels) => {
@@ -273,6 +275,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
273
275
  updatedHotel.maxAdultAge = details.maxAdultAge;
274
276
  updatedHotel.countInfantsInOccupancy = details.countInfantsInOccupancy;
275
277
  updatedHotel.preferProviderBookingId = details.preferProviderBookingId;
278
+ updatedHotel.disableSavedPayments = details.disableSavedPayments;
276
279
  resolve(updatedHotel);
277
280
  return updatedHotel;
278
281
  });
@@ -310,6 +313,9 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
310
313
  setSelectedHotelID(configHotels[0].hotelID);
311
314
  console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);
312
315
  }
316
+ else {
317
+ RoomstayThemeEngine_1.default.registerStyles(company.colors);
318
+ }
313
319
  }
314
320
  }, [company]);
315
321
  const onSelectedHotelIDChanged = react_1.default.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
@@ -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, SignInUser } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { HotelDTO } 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\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const selectedHotel = useMemo(() => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n }, [hotels, selectedHotelID]);\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<SignInUser | null>(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n\n const [memberNumber, setMemberNumber] = useState<string>();\n const [isExternalMemberHotel, setIsExternalMemberHotel] = useState<boolean>(false);\n\n const externalMemberType = useMemo(() => {\n const integrations = selectedHotel?.integrations;\n\n // Because integrations is an array of strings technically both Big4 and Top10 theoretically come down, so we'll choose one\n if (integrations?.includes(EIntegration.Big4)) {\n return EIntegration.Big4;\n } else if (integrations?.includes(EIntegration.Top10)) {\n return EIntegration.Top10;\n } else if (integrations?.includes(EIntegration.RmsTop10)) {\n return EIntegration.RmsTop10;\n } else if (integrations?.includes(EIntegration.Gday)) {\n return EIntegration.Gday;\n } else if (integrations?.includes(EIntegration.Salesforce)) {\n return EIntegration.Salesforce;\n }\n }, [selectedHotel]);\n\n useEffect(() => {\n const isExternalProvider =\n selectedHotel?.integrations?.some(\n (provider) =>\n provider === EIntegration.Big4 ||\n provider === EIntegration.Top10 ||\n provider === EIntegration.RmsTop10 ||\n provider === EIntegration.Gday ||\n provider === EIntegration.Salesforce\n ) || false;\n setIsExternalMemberHotel(isExternalProvider);\n }, [selectedHotel]);\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 signUserIn = async (user: SignInUser) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion, user));\n\n DataLayer.instance.sendMemberSignUp(); // Is this the right location for 'Signup' event?\n workingContext.closeMemberSignupModal();\n\n await beContext.sessionProvider.updateSession({ user: user, memberId: user.memberNumber });\n\n setSignedInUser(user);\n setMemberNumber(user.memberNumber);\n\n if (user.saveState) {\n await beContext.storageProvider.setUser(user);\n }\n };\n\n const signUserOut = async () => {\n await beContext.sessionProvider.updateSession({ user: undefined, memberId: undefined });\n await beContext.storageProvider.setUser(undefined);\n setSignedInUser(null);\n setMemberNumber(undefined);\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve, reject) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n let details: HotelDTO;\n\n try {\n details = await API.Hotel.fetchData(currentLanguage, newHotel);\n } catch (ex) {\n reject(ex);\n }\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.enableCreditCardSurcharge = details.enableCreditCardSurcharge;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n updatedHotel.preventCancellation = details.preventCancellation;\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 if (details.stateFieldConfiguration) {\n updatedHotel.stateFieldConfiguration = details.stateFieldConfiguration;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n\n if (details.maxAdults !== undefined) {\n updatedHotel.maxAdults = details.maxAdults;\n }\n\n if (details.maxChildren !== undefined) {\n updatedHotel.maxChildren = details.maxChildren;\n }\n\n if (details.maxInfants !== undefined) {\n updatedHotel.maxInfants = details.maxInfants;\n }\n\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n\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\n /**\n * Prioritized perks from roomstay-clients than roomstay-admin\n */\n updatedHotel.perks = updatedHotel.perks?.length ? updatedHotel.perks : details.perks;\n updatedHotel.perkTitle = updatedHotel.perkTitle ?? details.perkTitle;\n\n updatedHotel.countryPrefix = details.countryPrefix ?? updatedHotel.countryPrefix ?? '';\n updatedHotel.quoteImageDesktop = details.quoteImageDesktop ?? updatedHotel.quoteImageDesktop ?? '';\n updatedHotel.quoteImageMobile = details.quoteImageMobile ?? updatedHotel.quoteImageMobile ?? '';\n updatedHotel.memberOnlyImage = details.memberOnlyImage ?? updatedHotel.memberOnlyImage ?? '';\n if (details.memberOnlyRenderRateLast !== undefined) {\n updatedHotel.memberOnlyRenderRateLast = details.memberOnlyRenderRateLast;\n }\n updatedHotel.captureChildAge = details.captureChildAge;\n\n updatedHotel.fees = details.fees;\n updatedHotel.addDepositFeeToBookingTotal = details.addDepositFeeToBookingTotal;\n\n updatedHotel.company = details.company;\n\n updatedHotel.itineraryNote = details.itineraryNote;\n\n updatedHotel.minAdultAge = details.minAdultAge;\n updatedHotel.maxAdultAge = details.maxAdultAge;\n updatedHotel.countInfantsInOccupancy = details.countInfantsInOccupancy;\n updatedHotel.preferProviderBookingId = details.preferProviderBookingId;\n\n resolve(updatedHotel);\n\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\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.initialiseGTM(company, selectedHotel);\n\n // Prep session based storage\n const sessionProvider = beContext.engine.getSessionProvider();\n await sessionProvider.setHotelID(selectedHotelID);\n\n // Prep local storage (non-session based)\n beContext.storageProvider.setHotelId(selectedHotelID);\n\n // Reload current user?\n const user = await beContext.storageProvider.getUser();\n\n if (user) {\n await signUserIn(user);\n }\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.initialiseGTM(company);\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\n colors,\n hotels,\n\n signedInUser,\n isSigningIn,\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 API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n row.getRoomCode(),\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 | null) => {\n if (hotel === null) {\n setSelectedHotelID(undefined);\n return true;\n }\n\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 setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (promotion?: IPromotion) => {\n setIsSigningIn(true);\n\n if (promotion) {\n setMemberOnlyModalPromotion(promotion);\n }\n },\n\n signUserIn,\n signUserOut,\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n externalMemberType,\n isExternalMemberHotel,\n memberNumber: memberNumber,\n selectedHotel,\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, SignInUser } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent, SelectedHotelChangeEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { HotelDTO } 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';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\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\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const selectedHotel = useMemo(() => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n }, [hotels, selectedHotelID]);\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<SignInUser | null>(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n\n const [memberNumber, setMemberNumber] = useState<string>();\n const [isExternalMemberHotel, setIsExternalMemberHotel] = useState<boolean>(false);\n\n const externalMemberType = useMemo(() => {\n const integrations = selectedHotel?.integrations;\n\n // Because integrations is an array of strings technically both Big4 and Top10 theoretically come down, so we'll choose one\n if (integrations?.includes(EIntegration.Big4)) {\n return EIntegration.Big4;\n } else if (integrations?.includes(EIntegration.Top10)) {\n return EIntegration.Top10;\n } else if (integrations?.includes(EIntegration.RmsTop10)) {\n return EIntegration.RmsTop10;\n } else if (integrations?.includes(EIntegration.Gday)) {\n return EIntegration.Gday;\n } else if (integrations?.includes(EIntegration.Salesforce)) {\n return EIntegration.Salesforce;\n }\n }, [selectedHotel]);\n\n useEffect(() => {\n const isExternalProvider =\n selectedHotel?.integrations?.some(\n (provider) =>\n provider === EIntegration.Big4 ||\n provider === EIntegration.Top10 ||\n provider === EIntegration.RmsTop10 ||\n provider === EIntegration.Gday ||\n provider === EIntegration.Salesforce\n ) || false;\n setIsExternalMemberHotel(isExternalProvider);\n\n raise(new SelectedHotelChangeEvent(selectedHotel));\n }, [selectedHotel]);\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 signUserIn = async (user: SignInUser) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion, user));\n\n DataLayer.instance.sendMemberSignUp(); // Is this the right location for 'Signup' event?\n workingContext.closeMemberSignupModal();\n\n await beContext.sessionProvider.updateSession({ user: user, memberId: user.memberNumber });\n\n setSignedInUser(user);\n setMemberNumber(user.memberNumber);\n\n if (user.saveState) {\n await beContext.storageProvider.setUser(user);\n }\n };\n\n const signUserOut = async () => {\n await beContext.sessionProvider.updateSession({ user: undefined, memberId: undefined });\n await beContext.storageProvider.setUser(undefined);\n setSignedInUser(null);\n setMemberNumber(undefined);\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve, reject) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n let details: HotelDTO;\n\n try {\n details = await API.Hotel.fetchData(currentLanguage, newHotel);\n } catch (ex) {\n reject(ex);\n }\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.enableCreditCardSurcharge = details.enableCreditCardSurcharge;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n updatedHotel.preventCancellation = details.preventCancellation;\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 if (details.stateFieldConfiguration) {\n updatedHotel.stateFieldConfiguration = details.stateFieldConfiguration;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n\n if (details.maxAdults !== undefined) {\n updatedHotel.maxAdults = details.maxAdults;\n }\n\n if (details.maxChildren !== undefined) {\n updatedHotel.maxChildren = details.maxChildren;\n }\n\n if (details.maxInfants !== undefined) {\n updatedHotel.maxInfants = details.maxInfants;\n }\n\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n\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\n /**\n * Prioritized perks from roomstay-clients than roomstay-admin\n */\n updatedHotel.perks = updatedHotel.perks?.length ? updatedHotel.perks : details.perks;\n updatedHotel.perkTitle = updatedHotel.perkTitle ?? details.perkTitle;\n\n updatedHotel.countryPrefix = details.countryPrefix ?? updatedHotel.countryPrefix ?? '';\n updatedHotel.quoteImageDesktop = details.quoteImageDesktop ?? updatedHotel.quoteImageDesktop ?? '';\n updatedHotel.quoteImageMobile = details.quoteImageMobile ?? updatedHotel.quoteImageMobile ?? '';\n updatedHotel.memberOnlyImage = details.memberOnlyImage ?? updatedHotel.memberOnlyImage ?? '';\n if (details.memberOnlyRenderRateLast !== undefined) {\n updatedHotel.memberOnlyRenderRateLast = details.memberOnlyRenderRateLast;\n }\n updatedHotel.captureChildAge = details.captureChildAge;\n\n updatedHotel.fees = details.fees;\n updatedHotel.addDepositFeeToBookingTotal = details.addDepositFeeToBookingTotal;\n\n updatedHotel.company = details.company;\n\n updatedHotel.itineraryNote = details.itineraryNote;\n\n updatedHotel.minAdultAge = details.minAdultAge;\n updatedHotel.maxAdultAge = details.maxAdultAge;\n updatedHotel.countInfantsInOccupancy = details.countInfantsInOccupancy;\n updatedHotel.preferProviderBookingId = details.preferProviderBookingId;\n updatedHotel.disableSavedPayments = details.disableSavedPayments;\n\n resolve(updatedHotel);\n\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\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 } else {\n RoomstayThemeEngine.registerStyles(company.colors);\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.initialiseGTM(company, selectedHotel);\n\n // Prep session based storage\n const sessionProvider = beContext.engine.getSessionProvider();\n await sessionProvider.setHotelID(selectedHotelID);\n\n // Prep local storage (non-session based)\n beContext.storageProvider.setHotelId(selectedHotelID);\n\n // Reload current user?\n const user = await beContext.storageProvider.getUser();\n\n if (user) {\n await signUserIn(user);\n }\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.initialiseGTM(company);\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\n colors,\n hotels,\n\n signedInUser,\n isSigningIn,\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 API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n row.getRoomCode(),\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 | null) => {\n if (hotel === null) {\n setSelectedHotelID(undefined);\n return true;\n }\n\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 setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (promotion?: IPromotion) => {\n setIsSigningIn(true);\n\n if (promotion) {\n setMemberOnlyModalPromotion(promotion);\n }\n },\n\n signUserIn,\n signUserOut,\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n externalMemberType,\n isExternalMemberHotel,\n memberNumber: memberNumber,\n selectedHotel,\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
@@ -14,3 +14,4 @@ export * from './views/StepDateViewEvent';
14
14
  export * from './views/StepHotelInfoViewEvent';
15
15
  export * from './views/StepHotelViewEvent';
16
16
  export * from './views/StepThanksViewEvent';
17
+ export * from './state/SelectedHotelChangeEvent';
@@ -30,4 +30,5 @@ __exportStar(require("./views/StepDateViewEvent"), exports);
30
30
  __exportStar(require("./views/StepHotelInfoViewEvent"), exports);
31
31
  __exportStar(require("./views/StepHotelViewEvent"), exports);
32
32
  __exportStar(require("./views/StepThanksViewEvent"), exports);
33
+ __exportStar(require("./state/SelectedHotelChangeEvent"), exports);
33
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0EAAwD;AACxD,kEAAgD;AAChD,oEAAkD;AAClD,4EAA0D;AAC1D,sEAAoD;AACpD,uEAAqD;AACrD,uEAAqD;AACrD,iFAA+D;AAC/D,0EAAwD;AACxD,0EAAwD;AACxD,oEAAkD;AAClD,uEAAqD;AACrD,mEAAiD;AACjD,wEAAsD;AACtD,oEAAkD;AAClD,qEAAmD","sourcesContent":["export * from './actions/Promotion/PromotionAddedEvent';\nexport * from '@/events/actions/AddToCartEvent';\nexport * from '@/events/actions/GuestSearchEvent';\nexport * from '@/events/actions/InitialHotelDetailsEvent';\nexport * from '@/events/actions/PlacedBookingEvent';\nexport * from '@/events/actions/RemoveFromCartEvent';\nexport * from '@/events/actions/RoomListSearchEvent';\nexport * from '@/events/views/FindReservationResultsViewEvent';\nexport * from '@/events/views/FindReservationViewEvent';\nexport * from '@/events/views/MemberOnlyModalViewEvent';\nexport * from '@/events/views/StepAddonViewEvent';\nexport * from '@/events/views/StepCheckoutViewEvent';\nexport * from '@/events/views/StepDateViewEvent';\nexport * from '@/events/views/StepHotelInfoViewEvent';\nexport * from '@/events/views/StepHotelViewEvent';\nexport * from '@/events/views/StepThanksViewEvent';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0EAAwD;AACxD,kEAAgD;AAChD,oEAAkD;AAClD,4EAA0D;AAC1D,sEAAoD;AACpD,uEAAqD;AACrD,uEAAqD;AACrD,iFAA+D;AAC/D,0EAAwD;AACxD,0EAAwD;AACxD,oEAAkD;AAClD,uEAAqD;AACrD,mEAAiD;AACjD,wEAAsD;AACtD,oEAAkD;AAClD,qEAAmD;AAEnD,0EAAwD","sourcesContent":["export * from './actions/Promotion/PromotionAddedEvent';\nexport * from '@/events/actions/AddToCartEvent';\nexport * from '@/events/actions/GuestSearchEvent';\nexport * from '@/events/actions/InitialHotelDetailsEvent';\nexport * from '@/events/actions/PlacedBookingEvent';\nexport * from '@/events/actions/RemoveFromCartEvent';\nexport * from '@/events/actions/RoomListSearchEvent';\nexport * from '@/events/views/FindReservationResultsViewEvent';\nexport * from '@/events/views/FindReservationViewEvent';\nexport * from '@/events/views/MemberOnlyModalViewEvent';\nexport * from '@/events/views/StepAddonViewEvent';\nexport * from '@/events/views/StepCheckoutViewEvent';\nexport * from '@/events/views/StepDateViewEvent';\nexport * from '@/events/views/StepHotelInfoViewEvent';\nexport * from '@/events/views/StepHotelViewEvent';\nexport * from '@/events/views/StepThanksViewEvent';\n\nexport * from '@/events/state/SelectedHotelChangeEvent';\n"]}
@@ -0,0 +1,7 @@
1
+ import { Hotel } from '../../models/Client/Hotel/Hotel';
2
+ import { RoomstayEvent } from '../RoomstayEvent';
3
+ export declare class SelectedHotelChangeEvent extends RoomstayEvent {
4
+ hotel: Hotel | undefined;
5
+ constructor(hotel?: Hotel);
6
+ static getLabel(): string;
7
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectedHotelChangeEvent = void 0;
4
+ const RoomstayEvent_1 = require("../RoomstayEvent");
5
+ class SelectedHotelChangeEvent extends RoomstayEvent_1.RoomstayEvent {
6
+ constructor(hotel) {
7
+ super();
8
+ this.hotel = hotel;
9
+ }
10
+ static getLabel() {
11
+ return 'State/SelectedHotel';
12
+ }
13
+ }
14
+ exports.SelectedHotelChangeEvent = SelectedHotelChangeEvent;
15
+ //# sourceMappingURL=SelectedHotelChangeEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedHotelChangeEvent.js","sourceRoot":"/","sources":["src/events/state/SelectedHotelChangeEvent.ts"],"names":[],"mappings":";;;AACA,oDAAiD;AAEjD,MAAa,wBAAyB,SAAQ,6BAAa;IAGvD,YAAmB,KAAa;QAC5B,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,QAAQ;QACX,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ;AAZD,4DAYC","sourcesContent":["import { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { RoomstayEvent } from '../RoomstayEvent';\n\nexport class SelectedHotelChangeEvent extends RoomstayEvent {\n public hotel: Hotel | undefined;\n\n public constructor(hotel?: Hotel) {\n super();\n\n this.hotel = hotel;\n }\n\n static getLabel(): string {\n return 'State/SelectedHotel';\n }\n}\n"]}
@@ -20,7 +20,7 @@ const react_1 = __importDefault(require("react"));
20
20
  const InlinePaymentOption_1 = __importDefault(require("../../components/generic/PaymentCard/InlinePaymentOption"));
21
21
  const vgsMemberPaymentHandler = () => {
22
22
  var _a;
23
- const { hotel } = (0, hooks_1.useCurrentHotel)();
23
+ const { hotel, isMemberPaymentInformationAvailable } = (0, hooks_1.useCurrentHotel)();
24
24
  const { cards, roomstayMember } = (0, contexts_1.useMemberContext)();
25
25
  // In this instance Passthrough means that the card details are forwarded via VGS.
26
26
  const isPassthrough = (hotel === null || hotel === void 0 ? void 0 : hotel.cardProcessor) ? hotel.cardProcessor === core_1.EHotelCardProcessor.Passthrough : true;
@@ -30,7 +30,7 @@ const vgsMemberPaymentHandler = () => {
30
30
  }
31
31
  return {
32
32
  name: 'VGSMember',
33
- isAvailable: isPassthrough && !!((_a = hotel === null || hotel === void 0 ? void 0 : hotel.paymentMethods) === null || _a === void 0 ? void 0 : _a.includes(core_1.EBookingPaymentMethod.Card)) && !!(cards === null || cards === void 0 ? void 0 : cards.length),
33
+ isAvailable: isPassthrough && !!((_a = hotel === null || hotel === void 0 ? void 0 : hotel.paymentMethods) === null || _a === void 0 ? void 0 : _a.includes(core_1.EBookingPaymentMethod.Card)) && !!(cards === null || cards === void 0 ? void 0 : cards.length) && isMemberPaymentInformationAvailable,
34
34
  isExclusive: false,
35
35
  requireBookingPlaced: false,
36
36
  bookingPaymentMethod: core_1.EBookingPaymentMethod.Card,
@@ -1 +1 @@
1
- {"version":3,"file":"VGSMemberPaymentHandler.js","sourceRoot":"/","sources":["src/handlers/payment/VGSMemberPaymentHandler.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iDAAsD;AACtD,2CAAkD;AAClD,yCAA4E;AAC5E,kDAA0B;AAE1B,+GAAuF;AAIhF,MAAM,uBAAuB,GAAG,GAAmB,EAAE;;IACxD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAA,2BAAgB,GAAE,CAAC;IAErD,kFAAkF;IAClF,MAAM,aAAa,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAC,CAAC,CAAC,KAAK,CAAC,aAAa,KAAK,0BAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5G,IAAI,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,CAAC;IAE9B,IAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,EAAE;QAC7B,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,CAAA,CAAC,CAAC;KACrF;IAED,OAAO;QACH,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,aAAa,IAAI,CAAC,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,0CAAE,QAAQ,CAAC,4BAAqB,CAAC,IAAI,CAAC,CAAA,IAAI,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA;QAC9G,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,KAAK;QAC3B,oBAAoB,EAAE,4BAAqB,CAAC,IAAI;QAChD,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,8BAAC,6BAAmB,IAAC,IAAI,EAAE,IAAI,GAAI;YAC1C,KAAK,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,SAAS,EAAE,GAAS,EAAE;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAC1D,CAAC,CAAA;QACD,8BAA8B,EAAE,GAAS,EAAE;YACvC,OAAO;gBACH,MAAM,EAAE,4BAAqB,CAAC,SAAS;gBACvC,WAAW,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM;aACpC,CAAC;QACN,CAAC,CAAA;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,8BAAC,6BAAmB,IAAC,IAAI,EAAE,YAAY,GAAI;QAE9D,kBAAkB,EAAE,SAAS;QAE7B,iBAAiB,EAAE,CAAC,KAAc,EAAE,EAAE;YAClC,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAChE,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAxCW,QAAA,uBAAuB,2BAwClC","sourcesContent":["import { useMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EBookingPaymentMethod, EHotelCardProcessor } from '@roomstay/core';\nimport React from 'react';\n\nimport InlinePaymentOption from '@/components/generic/PaymentCard/InlinePaymentOption';\n\nimport { PaymentHandler } from './PaymentHandler';\n\nexport const vgsMemberPaymentHandler = (): PaymentHandler => {\n const { hotel } = useCurrentHotel();\n const { cards, roomstayMember } = useMemberContext();\n\n // In this instance Passthrough means that the card details are forwarded via VGS.\n const isPassthrough = hotel?.cardProcessor ? hotel.cardProcessor === EHotelCardProcessor.Passthrough : true;\n\n let selectedCard = cards?.[0];\n\n if (roomstayMember?.defaultCard) {\n selectedCard = cards?.find((card) => card.cardId === roomstayMember?.defaultCard);\n }\n\n return {\n name: 'VGSMember',\n isAvailable: isPassthrough && !!hotel?.paymentMethods?.includes(EBookingPaymentMethod.Card) && !!cards?.length,\n isExclusive: false,\n requireBookingPlaced: false,\n bookingPaymentMethod: EBookingPaymentMethod.Card,\n subOptions: cards?.map((card) => ({\n label: <InlinePaymentOption card={card} />,\n value: card.cardId,\n })),\n onConfirm: async () => {\n return { success: true, message: 'Using saved card' };\n },\n getBookingPaymentRequestObject: async () => {\n return {\n Method: EBookingPaymentMethod.SavedCard,\n SavedCardID: selectedCard?.cardId,\n };\n },\n renderInput: () => <InlinePaymentOption card={selectedCard} />,\n\n renderPaymentInput: undefined,\n\n onSubOptionChange: (value?: string) => {\n selectedCard = cards?.find((card) => card.cardId === value);\n },\n };\n};\n"]}
1
+ {"version":3,"file":"VGSMemberPaymentHandler.js","sourceRoot":"/","sources":["src/handlers/payment/VGSMemberPaymentHandler.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iDAAsD;AACtD,2CAAkD;AAClD,yCAA4E;AAC5E,kDAA0B;AAE1B,+GAAuF;AAIhF,MAAM,uBAAuB,GAAG,GAAmB,EAAE;;IACxD,MAAM,EAAE,KAAK,EAAE,mCAAmC,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAA,2BAAgB,GAAE,CAAC;IAErD,kFAAkF;IAClF,MAAM,aAAa,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAC,CAAC,CAAC,KAAK,CAAC,aAAa,KAAK,0BAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5G,IAAI,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,CAAC;IAE9B,IAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,EAAE;QAC7B,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,CAAA,CAAC,CAAC;KACrF;IAED,OAAO;QACH,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,aAAa,IAAI,CAAC,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,0CAAE,QAAQ,CAAC,4BAAqB,CAAC,IAAI,CAAC,CAAA,IAAI,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA,IAAI,mCAAmC;QACrJ,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,KAAK;QAC3B,oBAAoB,EAAE,4BAAqB,CAAC,IAAI;QAChD,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,8BAAC,6BAAmB,IAAC,IAAI,EAAE,IAAI,GAAI;YAC1C,KAAK,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,SAAS,EAAE,GAAS,EAAE;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAC1D,CAAC,CAAA;QACD,8BAA8B,EAAE,GAAS,EAAE;YACvC,OAAO;gBACH,MAAM,EAAE,4BAAqB,CAAC,SAAS;gBACvC,WAAW,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM;aACpC,CAAC;QACN,CAAC,CAAA;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,8BAAC,6BAAmB,IAAC,IAAI,EAAE,YAAY,GAAI;QAE9D,kBAAkB,EAAE,SAAS;QAE7B,iBAAiB,EAAE,CAAC,KAAc,EAAE,EAAE;YAClC,YAAY,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAChE,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAxCW,QAAA,uBAAuB,2BAwClC","sourcesContent":["import { useMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EBookingPaymentMethod, EHotelCardProcessor } from '@roomstay/core';\nimport React from 'react';\n\nimport InlinePaymentOption from '@/components/generic/PaymentCard/InlinePaymentOption';\n\nimport { PaymentHandler } from './PaymentHandler';\n\nexport const vgsMemberPaymentHandler = (): PaymentHandler => {\n const { hotel, isMemberPaymentInformationAvailable } = useCurrentHotel();\n const { cards, roomstayMember } = useMemberContext();\n\n // In this instance Passthrough means that the card details are forwarded via VGS.\n const isPassthrough = hotel?.cardProcessor ? hotel.cardProcessor === EHotelCardProcessor.Passthrough : true;\n\n let selectedCard = cards?.[0];\n\n if (roomstayMember?.defaultCard) {\n selectedCard = cards?.find((card) => card.cardId === roomstayMember?.defaultCard);\n }\n\n return {\n name: 'VGSMember',\n isAvailable: isPassthrough && !!hotel?.paymentMethods?.includes(EBookingPaymentMethod.Card) && !!cards?.length && isMemberPaymentInformationAvailable,\n isExclusive: false,\n requireBookingPlaced: false,\n bookingPaymentMethod: EBookingPaymentMethod.Card,\n subOptions: cards?.map((card) => ({\n label: <InlinePaymentOption card={card} />,\n value: card.cardId,\n })),\n onConfirm: async () => {\n return { success: true, message: 'Using saved card' };\n },\n getBookingPaymentRequestObject: async () => {\n return {\n Method: EBookingPaymentMethod.SavedCard,\n SavedCardID: selectedCard?.cardId,\n };\n },\n renderInput: () => <InlinePaymentOption card={selectedCard} />,\n\n renderPaymentInput: undefined,\n\n onSubOptionChange: (value?: string) => {\n selectedCard = cards?.find((card) => card.cardId === value);\n },\n };\n};\n"]}
@@ -1,10 +1,14 @@
1
1
  export declare const useCurrentHotel: () => {
2
2
  hotel: import("..").Hotel | undefined;
3
+ isPassthroughPayment: boolean;
4
+ isMemberPaymentInformationAvailable: boolean;
3
5
  isAccentColorDark: boolean;
4
6
  isAccent2ColorDark: boolean;
5
7
  changeHotel: (newHotelID: string) => void;
6
8
  } | {
7
9
  hotel?: undefined;
10
+ isPassthroughPayment?: undefined;
11
+ isMemberPaymentInformationAvailable?: undefined;
8
12
  isAccentColorDark?: undefined;
9
13
  isAccent2ColorDark?: undefined;
10
14
  changeHotel?: undefined;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useCurrentHotel = void 0;
4
4
  const contexts_1 = require("../contexts/index.js");
5
+ const core_1 = require("@roomstay/core");
5
6
  const react_1 = require("react");
6
7
  const NoCompanyContextError_1 = require("../errors/NoCompanyContextError");
7
8
  const Color_1 = require("../util/Color");
@@ -25,8 +26,12 @@ const useCurrentHotel = () => {
25
26
  return false;
26
27
  return (0, Color_1.lightOrDark)(hotel.colors.accent2) === 'dark';
27
28
  }, [(_b = hotel === null || hotel === void 0 ? void 0 : hotel.colors) === null || _b === void 0 ? void 0 : _b.accent2]);
29
+ const isPassthroughPayment = (hotel === null || hotel === void 0 ? void 0 : hotel.cardProcessor) === core_1.EHotelCardProcessor.Passthrough;
30
+ const isMemberPaymentInformationAvailable = isPassthroughPayment && (hotel === null || hotel === void 0 ? void 0 : hotel.disableSavedPayments) !== true;
28
31
  return {
29
32
  hotel,
33
+ isPassthroughPayment,
34
+ isMemberPaymentInformationAvailable,
30
35
  isAccentColorDark,
31
36
  isAccent2ColorDark,
32
37
  changeHotel: (newHotelID) => {
@@ -1 +1 @@
1
- {"version":3,"file":"CurrentHotelHook.js","sourceRoot":"/","sources":["src/hooks/CurrentHotelHook.tsx"],"names":[],"mappings":";;;AAAA,iDAAoD;AACpD,iCAA4C;AAE5C,0EAAuE;AACvE,wCAA2C;AAEpC,MAAM,eAAe,GAAG,GAAG,EAAE;;IAChC,IAAI;QACA,MAAM,cAAc,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC;QAE3C,IAAI,CAAC,cAAc,EAAE;YACjB,MAAM,IAAI,6CAAqB,EAAE,CAAC;SACrC;QAED,MAAM,iBAAiB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;YACnC,IAAI,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,CAAA;gBAAE,OAAO,KAAK,CAAC;YAEzC,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QACvD,CAAC,EAAE,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,CAAC,CAAC,CAAC;QAE5B,MAAM,kBAAkB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;YACpC,IAAI,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,OAAO,CAAA;gBAAE,OAAO,KAAK,CAAC;YAE1C,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;QACxD,CAAC,EAAE,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,OAAO,CAAC,CAAC,CAAC;QAE7B,OAAO;YACH,KAAK;YACL,iBAAiB;YACjB,kBAAkB;YAElB,WAAW,EAAE,CAAC,UAAkB,EAAE,EAAE;gBAChC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;SACJ,CAAC;KACL;IAAC,OAAO,EAAE,EAAE;QACT,kEAAkE;QAClE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AAnCW,QAAA,eAAe,mBAmC1B","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useContext, useMemo } from 'react';\n\nimport { NoCompanyContextError } from '@/errors/NoCompanyContextError';\nimport { lightOrDark } from '@/util/Color';\n\nexport const useCurrentHotel = () => {\n try {\n const companyContext = useContext(CompanyContext);\n const hotel = companyContext.selectedHotel;\n\n if (!companyContext) {\n throw new NoCompanyContextError();\n }\n\n const isAccentColorDark = useMemo(() => {\n if (!hotel?.colors?.accent) return false;\n\n return lightOrDark(hotel.colors.accent) === 'dark';\n }, [hotel?.colors?.accent]);\n\n const isAccent2ColorDark = useMemo(() => {\n if (!hotel?.colors?.accent2) return false;\n\n return lightOrDark(hotel.colors.accent2) === 'dark';\n }, [hotel?.colors?.accent2]);\n\n return {\n hotel,\n isAccentColorDark,\n isAccent2ColorDark,\n\n changeHotel: (newHotelID: string) => {\n companyContext.changeHotel(newHotelID);\n },\n };\n } catch (ex) {\n // Masssive try /catch to isolate non-contextual uses of this hook\n console.error(ex);\n return {};\n }\n};\n"]}
1
+ {"version":3,"file":"CurrentHotelHook.js","sourceRoot":"/","sources":["src/hooks/CurrentHotelHook.tsx"],"names":[],"mappings":";;;AAAA,iDAAoD;AACpD,yCAAqD;AACrD,iCAA4C;AAE5C,0EAAuE;AACvE,wCAA2C;AAEpC,MAAM,eAAe,GAAG,GAAG,EAAE;;IAChC,IAAI;QACA,MAAM,cAAc,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC;QAE3C,IAAI,CAAC,cAAc,EAAE;YACjB,MAAM,IAAI,6CAAqB,EAAE,CAAC;SACrC;QAED,MAAM,iBAAiB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;YACnC,IAAI,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,CAAA;gBAAE,OAAO,KAAK,CAAC;YAEzC,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QACvD,CAAC,EAAE,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,CAAC,CAAC,CAAC;QAE5B,MAAM,kBAAkB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;YACpC,IAAI,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,OAAO,CAAA;gBAAE,OAAO,KAAK,CAAC;YAE1C,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;QACxD,CAAC,EAAE,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,OAAO,CAAC,CAAC,CAAC;QAE7B,MAAM,oBAAoB,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,MAAK,0BAAmB,CAAC,WAAW,CAAC;QAEtF,MAAM,mCAAmC,GAAG,oBAAoB,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,oBAAoB,MAAK,IAAI,CAAC;QAEzG,OAAO;YACH,KAAK;YACL,oBAAoB;YACpB,mCAAmC;YACnC,iBAAiB;YACjB,kBAAkB;YAElB,WAAW,EAAE,CAAC,UAAkB,EAAE,EAAE;gBAChC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;SACJ,CAAC;KACL;IAAC,OAAO,EAAE,EAAE;QACT,kEAAkE;QAClE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC;KACb;AACL,CAAC,CAAC;AAzCW,QAAA,eAAe,mBAyC1B","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { EHotelCardProcessor } from '@roomstay/core';\nimport { useContext, useMemo } from 'react';\n\nimport { NoCompanyContextError } from '@/errors/NoCompanyContextError';\nimport { lightOrDark } from '@/util/Color';\n\nexport const useCurrentHotel = () => {\n try {\n const companyContext = useContext(CompanyContext);\n const hotel = companyContext.selectedHotel;\n\n if (!companyContext) {\n throw new NoCompanyContextError();\n }\n\n const isAccentColorDark = useMemo(() => {\n if (!hotel?.colors?.accent) return false;\n\n return lightOrDark(hotel.colors.accent) === 'dark';\n }, [hotel?.colors?.accent]);\n\n const isAccent2ColorDark = useMemo(() => {\n if (!hotel?.colors?.accent2) return false;\n\n return lightOrDark(hotel.colors.accent2) === 'dark';\n }, [hotel?.colors?.accent2]);\n\n const isPassthroughPayment = hotel?.cardProcessor === EHotelCardProcessor.Passthrough;\n\n const isMemberPaymentInformationAvailable = isPassthroughPayment && hotel?.disableSavedPayments !== true;\n\n return {\n hotel,\n isPassthroughPayment,\n isMemberPaymentInformationAvailable,\n isAccentColorDark,\n isAccent2ColorDark,\n\n changeHotel: (newHotelID: string) => {\n companyContext.changeHotel(newHotelID);\n },\n };\n } catch (ex) {\n // Masssive try /catch to isolate non-contextual uses of this hook\n console.error(ex);\n return {};\n }\n};\n"]}
@@ -24,8 +24,8 @@ let vgsCollectLoader = null;
24
24
  const getVGSVaultKey = (vaultName = 'standard') => {
25
25
  var _a, _b, _c, _d, _e, _f;
26
26
  const { hotel } = (0, CurrentHotelHook_1.useCurrentHotel)();
27
- const members = (_c = (_b = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.vgs) === null || _a === void 0 ? void 0 : _a.vaultNames) === null || _b === void 0 ? void 0 : _b.members) !== null && _c !== void 0 ? _c : 'tntmupn9ras';
28
- const standard = (_f = (_e = (_d = hotel === null || hotel === void 0 ? void 0 : hotel.vgs) === null || _d === void 0 ? void 0 : _d.vaultNames) === null || _e === void 0 ? void 0 : _e.standard) !== null && _f !== void 0 ? _f : 'tntjyo5u2pi';
27
+ const members = (_c = (_b = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.vgs) === null || _a === void 0 ? void 0 : _a.vaultNames) === null || _b === void 0 ? void 0 : _b.members) !== null && _c !== void 0 ? _c : 'tntjyo5u2pi';
28
+ const standard = (_f = (_e = (_d = hotel === null || hotel === void 0 ? void 0 : hotel.vgs) === null || _d === void 0 ? void 0 : _d.vaultNames) === null || _e === void 0 ? void 0 : _e.standard) !== null && _f !== void 0 ? _f : 'tntmupn9ras';
29
29
  switch (vaultName) {
30
30
  case 'members':
31
31
  return members;
@@ -1 +1 @@
1
- {"version":3,"file":"VGSHooks.js","sourceRoot":"/","sources":["src/hooks/VGSHooks.tsx"],"names":[],"mappings":"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","sourcesContent":["import classNames from 'classnames';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { IVGSVaultNames } from '@/models/Client/Hotel/Hotel';\nimport { ECardType } from '@/models/PaymentCard';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { getAuth } from '@/util/AsyncAuth';\n\nimport { useCurrentHotel } from './CurrentHotelHook';\n\nlet vgsShowLoader: Promise<any> | null = null;\nlet VGSShow: any;\n\nlet vgsCollectLoader: Promise<any> | null = null;\n\nconst getVGSVaultKey = (vaultName: VGSVaultType = 'standard'): string => {\n const { hotel } = useCurrentHotel();\n\n const members = hotel?.vgs?.vaultNames?.members ?? 'tntmupn9ras';\n const standard = hotel?.vgs?.vaultNames?.standard ?? 'tntjyo5u2pi';\n\n switch (vaultName) {\n case 'members':\n return members;\n case 'standard':\n default:\n return standard;\n }\n};\n\ndeclare global {\n interface Window {\n VGSCollect: any;\n }\n}\n\nwindow.VGSCollect = window.VGSCollect || {};\n\ntype VGSVaultType = keyof IVGSVaultNames;\n\ntype UseVgsShowProps = {\n name: string;\n value?: string;\n\n styles?: Record<string, any>;\n vaultType?: VGSVaultType;\n};\n\n/**\n * TODO: This only works for the Members vault right now\n *\n * Need to:\n * - Update the serializer\n * - Handle errors better\n */\nexport const useVgsShow = (props: UseVgsShowProps) => {\n const vgsKeys = getVGSVaultKey('members');\n\n const [randomId] = useState(btoa((Math.random() * Math.random() * Date.now()).toString()).replace(/=/gi, ''));\n const [isLoading, setIsLoading] = useState(false);\n\n const targetRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (vgsShowLoader === null) {\n vgsShowLoader = (async () => {\n try {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-show/2.0.2/show.js', 'vgs-show');\n\n VGSShow = window.VGSShow.create(vgsKeys, (state: any) => {}).setEnvironment('live');\n } catch (ex: any) {\n console.error('Unable to load vgs-show ' + ex.message);\n }\n })();\n }\n }, []);\n\n const handleReveal = async () => {\n const Auth = await getAuth();\n if (VGSShow && targetRef?.current) {\n targetRef.current.classList.add(randomId);\n setIsLoading(true);\n\n Auth.currentAuthenticatedUser().then((cognitoData) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n const revealer = VGSShow.request({\n name: props.name,\n method: 'POST',\n path: '/members/vgs-auth',\n payload: {\n [props.name]: `${props.value}`,\n },\n headers: {\n Authorization: jwtToken,\n },\n serializers: [VGSShow.SERIALIZERS.replace('(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})', '$1 $2 $3 $4')],\n htmlWrapper: 'text',\n jsonPathSelector: `${props.name}`,\n });\n\n // TODO: Handle failure on reveal\n revealer.on('revealSuccess', () => {\n setIsLoading(false);\n });\n\n revealer.on('revealFail', () => {\n setIsLoading(false);\n });\n if (targetRef.current) targetRef.current.innerHTML = '';\n revealer.render(`.${randomId}`, props.styles);\n });\n }\n };\n\n useEffect(() => {\n handleReveal();\n }, [VGSShow, targetRef, props.name, props.value]);\n\n return { targetRef, isLoading };\n};\n\ntype VGSCollectProps = {\n name: string;\n type: 'card-expiration-date' | 'text' | 'card-number' | 'card-security-code';\n label: string;\n\n vgsProps: {\n validations?: ('required' | 'validCardNumber' | 'validCardExpirationDate' | 'validCardSecurityCode')[];\n disabled?: boolean;\n css: object;\n placeholder?: string;\n\n [name: string]: any;\n };\n};\n\ntype VGSCollectInputState = {\n name: string;\n label: string;\n type: string;\n\n isFocused: boolean;\n isValid: boolean;\n\n vgsInput: any;\n\n cardType?: ECardType;\n};\n\nexport const useVgsCollect = (fields: VGSCollectProps[], vaultType: VGSVaultType = 'standard') => {\n const vaultKey = getVGSVaultKey(vaultType);\n\n const refs = fields.map(() => {\n return useRef<HTMLDivElement | null>(null);\n });\n\n const getDefaultStateFromFields: () => VGSCollectInputState[] = () => {\n return fields.map((field) => {\n return {\n isFocused: false,\n isValid: false,\n\n name: field.name,\n label: field.label,\n type: field.type,\n\n vgsInput: null,\n };\n });\n };\n\n const mapInputConfigToVGS = (config: VGSCollectProps) => {\n return {\n name: config.name,\n type: config.type,\n ...config.vgsProps,\n disabled: config.vgsProps.disabled || undefined,\n };\n };\n\n const getClassesFormInput = (index: number, extendedClasses?: string) => {\n const field: VGSCollectInputState = inputState[index];\n const config = fields[index];\n\n if (!field) return '';\n\n return classNames('c-input', 'c-input--vgs', extendedClasses, {\n '--selected': field.isFocused,\n '--success': field.isValid !== null && field.isValid,\n '--error': field.isValid !== null && !field.isValid,\n '--disabled': !!config?.vgsProps?.disabled,\n });\n };\n\n const [vgsLoaded, setVgsLoaded] = useState(false);\n const [vgsForm, setVgsForm] = useState<any>(null);\n const [inputState, setInputState] = useState<VGSCollectInputState[]>(getDefaultStateFromFields());\n\n /** Loading VGS, or seeing if it's been loaded before, and binding onto that. */\n useEffect(() => {\n let cancelled = false;\n\n if (vgsCollectLoader === null) {\n vgsCollectLoader = (async () => {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-collect/2.18.1/vgs-collect.js', 'vgs-collect');\n\n if (!cancelled) {\n setVgsLoaded(true);\n }\n })();\n } else {\n vgsCollectLoader.then(() => {\n if (!cancelled) {\n setVgsLoaded(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (vgsLoaded && !vgsForm) {\n const form = window.VGSCollect.create(vaultKey, 'live', (state: any) => {\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (const input of newState) {\n const vgsState = state[input.name];\n\n if (vgsState) {\n input.isFocused = vgsState.isFocused;\n input.isValid = !vgsState.isEmpty ? vgsState.isValid : null;\n\n if (input.type === 'card-number') {\n input.cardType = vgsState.cardType;\n }\n }\n }\n\n return newState;\n });\n });\n\n setVgsForm(form);\n\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (let i = 0; i < newState.length; i++) {\n const input = newState[i];\n const inputConfig = fields[i];\n\n input.vgsInput = form.field(refs[i].current, mapInputConfigToVGS(inputConfig));\n }\n\n return newState;\n });\n }\n }, [vgsLoaded, vgsForm, refs]);\n\n const triggerFieldUpdate = () => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (!vgsForm) {\n // Means VGS Collect has not loaded yet.\n return;\n }\n\n for (let i = 0; i < inputState.length; i++) {\n const input = inputState[i];\n const inputConfig = fields[i];\n\n if (input.vgsInput) {\n input.vgsInput.update?.(mapInputConfigToVGS(inputConfig));\n }\n }\n };\n\n return {\n fields: fields.map((item, index) => {\n return {\n ref: refs[index],\n state: inputState[index],\n getClasses: (extendedClasses?: string) => getClassesFormInput(index, extendedClasses),\n };\n }),\n triggerFieldUpdate,\n vgsForm,\n };\n};\n"]}
1
+ {"version":3,"file":"VGSHooks.js","sourceRoot":"/","sources":["src/hooks/VGSHooks.tsx"],"names":[],"mappings":"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","sourcesContent":["import classNames from 'classnames';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { IVGSVaultNames } from '@/models/Client/Hotel/Hotel';\nimport { ECardType } from '@/models/PaymentCard';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { getAuth } from '@/util/AsyncAuth';\n\nimport { useCurrentHotel } from './CurrentHotelHook';\n\nlet vgsShowLoader: Promise<any> | null = null;\nlet VGSShow: any;\n\nlet vgsCollectLoader: Promise<any> | null = null;\n\nconst getVGSVaultKey = (vaultName: VGSVaultType = 'standard'): string => {\n const { hotel } = useCurrentHotel();\n\n const members = hotel?.vgs?.vaultNames?.members ?? 'tntjyo5u2pi';\n const standard = hotel?.vgs?.vaultNames?.standard ?? 'tntmupn9ras';\n\n switch (vaultName) {\n case 'members':\n return members;\n case 'standard':\n default:\n return standard;\n }\n};\n\ndeclare global {\n interface Window {\n VGSCollect: any;\n }\n}\n\nwindow.VGSCollect = window.VGSCollect || {};\n\ntype VGSVaultType = keyof IVGSVaultNames;\n\ntype UseVgsShowProps = {\n name: string;\n value?: string;\n\n styles?: Record<string, any>;\n vaultType?: VGSVaultType;\n};\n\n/**\n * TODO: This only works for the Members vault right now\n *\n * Need to:\n * - Update the serializer\n * - Handle errors better\n */\nexport const useVgsShow = (props: UseVgsShowProps) => {\n const vgsKeys = getVGSVaultKey('members');\n\n const [randomId] = useState(btoa((Math.random() * Math.random() * Date.now()).toString()).replace(/=/gi, ''));\n const [isLoading, setIsLoading] = useState(false);\n\n const targetRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (vgsShowLoader === null) {\n vgsShowLoader = (async () => {\n try {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-show/2.0.2/show.js', 'vgs-show');\n\n VGSShow = window.VGSShow.create(vgsKeys, (state: any) => {}).setEnvironment('live');\n } catch (ex: any) {\n console.error('Unable to load vgs-show ' + ex.message);\n }\n })();\n }\n }, []);\n\n const handleReveal = async () => {\n const Auth = await getAuth();\n if (VGSShow && targetRef?.current) {\n targetRef.current.classList.add(randomId);\n setIsLoading(true);\n\n Auth.currentAuthenticatedUser().then((cognitoData) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n const revealer = VGSShow.request({\n name: props.name,\n method: 'POST',\n path: '/members/vgs-auth',\n payload: {\n [props.name]: `${props.value}`,\n },\n headers: {\n Authorization: jwtToken,\n },\n serializers: [VGSShow.SERIALIZERS.replace('(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})', '$1 $2 $3 $4')],\n htmlWrapper: 'text',\n jsonPathSelector: `${props.name}`,\n });\n\n // TODO: Handle failure on reveal\n revealer.on('revealSuccess', () => {\n setIsLoading(false);\n });\n\n revealer.on('revealFail', () => {\n setIsLoading(false);\n });\n if (targetRef.current) targetRef.current.innerHTML = '';\n revealer.render(`.${randomId}`, props.styles);\n });\n }\n };\n\n useEffect(() => {\n handleReveal();\n }, [VGSShow, targetRef, props.name, props.value]);\n\n return { targetRef, isLoading };\n};\n\ntype VGSCollectProps = {\n name: string;\n type: 'card-expiration-date' | 'text' | 'card-number' | 'card-security-code';\n label: string;\n\n vgsProps: {\n validations?: ('required' | 'validCardNumber' | 'validCardExpirationDate' | 'validCardSecurityCode')[];\n disabled?: boolean;\n css: object;\n placeholder?: string;\n\n [name: string]: any;\n };\n};\n\ntype VGSCollectInputState = {\n name: string;\n label: string;\n type: string;\n\n isFocused: boolean;\n isValid: boolean;\n\n vgsInput: any;\n\n cardType?: ECardType;\n};\n\nexport const useVgsCollect = (fields: VGSCollectProps[], vaultType: VGSVaultType = 'standard') => {\n const vaultKey = getVGSVaultKey(vaultType);\n\n const refs = fields.map(() => {\n return useRef<HTMLDivElement | null>(null);\n });\n\n const getDefaultStateFromFields: () => VGSCollectInputState[] = () => {\n return fields.map((field) => {\n return {\n isFocused: false,\n isValid: false,\n\n name: field.name,\n label: field.label,\n type: field.type,\n\n vgsInput: null,\n };\n });\n };\n\n const mapInputConfigToVGS = (config: VGSCollectProps) => {\n return {\n name: config.name,\n type: config.type,\n ...config.vgsProps,\n disabled: config.vgsProps.disabled || undefined,\n };\n };\n\n const getClassesFormInput = (index: number, extendedClasses?: string) => {\n const field: VGSCollectInputState = inputState[index];\n const config = fields[index];\n\n if (!field) return '';\n\n return classNames('c-input', 'c-input--vgs', extendedClasses, {\n '--selected': field.isFocused,\n '--success': field.isValid !== null && field.isValid,\n '--error': field.isValid !== null && !field.isValid,\n '--disabled': !!config?.vgsProps?.disabled,\n });\n };\n\n const [vgsLoaded, setVgsLoaded] = useState(false);\n const [vgsForm, setVgsForm] = useState<any>(null);\n const [inputState, setInputState] = useState<VGSCollectInputState[]>(getDefaultStateFromFields());\n\n /** Loading VGS, or seeing if it's been loaded before, and binding onto that. */\n useEffect(() => {\n let cancelled = false;\n\n if (vgsCollectLoader === null) {\n vgsCollectLoader = (async () => {\n await RoomstayThemeEngine.loadScript('https://js.verygoodvault.com/vgs-collect/2.18.1/vgs-collect.js', 'vgs-collect');\n\n if (!cancelled) {\n setVgsLoaded(true);\n }\n })();\n } else {\n vgsCollectLoader.then(() => {\n if (!cancelled) {\n setVgsLoaded(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (vgsLoaded && !vgsForm) {\n const form = window.VGSCollect.create(vaultKey, 'live', (state: any) => {\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (const input of newState) {\n const vgsState = state[input.name];\n\n if (vgsState) {\n input.isFocused = vgsState.isFocused;\n input.isValid = !vgsState.isEmpty ? vgsState.isValid : null;\n\n if (input.type === 'card-number') {\n input.cardType = vgsState.cardType;\n }\n }\n }\n\n return newState;\n });\n });\n\n setVgsForm(form);\n\n setInputState((oldState) => {\n const newState = [...oldState];\n\n for (let i = 0; i < newState.length; i++) {\n const input = newState[i];\n const inputConfig = fields[i];\n\n input.vgsInput = form.field(refs[i].current, mapInputConfigToVGS(inputConfig));\n }\n\n return newState;\n });\n }\n }, [vgsLoaded, vgsForm, refs]);\n\n const triggerFieldUpdate = () => {\n for (const ref of refs) {\n if (!ref?.current) {\n // Means we've still to wait for all the refs to bind\n return;\n }\n }\n\n if (!vgsForm) {\n // Means VGS Collect has not loaded yet.\n return;\n }\n\n for (let i = 0; i < inputState.length; i++) {\n const input = inputState[i];\n const inputConfig = fields[i];\n\n if (input.vgsInput) {\n input.vgsInput.update?.(mapInputConfigToVGS(inputConfig));\n }\n }\n };\n\n return {\n fields: fields.map((item, index) => {\n return {\n ref: refs[index],\n state: inputState[index],\n getClasses: (extendedClasses?: string) => getClassesFormInput(index, extendedClasses),\n };\n }),\n triggerFieldUpdate,\n vgsForm,\n };\n};\n"]}