@roomstay/frontend 2.6.31 → 2.6.32
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.
- package/dist/166.bundle.js +1 -1
- package/dist/279.bundle.js +1 -1
- package/dist/370.bundle.js +1 -1
- package/dist/449.bundle.js +1 -1
- package/dist/586.bundle.js +1 -1
- package/dist/736.bundle.js +1 -1
- package/dist/873.bundle.js +1 -1
- package/dist/903.bundle.js +1 -1
- package/dist/927.bundle.js +1 -1
- package/dist/972.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.d.ts +5 -4
- package/dist/src/api/AvailabilityAPI.js +23 -29
- package/dist/src/api/AvailabilityAPI.js.map +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.js +1 -0
- package/dist/src/components/generic/InputGroup/InputGroup.js.map +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.types.d.ts +1 -1
- package/dist/src/components/generic/InputGroup/InputGroup.types.js.map +1 -1
- package/dist/src/components/generic/ScrollToTop.js +10 -1
- package/dist/src/components/generic/ScrollToTop.js.map +1 -1
- package/dist/src/components/generic/date/DatePicker.js +2 -1
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerDay.js +2 -1
- package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
- package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +4 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/EmailAndFullnameMemberModal.js +8 -4
- package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -0
- package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.d.ts +4 -0
- package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js +29 -0
- package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js.map +1 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.d.ts +8 -3
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.js +24 -23
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -0
- package/dist/src/components/members/SignInModal/FamilyNameMemberModal.d.ts +4 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/FamilyNameMemberModal.js +6 -4
- package/dist/src/components/members/SignInModal/FamilyNameMemberModal.js.map +1 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.d.ts +1 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.js +31 -35
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -0
- package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.d.ts +1 -1
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.types.js.map +1 -0
- package/dist/src/components/members/SignInModal/MemberSignInModal.js +86 -0
- package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -0
- package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +72 -4
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/date/PeoplePicker.js +1 -0
- package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
- package/dist/src/components/steps/date/PeoplePickerRow.d.ts +1 -0
- package/dist/src/components/steps/date/PeoplePickerRow.js +14 -4
- package/dist/src/components/steps/date/PeoplePickerRow.js.map +1 -1
- package/dist/src/components/steps/date/StepDatePricePerRoom.js +2 -1
- package/dist/src/components/steps/date/StepDatePricePerRoom.js.map +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js.map +1 -1
- package/dist/src/components/steps/room/StepRoomBestRateAlert.js +13 -10
- package/dist/src/components/steps/room/StepRoomBestRateAlert.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +5 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
- package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +3 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +8 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +5 -0
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -0
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +22 -19
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +4 -2
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/HotelOverridesContext.js +8 -0
- package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
- package/dist/src/engines/BaseEngine.d.ts +4 -1
- package/dist/src/engines/BaseEngine.js +6 -1
- package/dist/src/engines/BaseEngine.js.map +1 -1
- package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +1 -1
- package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js.map +1 -1
- package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
- package/dist/src/hooks/useCalendarNightStay.js +4 -2
- package/dist/src/hooks/useCalendarNightStay.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +1 -1
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/Api/HotelOverrideDTO.d.ts +15 -7
- package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +12 -0
- package/dist/src/models/BasketRow.js +17 -0
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -1
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Confirmation.d.ts +5 -0
- package/dist/src/models/Confirmation.js +5 -1
- package/dist/src/models/Confirmation.js.map +1 -1
- package/dist/src/models/LocalStorageModel.d.ts +7 -0
- package/dist/src/models/LocalStorageModel.js +3 -0
- package/dist/src/models/LocalStorageModel.js.map +1 -0
- package/dist/src/models/Promotion/IPromotion.type.d.ts +2 -0
- package/dist/src/models/Promotion/IPromotion.type.js.map +1 -1
- package/dist/src/providers/RoomstayThemeEngine.js +1 -1
- package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
- package/dist/src/providers/storage/LocalStorageProvider.d.ts +9 -14
- package/dist/src/providers/storage/LocalStorageProvider.js +19 -97
- package/dist/src/providers/storage/LocalStorageProvider.js.map +1 -1
- package/dist/src/providers/{SessionProvider.d.ts → storage/SessionProvider.d.ts} +1 -1
- package/dist/src/providers/{SessionProvider.js → storage/SessionProvider.js} +13 -12
- package/dist/src/providers/storage/SessionProvider.js.map +1 -0
- package/dist/src/providers/storage/StorageProvider.d.ts +14 -8
- package/dist/src/providers/storage/StorageProvider.js +94 -7
- package/dist/src/providers/storage/StorageProvider.js.map +1 -1
- package/dist/src/util/CalendarHelper.d.ts +1 -0
- package/dist/src/util/CalendarHelper.js +16 -1
- package/dist/src/util/CalendarHelper.js.map +1 -1
- package/dist/src/util/EventsHelper.js +2 -2
- package/dist/src/util/EventsHelper.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/jest/providers/SessionProvider.test.js +7 -7
- package/dist/tests/jest/providers/SessionProvider.test.js.map +1 -1
- package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js +17 -28
- package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/dist/vendors.bundle.js.LICENSE.txt +8 -2
- package/package.json +4 -2
- package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.d.ts +0 -4
- package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.d.ts +0 -8
- package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types.js.map +0 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +0 -62
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +0 -1
- package/dist/src/providers/SessionProvider.js.map +0 -1
- /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.js +0 -0
- /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/MemberSignInModal.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EUserProfileFormKey = void 0;
|
|
3
|
+
exports.EUserRequiredInputFormKey = exports.EUserProfileFormKey = void 0;
|
|
4
4
|
var EUserProfileFormKey;
|
|
5
5
|
(function (EUserProfileFormKey) {
|
|
6
6
|
EUserProfileFormKey["Title"] = "Title";
|
|
@@ -16,4 +16,8 @@ var EUserProfileFormKey;
|
|
|
16
16
|
EUserProfileFormKey["CountryId"] = "CountryId";
|
|
17
17
|
EUserProfileFormKey["CountryCode"] = "CountryCode";
|
|
18
18
|
})(EUserProfileFormKey = exports.EUserProfileFormKey || (exports.EUserProfileFormKey = {}));
|
|
19
|
+
var EUserRequiredInputFormKey;
|
|
20
|
+
(function (EUserRequiredInputFormKey) {
|
|
21
|
+
EUserRequiredInputFormKey["AuxInputs"] = "AuxInputs";
|
|
22
|
+
})(EUserRequiredInputFormKey = exports.EUserRequiredInputFormKey || (exports.EUserRequiredInputFormKey = {}));
|
|
19
23
|
//# sourceMappingURL=Confirmation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Confirmation.js","sourceRoot":"/","sources":["src/models/Confirmation.ts"],"names":[],"mappings":";;;AAKA,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC3B,sCAAe,CAAA;IACf,4CAAqB,CAAA;IACrB,0CAAmB,CAAA;IACnB,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,oCAAa,CAAA;IACb,4CAAqB,CAAA;IACrB,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,8CAAuB,CAAA;IACvB,kDAA2B,CAAA;AAC/B,CAAC,EAbW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAa9B","sourcesContent":["import { EBookingPaymentMethod, IBookingPayment } from '@roomstay/core';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\nimport BasketRowDifferences from './BasketRowDifferences';\n\nexport enum EUserProfileFormKey {\n Title = 'Title',\n Forename = 'Forename',\n Surname = 'Surname',\n Email = 'Email',\n Phone = 'Phone',\n Address = 'Address',\n City = 'City',\n PostCode = 'PostCode',\n State = 'State',\n Country = 'Country',\n CountryId = 'CountryId',\n CountryCode = 'CountryCode',\n}\n\nexport type TUserProfileFormValues = {\n [userProfileKey in EUserProfileFormKey]: string;\n} & { AuxInputs?: { [key: string]: string | number } };\n\nexport interface ConfirmationFormValues {\n IATANumber?: string;\n userProfiles: TUserProfileFormValues[];\n copyCheckBox?: boolean;\n paymentMethod: EBookingPaymentMethod;\n marketingOptIn: boolean;\n}\n\nexport interface IBookValidationResult {\n differences: BasketRowDifferences[];\n warnings: string[];\n}\n\nexport type FBookValidationCallback = (validationResult?: IBookValidationResult) => void;\nexport type FBookSuccessCallback = (data: ReservationsDTO) => Promise<void>;\nexport type FBookValidateFunction = () => Promise<boolean>;\nexport type FBookGetPaymentDetails = () => Promise<IBookingPayment>;\n"]}
|
|
1
|
+
{"version":3,"file":"Confirmation.js","sourceRoot":"/","sources":["src/models/Confirmation.ts"],"names":[],"mappings":";;;AAKA,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC3B,sCAAe,CAAA;IACf,4CAAqB,CAAA;IACrB,0CAAmB,CAAA;IACnB,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,oCAAa,CAAA;IACb,4CAAqB,CAAA;IACrB,sCAAe,CAAA;IACf,0CAAmB,CAAA;IACnB,8CAAuB,CAAA;IACvB,kDAA2B,CAAA;AAC/B,CAAC,EAbW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAa9B;AAED,IAAY,yBAEX;AAFD,WAAY,yBAAyB;IACjC,oDAAuB,CAAA;AAC3B,CAAC,EAFW,yBAAyB,GAAzB,iCAAyB,KAAzB,iCAAyB,QAEpC","sourcesContent":["import { EBookingPaymentMethod, IBookingPayment } from '@roomstay/core';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\nimport BasketRowDifferences from './BasketRowDifferences';\n\nexport enum EUserProfileFormKey {\n Title = 'Title',\n Forename = 'Forename',\n Surname = 'Surname',\n Email = 'Email',\n Phone = 'Phone',\n Address = 'Address',\n City = 'City',\n PostCode = 'PostCode',\n State = 'State',\n Country = 'Country',\n CountryId = 'CountryId',\n CountryCode = 'CountryCode',\n}\n\nexport enum EUserRequiredInputFormKey {\n AuxInputs = 'AuxInputs',\n}\n\nexport type TUserProfileFormValues = {\n [userProfileKey in EUserProfileFormKey]: string;\n} & { AuxInputs?: { [key: string]: string | number } } & {\n CaptureChildAge?: string[];\n};\n\nexport interface ConfirmationFormValues {\n IATANumber?: string;\n userProfiles: TUserProfileFormValues[];\n copyCheckBox?: boolean;\n paymentMethod: EBookingPaymentMethod;\n marketingOptIn: boolean;\n}\n\nexport interface IBookValidationResult {\n differences: BasketRowDifferences[];\n warnings: string[];\n}\n\nexport type FBookValidationCallback = (validationResult?: IBookValidationResult) => void;\nexport type FBookSuccessCallback = (data: ReservationsDTO) => Promise<void>;\nexport type FBookValidateFunction = () => Promise<boolean>;\nexport type FBookGetPaymentDetails = () => Promise<IBookingPayment>;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalStorageModel.js","sourceRoot":"/","sources":["src/models/LocalStorageModel.ts"],"names":[],"mappings":"","sourcesContent":["import { SignInUser } from '@frontend/contexts';\n\n/**\n * Local storage object that is retained between reloads\n */\nexport type LocalStorageModel = {\n user?: SignInUser;\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Property } from 'csstype';
|
|
1
2
|
import dayjs from 'dayjs';
|
|
2
3
|
export type IPromotionApplication = {
|
|
3
4
|
checkInDate?: string;
|
|
@@ -24,6 +25,7 @@ export type IPromotion = {
|
|
|
24
25
|
memberOnlyModalButtonText?: string;
|
|
25
26
|
memberOnlyDisableDefaultPromo?: boolean;
|
|
26
27
|
memberOnlyModalImage?: string;
|
|
28
|
+
memberOnlyModalImageSize: Property.ObjectFit;
|
|
27
29
|
testCriteria: (criteria: IPromotionTestCriteria) => Promise<boolean>;
|
|
28
30
|
onApply: (criteria: IPromotionTestCriteria) => IPromotionApplication;
|
|
29
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IPromotion.type.js","sourceRoot":"/","sources":["src/models/Promotion/IPromotion.type.ts"],"names":[],"mappings":"","sourcesContent":["import dayjs from 'dayjs';\n\nexport type IPromotionApplication = {\n checkInDate?: string;\n checkOutDate?: string;\n\n adults?: number;\n children?: number;\n infants?: number;\n\n promoCode?: string;\n};\n\nexport type IPromotionTestCriteria = {\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n};\n\nexport type IPromotion = {\n name: string;\n description: string;\n\n requireMemberPromotion?: boolean;\n\n memberOnlyModalTitle?: string;\n memberOnlyModalSubtitle?: string;\n memberOnlyModalButtonText?: string;\n memberOnlyDisableDefaultPromo?: boolean;\n memberOnlyModalImage?: string;\n\n testCriteria: (criteria: IPromotionTestCriteria) => Promise<boolean>;\n onApply: (criteria: IPromotionTestCriteria) => IPromotionApplication;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"IPromotion.type.js","sourceRoot":"/","sources":["src/models/Promotion/IPromotion.type.ts"],"names":[],"mappings":"","sourcesContent":["import { Property } from 'csstype';\nimport dayjs from 'dayjs';\n\nexport type IPromotionApplication = {\n checkInDate?: string;\n checkOutDate?: string;\n\n adults?: number;\n children?: number;\n infants?: number;\n\n promoCode?: string;\n};\n\nexport type IPromotionTestCriteria = {\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n};\n\nexport type IPromotion = {\n name: string;\n description: string;\n\n requireMemberPromotion?: boolean;\n\n memberOnlyModalTitle?: string;\n memberOnlyModalSubtitle?: string;\n memberOnlyModalButtonText?: string;\n memberOnlyDisableDefaultPromo?: boolean;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n\n testCriteria: (criteria: IPromotionTestCriteria) => Promise<boolean>;\n onApply: (criteria: IPromotionTestCriteria) => IPromotionApplication;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomstayThemeEngine.js","sourceRoot":"/","sources":["src/providers/RoomstayThemeEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ROP from '@juggle/resize-observer';\nimport { IHotelColorScheme } from '@roomstay/core';\nimport * as Sentry from '@sentry/browser';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport type { Company } from '@/models/Client/Hotel/Company';\nimport { Language, LanguageProvider } from '@/providers/LanguageProvider';\nimport { getAccentOverrideStyleContent } from '@/util/Color';\n\ndeclare global {\n interface Window {\n ResizeObserver: any;\n }\n}\n\ndeclare const ASSET_URL: string;\n\nexport declare const RS_VERSION: string;\n\nif (typeof ResizeObserver === 'undefined') {\n window.ResizeObserver = ROP.ResizeObserver;\n}\n\nexport enum RoomstayTheme {\n Medium = 'medium',\n Light = 'light',\n}\n\nclass RoomstayThemeEngine {\n public currentCompany: Company | null = null;\n\n public EngineContainer!: HTMLElement;\n\n public ScriptContainer: Element | null = null;\n public StyleContainer: Element | null = null;\n\n public selectedLang: Language = Language.en_us;\n\n // TODO This needs to be changed, not ideal to just check for localhost\n public isLocalhost: boolean = location.hostname === 'localhost';\n\n // TODO: This needs to be refactored to not be a fixed string.\n public ThemeType = RoomstayTheme.Light;\n\n public ExternalStyles: string[] = [];\n public ExternalScripts: string[] = ['https://js.verygoodvault.com/vgs-collect/1/AC7dReJwJ6EWF1L9FHdcCw7n.js'];\n\n public constructor() {\n console.log(`Initializing Roomstay Booking Engine v${RS_VERSION}`);\n }\n\n public changeCompany = (newCompany: Company) => {\n this.currentCompany = newCompany;\n this.registerStyles(newCompany.colors);\n };\n\n public changeTheme = async (profile: IHotelColorScheme) => {\n const styleOverrides = this.createElementOrReuseExisting('style', 'engine-styles');\n\n styleOverrides.setAttribute('rel', 'preload');\n\n styleOverrides.innerHTML = `\n :root {\n ${getAccentOverrideStyleContent(profile)}\n }`;\n };\n\n public registerStyles = async (profile?: IHotelColorScheme) => {\n console.log('Loading custom Theme Styles');\n if (profile) {\n this.changeTheme(profile);\n }\n\n this.ExternalStyles.forEach((url, index) => {\n const style = this.createElementOrReuseExisting('link', `engine-external-style-${index}`);\n style.setAttribute('rel', 'stylesheet');\n style.setAttribute('href', this.getAssetUrl() + url);\n });\n };\n\n public getAssetUrl = () => {\n return this.isLocalhost ? '/' : ASSET_URL;\n };\n\n public getImageAssetUrl = (url = '') => {\n return this.getAssetUrl() + 'assets/img/' + url;\n };\n\n /**\n * Detects if URL is absolute, and needs to be\n * @param url string\n */\n public wrapAssetUrl = (url: string) => {\n if (url.match(/^(?:[a-z]+:)?\\/\\//)) {\n return url;\n }\n\n return this.getAssetUrl() + url;\n };\n\n public registerScripts = async () => {\n this.ExternalScripts.forEach((url: string, index) => {\n this.loadScript(url, `legacy-${index}`);\n });\n };\n\n public loadScript = (src: string, name: string): Promise<void> =>\n new Promise((resolve) => {\n const script = this.createElementOrReuseExisting('script', `script-${name}`);\n if (script.hasAttribute('src') && script.getAttribute('src') === src) {\n resolve();\n } else {\n script.setAttribute('src', src);\n script.addEventListener('load', () => {\n resolve();\n });\n }\n\n this.ScriptContainer?.appendChild(script);\n });\n\n public createElementOrReuseExisting = <K extends keyof HTMLElementTagNameMap>(type: K, name: string) => {\n const container = this.EngineContainer;\n const findingElement = container.querySelector(`${type}[name=\"roomstay-${name}\"]`);\n\n if (findingElement) {\n return findingElement;\n } else {\n const target = document.createElement(type);\n target.setAttribute('name', `roomstay-${name}`);\n container.appendChild(target);\n return target;\n }\n };\n\n public init = async () => {\n dayjs.extend(isSameOrBefore);\n dayjs.extend(isSameOrAfter);\n\n if (i18n) {\n i18n.use(initReactI18next).init({\n interpolation: { escapeValue: false },\n lng: Language.en_us,\n resources: LanguageProvider.getI18nMappedLanguages(),\n });\n }\n\n if (!this.isLocalhost) {\n Sentry.init({\n dsn: 'https://3bfba949561e48f1862c843ce8254a2d@o398412.ingest.sentry.io/5254086',\n beforeSend: (event, hint) => {\n event.tags = event.tags ?? { logger: '_default_' };\n\n try {\n if (hint?.originalException instanceof Error) {\n if ((hint.originalException.stack?.indexOf('www.googletagmanager.com/gtm.js?id=') as number) > -1) {\n event.tags.logger = 'gtm';\n event.level = Sentry.Severity.Warning;\n }\n }\n } catch (ex) {\n console.log(ex);\n }\n\n return event;\n },\n });\n }\n\n this.reloadScriptAndStyleContainers();\n };\n\n private reloadScriptAndStyleContainers = () => {\n this.StyleContainer = this.createElementOrReuseExisting('div', 'style-container');\n this.ScriptContainer = this.createElementOrReuseExisting('div', 'script-container');\n\n this.ScriptContainer.innerHTML = '';\n this.StyleContainer.innerHTML = '';\n\n this.registerStyles();\n };\n}\n\nexport default new RoomstayThemeEngine();\n"]}
|
|
1
|
+
{"version":3,"file":"RoomstayThemeEngine.js","sourceRoot":"/","sources":["src/providers/RoomstayThemeEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ROP from '@juggle/resize-observer';\nimport { IHotelColorScheme } from '@roomstay/core';\nimport * as Sentry from '@sentry/browser';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport type { Company } from '@/models/Client/Hotel/Company';\nimport { Language, LanguageProvider } from '@/providers/LanguageProvider';\nimport { getAccentOverrideStyleContent } from '@/util/Color';\n\ndeclare global {\n interface Window {\n ResizeObserver: any;\n }\n}\n\ndeclare const ASSET_URL: string;\n\nexport declare const RS_VERSION: string;\n\nif (typeof ResizeObserver === 'undefined') {\n window.ResizeObserver = ROP.ResizeObserver;\n}\n\nexport enum RoomstayTheme {\n Medium = 'medium',\n Light = 'light',\n}\n\nclass RoomstayThemeEngine {\n public currentCompany: Company | null = null;\n\n public EngineContainer!: HTMLElement;\n\n public ScriptContainer: Element | null = null;\n public StyleContainer: Element | null = null;\n\n public selectedLang: Language = Language.en_us;\n\n // TODO This needs to be changed, not ideal to just check for localhost\n public isLocalhost: boolean = location.hostname === 'localhost';\n\n // TODO: This needs to be refactored to not be a fixed string.\n public ThemeType = RoomstayTheme.Light;\n\n public ExternalStyles: string[] = [];\n public ExternalScripts: string[] = ['https://js.verygoodvault.com/vgs-collect/1/AC7dReJwJ6EWF1L9FHdcCw7n.js'];\n\n public constructor() {\n console.log(`Initializing Roomstay Booking Engine v${RS_VERSION}`);\n }\n\n public changeCompany = (newCompany: Company) => {\n this.currentCompany = newCompany;\n this.registerStyles(newCompany.colors);\n };\n\n public changeTheme = async (profile: IHotelColorScheme) => {\n const styleOverrides = this.createElementOrReuseExisting('style', 'engine-styles');\n\n styleOverrides.setAttribute('rel', 'preload');\n\n styleOverrides.innerHTML = `\n :root {\n ${getAccentOverrideStyleContent(profile)}\n }`;\n };\n\n public registerStyles = async (profile?: IHotelColorScheme) => {\n console.log('Loading custom Theme Styles');\n if (profile) {\n this.changeTheme(profile);\n }\n\n this.ExternalStyles.forEach((url, index) => {\n const style = this.createElementOrReuseExisting('link', `engine-external-style-${index}`);\n style.setAttribute('rel', 'stylesheet');\n style.setAttribute('href', this.getAssetUrl() + url);\n });\n };\n\n public getAssetUrl = () => {\n return ASSET_URL;\n };\n\n public getImageAssetUrl = (url = '') => {\n return this.getAssetUrl() + 'assets/img/' + url;\n };\n\n /**\n * Detects if URL is absolute, and needs to be\n * @param url string\n */\n public wrapAssetUrl = (url: string) => {\n if (url.match(/^(?:[a-z]+:)?\\/\\//)) {\n return url;\n }\n\n return this.getAssetUrl() + url;\n };\n\n public registerScripts = async () => {\n this.ExternalScripts.forEach((url: string, index) => {\n this.loadScript(url, `legacy-${index}`);\n });\n };\n\n public loadScript = (src: string, name: string): Promise<void> =>\n new Promise((resolve) => {\n const script = this.createElementOrReuseExisting('script', `script-${name}`);\n if (script.hasAttribute('src') && script.getAttribute('src') === src) {\n resolve();\n } else {\n script.setAttribute('src', src);\n script.addEventListener('load', () => {\n resolve();\n });\n }\n\n this.ScriptContainer?.appendChild(script);\n });\n\n public createElementOrReuseExisting = <K extends keyof HTMLElementTagNameMap>(type: K, name: string) => {\n const container = this.EngineContainer;\n const findingElement = container.querySelector(`${type}[name=\"roomstay-${name}\"]`);\n\n if (findingElement) {\n return findingElement;\n } else {\n const target = document.createElement(type);\n target.setAttribute('name', `roomstay-${name}`);\n container.appendChild(target);\n return target;\n }\n };\n\n public init = async () => {\n dayjs.extend(isSameOrBefore);\n dayjs.extend(isSameOrAfter);\n\n if (i18n) {\n i18n.use(initReactI18next).init({\n interpolation: { escapeValue: false },\n lng: Language.en_us,\n resources: LanguageProvider.getI18nMappedLanguages(),\n });\n }\n\n if (!this.isLocalhost) {\n Sentry.init({\n dsn: 'https://3bfba949561e48f1862c843ce8254a2d@o398412.ingest.sentry.io/5254086',\n beforeSend: (event, hint) => {\n event.tags = event.tags ?? { logger: '_default_' };\n\n try {\n if (hint?.originalException instanceof Error) {\n if ((hint.originalException.stack?.indexOf('www.googletagmanager.com/gtm.js?id=') as number) > -1) {\n event.tags.logger = 'gtm';\n event.level = Sentry.Severity.Warning;\n }\n }\n } catch (ex) {\n console.log(ex);\n }\n\n return event;\n },\n });\n }\n\n this.reloadScriptAndStyleContainers();\n };\n\n private reloadScriptAndStyleContainers = () => {\n this.StyleContainer = this.createElementOrReuseExisting('div', 'style-container');\n this.ScriptContainer = this.createElementOrReuseExisting('div', 'script-container');\n\n this.ScriptContainer.innerHTML = '';\n this.StyleContainer.innerHTML = '';\n\n this.registerStyles();\n };\n}\n\nexport default new RoomstayThemeEngine();\n"]}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
private
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* by default it's localStorage
|
|
7
|
-
*/
|
|
8
|
-
private storageMethod;
|
|
9
|
-
constructor(storageMethod?: Storage);
|
|
10
|
-
read<T>(key: string): Promise<T | null | undefined>;
|
|
11
|
-
readAll: <T>(keys: string[]) => Promise<T[]>;
|
|
12
|
-
write(key: string, value: any): Promise<void>;
|
|
13
|
-
delete: (key: string) => void;
|
|
14
|
-
getAllKeys: (filter?: ((match: string) => boolean) | undefined) => string[];
|
|
1
|
+
import { SignInUser } from '../../contexts/index.js';
|
|
2
|
+
export default class LocalStorageProvider {
|
|
3
|
+
private hotelId;
|
|
4
|
+
private storage;
|
|
5
|
+
setHotelId(hotelId: string): void;
|
|
15
6
|
private prefixKey;
|
|
7
|
+
private read;
|
|
8
|
+
private write;
|
|
9
|
+
getUser(): Promise<SignInUser | null | undefined>;
|
|
10
|
+
setUser(value: SignInUser): Promise<void>;
|
|
16
11
|
}
|
|
@@ -1,27 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -32,88 +9,33 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
9
|
});
|
|
33
10
|
};
|
|
34
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.LocalStorageProvider = void 0;
|
|
36
|
-
const Sentry = __importStar(require("@sentry/browser"));
|
|
37
12
|
const StorageProvider_1 = require("./StorageProvider");
|
|
38
|
-
class LocalStorageProvider
|
|
39
|
-
constructor(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
const response = yield this.read(key);
|
|
49
|
-
if (response) {
|
|
50
|
-
objects.push(response);
|
|
51
|
-
}
|
|
52
|
-
}));
|
|
53
|
-
yield Promise.all(promises);
|
|
54
|
-
return objects;
|
|
55
|
-
});
|
|
56
|
-
this.delete = (key) => {
|
|
57
|
-
this.storageMethod.removeItem(this.prefixKey(key));
|
|
58
|
-
};
|
|
59
|
-
this.getAllKeys = (filter) => {
|
|
60
|
-
return Object.keys(this.storageMethod).filter((key) => key.startsWith(this.enginePrefix) && ((filter && filter(key)) || !filter));
|
|
61
|
-
};
|
|
62
|
-
this.prefixKey = (key) => {
|
|
63
|
-
return `${this.enginePrefix}-${key}`;
|
|
64
|
-
};
|
|
65
|
-
this.storageMethod = !storageMethod ? localStorage : storageMethod;
|
|
13
|
+
class LocalStorageProvider {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.storage = new StorageProvider_1.StorageProvider();
|
|
16
|
+
}
|
|
17
|
+
setHotelId(hotelId) {
|
|
18
|
+
this.hotelId = hotelId;
|
|
19
|
+
}
|
|
20
|
+
prefixKey(key) {
|
|
21
|
+
return `${this.hotelId}-${key}`;
|
|
66
22
|
}
|
|
67
23
|
read(key) {
|
|
24
|
+
return this.storage.read(this.prefixKey(key));
|
|
25
|
+
}
|
|
26
|
+
write(key, value) {
|
|
27
|
+
return this.storage.write(this.prefixKey(key), value);
|
|
28
|
+
}
|
|
29
|
+
getUser() {
|
|
68
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
fromStorage = this.storageMethod.getItem(this.prefixKey(key));
|
|
72
|
-
}
|
|
73
|
-
catch (ex) {
|
|
74
|
-
Sentry.captureException(ex);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
if (fromStorage) {
|
|
78
|
-
try {
|
|
79
|
-
const pretty = JSON.parse(fromStorage);
|
|
80
|
-
if (pretty && pretty.value) {
|
|
81
|
-
return pretty.value;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (ex) {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
31
|
+
return this.read('user');
|
|
91
32
|
});
|
|
92
33
|
}
|
|
93
|
-
|
|
34
|
+
setUser(value) {
|
|
94
35
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
|
|
96
|
-
if (typeof value === 'object') {
|
|
97
|
-
objStorageType = StorageProvider_1.StorageType.Object;
|
|
98
|
-
}
|
|
99
|
-
else if (typeof value === 'string') {
|
|
100
|
-
objStorageType = StorageProvider_1.StorageType.String;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
objStorageType = StorageProvider_1.StorageType.Number;
|
|
104
|
-
}
|
|
105
|
-
const insertValue = {
|
|
106
|
-
type: objStorageType,
|
|
107
|
-
value,
|
|
108
|
-
};
|
|
109
|
-
try {
|
|
110
|
-
this.storageMethod.setItem(this.prefixKey(key), JSON.stringify(insertValue));
|
|
111
|
-
}
|
|
112
|
-
catch (ex) {
|
|
113
|
-
Sentry.captureException(ex);
|
|
114
|
-
}
|
|
36
|
+
return this.write('user', value);
|
|
115
37
|
});
|
|
116
38
|
}
|
|
117
39
|
}
|
|
118
|
-
exports.
|
|
40
|
+
exports.default = LocalStorageProvider;
|
|
119
41
|
//# sourceMappingURL=LocalStorageProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalStorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/LocalStorageProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalStorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/LocalStorageProvider.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,uDAAoD;AAIpD,MAAqB,oBAAoB;IAAzC;QAEY,YAAO,GAAG,IAAI,iCAAe,EAAE,CAAC;IAyB5C,CAAC;IAvBU,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,GAAQ;QACtB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IAEO,IAAI,CAAI,GAAQ;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,GAAQ,EAAE,KAAoC;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEY,OAAO;;YAChB,OAAO,IAAI,CAAC,IAAI,CAAa,MAAM,CAAC,CAAC;QACzC,CAAC;KAAA;IAEY,OAAO,CAAC,KAAiB;;YAClC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;KAAA;CACJ;AA3BD,uCA2BC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\n\nimport { LocalStorageModel } from '@/models/LocalStorageModel';\n\nimport { StorageProvider } from './StorageProvider';\n\ntype Key = keyof LocalStorageModel & string;\n\nexport default class LocalStorageProvider {\n private hotelId!: string;\n private storage = new StorageProvider();\n\n public setHotelId(hotelId: string) {\n this.hotelId = hotelId;\n }\n\n private prefixKey(key: Key) {\n return `${this.hotelId}-${key}`;\n }\n\n private read<T>(key: Key) {\n return this.storage.read<T>(this.prefixKey(key));\n }\n\n private write(key: Key, value: LocalStorageModel[typeof key]) {\n return this.storage.write(this.prefixKey(key), value);\n }\n\n public async getUser() {\n return this.read<SignInUser>('user');\n }\n\n public async setUser(value: SignInUser) {\n return this.write('user', value);\n }\n}\n"]}
|
|
@@ -13,12 +13,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
16
|
-
const BasketRow_1 = __importDefault(require("
|
|
17
|
-
const Room_1 = require("
|
|
18
|
-
const RoomRate_1 = require("
|
|
19
|
-
const RoomstaySession_1 = require("
|
|
20
|
-
const
|
|
21
|
-
const Debounce_1 = require("
|
|
16
|
+
const BasketRow_1 = __importDefault(require("../../models/BasketRow"));
|
|
17
|
+
const Room_1 = require("../../models/Room/Room");
|
|
18
|
+
const RoomRate_1 = require("../../models/Room/RoomRate");
|
|
19
|
+
const RoomstaySession_1 = require("../../models/RoomstaySession");
|
|
20
|
+
const StorageProvider_1 = require("./StorageProvider");
|
|
21
|
+
const Debounce_1 = require("../../util/Debounce");
|
|
22
22
|
/**
|
|
23
23
|
* Session provider is in charge of handling the loading, saving and passing of the current Engine Session.
|
|
24
24
|
*
|
|
@@ -86,7 +86,8 @@ class SessionProvider {
|
|
|
86
86
|
const foundSession = yield this.findOrCreateSessionID(sessionID, source);
|
|
87
87
|
if (foundSession) {
|
|
88
88
|
this.currentSessionID = foundSession;
|
|
89
|
-
|
|
89
|
+
// Never read?
|
|
90
|
+
const storage = new StorageProvider_1.StorageProvider(sessionStorage);
|
|
90
91
|
yield storage.write('currentSession', this.currentSessionID);
|
|
91
92
|
}
|
|
92
93
|
});
|
|
@@ -99,7 +100,7 @@ class SessionProvider {
|
|
|
99
100
|
}
|
|
100
101
|
getSession() {
|
|
101
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
const storage = new
|
|
103
|
+
const storage = new StorageProvider_1.StorageProvider();
|
|
103
104
|
const sessionFromStorage = yield storage.read(this.getSessionKey());
|
|
104
105
|
if (sessionFromStorage) {
|
|
105
106
|
return this.unSerializeSession(sessionFromStorage);
|
|
@@ -114,7 +115,7 @@ class SessionProvider {
|
|
|
114
115
|
if (!changedSession) {
|
|
115
116
|
return console.log('Attempted to save empty session');
|
|
116
117
|
}
|
|
117
|
-
const storage = new
|
|
118
|
+
const storage = new StorageProvider_1.StorageProvider();
|
|
118
119
|
const serializedSession = this.serializeSession(changedSession);
|
|
119
120
|
yield storage.write(this.getSessionKey(serializedSession.id), serializedSession);
|
|
120
121
|
});
|
|
@@ -133,13 +134,13 @@ class SessionProvider {
|
|
|
133
134
|
}
|
|
134
135
|
deleteSession() {
|
|
135
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
const storage = new
|
|
137
|
+
const storage = new StorageProvider_1.StorageProvider();
|
|
137
138
|
storage.delete(this.getSessionKey());
|
|
138
139
|
});
|
|
139
140
|
}
|
|
140
141
|
getAllSessions() {
|
|
141
142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
const storage = new
|
|
143
|
+
const storage = new StorageProvider_1.StorageProvider();
|
|
143
144
|
const sessionKeys = storage.getAllKeys((name) => name.startsWith('roomstay-session'));
|
|
144
145
|
return (yield storage.readAll(sessionKeys)).map((session) => this.unSerializeSession(session));
|
|
145
146
|
});
|
|
@@ -164,7 +165,7 @@ class SessionProvider {
|
|
|
164
165
|
}
|
|
165
166
|
findSession(sessionID) {
|
|
166
167
|
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
-
const storage = new
|
|
168
|
+
const storage = new StorageProvider_1.StorageProvider();
|
|
168
169
|
const session = yield storage.read(this.getSessionKey(sessionID));
|
|
169
170
|
if (session) {
|
|
170
171
|
return this.unSerializeSession(session);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionProvider.js","sourceRoot":"/","sources":["src/providers/storage/SessionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport dayjs from 'dayjs';\n\nimport BasketRow from '@/models/BasketRow';\nimport { IRoom, Room } from '@/models/Room/Room';\nimport { IRoomRate, RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession, SERIALIZED_DATE_FORMAT, SerializedRoomstaySession, SerializedRoomstaySessionBasketRow } from '@/models/RoomstaySession';\nimport { StorageProvider } from '@/providers/storage/StorageProvider';\nimport { debounce, delay } from '@/util/Debounce';\n\n/**\n * Session provider is in charge of handling the loading, saving and passing of the current Engine Session.\n *\n * Desired flow:\n * * App Opened\n * * Session Provider loaded\n * * New User Session Created\n * * User moves through the app, updating the session with vital details (current step, basket context )\n * * User refreshes browser - session is re-loaded and user resumes where they left off\n * * User proceeds to checkout.\n * * Session is saved.\n *\n * Mini Booking Widget:\n * * User loads mini booking widget, selects dates, people\n * * Rates are loaded, and user selects a rate, redirecting to Full Booking Engine\n * * Session Provider creates a SessionID to pass to redirected path\n * * Session Provider loads the passed SessionID and loads the correct session\n * * Resume to Desired Flow\n *\n * Re-targeting:\n * ---Since re-targeting will happen on client site, under client domain, localStorage will be preserved, ergo we can load the previous incomplete sessions back to the user\n * * User lands on client Homepage\n * * Session Provider loads previous incomplete sessions\n * * A slider with details of previous baskets is shown back to the user\n * * User clicks on a previous session and is brought to the Booking Engine\n * * Resume to Desired Flow\n */\n\nexport default class SessionProvider {\n private currentSessionID!: number;\n private hotelID!: string;\n private cachedSession: Partial<RoomstaySession> = {};\n\n private syncSession = async () => {\n try {\n const currentSession = await this.getSession();\n const cachedSession = this.cachedSession;\n this.cachedSession = {};\n await this.saveSession({\n ...currentSession,\n ...cachedSession,\n });\n } catch (error) {\n console.error('Failed to sync session:', error);\n }\n };\n\n private debouncedUpdateSession = debounce(async () => {\n await this.syncSession();\n }, 300);\n\n private async updateSessionWithAsync() {\n await delay(300); // 300 milliseconds delay -- Why is a delay necessary?\n await this.syncSession();\n }\n\n public async setHotelID(hotelID: string) {\n this.hotelID = hotelID;\n this.updateSession({ hotelID });\n }\n\n public async initialize(sessionID?: number, source?: string) {\n await this.setSessionID(sessionID, source);\n }\n\n public async setSessionID(sessionID?: number, source?: string) {\n const foundSession = await this.findOrCreateSessionID(sessionID as number, source as string);\n\n if (foundSession) {\n this.currentSessionID = foundSession;\n\n // Never read?\n const storage = new StorageProvider(sessionStorage);\n await storage.write('currentSession', this.currentSessionID);\n }\n }\n\n /**\n * @returns the current session ID\n */\n public getCurrentSessionID(): number {\n return this.currentSessionID;\n }\n\n public async getSession(): Promise<RoomstaySession> {\n const storage = new StorageProvider();\n\n const sessionFromStorage = await storage.read<SerializedRoomstaySession>(this.getSessionKey());\n\n if (sessionFromStorage) {\n return this.unSerializeSession(sessionFromStorage);\n } else {\n return this.generateNewSession('');\n }\n }\n\n public async saveSession(changedSession: RoomstaySession) {\n if (!changedSession) {\n return console.log('Attempted to save empty session');\n }\n\n const storage = new StorageProvider();\n\n const serializedSession = this.serializeSession(changedSession);\n\n await storage.write(this.getSessionKey(serializedSession.id), serializedSession);\n }\n\n public async updateSession(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n this.debouncedUpdateSession();\n }\n\n public async updateSessionAsync(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n await this.updateSessionWithAsync();\n }\n\n public async deleteSession() {\n const storage = new StorageProvider();\n storage.delete(this.getSessionKey());\n }\n\n public async getAllSessions() {\n const storage = new StorageProvider();\n const sessionKeys = storage.getAllKeys((name) => name.startsWith('roomstay-session'));\n\n return (await storage.readAll<SerializedRoomstaySession>(sessionKeys)).map((session) => this.unSerializeSession(session));\n }\n\n /**\n * Function to find the right session from session storage, or local storage\n *\n * If one isn't found it is then created.\n */\n private async findOrCreateSessionID(sessionID: number, source: string) {\n let session: RoomstaySession;\n\n if (sessionID) {\n session = (await this.findSession(sessionID)) as RoomstaySession;\n\n if (session) {\n return session.id;\n }\n }\n\n session = await this.generateNewSession(source);\n\n return session.id;\n }\n\n private async findSession(sessionID: number): Promise<RoomstaySession | undefined> {\n const storage = new StorageProvider();\n const session = await storage.read<SerializedRoomstaySession>(this.getSessionKey(sessionID));\n\n if (session) {\n return this.unSerializeSession(session);\n }\n }\n\n private async generateNewSession(source: string): Promise<RoomstaySession> {\n const sessionId = new Date().getTime();\n\n const session: RoomstaySession = {\n id: sessionId,\n startDate: null,\n endDate: null,\n step: '',\n hotelID: this.hotelID ?? null,\n basketRows: [],\n source,\n };\n\n this.saveSession(session);\n\n return session;\n }\n\n private serializeSession(session: RoomstaySession): SerializedRoomstaySession {\n const basketRows: SerializedRoomstaySessionBasketRow[] = [];\n\n // TODO possibly refactor BasketRow to serialize itself, or instead make a serializer that can do all this.\n session.basketRows.forEach((unSerializeBasketRow: BasketRow) => {\n const rate = unSerializeBasketRow.getRate();\n const room = unSerializeBasketRow.getRoom();\n\n let serializedRate = null;\n let serializedRoom = null;\n\n if (rate) {\n serializedRate = rate.serialize();\n }\n\n if (room) {\n serializedRoom = room.serialize();\n }\n\n basketRows.push({\n uniqId: unSerializeBasketRow.getID(),\n startDate: unSerializeBasketRow.getStartDate()?.format(SERIALIZED_DATE_FORMAT),\n endDate: unSerializeBasketRow.getEndDate()?.format(SERIALIZED_DATE_FORMAT),\n adults: unSerializeBasketRow.getAdults(),\n children: unSerializeBasketRow.getChildren(),\n infants: unSerializeBasketRow.getInfants(),\n promoCode: unSerializeBasketRow.getPromoCode(),\n promoCodeStatus: unSerializeBasketRow.getPromoCodeStatus(),\n rate: serializedRate as IRoomRate,\n room: serializedRoom as IRoom,\n });\n });\n\n return {\n id: session.id,\n startDate: session.startDate?.format(SERIALIZED_DATE_FORMAT) as string,\n endDate: session.endDate?.format(SERIALIZED_DATE_FORMAT) as string,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: JSON.stringify(session.user),\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private unSerializeSession(session: SerializedRoomstaySession): RoomstaySession {\n const basketRows: BasketRow[] = [];\n let startDate: dayjs.Dayjs | null = null;\n let endDate: dayjs.Dayjs | null = null;\n\n if (session.startDate) {\n startDate = dayjs(session.startDate, SERIALIZED_DATE_FORMAT);\n }\n\n if (session.endDate) {\n endDate = dayjs(session.endDate, SERIALIZED_DATE_FORMAT);\n }\n\n session.basketRows?.forEach((serializedBasketRow) => {\n let rate;\n let room;\n\n if (serializedBasketRow.room) {\n room = new Room();\n room.unSerialize(serializedBasketRow.room);\n }\n\n if (serializedBasketRow.rate && room) {\n rate = new RoomRate();\n rate.unSerialize(serializedBasketRow.rate);\n rate.setRoom(room);\n }\n\n const basketRow = new BasketRow(rate, serializedBasketRow.uniqId);\n\n if (serializedBasketRow.startDate) {\n basketRow.setStartDate(dayjs(serializedBasketRow.startDate, SERIALIZED_DATE_FORMAT));\n }\n if (serializedBasketRow.endDate) {\n basketRow.setEndDate(dayjs(serializedBasketRow.endDate, SERIALIZED_DATE_FORMAT));\n }\n\n basketRow.setAdults(serializedBasketRow.adults);\n basketRow.setChildren(serializedBasketRow.children);\n basketRow.setInfants(serializedBasketRow.infants);\n\n basketRows.push(basketRow);\n });\n\n return {\n id: session.id,\n startDate,\n endDate,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: session.user ? (JSON.parse(session.user) as SignInUser) : undefined,\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private getSessionKey(sessionId?: number): string {\n return `session-${sessionId ?? this.currentSessionID}`;\n }\n}\n"]}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
export declare class StorageProvider {
|
|
2
|
+
private readonly enginePrefix;
|
|
3
|
+
/**
|
|
4
|
+
* This is important. We're either going to be using localStorage or sessionStorage
|
|
5
|
+
* by default it's localStorage
|
|
6
|
+
*/
|
|
7
|
+
private storageMethod;
|
|
8
|
+
constructor(storageMethod?: Storage);
|
|
9
|
+
read<T>(key: string): Promise<T | null | undefined>;
|
|
10
|
+
readAll: <T>(keys: string[]) => Promise<T[]>;
|
|
11
|
+
write(key: string, value: any): Promise<void>;
|
|
12
|
+
delete: (key: string) => void;
|
|
13
|
+
getAllKeys: (filter?: ((match: string) => boolean) | undefined) => string[];
|
|
14
|
+
private prefixKey;
|
|
9
15
|
}
|
|
@@ -1,13 +1,100 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
2
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StorageProvider =
|
|
4
|
-
|
|
5
|
-
(function (StorageType) {
|
|
6
|
-
StorageType["Object"] = "object";
|
|
7
|
-
StorageType["String"] = "string";
|
|
8
|
-
StorageType["Number"] = "number";
|
|
9
|
-
})(StorageType = exports.StorageType || (exports.StorageType = {}));
|
|
35
|
+
exports.StorageProvider = void 0;
|
|
36
|
+
const Sentry = __importStar(require("@sentry/browser"));
|
|
10
37
|
class StorageProvider {
|
|
38
|
+
constructor(storageMethod) {
|
|
39
|
+
this.enginePrefix = 'roomstay';
|
|
40
|
+
this.readAll = (keys) => __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const objects = [];
|
|
42
|
+
const promises = keys.map((key) => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
if (key.startsWith(`${this.enginePrefix}-`)) {
|
|
44
|
+
key = key.replace(`${this.enginePrefix}-`, '');
|
|
45
|
+
}
|
|
46
|
+
const response = yield this.read(key);
|
|
47
|
+
if (response) {
|
|
48
|
+
objects.push(response);
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
yield Promise.all(promises);
|
|
52
|
+
return objects;
|
|
53
|
+
});
|
|
54
|
+
this.delete = (key) => {
|
|
55
|
+
this.storageMethod.removeItem(this.prefixKey(key));
|
|
56
|
+
};
|
|
57
|
+
this.getAllKeys = (filter) => {
|
|
58
|
+
return Object.keys(this.storageMethod).filter((key) => key.startsWith(this.enginePrefix) && ((filter && filter(key)) || !filter));
|
|
59
|
+
};
|
|
60
|
+
this.prefixKey = (key) => {
|
|
61
|
+
return `${this.enginePrefix}-${key}`;
|
|
62
|
+
};
|
|
63
|
+
this.storageMethod = !storageMethod ? localStorage : storageMethod;
|
|
64
|
+
}
|
|
65
|
+
read(key) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
let fromStorage;
|
|
68
|
+
try {
|
|
69
|
+
fromStorage = this.storageMethod.getItem(this.prefixKey(key));
|
|
70
|
+
}
|
|
71
|
+
catch (ex) {
|
|
72
|
+
Sentry.captureException(ex);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (fromStorage) {
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(fromStorage);
|
|
78
|
+
}
|
|
79
|
+
catch (ex) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
write(key, value) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
try {
|
|
91
|
+
this.storageMethod.setItem(this.prefixKey(key), JSON.stringify(value));
|
|
92
|
+
}
|
|
93
|
+
catch (ex) {
|
|
94
|
+
Sentry.captureException(ex);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
11
98
|
}
|
|
12
99
|
exports.StorageProvider = StorageProvider;
|
|
13
100
|
//# sourceMappingURL=StorageProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/StorageProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/StorageProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAA0C;AAE1C,MAAa,eAAe;IASxB,YAAmB,aAAuB;QARzB,iBAAY,GAAG,UAAU,CAAC;QAiCpC,YAAO,GAAG,CAAU,IAAc,EAAgB,EAAE;YACvD,MAAM,OAAO,GAAQ,EAAE,CAAC;YAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAO,GAAG,EAAE,EAAE;gBACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;oBACzC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC,CAAC;iBAClD;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAI,GAAG,CAAC,CAAC;gBAEzC,IAAI,QAAQ,EAAE;oBACV,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC1B;YACL,CAAC,CAAA,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5B,OAAO,OAAO,CAAC;QACnB,CAAC,CAAA,CAAC;QAUK,WAAM,GAAG,CAAC,GAAW,EAAE,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEK,eAAU,GAAG,CAAC,MAAmC,EAAY,EAAE;YAClE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACtI,CAAC,CAAC;QAEM,cAAS,GAAG,CAAC,GAAW,EAAE,EAAE;YAChC,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;QACzC,CAAC,CAAC;QA9DE,IAAI,CAAC,aAAa,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IACvE,CAAC;IAEY,IAAI,CAAI,GAAW;;YAC5B,IAAI,WAAmB,CAAC;YAExB,IAAI;gBACA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAW,CAAC;aAC3E;YAAC,OAAO,EAAE,EAAE;gBACT,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC;aACf;YAED,IAAI,WAAW,EAAE;gBACb,IAAI;oBACA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;iBAClC;gBAAC,OAAO,EAAE,EAAE;oBACT,OAAO,IAAI,CAAC;iBACf;aACJ;iBAAM;gBACH,OAAO,IAAI,CAAC;aACf;QACL,CAAC;KAAA;IAsBY,KAAK,CAAC,GAAW,EAAE,KAAU;;YACtC,IAAI;gBACA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1E;YAAC,OAAO,EAAE,EAAE;gBACT,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aAC/B;QACL,CAAC;KAAA;CAaJ;AAzED,0CAyEC","sourcesContent":["import * as Sentry from '@sentry/browser';\n\nexport class StorageProvider {\n private readonly enginePrefix = 'roomstay';\n\n /**\n * This is important. We're either going to be using localStorage or sessionStorage\n * by default it's localStorage\n */\n private storageMethod: Storage;\n\n public constructor(storageMethod?: Storage) {\n this.storageMethod = !storageMethod ? localStorage : storageMethod;\n }\n\n public async read<T>(key: string): Promise<T | null | undefined> {\n let fromStorage: string;\n\n try {\n fromStorage = this.storageMethod.getItem(this.prefixKey(key)) as string;\n } catch (ex) {\n Sentry.captureException(ex);\n return null;\n }\n\n if (fromStorage) {\n try {\n return JSON.parse(fromStorage);\n } catch (ex) {\n return null;\n }\n } else {\n return null;\n }\n }\n\n public readAll = async <T>(keys: string[]): Promise<T[]> => {\n const objects: T[] = [];\n\n const promises = keys.map(async (key) => {\n if (key.startsWith(`${this.enginePrefix}-`)) {\n key = key.replace(`${this.enginePrefix}-`, '');\n }\n\n const response = await this.read<T>(key);\n\n if (response) {\n objects.push(response);\n }\n });\n\n await Promise.all(promises);\n\n return objects;\n };\n\n public async write(key: string, value: any) {\n try {\n this.storageMethod.setItem(this.prefixKey(key), JSON.stringify(value));\n } catch (ex) {\n Sentry.captureException(ex);\n }\n }\n\n public delete = (key: string) => {\n this.storageMethod.removeItem(this.prefixKey(key));\n };\n\n public getAllKeys = (filter?: (match: string) => boolean): string[] => {\n return Object.keys(this.storageMethod).filter((key) => key.startsWith(this.enginePrefix) && ((filter && filter(key)) || !filter));\n };\n\n private prefixKey = (key: string) => {\n return `${this.enginePrefix}-${key}`;\n };\n}\n"]}
|
|
@@ -14,3 +14,4 @@ export default class CalendarHelper {
|
|
|
14
14
|
static getWeekTo: (date: dayjs.Dayjs) => dayjs.Dayjs[];
|
|
15
15
|
static getDaysBetween: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => dayjs.Dayjs[];
|
|
16
16
|
}
|
|
17
|
+
export declare const getQueryParamFromHash: (param: string) => string | undefined;
|