@roomstay/frontend 1.5.7 → 1.5.8

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.
@@ -41,6 +41,7 @@ const hooks_1 = require("@frontend/hooks");
41
41
  const contexts_2 = require("@frontend/contexts");
42
42
  const InputGroup_1 = require("../../../generic/InputGroup/InputGroup");
43
43
  const RoomstayThemeEngine_1 = require("providers/RoomstayThemeEngine");
44
+ const Validation_1 = require("util/Validation");
44
45
  const MemberOnlyModalDefaultInputs = {
45
46
  Lines: [
46
47
  {
@@ -69,7 +70,7 @@ const MemberOnlyModalDefaultInputs = {
69
70
  placeholder: 'Email Address',
70
71
  isRequired: true,
71
72
  validate: (input) => {
72
- if (!input.match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)) {
73
+ if (!input.match(Validation_1.EMAIL_REGEX)) {
73
74
  return 'Invalid Email Address';
74
75
  }
75
76
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"MemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/MemberSignInModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import SimpleModal, { SimpleModalSize } from '../../../generic/modal/SimpleModal';\nimport Icon, { IconType } from '../../../generic/Icon';\nimport { Color } from '../../../../util/Color';\nimport Headline from '../../../generic/Headline';\nimport Text, { TextType } from '../../../generic/Text';\nimport BEButton from '../../../generic/BEButton';\nimport * as React from 'react';\nimport { useContext, useState, useEffect, useRef } from 'react';\nimport TextBox from '../../../generic/TextBox';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport API from '../../../../api/BookingAPI';\nimport { ErrorHandler } from '../../../../contexts/ErrorContext';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport ScreenSize from '../../../../util/ScreenSize';\nimport * as Sentry from '@sentry/browser';\nimport { Translation } from '../../../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\n\nimport { useCurrentHotel } from '@frontend/hooks';\n\nimport { CompanyContext } from '@frontend/contexts';\nimport InputGroup from '../../../generic/InputGroup/InputGroup';\nimport { MemberOnlyModalInputs } from './MemberSignInModal.types';\nimport RoomstayThemeEngine from 'providers/RoomstayThemeEngine';\n\ninterface MemberSignInModalProps {\n onClose?: () => void;\n isOpen?: boolean;\n}\n\nconst MemberOnlyModalDefaultInputs: MemberOnlyModalInputs = {\n Lines: [\n {\n Dimension: '2/2',\n Inputs: [\n {\n name: 'FirstName',\n type: 'TextBox',\n placeholder: 'First Name',\n isRequired: true,\n },\n {\n name: 'LastName',\n type: 'TextBox',\n placeholder: 'Last Name',\n isRequired: true,\n },\n ],\n },\n {\n Dimension: '1',\n Inputs: [\n {\n name: 'Email',\n type: 'TextBox',\n placeholder: 'Email Address',\n isRequired: true,\n validate: (input: string) => {\n if (!input.match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)) {\n return 'Invalid Email Address';\n }\n return true;\n },\n },\n ],\n },\n ],\n};\n\nexport default function MemberSignInModal(props: MemberSignInModalProps) {\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const [isLoading, setIsLoading] = useState(false);\n const [showErrors, setShowErrors] = useState(false);\n\n const [captchaScriptLoaded, setCaptchaScriptLoaded] = useState(false);\n const [reCaptchaSecret, setReCaptchaSecret] = useState<string>();\n const [captchaError, setCaptchaError] = useState<string>();\n\n const captchaRef = useRef(null);\n\n const shouldLoadCaptcha = !!hotel?.googleReCaptcha?.loadForMembers && !!hotel?.googleReCaptcha?.siteKey;\n\n useEffect(() => {\n let cancelled = false;\n\n if (shouldLoadCaptcha) {\n RoomstayThemeEngine.loadScript('https://www.google.com/recaptcha/api.js', 'Google ReCaptcha').then(() => {\n /** @ts-ignore */\n window.grecaptcha.ready(() => {\n if (!cancelled) {\n setCaptchaScriptLoaded(true);\n }\n });\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [hotel]);\n\n useEffect(() => {\n if (shouldLoadCaptcha && captchaScriptLoaded && !captchaRef?.current && props.isOpen) {\n try {\n setTimeout(() => {\n const captchaCallback = (secret: string) => {\n setReCaptchaSecret(secret);\n setCaptchaError(undefined);\n };\n\n /** @ts-ignore */\n window.grecaptcha.render(captchaRef.current, {\n sitekey: hotel.googleReCaptcha.siteKey,\n callback: captchaCallback,\n });\n }, 5);\n } catch (ex) {\n Sentry.captureException(ex);\n }\n }\n }, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef?.current]);\n\n useEffect(() => {\n if (!props.isOpen) {\n setReCaptchaSecret(null);\n setCaptchaError(null);\n }\n }, [props.isOpen]);\n\n const getValidationClass = (name: string) => {\n if (errors && (formState.touchedFields[name] || showErrors)) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n const methods = useForm({\n mode: 'onChange',\n });\n\n const { formState, register } = methods;\n const errors = methods.formState.errors;\n\n const onSubmit = async () => {\n if (shouldLoadCaptcha && (!reCaptchaSecret || reCaptchaSecret === '')) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.PleaseTick));\n return;\n }\n\n await signUpMember();\n };\n\n const signUpMember = async () => {\n setIsLoading(true);\n const { FirstName, LastName, Email, ...extra } = methods.getValues();\n\n if (!FirstName || !LastName || !Email) {\n setIsLoading(false);\n ErrorHandler.add({\n title: 'Required fields in the Member Signup are missing.',\n message: 'First Name, Last Name, and Email Mandatory Fields, make sure that these fields are present to avoid loss of data.',\n });\n\n return;\n }\n\n try {\n const extraFields = Object.keys(extra).map((extraFieldKey: string) => {\n return { name: extraFieldKey, value: extra[extraFieldKey] };\n });\n\n const response = await API.Member.addMember(FirstName, LastName, Email, extraFields, hotel.hotelID, reCaptchaSecret);\n\n if (response.error) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.ValidationError));\n } else {\n ccx.signUserIn(Email);\n\n if (hotel?.memberOnlyPromoCode) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(hotel?.memberOnlyPromoCode);\n basketContext.updateBasketRow(row);\n });\n }\n }\n } catch (e) {\n ErrorHandler.add({\n title: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Title),\n message: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Message),\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const modalInputs: MemberOnlyModalInputs = hotel?.memberOnlySignupInputs ?? MemberOnlyModalDefaultInputs;\n\n const loadingOnClose = () => {\n setIsLoading(false);\n if (props.onClose) {\n props.onClose();\n }\n };\n const buttonOnClickHandler = async () => {\n await methods.handleSubmit(onSubmit)();\n setShowErrors(true);\n\n return false;\n };\n\n return (\n <SimpleModal open={props.isOpen} onClose={loadingOnClose} size={SimpleModalSize.Normal} alignCenter={true}>\n <div className=\"row\">\n <div\n className=\"col-md-6 u-mh-none\"\n style={{\n background: 'url(\"' + hotel?.heroImage + '\")',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n }}\n />\n <div className=\"col-md-6\">\n <div className=\"u-pad u-pad-heavy@m-\">\n <div className=\"u-marg-bottom-half\">\n <Icon icon={IconType.Money} size=\"24px\" color={Color.Success} backgroundColor={Color.SuccessTint} />\n </div>\n <div className=\"u-marg-bottom-half\">\n <Headline bold={true} color={Color.Success}>\n <div\n style={{ color: Color.Success }}\n dangerouslySetInnerHTML={{\n __html: t(Translation.MemberOnlyPopup.Headline, {\n companyShort: ccx?.companyShort,\n }),\n }}\n ></div>\n </Headline>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.MemberOnlyPopup.Subtitle)}\n </Text>\n </div>\n <FormProvider {...methods}>\n <div>\n {modalInputs.Lines.map((inputLine, lineIndex) => {\n return (\n <InputGroup dimensions={inputLine.Dimension} key={lineIndex}>\n {inputLine.Inputs.map((input, inputIndex) => {\n switch (input.type) {\n case 'TextBox':\n return (\n <TextBox\n key={inputIndex}\n wide={true}\n placeholder={input.placeholder}\n required={input.isRequired}\n validationStatus={getValidationClass(input.name)}\n {...register(input.name, {\n required: input.isRequired,\n validate: input.validate,\n })}\n />\n );\n }\n })}\n </InputGroup>\n );\n })}\n </div>\n <div className=\"u-marg-top--light\" style={{ marginBottom: '45px' }}>\n {captchaScriptLoaded && (\n <>\n {captchaError && (\n <Text type={TextType.Label} color={Color.Alert}>\n {captchaError}\n </Text>\n )}\n <div ref={captchaRef} className=\"u-marg-bottom\"></div>\n </>\n )}\n <BEButton\n size=\"normal\"\n filled={true}\n success={true}\n isLoading={isLoading}\n stopIconAnimation={true}\n icon={context.screenSize > ScreenSize.Mobile ? IconType.ArrowRight : null}\n onClick={buttonOnClickHandler}\n >\n {t(Translation.MemberOnlyPopup.SubmitButtonText)}\n </BEButton>\n </div>\n </FormProvider>\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.AgreeToReceiveDeals, { companyShort: ccx?.companyShort }) }}></span>\n </Text>{' '}\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.UnsubscribeAnytime) }}></span>\n </Text>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"MemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/MemberSignInModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import SimpleModal, { SimpleModalSize } from '../../../generic/modal/SimpleModal';\nimport Icon, { IconType } from '../../../generic/Icon';\nimport { Color } from '../../../../util/Color';\nimport Headline from '../../../generic/Headline';\nimport Text, { TextType } from '../../../generic/Text';\nimport BEButton from '../../../generic/BEButton';\nimport * as React from 'react';\nimport { useContext, useState, useEffect, useRef } from 'react';\nimport TextBox from '../../../generic/TextBox';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport API from '../../../../api/BookingAPI';\nimport { ErrorHandler } from '../../../../contexts/ErrorContext';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport ScreenSize from '../../../../util/ScreenSize';\nimport * as Sentry from '@sentry/browser';\nimport { Translation } from '../../../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\n\nimport { useCurrentHotel } from '@frontend/hooks';\n\nimport { CompanyContext } from '@frontend/contexts';\nimport InputGroup from '../../../generic/InputGroup/InputGroup';\nimport { MemberOnlyModalInputs } from './MemberSignInModal.types';\nimport RoomstayThemeEngine from 'providers/RoomstayThemeEngine';\nimport { EMAIL_REGEX } from 'util/Validation';\n\ninterface MemberSignInModalProps {\n onClose?: () => void;\n isOpen?: boolean;\n}\n\nconst MemberOnlyModalDefaultInputs: MemberOnlyModalInputs = {\n Lines: [\n {\n Dimension: '2/2',\n Inputs: [\n {\n name: 'FirstName',\n type: 'TextBox',\n placeholder: 'First Name',\n isRequired: true,\n },\n {\n name: 'LastName',\n type: 'TextBox',\n placeholder: 'Last Name',\n isRequired: true,\n },\n ],\n },\n {\n Dimension: '1',\n Inputs: [\n {\n name: 'Email',\n type: 'TextBox',\n placeholder: 'Email Address',\n isRequired: true,\n validate: (input: string) => {\n if (!input.match(EMAIL_REGEX)) {\n return 'Invalid Email Address';\n }\n return true;\n },\n },\n ],\n },\n ],\n};\n\nexport default function MemberSignInModal(props: MemberSignInModalProps) {\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const [isLoading, setIsLoading] = useState(false);\n const [showErrors, setShowErrors] = useState(false);\n\n const [captchaScriptLoaded, setCaptchaScriptLoaded] = useState(false);\n const [reCaptchaSecret, setReCaptchaSecret] = useState<string>();\n const [captchaError, setCaptchaError] = useState<string>();\n\n const captchaRef = useRef(null);\n\n const shouldLoadCaptcha = !!hotel?.googleReCaptcha?.loadForMembers && !!hotel?.googleReCaptcha?.siteKey;\n\n useEffect(() => {\n let cancelled = false;\n\n if (shouldLoadCaptcha) {\n RoomstayThemeEngine.loadScript('https://www.google.com/recaptcha/api.js', 'Google ReCaptcha').then(() => {\n /** @ts-ignore */\n window.grecaptcha.ready(() => {\n if (!cancelled) {\n setCaptchaScriptLoaded(true);\n }\n });\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [hotel]);\n\n useEffect(() => {\n if (shouldLoadCaptcha && captchaScriptLoaded && !captchaRef?.current && props.isOpen) {\n try {\n setTimeout(() => {\n const captchaCallback = (secret: string) => {\n setReCaptchaSecret(secret);\n setCaptchaError(undefined);\n };\n\n /** @ts-ignore */\n window.grecaptcha.render(captchaRef.current, {\n sitekey: hotel.googleReCaptcha.siteKey,\n callback: captchaCallback,\n });\n }, 5);\n } catch (ex) {\n Sentry.captureException(ex);\n }\n }\n }, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef?.current]);\n\n useEffect(() => {\n if (!props.isOpen) {\n setReCaptchaSecret(null);\n setCaptchaError(null);\n }\n }, [props.isOpen]);\n\n const getValidationClass = (name: string) => {\n if (errors && (formState.touchedFields[name] || showErrors)) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n const methods = useForm({\n mode: 'onChange',\n });\n\n const { formState, register } = methods;\n const errors = methods.formState.errors;\n\n const onSubmit = async () => {\n if (shouldLoadCaptcha && (!reCaptchaSecret || reCaptchaSecret === '')) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.PleaseTick));\n return;\n }\n\n await signUpMember();\n };\n\n const signUpMember = async () => {\n setIsLoading(true);\n const { FirstName, LastName, Email, ...extra } = methods.getValues();\n\n if (!FirstName || !LastName || !Email) {\n setIsLoading(false);\n ErrorHandler.add({\n title: 'Required fields in the Member Signup are missing.',\n message: 'First Name, Last Name, and Email Mandatory Fields, make sure that these fields are present to avoid loss of data.',\n });\n\n return;\n }\n\n try {\n const extraFields = Object.keys(extra).map((extraFieldKey: string) => {\n return { name: extraFieldKey, value: extra[extraFieldKey] };\n });\n\n const response = await API.Member.addMember(FirstName, LastName, Email, extraFields, hotel.hotelID, reCaptchaSecret);\n\n if (response.error) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.ValidationError));\n } else {\n ccx.signUserIn(Email);\n\n if (hotel?.memberOnlyPromoCode) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(hotel?.memberOnlyPromoCode);\n basketContext.updateBasketRow(row);\n });\n }\n }\n } catch (e) {\n ErrorHandler.add({\n title: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Title),\n message: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Message),\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const modalInputs: MemberOnlyModalInputs = hotel?.memberOnlySignupInputs ?? MemberOnlyModalDefaultInputs;\n\n const loadingOnClose = () => {\n setIsLoading(false);\n if (props.onClose) {\n props.onClose();\n }\n };\n const buttonOnClickHandler = async () => {\n await methods.handleSubmit(onSubmit)();\n setShowErrors(true);\n\n return false;\n };\n\n return (\n <SimpleModal open={props.isOpen} onClose={loadingOnClose} size={SimpleModalSize.Normal} alignCenter={true}>\n <div className=\"row\">\n <div\n className=\"col-md-6 u-mh-none\"\n style={{\n background: 'url(\"' + hotel?.heroImage + '\")',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n }}\n />\n <div className=\"col-md-6\">\n <div className=\"u-pad u-pad-heavy@m-\">\n <div className=\"u-marg-bottom-half\">\n <Icon icon={IconType.Money} size=\"24px\" color={Color.Success} backgroundColor={Color.SuccessTint} />\n </div>\n <div className=\"u-marg-bottom-half\">\n <Headline bold={true} color={Color.Success}>\n <div\n style={{ color: Color.Success }}\n dangerouslySetInnerHTML={{\n __html: t(Translation.MemberOnlyPopup.Headline, {\n companyShort: ccx?.companyShort,\n }),\n }}\n ></div>\n </Headline>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.MemberOnlyPopup.Subtitle)}\n </Text>\n </div>\n <FormProvider {...methods}>\n <div>\n {modalInputs.Lines.map((inputLine, lineIndex) => {\n return (\n <InputGroup dimensions={inputLine.Dimension} key={lineIndex}>\n {inputLine.Inputs.map((input, inputIndex) => {\n switch (input.type) {\n case 'TextBox':\n return (\n <TextBox\n key={inputIndex}\n wide={true}\n placeholder={input.placeholder}\n required={input.isRequired}\n validationStatus={getValidationClass(input.name)}\n {...register(input.name, {\n required: input.isRequired,\n validate: input.validate,\n })}\n />\n );\n }\n })}\n </InputGroup>\n );\n })}\n </div>\n <div className=\"u-marg-top--light\" style={{ marginBottom: '45px' }}>\n {captchaScriptLoaded && (\n <>\n {captchaError && (\n <Text type={TextType.Label} color={Color.Alert}>\n {captchaError}\n </Text>\n )}\n <div ref={captchaRef} className=\"u-marg-bottom\"></div>\n </>\n )}\n <BEButton\n size=\"normal\"\n filled={true}\n success={true}\n isLoading={isLoading}\n stopIconAnimation={true}\n icon={context.screenSize > ScreenSize.Mobile ? IconType.ArrowRight : null}\n onClick={buttonOnClickHandler}\n >\n {t(Translation.MemberOnlyPopup.SubmitButtonText)}\n </BEButton>\n </div>\n </FormProvider>\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.AgreeToReceiveDeals, { companyShort: ccx?.companyShort }) }}></span>\n </Text>{' '}\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.UnsubscribeAnytime) }}></span>\n </Text>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n}\n"]}
@@ -27,6 +27,7 @@ const react_hook_form_1 = require("react-hook-form");
27
27
  const react_i18next_1 = require("react-i18next");
28
28
  const Translation_1 = require("translations/Translation");
29
29
  const Color_1 = require("util/Color");
30
+ const Validation_1 = require("util/Validation");
30
31
  exports.StepRoomErrorForm = () => {
31
32
  const { register, handleSubmit, formState } = react_hook_form_1.useForm();
32
33
  const { hotel } = CurrentHotelHook_1.useCurrentHotel();
@@ -94,7 +95,7 @@ exports.StepRoomErrorForm = () => {
94
95
  message: `${t(Translation_1.Translation.Step.Room.ErrorForm.Inputs.Email)} is a required field`,
95
96
  },
96
97
  pattern: {
97
- value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,
98
+ value: Validation_1.EMAIL_REGEX,
98
99
  message: 'Email must be valid',
99
100
  },
100
101
  })))),
@@ -1 +1 @@
1
- {"version":3,"file":"StepRoomErrorForm.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomErrorForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport AutoAutoHeight from 'animations/AutoAutoHeight';\nimport API from 'api/BookingAPI';\nimport Alert, { AlertType } from 'components/generic/Alert';\nimport BEButton from 'components/generic/BEButton';\nimport Headline from 'components/generic/Headline';\nimport Icon, { IconType } from 'components/generic/Icon';\nimport Text, { TextType } from 'components/generic/Text';\nimport TextBox from 'components/generic/TextBox';\nimport * as dayjs from 'dayjs';\nimport { useCurrentHotel } from 'hooks/CurrentHotelHook';\nimport * as React from 'react';\nimport { useContext, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport { Color } from 'util/Color';\n\nexport const StepRoomErrorForm = () => {\n const { register, handleSubmit, formState } = useForm();\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const { t } = useTranslation();\n\n const [apiStatus, setApiStatus] = useState<{ success?: boolean; message?: string }>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const onSubmit = async (values: any) => {\n setApiStatus({});\n setIsLoading(true);\n\n try {\n const br = basketContext.selectedBasketRow;\n let searchQuery = '';\n [\n { name: 'Adults', value: br.getAdults() },\n { name: 'Children', value: br.getChildren() },\n { name: 'Promo Code', value: br.getPromoCode() },\n { name: 'Dates range', value: br.getStayDateRange('ddd D MMM YYYY', ' till ') },\n { name: 'Date Sent', value: dayjs().format('dd D MMM YYYY') },\n ].forEach(({ name, value }) => {\n if (value) {\n searchQuery += `${name}: ${value}\\n`;\n }\n });\n\n await API.Error.sendRoomFallbackForm(hotel.hotelID, {\n name: values.name,\n telephone: values.telephone,\n email: values.email,\n searchQuery,\n });\n\n setApiStatus({ success: true });\n } catch (ex) {\n setApiStatus({ success: false, message: t(Translation.Step.Room.ErrorForm.APIError) });\n }\n\n setIsLoading(false);\n };\n\n return (\n <div className=\"u-fill-white u-rounded\">\n <div className=\"row u-pad--heavy\">\n <div className=\"col-lg-6 d-flex justify-content-center flex-column\">\n <div className=\"u-marg-bottom--light\">\n <Icon icon={IconType.Error} color={Color.Alert} size={'24px'} />\n </div>\n <div className=\"u-marg-bottom--light\">\n <Headline bold={true} color={Color.Alert}>\n <span style={{ color: 'inherit' }} dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.ErrorForm.Title) }} />\n </Headline>\n </div>\n\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.ErrorForm.Description) }} />\n </Text>\n </div>\n <div className=\"col-lg-6\">\n <form>\n <AutoAutoHeight open={!!formState.errors}>\n {Object.values(formState.errors).map((error) => {\n return (\n <Alert type={AlertType.Danger}>\n <Text type={TextType.Small}>{error.message}</Text>\n </Alert>\n );\n })}\n </AutoAutoHeight>\n <div className=\"u-marg-bottom--light u-marg-top\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Name)}\n {...register('name', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Name)} is a required field`,\n },\n })}\n />\n </div>\n <div className=\"u-marg-bottom--light\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Email)}\n {...register('email', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Email)} is a required field`,\n },\n pattern: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i,\n message: 'Email must be valid',\n },\n })}\n />\n </div>\n <div className=\"u-marg-bottom--light\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Telephone)}\n {...register('telephone', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Telephone)} is a required field`,\n },\n })}\n />\n </div>\n <BEButton filled={true} primary={true} onClick={handleSubmit(onSubmit)} isLoading={isLoading} disabled={isLoading || apiStatus.success}>\n {t(Translation.Step.Room.ErrorForm.ContactUsButton)}\n </BEButton>\n\n <AutoAutoHeight open={apiStatus.success}>\n <div className=\"u-pad-top\">\n <Text color={Color.Success}>{t(Translation.Step.Room.ErrorForm.ConfirmationMessage)}</Text>\n </div>\n </AutoAutoHeight>\n\n <AutoAutoHeight open={apiStatus.success === false}>\n <div className=\"u-pad-top\">\n <Text color={Color.Alert}>{apiStatus.message}</Text>\n </div>\n </AutoAutoHeight>\n </form>\n </div>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"StepRoomErrorForm.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomErrorForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport AutoAutoHeight from 'animations/AutoAutoHeight';\nimport API from 'api/BookingAPI';\nimport Alert, { AlertType } from 'components/generic/Alert';\nimport BEButton from 'components/generic/BEButton';\nimport Headline from 'components/generic/Headline';\nimport Icon, { IconType } from 'components/generic/Icon';\nimport Text, { TextType } from 'components/generic/Text';\nimport TextBox from 'components/generic/TextBox';\nimport * as dayjs from 'dayjs';\nimport { useCurrentHotel } from 'hooks/CurrentHotelHook';\nimport * as React from 'react';\nimport { useContext, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport { Color } from 'util/Color';\nimport { EMAIL_REGEX } from 'util/Validation';\n\nexport const StepRoomErrorForm = () => {\n const { register, handleSubmit, formState } = useForm();\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const { t } = useTranslation();\n\n const [apiStatus, setApiStatus] = useState<{ success?: boolean; message?: string }>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const onSubmit = async (values: any) => {\n setApiStatus({});\n setIsLoading(true);\n\n try {\n const br = basketContext.selectedBasketRow;\n let searchQuery = '';\n [\n { name: 'Adults', value: br.getAdults() },\n { name: 'Children', value: br.getChildren() },\n { name: 'Promo Code', value: br.getPromoCode() },\n { name: 'Dates range', value: br.getStayDateRange('ddd D MMM YYYY', ' till ') },\n { name: 'Date Sent', value: dayjs().format('dd D MMM YYYY') },\n ].forEach(({ name, value }) => {\n if (value) {\n searchQuery += `${name}: ${value}\\n`;\n }\n });\n\n await API.Error.sendRoomFallbackForm(hotel.hotelID, {\n name: values.name,\n telephone: values.telephone,\n email: values.email,\n searchQuery,\n });\n\n setApiStatus({ success: true });\n } catch (ex) {\n setApiStatus({ success: false, message: t(Translation.Step.Room.ErrorForm.APIError) });\n }\n\n setIsLoading(false);\n };\n\n return (\n <div className=\"u-fill-white u-rounded\">\n <div className=\"row u-pad--heavy\">\n <div className=\"col-lg-6 d-flex justify-content-center flex-column\">\n <div className=\"u-marg-bottom--light\">\n <Icon icon={IconType.Error} color={Color.Alert} size={'24px'} />\n </div>\n <div className=\"u-marg-bottom--light\">\n <Headline bold={true} color={Color.Alert}>\n <span style={{ color: 'inherit' }} dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.ErrorForm.Title) }} />\n </Headline>\n </div>\n\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.ErrorForm.Description) }} />\n </Text>\n </div>\n <div className=\"col-lg-6\">\n <form>\n <AutoAutoHeight open={!!formState.errors}>\n {Object.values(formState.errors).map((error) => {\n return (\n <Alert type={AlertType.Danger}>\n <Text type={TextType.Small}>{error.message}</Text>\n </Alert>\n );\n })}\n </AutoAutoHeight>\n <div className=\"u-marg-bottom--light u-marg-top\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Name)}\n {...register('name', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Name)} is a required field`,\n },\n })}\n />\n </div>\n <div className=\"u-marg-bottom--light\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Email)}\n {...register('email', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Email)} is a required field`,\n },\n pattern: {\n value: EMAIL_REGEX,\n message: 'Email must be valid',\n },\n })}\n />\n </div>\n <div className=\"u-marg-bottom--light\">\n <TextBox\n placeholder={t(Translation.Step.Room.ErrorForm.Inputs.Telephone)}\n {...register('telephone', {\n required: {\n value: true,\n message: `${t(Translation.Step.Room.ErrorForm.Inputs.Telephone)} is a required field`,\n },\n })}\n />\n </div>\n <BEButton filled={true} primary={true} onClick={handleSubmit(onSubmit)} isLoading={isLoading} disabled={isLoading || apiStatus.success}>\n {t(Translation.Step.Room.ErrorForm.ContactUsButton)}\n </BEButton>\n\n <AutoAutoHeight open={apiStatus.success}>\n <div className=\"u-pad-top\">\n <Text color={Color.Success}>{t(Translation.Step.Room.ErrorForm.ConfirmationMessage)}</Text>\n </div>\n </AutoAutoHeight>\n\n <AutoAutoHeight open={apiStatus.success === false}>\n <div className=\"u-pad-top\">\n <Text color={Color.Alert}>{apiStatus.message}</Text>\n </div>\n </AutoAutoHeight>\n </form>\n </div>\n </div>\n </div>\n );\n};\n"]}
@@ -29,6 +29,7 @@ const hooks_1 = require("@frontend/hooks");
29
29
  const Translation_1 = require("../../translations/Translation");
30
30
  const StepManager_1 = require("../../util/StepManager");
31
31
  const events_1 = require("../../events");
32
+ const Validation_1 = require("util/Validation");
32
33
  function FindReservation() {
33
34
  const { hotel } = hooks_1.useCurrentHotel();
34
35
  const { t } = react_i18next_1.useTranslation();
@@ -126,7 +127,7 @@ function FindReservation() {
126
127
  React.createElement(TextBox_1.default, Object.assign({ placeholder: "example@mail.com", required: true, validationStatus: getValidationClass('Email'), name: 'Email' }, register('Email', {
127
128
  required: true,
128
129
  pattern: {
129
- value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,
130
+ value: Validation_1.EMAIL_REGEX,
130
131
  message: t(Translation_1.Translation.FindReservation.InvalidEmailAddress),
131
132
  },
132
133
  })))),
@@ -1 +1 @@
1
- {"version":3,"file":"FindReservation.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservation.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Headline from '../../components/generic/Headline';\nimport TextBox from '../../components/generic/TextBox';\nimport Text, { TextType } from '../../components/generic/Text';\nimport { Color } from '../../util/Color';\nimport BEButton from '../../components/generic/BEButton';\nimport { useForm } from 'react-hook-form';\nimport { useState, useEffect } from 'react';\nimport { IconType } from '../../components/generic/Icon';\nimport API from '../../api/BookingAPI';\nimport AutoAutoHeight from '../../animations/AutoAutoHeight';\nimport Alert, { AlertType } from '../../components/generic/Alert';\nimport { useHistory } from 'react-router';\nimport RoomstayThemeEngine from '../../providers/RoomstayThemeEngine';\nimport LineBreak from '../../components/generic/LineBreak';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { Translation } from '../../translations/Translation';\nimport StepManager from '../../util/StepManager';\nimport { FindReservationViewEvent } from '../../events';\n\nexport default function FindReservation() {\n const { hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n\n const { register, formState, handleSubmit, getValues } = useForm({\n mode: 'onChange',\n });\n\n const errors = formState.errors;\n\n const getValidationClass = (name: string) => {\n if (errors && formState.touchedFields[name]) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n const [isLoading, setIsLoading] = useState(false);\n const [apiErrorMessages, setApiErrorMessages] = useState('');\n\n const history = useHistory();\n\n const onSubmit = () => {\n setIsLoading(true);\n setApiErrorMessages('');\n\n API.Reservation.findReservation(getValues('Ref'), getValues('Email'), hotel.hotelID)\n .then((data) => {\n history.push(`/find-reservation/${getValues('Ref')}/${getValues('Email')}`);\n })\n .catch(({ Message }) => {\n console.log(Message);\n setApiErrorMessages(Message);\n setIsLoading(false);\n });\n };\n\n const handleSubmitOnClick = () => {\n handleSubmit(onSubmit)();\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const background = document.createElement('div');\n background.classList.add('dbe-background');\n background.style.backgroundImage = `url('${hotel?.heroImage}')`;\n\n RoomstayThemeEngine.EngineContainer.classList.add('--transparent-bg');\n RoomstayThemeEngine.EngineContainer.appendChild(background);\n\n const event = new FindReservationViewEvent();\n raise(event);\n\n return () => {\n try {\n RoomstayThemeEngine.EngineContainer.removeChild(background);\n RoomstayThemeEngine.EngineContainer.classList.remove('--transparent-bg');\n } catch (ex) {\n console.log('Unable to remove bg');\n }\n };\n }, []);\n\n // TODO: Add a generic handler for this to avoid setting it in every new page\n useEffect(() => {\n if (hotel) {\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel?.colors]);\n\n useEffect(() => {\n if (hotel?.forwardFindReservationToSynxis) {\n window.open(`https://be.synxis.com/signin?hotel=` + hotel.hotelID);\n }\n }, [hotel]);\n\n const onBack = async () => {\n history.push(StepManager.getFirstStep().getStepUrl());\n };\n\n return (\n <div className=\"u-pad-left u-pad-right\">\n <div className=\"container u-marg-top--heavy u-pad-bottom--massive\">\n <form onSubmit={handleSubmit(onSubmit)}>\n <div className=\"row u-pad-bottom--massive\">\n <div className=\"col-md-6 col-xl-4 u-fill-white u-pad--heavy u-shadow-accent-large\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline size=\"extra-large\">{t(Translation.FindReservation.FindYourReservation)}</Headline>\n </div>\n <AutoAutoHeight open={!!apiErrorMessages}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{apiErrorMessages}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.FindReservation.Confirmation)}</strong>\n </Text>\n </div>\n <TextBox\n placeholder=\"51244AB23101\"\n required={true}\n validationStatus={getValidationClass('Ref')}\n {...register('Ref', {\n required: true,\n })}\n />\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.FindReservation.EmailAddress)}</strong>\n </Text>\n </div>\n <TextBox\n placeholder=\"example@mail.com\"\n required={true}\n validationStatus={getValidationClass('Email')}\n name={'Email'}\n {...register('Email', {\n required: true,\n pattern: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i,\n message: t(Translation.FindReservation.InvalidEmailAddress),\n },\n })}\n />\n </div>\n <div className=\"u-flex justify-content-end w-100\">\n <BEButton\n primary={true}\n filled={true}\n mobileWidth={true}\n isLoading={isLoading}\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n onClick={handleSubmitOnClick}\n >\n {t(Translation.FindReservation.FindReservation)}\n </BEButton>\n <button type=\"submit\" className=\"u-none\">\n {t(Translation.FindReservation.Submit)}\n </button>\n </div>\n <LineBreak />\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.FindReservation.Question)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>{t(Translation.FindReservation.Answer1)}</Text>\n <Text type={TextType.Small}>{t(Translation.FindReservation.Answer2)}</Text>\n <LineBreak />\n <BEButton\n textColor={Color.Accent}\n primary={false}\n filled={false}\n mobileWidth={true}\n size=\"small\"\n icon={IconType.ArrowLeft2}\n iconPosition=\"left\"\n onClick={onBack}\n isText={true}\n >\n {t(Translation.FindReservation.Back)}\n </BEButton>\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FindReservation.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservation.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Headline from '../../components/generic/Headline';\nimport TextBox from '../../components/generic/TextBox';\nimport Text, { TextType } from '../../components/generic/Text';\nimport { Color } from '../../util/Color';\nimport BEButton from '../../components/generic/BEButton';\nimport { useForm } from 'react-hook-form';\nimport { useState, useEffect } from 'react';\nimport { IconType } from '../../components/generic/Icon';\nimport API from '../../api/BookingAPI';\nimport AutoAutoHeight from '../../animations/AutoAutoHeight';\nimport Alert, { AlertType } from '../../components/generic/Alert';\nimport { useHistory } from 'react-router';\nimport RoomstayThemeEngine from '../../providers/RoomstayThemeEngine';\nimport LineBreak from '../../components/generic/LineBreak';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { Translation } from '../../translations/Translation';\nimport StepManager from '../../util/StepManager';\nimport { FindReservationViewEvent } from '../../events';\nimport { EMAIL_REGEX } from 'util/Validation';\n\nexport default function FindReservation() {\n const { hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n\n const { register, formState, handleSubmit, getValues } = useForm({\n mode: 'onChange',\n });\n\n const errors = formState.errors;\n\n const getValidationClass = (name: string) => {\n if (errors && formState.touchedFields[name]) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n const [isLoading, setIsLoading] = useState(false);\n const [apiErrorMessages, setApiErrorMessages] = useState('');\n\n const history = useHistory();\n\n const onSubmit = () => {\n setIsLoading(true);\n setApiErrorMessages('');\n\n API.Reservation.findReservation(getValues('Ref'), getValues('Email'), hotel.hotelID)\n .then((data) => {\n history.push(`/find-reservation/${getValues('Ref')}/${getValues('Email')}`);\n })\n .catch(({ Message }) => {\n console.log(Message);\n setApiErrorMessages(Message);\n setIsLoading(false);\n });\n };\n\n const handleSubmitOnClick = () => {\n handleSubmit(onSubmit)();\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const background = document.createElement('div');\n background.classList.add('dbe-background');\n background.style.backgroundImage = `url('${hotel?.heroImage}')`;\n\n RoomstayThemeEngine.EngineContainer.classList.add('--transparent-bg');\n RoomstayThemeEngine.EngineContainer.appendChild(background);\n\n const event = new FindReservationViewEvent();\n raise(event);\n\n return () => {\n try {\n RoomstayThemeEngine.EngineContainer.removeChild(background);\n RoomstayThemeEngine.EngineContainer.classList.remove('--transparent-bg');\n } catch (ex) {\n console.log('Unable to remove bg');\n }\n };\n }, []);\n\n // TODO: Add a generic handler for this to avoid setting it in every new page\n useEffect(() => {\n if (hotel) {\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel?.colors]);\n\n useEffect(() => {\n if (hotel?.forwardFindReservationToSynxis) {\n window.open(`https://be.synxis.com/signin?hotel=` + hotel.hotelID);\n }\n }, [hotel]);\n\n const onBack = async () => {\n history.push(StepManager.getFirstStep().getStepUrl());\n };\n\n return (\n <div className=\"u-pad-left u-pad-right\">\n <div className=\"container u-marg-top--heavy u-pad-bottom--massive\">\n <form onSubmit={handleSubmit(onSubmit)}>\n <div className=\"row u-pad-bottom--massive\">\n <div className=\"col-md-6 col-xl-4 u-fill-white u-pad--heavy u-shadow-accent-large\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline size=\"extra-large\">{t(Translation.FindReservation.FindYourReservation)}</Headline>\n </div>\n <AutoAutoHeight open={!!apiErrorMessages}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{apiErrorMessages}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.FindReservation.Confirmation)}</strong>\n </Text>\n </div>\n <TextBox\n placeholder=\"51244AB23101\"\n required={true}\n validationStatus={getValidationClass('Ref')}\n {...register('Ref', {\n required: true,\n })}\n />\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.FindReservation.EmailAddress)}</strong>\n </Text>\n </div>\n <TextBox\n placeholder=\"example@mail.com\"\n required={true}\n validationStatus={getValidationClass('Email')}\n name={'Email'}\n {...register('Email', {\n required: true,\n pattern: {\n value: EMAIL_REGEX,\n message: t(Translation.FindReservation.InvalidEmailAddress),\n },\n })}\n />\n </div>\n <div className=\"u-flex justify-content-end w-100\">\n <BEButton\n primary={true}\n filled={true}\n mobileWidth={true}\n isLoading={isLoading}\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n onClick={handleSubmitOnClick}\n >\n {t(Translation.FindReservation.FindReservation)}\n </BEButton>\n <button type=\"submit\" className=\"u-none\">\n {t(Translation.FindReservation.Submit)}\n </button>\n </div>\n <LineBreak />\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.FindReservation.Question)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>{t(Translation.FindReservation.Answer1)}</Text>\n <Text type={TextType.Small}>{t(Translation.FindReservation.Answer2)}</Text>\n <LineBreak />\n <BEButton\n textColor={Color.Accent}\n primary={false}\n filled={false}\n mobileWidth={true}\n size=\"small\"\n icon={IconType.ArrowLeft2}\n iconPosition=\"left\"\n onClick={onBack}\n isText={true}\n >\n {t(Translation.FindReservation.Back)}\n </BEButton>\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n}\n"]}