@roomstay/frontend 2.6.70 → 2.6.72

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationContextProvider.js","sourceRoot":"/","sources":["src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CognitoUser } from '@aws-amplify/auth';\nimport { ClientMetaData } from '@aws-amplify/auth/lib-esm/types';\nimport {\n AuthenticationContext,\n CognitoLoginState,\n CompanyContext,\n ExtraClientMetadataParams,\n IAuthenticationContext,\n IPendingCredentials,\n RoomstayMemberContextProvider,\n} from '@frontend/contexts';\nimport base64 from 'base-64';\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport { getAuth } from '@/util/AsyncAuth';\n\nconst useAuthenticationContext = (): IAuthenticationContext => {\n const { companyShort, selectedHotelID, colors, logoLink = '' } = useContext(CompanyContext);\n\n const clientMetadata = useMemo(\n () => ({\n hotelId: selectedHotelID,\n companyShort: companyShort,\n }),\n [selectedHotelID, companyShort]\n );\n\n const [pendingCredentials, setPendingCredentials] = useState<IPendingCredentials | null>(null);\n\n const [finishedInitializingContext, finishedInitializingContextSet] = useState<boolean>(false);\n const [isFetching, isFetchingSet] = useState<boolean>(true);\n const loading = useMemo(() => {\n return !finishedInitializingContext || isFetching;\n }, [finishedInitializingContext, isFetching]);\n\n const [cognitoUser, cognitoUserSet] = useState<CognitoUser | null>(null);\n const [cognitoLoginState, cognitoLoginStateSet] = useState<CognitoLoginState>(CognitoLoginState.Login);\n\n const [error, errorSet] = useState<Error>();\n\n /**\n * Set up the context, and try and immediately log in the user in the event that they're here\n */\n const initialiseContext = useCallback(async () => {\n const Auth = await getAuth();\n await Auth.currentAuthenticatedUser()\n .then((user) => {\n if (user) {\n const [userCompanyShort] = base64.decode(user.username).split('-');\n\n if (userCompanyShort === companyShort) {\n cognitoUserSet(user);\n cognitoLoginStateSet(CognitoLoginState.Success);\n }\n }\n })\n .catch((e) => {\n if (e !== 'The user is not authenticated') {\n errorSet(e);\n }\n });\n\n finishedInitializingContextSet(true);\n isFetchingSet(false);\n }, []);\n\n useEffect(() => {\n if (MemberPortalFeature.isActive()) {\n initialiseContext();\n }\n }, [initialiseContext, MemberPortalFeature.isActive()]);\n\n /**\n * Wrapper for our async calls to handle the `isFetching` and `error` state\n */\n const asyncWrapper: (func: (...params: any[]) => Promise<CognitoLoginState | undefined>, ...parameters: any[]) => Promise<CognitoLoginState | undefined> = async (\n func: (...params: any[]) => Promise<CognitoLoginState | undefined>,\n ...parameters: any[]\n ) => {\n isFetchingSet(true);\n errorSet(undefined);\n\n try {\n return await func(...parameters);\n } catch (e: any) {\n errorSet(e);\n } finally {\n isFetchingSet(false);\n }\n };\n\n const transformUsername = useCallback(\n (username: string) => {\n return base64.encode(`${companyShort}-${username.toLowerCase()}`);\n },\n [companyShort]\n );\n\n const login = async (email: string, password: string, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n const Auth = await getAuth();\n let cState;\n\n const username = transformUsername(email);\n try {\n const cu = await Auth.signIn({\n username,\n password,\n });\n\n if (cu.challengeName === 'SMS_MFA' || cu.challengeName === 'SOFTWARE_TOKEN_MFA') {\n // TODO: Handle 2FA\n cState = CognitoLoginState.VerifyMFA;\n } else if (cu.challengeName === 'NEW_PASSWORD_REQUIRED') {\n // TODO: Change Password\n cState = CognitoLoginState.RequiresNewPassword;\n } else if (cu.challengeName === 'MFA_SETUP') {\n // TODO: SetUp MFA\n cState = CognitoLoginState.SetupMFA;\n } else {\n // Success???\n cognitoUserSet(cu);\n cState = CognitoLoginState.Success;\n }\n } catch (e: any) {\n if (e.code === 'PasswordResetRequiredException') {\n cState = CognitoLoginState.RequiresPasswordReset;\n } else if (e.code === 'UserNotConfirmedException') {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.resendSignUp(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n cState = CognitoLoginState.RequiresConfirmation;\n } else {\n throw e;\n }\n }\n\n if (cState) {\n cognitoLoginStateSet(cState);\n\n return cState;\n }\n };\n\n const register = async (email: string, password: string, additionalAttributes?: any, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n const Auth = await getAuth();\n let cState: CognitoLoginState;\n\n try {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n const signUpResult = await Auth.signUp({\n username: transformUsername(email),\n password,\n attributes: {\n email,\n ...additionalAttributes,\n },\n clientMetadata: { ...clientMetadata, ...(additionalMetadata || {}) },\n });\n\n if (!signUpResult.userConfirmed) {\n cState = CognitoLoginState.RequiresConfirmation;\n } else {\n cognitoUserSet(signUpResult.user);\n cState = CognitoLoginState.Success;\n }\n } catch (e: any) {\n switch (e.code) {\n case 'UsernameExistsException': {\n cState = CognitoLoginState.UsernameExists;\n break;\n }\n default: {\n throw e;\n }\n }\n }\n\n if (cState) {\n cognitoLoginStateSet(cState);\n return cState;\n }\n };\n\n const confirmAccount = async (code: string, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n if (!pendingCredentials?.email) {\n throw new Error('No pending credentials');\n }\n const Auth = await getAuth();\n const username = transformUsername(pendingCredentials.email);\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.confirmSignUp(username, code, {\n clientMetadata: additionalMetadata,\n });\n if (pendingCredentials?.password) {\n try {\n return await login(pendingCredentials.email, pendingCredentials.password, { hotel });\n } catch (e: any) {\n if (e.code === 'NotAuthorizedException') {\n cognitoLoginStateSet(CognitoLoginState.Login);\n return CognitoLoginState.Login;\n } else {\n throw e;\n }\n }\n } else {\n cognitoLoginStateSet(CognitoLoginState.Login);\n return CognitoLoginState.Login;\n }\n };\n\n const forgotPassword = async (email: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n const Auth = await getAuth();\n const username = transformUsername(email);\n\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n\n try {\n await Auth.forgotPassword(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n } catch (e: any) {\n switch (e.code) {\n case 'UserNotFoundException':\n cognitoLoginStateSet(CognitoLoginState.UserNotFound);\n return CognitoLoginState.UserNotFound;\n case 'InvalidParameterException':\n cognitoLoginStateSet(CognitoLoginState.RequiresConfirmation);\n await Auth.resendSignUp(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n return CognitoLoginState.RequiresConfirmation;\n default:\n throw e;\n }\n }\n cognitoLoginStateSet(CognitoLoginState.ForgotPassword);\n return CognitoLoginState.ForgotPassword;\n };\n\n const resetPassword = async (email: string, code: string, password: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n const Auth = await getAuth();\n const username = transformUsername(email);\n try {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.forgotPasswordSubmit(username, code, password, additionalMetadata);\n await login(email, password);\n } catch (e: any) {\n switch (e.code) {\n case 'CodeMismatchException':\n cognitoLoginStateSet(CognitoLoginState.CodeMismatch);\n return CognitoLoginState.CodeMismatch;\n default:\n throw e;\n }\n }\n cognitoLoginStateSet(CognitoLoginState.Success);\n return CognitoLoginState.Success;\n };\n\n const changePassword = async (currentPassword: string, newPassword: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n try {\n const Auth = await getAuth();\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.changePassword(cognitoUser, currentPassword, newPassword, additionalMetadata);\n } catch (e: any) {\n switch (e.code) {\n case CognitoLoginState.LimitExceededException:\n return CognitoLoginState.LimitExceededException;\n case CognitoLoginState.NotAuthorizedException:\n return CognitoLoginState.NotAuthorizedException;\n default:\n throw e;\n }\n }\n return CognitoLoginState.Success;\n };\n\n const logout = async () => {\n const Auth = await getAuth();\n await Auth.signOut();\n cognitoUserSet(null);\n cognitoLoginStateSet(CognitoLoginState.Login);\n\n return CognitoLoginState.Login;\n };\n\n const reset = () => {\n errorSet(undefined);\n };\n\n const getExtraClientMetadata = ({ hotel }: ExtraClientMetadataParams): ClientMetaData => {\n const { colors: hoteColor = colors, email, logo } = hotel || {};\n\n return {\n companyShort,\n hotelName: hotel?.name || '',\n hotelUrl: hotel?.hotelUrl || '',\n colorAccent: hoteColor.accent,\n colorAccent2: hoteColor.accent2,\n colorAccent3: hoteColor.accent3,\n hotelLogo: typeof logo === 'string' ? logo : logoLink || '',\n hotelEmail: email || '',\n hotelPhone: hotel?.phone || '',\n sourceUrlStr: window.location.href,\n instagramUrl: hotel?.instagramUrl || '',\n facebookUrl: hotel?.facebookUrl || '',\n linkedinUrl: hotel?.linkedinUrl || '',\n hotelFrontendID: selectedHotelID || '',\n };\n };\n\n return {\n loading,\n\n cognitoUser: cognitoUser as CognitoUser,\n cognitoLoginState,\n\n error,\n\n login: (...args) => asyncWrapper(login, ...args),\n register: (...args) => asyncWrapper(register, ...args),\n confirmAccount: (...args) => asyncWrapper(confirmAccount, ...args),\n forgotPassword: (...args) => asyncWrapper(forgotPassword, ...args),\n resetPassword: (...args) => asyncWrapper(resetPassword, ...args),\n changePassword: (...args) => asyncWrapper(changePassword, ...args),\n logout: (...args) => asyncWrapper(logout, ...args),\n reset,\n\n pendingCredentials,\n setPendingCredentials,\n };\n};\n\nexport const AuthenticationContextProvider: React.FC = ({ children }) => {\n const value = useAuthenticationContext();\n return (\n <AuthenticationContext.Provider value={value}>\n <RoomstayMemberContextProvider>{children}</RoomstayMemberContextProvider>\n </AuthenticationContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"AuthenticationContextProvider.js","sourceRoot":"/","sources":["src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CognitoUser } from '@aws-amplify/auth';\nimport { ClientMetaData } from '@aws-amplify/auth/lib-esm/types';\nimport {\n AuthenticationContext,\n CognitoLoginState,\n CompanyContext,\n ExtraClientMetadataParams,\n IAuthenticationContext,\n IPendingCredentials,\n RoomstayMemberContextProvider,\n} from '@frontend/contexts';\nimport base64 from 'base-64';\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport { getAuth } from '@/util/AsyncAuth';\n\nconst useAuthenticationContext = (): IAuthenticationContext => {\n const { companyId, companyShort, selectedHotelID, colors, logoLink = '', name: companyName, logo: companyLogo } = useContext(CompanyContext);\n\n const clientMetadata = useMemo(\n () => ({\n hotelId: selectedHotelID || '0',\n companyShort: companyShort,\n }),\n [selectedHotelID, companyShort]\n );\n\n const [pendingCredentials, setPendingCredentials] = useState<IPendingCredentials | null>(null);\n\n const [finishedInitializingContext, finishedInitializingContextSet] = useState<boolean>(false);\n const [isFetching, isFetchingSet] = useState<boolean>(true);\n const loading = useMemo(() => {\n return !finishedInitializingContext || isFetching;\n }, [finishedInitializingContext, isFetching]);\n\n const [cognitoUser, cognitoUserSet] = useState<CognitoUser | null>(null);\n const [cognitoLoginState, cognitoLoginStateSet] = useState<CognitoLoginState>(CognitoLoginState.Login);\n\n const [error, errorSet] = useState<Error>();\n\n /**\n * Set up the context, and try and immediately log in the user in the event that they're here\n */\n const initialiseContext = useCallback(async () => {\n const Auth = await getAuth();\n await Auth.currentAuthenticatedUser()\n .then((user) => {\n if (user) {\n const [userCompanyShort] = base64.decode(user.username).split('-');\n\n if (userCompanyShort === companyShort) {\n cognitoUserSet(user);\n cognitoLoginStateSet(CognitoLoginState.Success);\n }\n }\n })\n .catch((e) => {\n if (e !== 'The user is not authenticated') {\n errorSet(e);\n }\n });\n\n finishedInitializingContextSet(true);\n isFetchingSet(false);\n }, []);\n\n useEffect(() => {\n if (MemberPortalFeature.isActive()) {\n initialiseContext();\n }\n }, [initialiseContext, MemberPortalFeature.isActive()]);\n\n /**\n * Wrapper for our async calls to handle the `isFetching` and `error` state\n */\n const asyncWrapper: (func: (...params: any[]) => Promise<CognitoLoginState | undefined>, ...parameters: any[]) => Promise<CognitoLoginState | undefined> = async (\n func: (...params: any[]) => Promise<CognitoLoginState | undefined>,\n ...parameters: any[]\n ) => {\n isFetchingSet(true);\n errorSet(undefined);\n\n try {\n return await func(...parameters);\n } catch (e: any) {\n errorSet(e);\n } finally {\n isFetchingSet(false);\n }\n };\n\n const transformUsername = useCallback(\n (username: string) => {\n return base64.encode(`${companyShort}-${username.toLowerCase()}`);\n },\n [companyShort]\n );\n\n const login = async (email: string, password: string, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n const Auth = await getAuth();\n let cState;\n\n const username = transformUsername(email);\n try {\n const cu = await Auth.signIn({\n username,\n password,\n });\n\n if (cu.challengeName === 'SMS_MFA' || cu.challengeName === 'SOFTWARE_TOKEN_MFA') {\n // TODO: Handle 2FA\n cState = CognitoLoginState.VerifyMFA;\n } else if (cu.challengeName === 'NEW_PASSWORD_REQUIRED') {\n // TODO: Change Password\n cState = CognitoLoginState.RequiresNewPassword;\n } else if (cu.challengeName === 'MFA_SETUP') {\n // TODO: SetUp MFA\n cState = CognitoLoginState.SetupMFA;\n } else {\n // Success???\n cognitoUserSet(cu);\n cState = CognitoLoginState.Success;\n }\n } catch (e: any) {\n if (e.code === 'PasswordResetRequiredException') {\n cState = CognitoLoginState.RequiresPasswordReset;\n } else if (e.code === 'UserNotConfirmedException') {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.resendSignUp(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n cState = CognitoLoginState.RequiresConfirmation;\n } else {\n throw e;\n }\n }\n\n if (cState) {\n cognitoLoginStateSet(cState);\n\n return cState;\n }\n };\n\n const register = async (email: string, password: string, additionalAttributes?: any, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n const Auth = await getAuth();\n let cState: CognitoLoginState;\n\n try {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n const signUpResult = await Auth.signUp({\n username: transformUsername(email),\n password,\n attributes: {\n email,\n ...additionalAttributes,\n },\n clientMetadata: { ...clientMetadata, ...(additionalMetadata || {}) },\n });\n\n if (!signUpResult.userConfirmed) {\n cState = CognitoLoginState.RequiresConfirmation;\n } else {\n cognitoUserSet(signUpResult.user);\n cState = CognitoLoginState.Success;\n }\n } catch (e: any) {\n switch (e.code) {\n case 'UsernameExistsException': {\n cState = CognitoLoginState.UsernameExists;\n break;\n }\n default: {\n throw e;\n }\n }\n }\n\n if (cState) {\n cognitoLoginStateSet(cState);\n return cState;\n }\n };\n\n const confirmAccount = async (code: string, extraClientMetadataParams?: ExtraClientMetadataParams) => {\n if (!pendingCredentials?.email) {\n throw new Error('No pending credentials');\n }\n const Auth = await getAuth();\n const username = transformUsername(pendingCredentials.email);\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.confirmSignUp(username, code, {\n clientMetadata: additionalMetadata,\n });\n if (pendingCredentials?.password) {\n try {\n return await login(pendingCredentials.email, pendingCredentials.password, { hotel });\n } catch (e: any) {\n if (e.code === 'NotAuthorizedException') {\n cognitoLoginStateSet(CognitoLoginState.Login);\n return CognitoLoginState.Login;\n } else {\n throw e;\n }\n }\n } else {\n cognitoLoginStateSet(CognitoLoginState.Login);\n return CognitoLoginState.Login;\n }\n };\n\n const forgotPassword = async (email: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n const Auth = await getAuth();\n const username = transformUsername(email);\n\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n\n try {\n await Auth.forgotPassword(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n } catch (e: any) {\n switch (e.code) {\n case 'UserNotFoundException':\n cognitoLoginStateSet(CognitoLoginState.UserNotFound);\n return CognitoLoginState.UserNotFound;\n case 'InvalidParameterException':\n cognitoLoginStateSet(CognitoLoginState.RequiresConfirmation);\n await Auth.resendSignUp(username, { ...clientMetadata, ...(additionalMetadata || {}) });\n return CognitoLoginState.RequiresConfirmation;\n default:\n throw e;\n }\n }\n cognitoLoginStateSet(CognitoLoginState.ForgotPassword);\n return CognitoLoginState.ForgotPassword;\n };\n\n const resetPassword = async (email: string, code: string, password: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n const Auth = await getAuth();\n const username = transformUsername(email);\n try {\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.forgotPasswordSubmit(username, code, password, additionalMetadata);\n await login(email, password);\n } catch (e: any) {\n switch (e.code) {\n case 'CodeMismatchException':\n cognitoLoginStateSet(CognitoLoginState.CodeMismatch);\n return CognitoLoginState.CodeMismatch;\n default:\n throw e;\n }\n }\n cognitoLoginStateSet(CognitoLoginState.Success);\n return CognitoLoginState.Success;\n };\n\n const changePassword = async (currentPassword: string, newPassword: string, extraClientMetadataParams?: ExtraClientMetadataParams): Promise<CognitoLoginState> => {\n try {\n const Auth = await getAuth();\n const { hotel } = extraClientMetadataParams || {};\n const additionalMetadata = getExtraClientMetadata({ hotel });\n await Auth.changePassword(cognitoUser, currentPassword, newPassword, additionalMetadata);\n } catch (e: any) {\n switch (e.code) {\n case CognitoLoginState.LimitExceededException:\n return CognitoLoginState.LimitExceededException;\n case CognitoLoginState.NotAuthorizedException:\n return CognitoLoginState.NotAuthorizedException;\n default:\n throw e;\n }\n }\n return CognitoLoginState.Success;\n };\n\n const logout = async () => {\n const Auth = await getAuth();\n await Auth.signOut();\n cognitoUserSet(null);\n cognitoLoginStateSet(CognitoLoginState.Login);\n\n return CognitoLoginState.Login;\n };\n\n const reset = () => {\n errorSet(undefined);\n };\n\n const getExtraClientMetadata = ({ hotel }: ExtraClientMetadataParams): ClientMetaData => {\n const { colors: hotelColors = colors, email, logo } = hotel || {};\n\n return {\n companyId: companyId?.toString() || '',\n companyShort,\n hotelName: hotel?.name || companyName || '',\n hotelUrl: hotel?.hotelUrl || logoLink || '',\n colorEmailHeaderBackground: hotelColors.emails?.headerBackground || hotelColors.accent,\n colorAccent: hotelColors.accent,\n colorAccent2: hotelColors.accent2,\n colorAccent3: hotelColors.accent3,\n hotelLogo: typeof logo === 'string' ? logo : companyLogo || '',\n hotelEmail: email || '',\n hotelPhone: hotel?.phone || '',\n sourceUrlStr: window.location.href,\n instagramUrl: hotel?.instagramUrl || '',\n facebookUrl: hotel?.facebookUrl || '',\n linkedinUrl: hotel?.linkedinUrl || '',\n hotelFrontendID: selectedHotelID || '',\n };\n };\n\n return {\n loading,\n\n cognitoUser: cognitoUser as CognitoUser,\n cognitoLoginState,\n\n error,\n\n login: (...args) => asyncWrapper(login, ...args),\n register: (...args) => asyncWrapper(register, ...args),\n confirmAccount: (...args) => asyncWrapper(confirmAccount, ...args),\n forgotPassword: (...args) => asyncWrapper(forgotPassword, ...args),\n resetPassword: (...args) => asyncWrapper(resetPassword, ...args),\n changePassword: (...args) => asyncWrapper(changePassword, ...args),\n logout: (...args) => asyncWrapper(logout, ...args),\n reset,\n\n pendingCredentials,\n setPendingCredentials,\n };\n};\n\nexport const AuthenticationContextProvider: React.FC = ({ children }) => {\n const value = useAuthenticationContext();\n return (\n <AuthenticationContext.Provider value={value}>\n <RoomstayMemberContextProvider>{children}</RoomstayMemberContextProvider>\n </AuthenticationContext.Provider>\n );\n};\n"]}
@@ -1,12 +1,24 @@
1
1
  import { Placement } from '@popperjs/core';
2
- import { IRoomstayMember } from '@roomstay/core';
2
+ import { IHotelColorScheme, IRoomstayMember } from '@roomstay/core';
3
3
  import { MenuItemType } from '../../components/generic/modal/SigninModal/AuthenticatedUserModal';
4
4
  import { BaseEngine, BaseEngineConfig } from '../BaseEngine';
5
5
  import { ConfigCompany } from '../../models/Client/Hotel/Company';
6
- import { Hotel } from '../../models/Client/Hotel/Hotel';
6
+ import { ConfigHotel, Hotel } from '../../models/Client/Hotel/Hotel';
7
+ import { Language } from '../../providers/LanguageProvider';
8
+ export interface GroupWidgetConfig {
9
+ name?: string;
10
+ logo?: string;
11
+ logoLink?: string;
12
+ checkoutUrl?: string;
13
+ colors?: IHotelColorScheme;
14
+ defaultLanguage?: Language;
15
+ privacyPolicyUrl?: string;
16
+ hotels: ConfigHotel[];
17
+ }
7
18
  export interface MemberPortalWidgetConfig extends BaseEngineConfig {
8
- company: Pick<ConfigCompany, 'colors' | 'companyShort'>;
9
- hotel: Hotel;
19
+ company: Pick<ConfigCompany, 'colors' | 'companyShort' | 'companyId'>;
20
+ hotel?: Hotel;
21
+ groupWidgetConfig?: GroupWidgetConfig;
10
22
  authMenuItem?: MenuItemType[];
11
23
  buttonClass?: string;
12
24
  overlayPlacement?: Placement;
@@ -17,6 +29,7 @@ export interface MemberPortalWidgetConfig extends BaseEngineConfig {
17
29
  }
18
30
  export declare class MemberPortalWidget extends BaseEngine<MemberPortalWidgetConfig> {
19
31
  constructor(bookingContainer: HTMLElement, config?: MemberPortalWidgetConfig);
32
+ setConfig(config: MemberPortalWidgetConfig): void;
20
33
  protected render(): Promise<void>;
21
34
  static readonly MEMBER_PORTAL_PARAM = "memberPortal";
22
35
  }
@@ -23,6 +23,12 @@ class MemberPortalWidget extends BaseEngine_1.BaseEngine {
23
23
  // TODO: Make this a more permanent solution
24
24
  RoomstayThemeEngine_1.default.EngineContainer.classList.add('--transparent-bg');
25
25
  }
26
+ setConfig(config) {
27
+ if (!config.hotel && !config.groupWidgetConfig) {
28
+ throw new Error('MemberPortalWidget requires either a hotel or groupWidgetConfig to be provided');
29
+ }
30
+ super.setConfig(config);
31
+ }
26
32
  render() {
27
33
  return __awaiter(this, void 0, void 0, function* () {
28
34
  (0, MemberPortalWidgetElement_1.renderMemberPortalWidget)(RoomstayThemeEngine_1.default.createElementOrReuseExisting('div', 'member-portal-widget'), this);
@@ -1 +1 @@
1
- {"version":3,"file":"MemberPortalWidget.js","sourceRoot":"/","sources":["src/engines/MemberPortalWidget/MemberPortalWidget.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,qDAAyF;AAGzF,0FAAkE;AAElE,2EAAuE;AAcvE,MAAa,kBAAmB,SAAQ,uBAAoC;IACxE,YAAmB,gBAA6B,EAAE,MAAiC;QAC/E,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,gCAAmB,CAAC,IAAI,CAAC;QAEvC,4CAA4C;QAC5C,6BAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAEe,MAAM;;YAClB,IAAA,oDAAwB,EAAC,6BAAmB,CAAC,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,CAAC;QACpH,CAAC;KAAA;;AAXL,gDAcC;AAD0B,sCAAmB,GAAG,cAAc,CAAC","sourcesContent":["import { Placement } from '@popperjs/core';\nimport { IRoomstayMember } from '@roomstay/core';\n\nimport { MenuItemType } from '@/components/generic/modal/SigninModal/AuthenticatedUserModal';\nimport { BaseEngine, BaseEngineConfig, BookingEngineSource } from '@/engines/BaseEngine';\nimport { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nimport { renderMemberPortalWidget } from './MemberPortalWidgetElement';\n\nexport interface MemberPortalWidgetConfig extends BaseEngineConfig {\n company: Pick<ConfigCompany, 'colors' | 'companyShort'>;\n hotel: Hotel;\n authMenuItem?: MenuItemType[];\n buttonClass?: string;\n overlayPlacement?: Placement;\n fallbackPlacements?: Placement;\n onSignedIn?: (user: IRoomstayMember) => void;\n onSignedOut?: () => void;\n renderInput?: (member?: IRoomstayMember | null, isLoading?: boolean) => JSX.Element | string;\n}\n\nexport class MemberPortalWidget extends BaseEngine<MemberPortalWidgetConfig> {\n public constructor(bookingContainer: HTMLElement, config?: MemberPortalWidgetConfig) {\n super(bookingContainer, config);\n this.source = BookingEngineSource.Auth;\n\n // TODO: Make this a more permanent solution\n RoomstayThemeEngine.EngineContainer.classList.add('--transparent-bg');\n }\n\n protected async render() {\n renderMemberPortalWidget(RoomstayThemeEngine.createElementOrReuseExisting('div', 'member-portal-widget'), this);\n }\n\n public static readonly MEMBER_PORTAL_PARAM = 'memberPortal';\n}\n"]}
1
+ {"version":3,"file":"MemberPortalWidget.js","sourceRoot":"/","sources":["src/engines/MemberPortalWidget/MemberPortalWidget.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,qDAAyF;AAIzF,0FAAkE;AAElE,2EAAuE;AA0BvE,MAAa,kBAAmB,SAAQ,uBAAoC;IACxE,YAAmB,gBAA6B,EAAE,MAAiC;QAC/E,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,gCAAmB,CAAC,IAAI,CAAC;QAEvC,4CAA4C;QAC5C,6BAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAEM,SAAS,CAAC,MAAgC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;SACrG;QAED,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEe,MAAM;;YAClB,IAAA,oDAAwB,EAAC,6BAAmB,CAAC,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,CAAC;QACpH,CAAC;KAAA;;AAnBL,gDAsBC;AAD0B,sCAAmB,GAAG,cAAc,CAAC","sourcesContent":["import { Placement } from '@popperjs/core';\nimport { IHotelColorScheme, IRoomstayMember } from '@roomstay/core';\n\nimport { MenuItemType } from '@/components/generic/modal/SigninModal/AuthenticatedUserModal';\nimport { BaseEngine, BaseEngineConfig, BookingEngineSource } from '@/engines/BaseEngine';\nimport { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport { ConfigHotel, Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Language } from '@/providers/LanguageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nimport { renderMemberPortalWidget } from './MemberPortalWidgetElement';\n\nexport interface GroupWidgetConfig {\n name?: string;\n logo?: string;\n logoLink?: string;\n checkoutUrl?: string;\n colors?: IHotelColorScheme;\n defaultLanguage?: Language;\n privacyPolicyUrl?: string;\n hotels: ConfigHotel[];\n}\n\nexport interface MemberPortalWidgetConfig extends BaseEngineConfig {\n company: Pick<ConfigCompany, 'colors' | 'companyShort' | 'companyId'>;\n hotel?: Hotel;\n groupWidgetConfig?: GroupWidgetConfig;\n authMenuItem?: MenuItemType[];\n buttonClass?: string;\n overlayPlacement?: Placement;\n fallbackPlacements?: Placement;\n onSignedIn?: (user: IRoomstayMember) => void;\n onSignedOut?: () => void;\n renderInput?: (member?: IRoomstayMember | null, isLoading?: boolean) => JSX.Element | string;\n}\n\nexport class MemberPortalWidget extends BaseEngine<MemberPortalWidgetConfig> {\n public constructor(bookingContainer: HTMLElement, config?: MemberPortalWidgetConfig) {\n super(bookingContainer, config);\n this.source = BookingEngineSource.Auth;\n\n // TODO: Make this a more permanent solution\n RoomstayThemeEngine.EngineContainer.classList.add('--transparent-bg');\n }\n\n public setConfig(config: MemberPortalWidgetConfig): void {\n if (!config.hotel && !config.groupWidgetConfig) {\n throw new Error('MemberPortalWidget requires either a hotel or groupWidgetConfig to be provided');\n }\n\n super.setConfig(config);\n }\n\n protected async render() {\n renderMemberPortalWidget(RoomstayThemeEngine.createElementOrReuseExisting('div', 'member-portal-widget'), this);\n }\n\n public static readonly MEMBER_PORTAL_PARAM = 'memberPortal';\n}\n"]}
@@ -64,18 +64,20 @@ function MemberPortalWidgetElement({ engine }) {
64
64
  }, [roomstayMember]);
65
65
  // Detect changes to the roomstay path
66
66
  (0, react_1.useEffect)(() => {
67
+ var _a;
67
68
  const href = window.location.href.split('#');
69
+ const checkoutUrl = ((_a = engineConfig.groupWidgetConfig) === null || _a === void 0 ? void 0 : _a.checkoutUrl) || (hotel === null || hotel === void 0 ? void 0 : hotel.checkoutUrl);
68
70
  // Ensure the user is redirected to the checkout if a member portal link is clicked
69
- if (href.length > 1 && (hotel === null || hotel === void 0 ? void 0 : hotel.checkoutUrl) && href[0] !== hotel.checkoutUrl) {
71
+ if (href.length > 1 && checkoutUrl && href[0] !== checkoutUrl) {
70
72
  // Add Member portal flag to URL to ensure member portal in enabled when the user lands in the checkout
71
73
  const params = new URLSearchParams(window.location.search);
72
74
  params.set(MemberPortalWidget_1.MemberPortalWidget.MEMBER_PORTAL_PARAM, true.toString());
73
75
  // Redirected to the checkout
74
- const url = new URL(hotel.checkoutUrl, window.location.origin);
76
+ const url = new URL(checkoutUrl, window.location.origin);
75
77
  url.hash = location.pathname + '?' + params.toString();
76
78
  window.location.href = url.toString();
77
79
  }
78
- }, [location]);
80
+ }, [location, engineConfig.groupWidgetConfig]);
79
81
  const buttonElement = (0, react_1.useMemo)(() => {
80
82
  if (engineConfig.renderInput) {
81
83
  return (react_1.default.createElement("div", { ref: loginAnchorEl, onClick: onLoginClickHandler }, engineConfig.renderInput(roomstayMember, loading)));
@@ -114,15 +116,19 @@ function MemberPortalWidgetElement({ engine }) {
114
116
  }
115
117
  exports.default = MemberPortalWidgetElement;
116
118
  const renderMemberPortalWidget = (container, engine) => {
119
+ var _a, _b, _c, _d, _e;
117
120
  const config = engine.getConfig();
118
121
  const companyConfig = config.company;
119
122
  const company = {
120
- name: '',
121
- logo: '',
123
+ companyId: companyConfig.companyId,
124
+ name: ((_a = config.groupWidgetConfig) === null || _a === void 0 ? void 0 : _a.name) || '',
125
+ logo: ((_b = config.groupWidgetConfig) === null || _b === void 0 ? void 0 : _b.logo) || '',
126
+ logoLink: ((_c = config.groupWidgetConfig) === null || _c === void 0 ? void 0 : _c.logoLink) || '',
122
127
  companyShort: companyConfig.companyShort,
123
128
  colors: companyConfig.colors,
124
129
  selectedHotel: config.hotel,
125
- hotels: [config.hotel],
130
+ hotels: ((_d = config.groupWidgetConfig) === null || _d === void 0 ? void 0 : _d.hotels) || (config.hotel ? [config.hotel] : []),
131
+ privacyPolicyUrl: (_e = config.groupWidgetConfig) === null || _e === void 0 ? void 0 : _e.privacyPolicyUrl,
126
132
  };
127
133
  (0, react_dom_1.render)(react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(react_1.default.Fragment, null) },
128
134
  react_1.default.createElement(react_router_dom_1.HashRouter, { future: {
@@ -1 +1 @@
1
- {"version":3,"file":"MemberPortalWidgetElement.js","sourceRoot":"/","sources":["src/engines/MemberPortalWidget/MemberPortalWidgetElement.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AuthenticationContext, AuthenticationContextProvider, BookingEngineContextWrapper, CompanyContextWrapper, RoomstayMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { Suspense, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { render } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\nimport { HashRouter, useLocation } from 'react-router-dom';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport { AuthenticatedUserModal, AuthenticatedUserModalProps } from '@/components/generic/modal/SigninModal/AuthenticatedUserModal';\nimport { UnauthenticatedUserModal, UnauthenticatedUserModalProps } from '@/components/generic/modal/SigninModal/UnauthenticatedUserModal';\nimport { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport { MemberPortalWidget } from './MemberPortalWidget';\n\nexport interface MemberPortalWidgetElementProps {\n engine: MemberPortalWidget;\n}\n\nexport default function MemberPortalWidgetElement({ engine }: MemberPortalWidgetElementProps) {\n const engineConfig = engine.getConfig();\n\n const { roomstayMember } = useContext(RoomstayMemberContext);\n const { loading } = useContext(AuthenticationContext);\n\n const { t } = useTranslation();\n const [loginModalOpen, setLoginModalOpen] = useState(false);\n const loginAnchorEl = useRef<HTMLDivElement | null>(null);\n\n const { hotel } = useCurrentHotel();\n const location = useLocation();\n\n const closeLoginClickHandler = () => {\n setLoginModalOpen(false);\n };\n\n const onLoginClickHandler = () => {\n setLoginModalOpen(true);\n };\n\n useEffect(() => {\n if (roomstayMember) {\n engineConfig.onSignedIn?.(roomstayMember);\n }\n }, [roomstayMember]);\n\n // Detect changes to the roomstay path\n useEffect(() => {\n const href = window.location.href.split('#');\n\n // Ensure the user is redirected to the checkout if a member portal link is clicked\n if (href.length > 1 && hotel?.checkoutUrl && href[0] !== hotel.checkoutUrl) {\n // Add Member portal flag to URL to ensure member portal in enabled when the user lands in the checkout\n const params = new URLSearchParams(window.location.search);\n params.set(MemberPortalWidget.MEMBER_PORTAL_PARAM, true.toString());\n\n // Redirected to the checkout\n const url = new URL(hotel.checkoutUrl, window.location.origin);\n url.hash = location.pathname + '?' + params.toString();\n window.location.href = url.toString();\n }\n }, [location]);\n\n const buttonElement = useMemo(() => {\n if (engineConfig.renderInput) {\n return (\n <div ref={loginAnchorEl} onClick={onLoginClickHandler}>\n {engineConfig.renderInput(roomstayMember, loading)}\n </div>\n );\n } else {\n return (\n <div ref={loginAnchorEl} style={{ width: 'fit-content' }}>\n {roomstayMember ? (\n <BEButton isLoading={loading} size=\"small\" className={engineConfig.buttonClass} onClick={onLoginClickHandler} stopIconAnimation>\n {roomstayMember.forename} {roomstayMember.surname}\n <span className=\"u-white u-pad-left--light\" style={{ marginRight: -13 }}>\n <Icon icon={IconType.ArrowDown2} size=\"1.3em\" color={Color.DarkGrey} />\n </span>\n </BEButton>\n ) : (\n <BEButton isLoading={loading} size=\"small\" className={engineConfig.buttonClass} onClick={onLoginClickHandler} stopIconAnimation>\n {t(Translation.Navigation.SignIn.SignIn)}\n <span className=\"u-white u-pad-left--light\" style={{ marginRight: -13 }}>\n <Icon icon={IconType.ArrowDown2} size=\"1.3em\" color={Color.DarkGrey} />\n </span>\n </BEButton>\n )}\n </div>\n );\n }\n }, [engineConfig.renderInput, roomstayMember, loading]);\n\n const authProps: AuthenticatedUserModalProps = {\n open: loginModalOpen,\n anchorEl: loginAnchorEl.current,\n menuItems: engineConfig.authMenuItem,\n placement: engineConfig.overlayPlacement || 'bottom-end',\n fallbackPlacements: engineConfig.fallbackPlacements,\n onClose: closeLoginClickHandler,\n onSignedOut: engineConfig.onSignedOut,\n };\n\n const unauthProps: UnauthenticatedUserModalProps = {\n open: loginModalOpen,\n anchorEl: loginAnchorEl.current,\n placement: engineConfig.overlayPlacement || 'bottom-end',\n fallbackPlacements: engineConfig.fallbackPlacements,\n onClose: closeLoginClickHandler,\n };\n\n return (\n <>\n {buttonElement}\n <Suspense fallback={SmallSpinner}>{roomstayMember ? <AuthenticatedUserModal {...authProps} /> : <UnauthenticatedUserModal {...unauthProps} />}</Suspense>\n </>\n );\n}\n\nexport const renderMemberPortalWidget = (container: Element, engine: MemberPortalWidget) => {\n const config = engine.getConfig();\n const companyConfig = config.company;\n\n const company: ConfigCompany = {\n name: '',\n logo: '',\n companyShort: companyConfig.companyShort,\n colors: companyConfig.colors,\n selectedHotel: config.hotel,\n hotels: [config.hotel],\n };\n\n render(\n <Suspense fallback={<></>}>\n <HashRouter\n future={{\n v7_startTransition: false,\n v7_relativeSplatPath: false,\n }}\n >\n <BookingEngineContextWrapper engine={engine}>\n <CompanyContextWrapper configCompany={company}>\n <AuthenticationContextProvider>\n <MemberPortalWidgetElement engine={engine} />\n </AuthenticationContextProvider>\n </CompanyContextWrapper>\n </BookingEngineContextWrapper>\n </HashRouter>\n </Suspense>,\n container\n );\n};\n"]}
1
+ {"version":3,"file":"MemberPortalWidgetElement.js","sourceRoot":"/","sources":["src/engines/MemberPortalWidget/MemberPortalWidgetElement.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AuthenticationContext, AuthenticationContextProvider, BookingEngineContextWrapper, CompanyContextWrapper, RoomstayMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { Suspense, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { render } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\nimport { HashRouter, useLocation } from 'react-router-dom';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport { AuthenticatedUserModal, AuthenticatedUserModalProps } from '@/components/generic/modal/SigninModal/AuthenticatedUserModal';\nimport { UnauthenticatedUserModal, UnauthenticatedUserModalProps } from '@/components/generic/modal/SigninModal/UnauthenticatedUserModal';\nimport { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport { MemberPortalWidget } from './MemberPortalWidget';\n\nexport interface MemberPortalWidgetElementProps {\n engine: MemberPortalWidget;\n}\n\nexport default function MemberPortalWidgetElement({ engine }: MemberPortalWidgetElementProps) {\n const engineConfig = engine.getConfig();\n\n const { roomstayMember } = useContext(RoomstayMemberContext);\n const { loading } = useContext(AuthenticationContext);\n\n const { t } = useTranslation();\n const [loginModalOpen, setLoginModalOpen] = useState(false);\n const loginAnchorEl = useRef<HTMLDivElement | null>(null);\n\n const { hotel } = useCurrentHotel();\n const location = useLocation();\n\n const closeLoginClickHandler = () => {\n setLoginModalOpen(false);\n };\n\n const onLoginClickHandler = () => {\n setLoginModalOpen(true);\n };\n\n useEffect(() => {\n if (roomstayMember) {\n engineConfig.onSignedIn?.(roomstayMember);\n }\n }, [roomstayMember]);\n\n // Detect changes to the roomstay path\n useEffect(() => {\n const href = window.location.href.split('#');\n const checkoutUrl = engineConfig.groupWidgetConfig?.checkoutUrl || hotel?.checkoutUrl;\n\n // Ensure the user is redirected to the checkout if a member portal link is clicked\n if (href.length > 1 && checkoutUrl && href[0] !== checkoutUrl) {\n // Add Member portal flag to URL to ensure member portal in enabled when the user lands in the checkout\n const params = new URLSearchParams(window.location.search);\n params.set(MemberPortalWidget.MEMBER_PORTAL_PARAM, true.toString());\n\n // Redirected to the checkout\n const url = new URL(checkoutUrl, window.location.origin);\n url.hash = location.pathname + '?' + params.toString();\n window.location.href = url.toString();\n }\n }, [location, engineConfig.groupWidgetConfig]);\n\n const buttonElement = useMemo(() => {\n if (engineConfig.renderInput) {\n return (\n <div ref={loginAnchorEl} onClick={onLoginClickHandler}>\n {engineConfig.renderInput(roomstayMember, loading)}\n </div>\n );\n } else {\n return (\n <div ref={loginAnchorEl} style={{ width: 'fit-content' }}>\n {roomstayMember ? (\n <BEButton isLoading={loading} size=\"small\" className={engineConfig.buttonClass} onClick={onLoginClickHandler} stopIconAnimation>\n {roomstayMember.forename} {roomstayMember.surname}\n <span className=\"u-white u-pad-left--light\" style={{ marginRight: -13 }}>\n <Icon icon={IconType.ArrowDown2} size=\"1.3em\" color={Color.DarkGrey} />\n </span>\n </BEButton>\n ) : (\n <BEButton isLoading={loading} size=\"small\" className={engineConfig.buttonClass} onClick={onLoginClickHandler} stopIconAnimation>\n {t(Translation.Navigation.SignIn.SignIn)}\n <span className=\"u-white u-pad-left--light\" style={{ marginRight: -13 }}>\n <Icon icon={IconType.ArrowDown2} size=\"1.3em\" color={Color.DarkGrey} />\n </span>\n </BEButton>\n )}\n </div>\n );\n }\n }, [engineConfig.renderInput, roomstayMember, loading]);\n\n const authProps: AuthenticatedUserModalProps = {\n open: loginModalOpen,\n anchorEl: loginAnchorEl.current,\n menuItems: engineConfig.authMenuItem,\n placement: engineConfig.overlayPlacement || 'bottom-end',\n fallbackPlacements: engineConfig.fallbackPlacements,\n onClose: closeLoginClickHandler,\n onSignedOut: engineConfig.onSignedOut,\n };\n\n const unauthProps: UnauthenticatedUserModalProps = {\n open: loginModalOpen,\n anchorEl: loginAnchorEl.current,\n placement: engineConfig.overlayPlacement || 'bottom-end',\n fallbackPlacements: engineConfig.fallbackPlacements,\n onClose: closeLoginClickHandler,\n };\n\n return (\n <>\n {buttonElement}\n <Suspense fallback={SmallSpinner}>{roomstayMember ? <AuthenticatedUserModal {...authProps} /> : <UnauthenticatedUserModal {...unauthProps} />}</Suspense>\n </>\n );\n}\n\nexport const renderMemberPortalWidget = (container: Element, engine: MemberPortalWidget) => {\n const config = engine.getConfig();\n const companyConfig = config.company;\n\n const company: ConfigCompany = {\n companyId: companyConfig.companyId,\n name: config.groupWidgetConfig?.name || '',\n logo: config.groupWidgetConfig?.logo || '',\n logoLink: config.groupWidgetConfig?.logoLink || '',\n companyShort: companyConfig.companyShort,\n colors: companyConfig.colors,\n selectedHotel: config.hotel,\n hotels: config.groupWidgetConfig?.hotels || (config.hotel ? [config.hotel] : []),\n privacyPolicyUrl: config.groupWidgetConfig?.privacyPolicyUrl,\n };\n\n render(\n <Suspense fallback={<></>}>\n <HashRouter\n future={{\n v7_startTransition: false,\n v7_relativeSplatPath: false,\n }}\n >\n <BookingEngineContextWrapper engine={engine}>\n <CompanyContextWrapper configCompany={company}>\n <AuthenticationContextProvider>\n <MemberPortalWidgetElement engine={engine} />\n </AuthenticationContextProvider>\n </CompanyContextWrapper>\n </BookingEngineContextWrapper>\n </HashRouter>\n </Suspense>,\n container\n );\n};\n"]}
@@ -18,6 +18,8 @@ export interface ConfigCompany extends HasDatalayerTags {
18
18
  selectedHotel?: string | Hotel;
19
19
  logoLink?: string;
20
20
  brandSuffix?: string;
21
+ companyId?: number;
22
+ privacyPolicyUrl?: string;
21
23
  }
22
24
  export interface Company extends ConfigCompany {
23
25
  hotels: Hotel[];
@@ -1 +1 @@
1
- {"version":3,"file":"Company.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Company.ts"],"names":[],"mappings":"","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\n\nimport type { ConfigHotel, Hotel } from '@/models/Client/Hotel/Hotel';\n\nexport interface HasDatalayerTags {\n datalayer?: {\n gtmIds: string[];\n };\n}\n\nexport interface ConfigCompany extends HasDatalayerTags {\n name: string;\n /**\n * Used for single word names \"Ovolo, Roomstay, etc\"\n * @param companyShort\n */\n companyShort: string;\n\n logo: string;\n colors: IHotelColorScheme;\n\n hotels: ConfigHotel[];\n\n selectedHotel?: string | Hotel;\n\n logoLink?: string;\n\n brandSuffix?: string;\n}\n\nexport interface Company extends ConfigCompany {\n hotels: Hotel[];\n selectedHotel?: Hotel;\n}\n"]}
1
+ {"version":3,"file":"Company.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Company.ts"],"names":[],"mappings":"","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\n\nimport type { ConfigHotel, Hotel } from '@/models/Client/Hotel/Hotel';\n\nexport interface HasDatalayerTags {\n datalayer?: {\n gtmIds: string[];\n };\n}\n\nexport interface ConfigCompany extends HasDatalayerTags {\n name: string;\n /**\n * Used for single word names \"Ovolo, Roomstay, etc\"\n * @param companyShort\n */\n companyShort: string;\n\n logo: string;\n colors: IHotelColorScheme;\n\n hotels: ConfigHotel[];\n\n selectedHotel?: string | Hotel;\n\n logoLink?: string;\n\n brandSuffix?: string;\n\n companyId?: number;\n\n privacyPolicyUrl?: string;\n}\n\nexport interface Company extends ConfigCompany {\n hotels: Hotel[];\n selectedHotel?: Hotel;\n}\n"]}