@roomstay/frontend 1.5.6 → 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.
- package/dist/661.bundle.js +1 -1
- package/dist/876.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +2 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +2 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/room/StepRoomErrorForm.js +2 -1
- package/dist/src/components/steps/room/StepRoomErrorForm.js.map +1 -1
- package/dist/src/pages/findReservation/FindReservation.js +2 -1
- package/dist/src/pages/findReservation/FindReservation.js.map +1 -1
- package/dist/src/util/Validation.d.ts +1 -0
- package/dist/src/util/Validation.js +5 -0
- package/dist/src/util/Validation.js.map +1 -0
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -31,6 +31,7 @@ const AutoAutoHeight_1 = require("../../../animations/AutoAutoHeight");
|
|
|
31
31
|
const DataLayer_1 = require("../../../util/DataLayer");
|
|
32
32
|
const EnhancedPhoneNumberField_1 = require("../../generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField");
|
|
33
33
|
const E164PhoneNumberFieldFeature_1 = require("../../../providers/feature/E164PhoneNumberFieldFeature");
|
|
34
|
+
const Validation_1 = require("../../../util/Validation");
|
|
34
35
|
function RoomContactDetails(props) {
|
|
35
36
|
const { register, formState, getValues, control } = react_hook_form_1.useFormContext();
|
|
36
37
|
const errors = formState.errors;
|
|
@@ -149,7 +150,7 @@ function RoomContactDetails(props) {
|
|
|
149
150
|
message: t(Translation_1.Translation.Step.Confirmation.Inputs.Required, { field: t(Translation_1.Translation.Step.Confirmation.Inputs.Email) }),
|
|
150
151
|
},
|
|
151
152
|
pattern: {
|
|
152
|
-
value:
|
|
153
|
+
value: Validation_1.EMAIL_REGEX,
|
|
153
154
|
message: t(Translation_1.Translation.Step.Confirmation.Inputs.InvalidEmail),
|
|
154
155
|
},
|
|
155
156
|
}))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomContactDetails.js","sourceRoot":"/","sources":["src/components/steps/confirmation/RoomContactDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport Text from '../../generic/Text';\nimport InputGroup from '../../generic/InputGroup/InputGroup';\nimport TextBox from '../../generic/TextBox';\nimport { TextType } from '../../generic/Text';\nimport { Translation } from '../../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\nimport Headline from '../../generic/Headline';\nimport Icon, { IconType } from '../../generic/Icon';\nimport { Color } from '../../../util/Color';\nimport StepConfirmationCountrySelector from './StepConfirmationCountrySelector';\nimport BasketRow from '../../../models/BasketRow';\nimport StringHelper from '../../../util/StringHelper';\nimport LineBreak from '../../generic/LineBreak';\n\nimport { useFormContext, Controller } from 'react-hook-form';\nimport Alert, { AlertType } from '../../generic/Alert';\nimport AutoAutoHeight from '../../../animations/AutoAutoHeight';\nimport DataLayer, { InteractionStep, InteractionType } from '../../../util/DataLayer';\nimport { EnhancedPhoneNumberField } from '../../generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField';\nimport E164PhoneNumberFieldFeature from '../../../providers/feature/E164PhoneNumberFieldFeature';\n\nexport interface RoomContactDetailsProps {\n roomNumber: number;\n basketRow: BasketRow;\n\n showErrors?: boolean;\n expandable?: boolean;\n}\n\nexport default function RoomContactDetails(props: RoomContactDetailsProps) {\n const { register, formState, getValues, control } = useFormContext();\n const errors = formState.errors;\n\n const { t } = useTranslation();\n\n const [isOpen, setIsOpen] = useState(props.roomNumber === 1);\n const row = props.basketRow;\n\n const hasErrors =\n Object.keys(errors)\n .join('')\n .indexOf('' + props.roomNumber) !== -1;\n\n const getValidationClass = (name: string) => {\n const paddedName = padInputName(name);\n\n if (errors && (formState.touchedFields[paddedName] || props.showErrors)) {\n if (errors[paddedName]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n if (hasErrors && !isOpen) {\n setIsOpen(true);\n }\n\n const padInputName = (name: string) => {\n return `${name}${props.roomNumber}`;\n };\n\n const inputValues = Object.keys(getValues());\n const openExpandable = () => {\n if (props.expandable) setIsOpen(!isOpen);\n };\n const setForename = () => {\n DataLayer.instance.sendInteraction('Forename - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setSurname = () => {\n DataLayer.instance.sendInteraction('Surname - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setEmail = () => {\n DataLayer.instance.sendInteraction('Email - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setPhone = () => {\n DataLayer.instance.sendInteraction('Phone - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setAddress = () => {\n DataLayer.instance.sendInteraction('Address - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setCity = () => {\n DataLayer.instance.sendInteraction('City - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setPostCode = () => {\n DataLayer.instance.sendInteraction('PostCode - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setCountry = (event: any) => {\n DataLayer.instance.sendInteraction('Country - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n\n return (\n <>\n <div className=\"u-marg-bottom\" onClick={openExpandable}>\n <div className=\"u-flex u-marg-bottom align-items-center\">\n <Headline bold={true}>\n {t(Translation.Misc.Room)} {props.roomNumber}\n </Headline>\n {props.expandable && <Icon icon={isOpen ? IconType.ArrowDown2 : IconType.ArrowUp2} color={Color.Grey} />}\n </div>\n <div className=\"u-marg-bottom\">\n <Text>\n <strong className=\"u-block@l-\">{row.getRoom().name}</strong> for {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n , \n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </Text>\n <div className=\"step-one-status--dates u-flex justify-content-start\">\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{row.getStartDate().format('ddd, MMM D')}</strong>\n </Text>\n <Icon icon={IconType.ArrowRight2} size={'18px'} />\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{row.getEndDate().format('ddd, MMM D')}</strong>\n </Text>\n </div>\n </div>\n {inputValues.map((error, index: number) => {\n if (error.endsWith(`${props.roomNumber}`)) {\n let errorMessage = errors[error]?.message ?? '';\n errorMessage = errorMessage ? errorMessage : error.replace(`${props.roomNumber}`, '') + ' is required';\n\n return (\n <AutoAutoHeight key={error} open={props.showErrors && hasErrors && !!errors[error]}>\n <div className=\"u-flex\">\n <Alert icon={IconType.Error} type={AlertType.Danger} noMargin={index === inputValues.length - 1}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n }\n })}\n </div>\n <div className=\"room-contact-details--row\" style={{ maxHeight: isOpen ? '' : 0 }}>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.ContactInfo)}</strong>\n </Text>\n </div>\n <InputGroup dimensions=\"2/2\">\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Forename) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Forename')}\n {...register(padInputName('Forename'), {\n onChange: setForename,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Forename) }),\n },\n })}\n />\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Surname) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Surname')}\n {...register(padInputName('Surname'), {\n onChange: setSurname,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Surname) }),\n },\n })}\n />\n </InputGroup>\n\n <InputGroup dimensions={'2/2'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Email) + ' *'}\n wide={true}\n validationStatus={getValidationClass('Email')}\n required={true}\n {...register(padInputName('Email'), {\n onChange: setEmail,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Email) }),\n },\n pattern: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i,\n message: t(Translation.Step.Confirmation.Inputs.InvalidEmail),\n },\n })}\n />\n {E164PhoneNumberFieldFeature.isActive() ? (\n <Controller\n control={control}\n name={padInputName('Phone')}\n rules={{\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Phone) }),\n },\n minLength: {\n value: 5,\n message: 'Phone number is required',\n },\n maxLength: {\n value: 17,\n message: 'Phone number is too long',\n },\n pattern: {\n value: /^[1-9](\\ |\\d){1,15}$/g,\n message: 'Incorrect phone number entered',\n },\n }}\n render={({ field, fieldState }) => {\n return (\n <EnhancedPhoneNumberField\n validationStatus={getValidationClass('Phone')}\n {...field}\n onChange={(e) => {\n field.onChange(e);\n setPhone();\n }}\n />\n );\n }}\n />\n ) : (\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Phone) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Phone')}\n {...register(padInputName('Phone'), {\n onChange: setPhone,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Phone) }),\n },\n })}\n />\n )}\n </InputGroup>\n </div>\n <div className=\"\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.Address)}</strong>\n </Text>\n </div>\n\n <InputGroup dimensions={'3/1'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Address) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Address')}\n {...register(padInputName('Address'), {\n onChange: setAddress,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Address) }),\n },\n })}\n />\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.City) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('City')}\n {...register(padInputName('City'), {\n onChange: setCity,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.City) }),\n },\n })}\n />\n </InputGroup>\n <InputGroup dimensions={'2/2'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.PostCode) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('PostCode')}\n {...register(padInputName('PostCode'), {\n onChange: setPostCode,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.PostCode) }),\n },\n })}\n />\n <Controller\n control={control}\n name={padInputName('Country')}\n rules={{\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Country) }),\n },\n }}\n render={({ field }) => {\n const { ref, ...rest } = field;\n return <StepConfirmationCountrySelector validationStatus={getValidationClass('Country')} {...rest} defaultValue={null} />;\n }}\n />\n </InputGroup>\n </div>\n </div>\n <LineBreak />\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomContactDetails.js","sourceRoot":"/","sources":["src/components/steps/confirmation/RoomContactDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport Text from '../../generic/Text';\nimport InputGroup from '../../generic/InputGroup/InputGroup';\nimport TextBox from '../../generic/TextBox';\nimport { TextType } from '../../generic/Text';\nimport { Translation } from '../../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\nimport Headline from '../../generic/Headline';\nimport Icon, { IconType } from '../../generic/Icon';\nimport { Color } from '../../../util/Color';\nimport StepConfirmationCountrySelector from './StepConfirmationCountrySelector';\nimport BasketRow from '../../../models/BasketRow';\nimport StringHelper from '../../../util/StringHelper';\nimport LineBreak from '../../generic/LineBreak';\n\nimport { useFormContext, Controller } from 'react-hook-form';\nimport Alert, { AlertType } from '../../generic/Alert';\nimport AutoAutoHeight from '../../../animations/AutoAutoHeight';\nimport DataLayer, { InteractionStep, InteractionType } from '../../../util/DataLayer';\nimport { EnhancedPhoneNumberField } from '../../generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField';\nimport E164PhoneNumberFieldFeature from '../../../providers/feature/E164PhoneNumberFieldFeature';\nimport { EMAIL_REGEX } from '../../../util/Validation';\n\nexport interface RoomContactDetailsProps {\n roomNumber: number;\n basketRow: BasketRow;\n\n showErrors?: boolean;\n expandable?: boolean;\n}\n\nexport default function RoomContactDetails(props: RoomContactDetailsProps) {\n const { register, formState, getValues, control } = useFormContext();\n const errors = formState.errors;\n\n const { t } = useTranslation();\n\n const [isOpen, setIsOpen] = useState(props.roomNumber === 1);\n const row = props.basketRow;\n\n const hasErrors =\n Object.keys(errors)\n .join('')\n .indexOf('' + props.roomNumber) !== -1;\n\n const getValidationClass = (name: string) => {\n const paddedName = padInputName(name);\n\n if (errors && (formState.touchedFields[paddedName] || props.showErrors)) {\n if (errors[paddedName]) {\n return 'error';\n } else {\n return 'success';\n }\n } else {\n return null;\n }\n };\n\n if (hasErrors && !isOpen) {\n setIsOpen(true);\n }\n\n const padInputName = (name: string) => {\n return `${name}${props.roomNumber}`;\n };\n\n const inputValues = Object.keys(getValues());\n const openExpandable = () => {\n if (props.expandable) setIsOpen(!isOpen);\n };\n const setForename = () => {\n DataLayer.instance.sendInteraction('Forename - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setSurname = () => {\n DataLayer.instance.sendInteraction('Surname - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setEmail = () => {\n DataLayer.instance.sendInteraction('Email - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setPhone = () => {\n DataLayer.instance.sendInteraction('Phone - Contact Info', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setAddress = () => {\n DataLayer.instance.sendInteraction('Address - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setCity = () => {\n DataLayer.instance.sendInteraction('City - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setPostCode = () => {\n DataLayer.instance.sendInteraction('PostCode - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n const setCountry = (event: any) => {\n DataLayer.instance.sendInteraction('Country - Address', InteractionType.FORM_FIELD, InteractionStep.GUEST_DETAILS);\n };\n\n return (\n <>\n <div className=\"u-marg-bottom\" onClick={openExpandable}>\n <div className=\"u-flex u-marg-bottom align-items-center\">\n <Headline bold={true}>\n {t(Translation.Misc.Room)} {props.roomNumber}\n </Headline>\n {props.expandable && <Icon icon={isOpen ? IconType.ArrowDown2 : IconType.ArrowUp2} color={Color.Grey} />}\n </div>\n <div className=\"u-marg-bottom\">\n <Text>\n <strong className=\"u-block@l-\">{row.getRoom().name}</strong> for {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n , \n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </Text>\n <div className=\"step-one-status--dates u-flex justify-content-start\">\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{row.getStartDate().format('ddd, MMM D')}</strong>\n </Text>\n <Icon icon={IconType.ArrowRight2} size={'18px'} />\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{row.getEndDate().format('ddd, MMM D')}</strong>\n </Text>\n </div>\n </div>\n {inputValues.map((error, index: number) => {\n if (error.endsWith(`${props.roomNumber}`)) {\n let errorMessage = errors[error]?.message ?? '';\n errorMessage = errorMessage ? errorMessage : error.replace(`${props.roomNumber}`, '') + ' is required';\n\n return (\n <AutoAutoHeight key={error} open={props.showErrors && hasErrors && !!errors[error]}>\n <div className=\"u-flex\">\n <Alert icon={IconType.Error} type={AlertType.Danger} noMargin={index === inputValues.length - 1}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n }\n })}\n </div>\n <div className=\"room-contact-details--row\" style={{ maxHeight: isOpen ? '' : 0 }}>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.ContactInfo)}</strong>\n </Text>\n </div>\n <InputGroup dimensions=\"2/2\">\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Forename) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Forename')}\n {...register(padInputName('Forename'), {\n onChange: setForename,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Forename) }),\n },\n })}\n />\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Surname) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Surname')}\n {...register(padInputName('Surname'), {\n onChange: setSurname,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Surname) }),\n },\n })}\n />\n </InputGroup>\n\n <InputGroup dimensions={'2/2'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Email) + ' *'}\n wide={true}\n validationStatus={getValidationClass('Email')}\n required={true}\n {...register(padInputName('Email'), {\n onChange: setEmail,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Email) }),\n },\n pattern: {\n value: EMAIL_REGEX,\n message: t(Translation.Step.Confirmation.Inputs.InvalidEmail),\n },\n })}\n />\n {E164PhoneNumberFieldFeature.isActive() ? (\n <Controller\n control={control}\n name={padInputName('Phone')}\n rules={{\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Phone) }),\n },\n minLength: {\n value: 5,\n message: 'Phone number is required',\n },\n maxLength: {\n value: 17,\n message: 'Phone number is too long',\n },\n pattern: {\n value: /^[1-9](\\ |\\d){1,15}$/g,\n message: 'Incorrect phone number entered',\n },\n }}\n render={({ field, fieldState }) => {\n return (\n <EnhancedPhoneNumberField\n validationStatus={getValidationClass('Phone')}\n {...field}\n onChange={(e) => {\n field.onChange(e);\n setPhone();\n }}\n />\n );\n }}\n />\n ) : (\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Phone) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Phone')}\n {...register(padInputName('Phone'), {\n onChange: setPhone,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Phone) }),\n },\n })}\n />\n )}\n </InputGroup>\n </div>\n <div className=\"\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.Address)}</strong>\n </Text>\n </div>\n\n <InputGroup dimensions={'3/1'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.Address) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('Address')}\n {...register(padInputName('Address'), {\n onChange: setAddress,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Address) }),\n },\n })}\n />\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.City) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('City')}\n {...register(padInputName('City'), {\n onChange: setCity,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.City) }),\n },\n })}\n />\n </InputGroup>\n <InputGroup dimensions={'2/2'}>\n <TextBox\n placeholder={t(Translation.Step.Confirmation.Inputs.PostCode) + ' *'}\n wide={true}\n required={true}\n validationStatus={getValidationClass('PostCode')}\n {...register(padInputName('PostCode'), {\n onChange: setPostCode,\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.PostCode) }),\n },\n })}\n />\n <Controller\n control={control}\n name={padInputName('Country')}\n rules={{\n required: {\n value: true,\n message: t(Translation.Step.Confirmation.Inputs.Required, { field: t(Translation.Step.Confirmation.Inputs.Country) }),\n },\n }}\n render={({ field }) => {\n const { ref, ...rest } = field;\n return <StepConfirmationCountrySelector validationStatus={getValidationClass('Country')} {...rest} defaultValue={null} />;\n }}\n />\n </InputGroup>\n </div>\n </div>\n <LineBreak />\n </>\n );\n}\n"]}
|
|
@@ -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(
|
|
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:
|
|
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:
|
|
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":";;;;;;;;;;;AAAA,+BAA+B;AAC/B,iDAA+C;AAC/C,gEAAyD;AACzD,8DAAuD;AACvD,wDAA+D;AAC/D,4CAAyC;AACzC,gEAAyD;AACzD,qDAA0C;AAC1C,iCAA4C;AAC5C,wDAAyD;AACzD,qDAAuC;AACvC,oEAA6D;AAC7D,0DAAkE;AAClE,+CAA0C;AAC1C,6EAAsE;AACtE,kEAA2D;AAC3D,2CAA4D;AAC5D,gEAA6D;AAC7D,wDAAiD;AACjD,yCAAwD;AACxD,gDAA8C;AAE9C,SAAwB,eAAe;IACnC,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAe,EAAE,CAAC;IAEpC,MAAM,EAAE,CAAC,EAAE,GAAG,8BAAc,EAAE,CAAC;IAE/B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,yBAAO,CAAC;QAC7D,IAAI,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAEhC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;QACxC,IAAI,MAAM,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,OAAO,CAAC;aAClB;iBAAM;gBACH,OAAO,SAAS,CAAC;aACpB;SACJ;aAAM;YACH,OAAO,IAAI,CAAC;SACf;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,gBAAQ,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,yBAAU,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,GAAG,EAAE;QAClB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAExB,oBAAG,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;aAC/E,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAQ,EAAE,CAAC;IAE7B,iBAAS,CAAC,GAAG,EAAE;QACX,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC3C,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,IAAI,CAAC;QAEhE,6BAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACtE,6BAAmB,CAAC,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,IAAI,iCAAwB,EAAE,CAAC;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,OAAO,GAAG,EAAE;YACR,IAAI;gBACA,6BAAmB,CAAC,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC5D,6BAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;aAC5E;YAAC,OAAO,EAAE,EAAE;gBACT,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;aACtC;QACL,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,6EAA6E;IAC7E,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,EAAE;YACP,6BAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACjD;IACL,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,8BAA8B,EAAE;YACvC,MAAM,CAAC,IAAI,CAAC,qCAAqC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;SACtE;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,GAAS,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,qBAAW,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAA,CAAC;IAEF,OAAO,CACH,6BAAK,SAAS,EAAC,wBAAwB;QACnC,6BAAK,SAAS,EAAC,mDAAmD;YAC9D,8BAAM,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;gBAClC,6BAAK,SAAS,EAAC,2BAA2B;oBACtC,6BAAK,SAAS,EAAC,mEAAmE;wBAC9E,6BAAK,SAAS,EAAC,sBAAsB;4BACjC,oBAAC,kBAAQ,IAAC,IAAI,EAAC,aAAa,IAAE,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAY,CAC1F;wBACN,oBAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,CAAC,gBAAgB;4BACpC,6BAAK,SAAS,EAAC,QAAQ;gCACnB,oBAAC,eAAK,IAAC,IAAI,EAAE,iBAAS,CAAC,MAAM,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK;oCAC/C,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,gBAAgB,CAAQ,CACjD,CACN,CACO;wBACjB,6BAAK,SAAS,EAAC,eAAe;4BAC1B,6BAAK,SAAS,EAAC,sBAAsB;gCACjC,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;oCAC7C,oCAAS,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAU,CAC3D,CACL;4BACN,oBAAC,iBAAO,kBACJ,WAAW,EAAC,cAAc,EAC1B,QAAQ,EAAE,IAAI,EACd,gBAAgB,EAAE,kBAAkB,CAAC,KAAK,CAAC,IACvC,QAAQ,CAAC,KAAK,EAAE;gCAChB,QAAQ,EAAE,IAAI;6BACjB,CAAC,EACJ,CACA;wBACN,6BAAK,SAAS,EAAC,eAAe;4BAC1B,6BAAK,SAAS,EAAC,sBAAsB;gCACjC,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;oCAC7C,oCAAS,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAU,CAC3D,CACL;4BACN,oBAAC,iBAAO,kBACJ,WAAW,EAAC,kBAAkB,EAC9B,QAAQ,EAAE,IAAI,EACd,gBAAgB,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAC7C,IAAI,EAAE,OAAO,IACT,QAAQ,CAAC,OAAO,EAAE;gCAClB,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE;oCACL,KAAK,EAAE,wBAAW;oCAClB,OAAO,EAAE,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC;iCAC9D;6BACJ,CAAC,EACJ,CACA;wBACN,6BAAK,SAAS,EAAC,kCAAkC;4BAC7C,oBAAC,kBAAQ,IACL,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,eAAQ,CAAC,UAAU,EACzB,YAAY,EAAC,OAAO,EACpB,OAAO,EAAE,mBAAmB,IAE3B,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,eAAe,CAAC,CACxC;4BACX,gCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,IACnC,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CACjC,CACP;wBACN,oBAAC,mBAAS,OAAG;wBACb,6BAAK,SAAS,EAAC,sBAAsB;4BACjC,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCACtB,oCAAS,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAU,CACvD,CACL;wBACN,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAQ;wBAC3E,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAQ;wBAC3E,oBAAC,mBAAS,OAAG;wBACb,oBAAC,kBAAQ,IACL,SAAS,EAAE,aAAK,CAAC,MAAM,EACvB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,eAAQ,CAAC,UAAU,EACzB,YAAY,EAAC,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,IAEX,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAC7B,CACT,CACJ,CACH,CACL,CACJ,CACT,CAAC;AACN,CAAC;AAtLD,kCAsLC","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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const EMAIL_REGEX: RegExp;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EMAIL_REGEX = void 0;
|
|
4
|
+
exports.EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
5
|
+
//# sourceMappingURL=Validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validation.js","sourceRoot":"/","sources":["src/util/Validation.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,wJAAwJ,CAAC","sourcesContent":["export const EMAIL_REGEX = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n"]}
|