@roomstay/frontend 2.6.26 → 2.6.28
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/main.bundle.js +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js +17 -15
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js +11 -10
- package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js.map +1 -1
- package/dist/src/components/summary/TransportDistanceFromHotelBlock.js +7 -7
- package/dist/src/components/summary/TransportDistanceFromHotelBlock.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
const core_1 = require("@roomstay/core");
|
|
39
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
39
40
|
const react_1 = __importStar(require("react"));
|
|
40
41
|
const react_hook_form_1 = require("react-hook-form");
|
|
41
42
|
const react_i18next_1 = require("react-i18next");
|
|
@@ -49,14 +50,12 @@ const Text_1 = __importDefault(require("../../../generic/Text"));
|
|
|
49
50
|
const TextBox_1 = __importDefault(require("../../../generic/TextBox"));
|
|
50
51
|
const contexts_1 = require("../../../../contexts");
|
|
51
52
|
const hooks_1 = require("../../../../hooks");
|
|
52
|
-
const
|
|
53
|
+
const WindowSize_1 = require("../../../../hooks/WindowSize");
|
|
53
54
|
const RoomstayThemeEngine_1 = __importDefault(require("../../../../providers/RoomstayThemeEngine"));
|
|
54
55
|
const Translation_1 = require("../../../../translations/Translation");
|
|
55
56
|
const Color_1 = require("../../../../util/Color");
|
|
56
|
-
const ExternalMemberModal_module_scss_1 = __importDefault(require("./ExternalMemberModal.module.scss"));
|
|
57
57
|
const ExternalMemberModal = (props) => {
|
|
58
58
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
59
|
-
const { externalMemberType } = (0, useExternalMember_1.useExternalMember)();
|
|
60
59
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
61
60
|
const { signUserIn, closeMemberSignupModal, memberOnlyModalPromotion } = (0, react_1.useContext)(contexts_1.CompanyContext);
|
|
62
61
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
@@ -119,19 +118,22 @@ const ExternalMemberModal = (props) => {
|
|
|
119
118
|
setIsLoading(false);
|
|
120
119
|
}
|
|
121
120
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
const { isMobile } = (0, WindowSize_1.useWindowSize)();
|
|
122
|
+
return (react_1.default.createElement(SimpleModal_1.default, { open: props.isOpen, onClose: closeMemberSignupModal, size: SimpleModal_1.SimpleModalSize.Normal, alignCenter: true },
|
|
123
|
+
react_1.default.createElement("div", { className: "row", style: { minHeight: '500px' } },
|
|
124
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)('col-md-6 u-mh-none'), style: Object.assign({ background: 'url("' + RoomstayThemeEngine_1.default.getImageAssetUrl(props.image) + '")', backgroundRepeat: 'no-repeat', backgroundPosition: 'center', backgroundSize: 'cover' }, (isMobile && {
|
|
125
|
+
height: '500px',
|
|
126
|
+
})) }),
|
|
127
|
+
react_1.default.createElement("div", { className: "col-md-6 u-pad--heavy" },
|
|
128
|
+
react_1.default.createElement("div", { className: "u-pad" },
|
|
128
129
|
react_1.default.createElement(Headline_1.default, { bold: true, color: modalPrimaryColor }, props.title),
|
|
129
|
-
|
|
130
|
-
react_1.default.createElement(
|
|
131
|
-
react_1.default.createElement(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
react_1.default.createElement(
|
|
130
|
+
react_1.default.createElement("form", { onSubmit: formMethods.handleSubmit(onSubmit) },
|
|
131
|
+
props.fields.map((field) => (react_1.default.createElement("div", { className: "u-marg-top u-marg-bottom", key: field.name },
|
|
132
|
+
react_1.default.createElement(InputGroup_1.default, { dimensions: "1" },
|
|
133
|
+
react_1.default.createElement(TextBox_1.default, Object.assign({ iconProps: { color: Color_1.Color.DarkGrey }, icon: field.icon, inputProps: { disabled: isLoading }, wide: true, placeholder: field.label, required: true, validationStatus: getValidationClass(field.name) }, formMethods.register(field.name, { required: true }))))))),
|
|
134
|
+
react_1.default.createElement(BEButton_1.default, { isLoading: isLoading, htmlType: "submit", className: "u-marg-top", size: "normal", filled: true, primary: hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor, success: !(hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor), stopIconAnimation: true, icon: Icon_1.IconType.ArrowRight, iconPosition: "right" }, t(Translation_1.Translation.ExternalMemberPopup.Submit)),
|
|
135
|
+
react_1.default.createElement("div", { className: "u-marg-top" },
|
|
136
|
+
react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Danger }, errorMessage))))))));
|
|
135
137
|
};
|
|
136
138
|
exports.default = ExternalMemberModal;
|
|
137
139
|
//# sourceMappingURL=ExternalMemberModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAuE;AACvE,+CAAoD;AACpD,qDAA4E;AAC5E,iDAA+C;AAE/C,kEAAmC;AACnC,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,4FAAoE;AACpE,sFAAsF;AACtF,qEAA6C;AAC7C,2EAAmD;AACnD,yCAAiF;AACjF,mCAA0C;AAC1C,iEAA8D;AAE9D,0FAAkE;AAClE,4DAAyD;AACzD,wCAAqC;AAErC,wGAAuD;AAgBvD,MAAM,mBAAmB,GAAG,CAA8C,KAAkC,EAAE,EAAE;IAC5G,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IACnD,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACpG,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAA,yBAAO,GAAK,CAAC;IACjC,MAAM,iBAAiB,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,8BAA8B,EAAC,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,OAAO,CAAC;IAE/F,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,EAAE;QACzC,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE;YAC9B,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACpC,OAAO,OAAO,CAAC;aAClB;iBAAM;gBACH,OAAO,SAAS,CAAC;aACpB;SACJ;IACL,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAqB,CAAO,MAAM,EAAE,EAAE;;QAChD,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpB,IAAI;YACA,MAAM,OAAO,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,oBAAG,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE9D,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;gBAC3B,UAAU,CACN;oBACI,YAAY,EAAE,MAAM,CAAC,QAAQ;oBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACtB,EACD,IAAI,CACP,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAA8B,CAAA,CAAC;gBAE7E,mBAAmB;gBACnB,IAAI,SAAS,IAAI,CAAC,CAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,6BAA6B,CAAA,EAAE;oBACvE,MAAA,aAAa,CAAC,iBAAiB,0CAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBAC7C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;wBAC5B,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;iBACN;gBAED,2BAA2B;gBAC3B,MAAA,aAAa,CAAC,iBAAiB,0CAAE,OAAO,CACpC,CAAC,GAAG,EAAE,EAAE,CACJ,CAAC,GAAG,CAAC,gBAAgB,GAAG;oBACpB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACtB,CAAC,CACT,CAAC;aACL;iBAAM;gBACH,eAAe,CAAC,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC;aACrE;SACJ;QAAC,OAAO,CAAM,EAAE;YACb,IAAI,CAAC,CAAC,IAAA,aAAM,EAAW,SAAS,CAAC,CAAC,EAAE;gBAChC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC9B;iBAAM;gBACH,MAAM,CAAC,CAAC;aACX;SACJ;gBAAS;YACN,YAAY,CAAC,KAAK,CAAC,CAAC;SACvB;IACL,CAAC,CAAA,CAAC;IAEF,OAAO,CACH,8BAAC,qBAAW,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,6BAAe,CAAC,MAAM,EAAE,WAAW,QAAC,aAAa,EAAE,yCAAM,CAAC,IAAI;QAClI,uCAAK,SAAS,EAAE,yCAAM,CAAC,SAAS;YAC5B,uCAAK,SAAS,EAAE,yCAAM,CAAC,WAAW;gBAC9B,uCAAK,SAAS,EAAE,yCAAM,CAAC,GAAG,EAAE,GAAG,EAAE,6BAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,kBAAkB,OAAO,GAAI,CACvH;YACN;gBACI,wCAAM,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC;oBAC9C,8BAAC,kBAAQ,IAAC,IAAI,QAAC,KAAK,EAAE,iBAAiB,IAClC,KAAK,CAAC,KAAK,CACL;oBAEV,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACzB,uCAAK,SAAS,EAAC,YAAY,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI;wBACvC,8BAAC,oBAAU,IAAC,UAAU,EAAC,GAAG;4BACtB,8BAAC,iBAAO,kBACJ,SAAS,EAAE,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,EACpC,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EACnC,IAAI,QACJ,WAAW,EAAE,KAAK,CAAC,KAAK,EACxB,QAAQ,QACR,gBAAgB,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,IAC5C,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACrE,CACO,CACX,CACT,CAAC;oBAEF,8BAAC,kBAAQ,IACL,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAC,QAAQ,EACjB,SAAS,EAAC,YAAY,EACtB,IAAI,EAAC,QAAQ,EACb,MAAM,QACN,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,8BAA8B,EAC9C,OAAO,EAAE,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,8BAA8B,CAAA,EAC/C,iBAAiB,QACjB,IAAI,EAAE,eAAQ,CAAC,UAAU,EACzB,YAAY,EAAC,OAAO,IAEnB,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,CACnC;oBACX,uCAAK,SAAS,EAAC,YAAY;wBACvB,8BAAC,cAAI,IAAC,IAAI,QAAC,KAAK,EAAE,aAAK,CAAC,MAAM,IACzB,YAAY,CACV,CACL,CACH,CACL,CACJ,CACI,CACjB,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,mBAAmB,CAAC","sourcesContent":["import { IMemberVerification, IMessage, nameof } from '@roomstay/core';\nimport React, { useContext, useState } from 'react';\nimport { FieldValues, Path, SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { BasketContext, BookingEngineContext, CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport UserProfile from '@/models/UserProfile';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './ExternalMemberModal.module.scss';\n\ntype ExternalMemberModalProps<T extends FieldValues> = {\n title: string;\n image: string;\n isOpen: boolean;\n fields: ExternalMemberModelField<T>[];\n};\n\ntype ExternalMemberModelField<T extends FieldValues> = {\n name: keyof T & string;\n icon: IconType;\n label: string;\n profileMapping?: keyof UserProfile;\n};\n\nconst ExternalMemberModal = <T extends FieldValues & IMemberVerification>(props: ExternalMemberModalProps<T>) => {\n const { hotel } = useCurrentHotel();\n const { externalMemberType } = useExternalMember();\n const basketContext = useContext(BasketContext);\n const { signUserIn, closeMemberSignupModal, memberOnlyModalPromotion } = useContext(CompanyContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const formMethods = useForm<T>();\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n const getValidationClass = (name: keyof T) => {\n if (formMethods.formState.errors) {\n if (formMethods.formState.errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n\n const onSubmit: SubmitHandler<T> = async (fields) => {\n setIsLoading(true);\n setErrorMessage('');\n\n try {\n const hotelId = hotel?.hotelID as string;\n const member = await API.Member.verifyMember(hotelId, fields);\n\n if (member && member.memberId) {\n signUserIn(\n {\n memberNumber: member.memberId,\n firstName: fields.firstName,\n lastName: fields.lastName,\n email: fields.email,\n },\n true\n );\n\n const promoCode = member.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n basketContext.updateBasketRow(row);\n });\n }\n\n // Preset checkout defaults\n basketContext.currentBasketRows?.forEach(\n (row) =>\n (row.checkoutDefaults = {\n FirstName: fields.firstName,\n LastName: fields.lastName,\n Email: fields.email,\n })\n );\n } else {\n setErrorMessage(t(Translation.ExternalMemberPopup.InvalidMember));\n }\n } catch (e: any) {\n if (e[nameof<IMessage>('Message')]) {\n setErrorMessage(e.Message);\n } else {\n throw e;\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <SimpleModal open={props.isOpen} onClose={closeMemberSignupModal} size={SimpleModalSize.Normal} alignCenter bodyClassName={styles.root}>\n <div className={styles.container}>\n <div className={styles.logoSection}>\n <img className={styles.img} src={RoomstayThemeEngine.getImageAssetUrl(props.image)} alt={`${externalMemberType} Logo`} />\n </div>\n <div>\n <form onSubmit={formMethods.handleSubmit(onSubmit)}>\n <Headline bold color={modalPrimaryColor}>\n {props.title}\n </Headline>\n\n {props.fields.map((field) => (\n <div className=\"u-marg-top\" key={field.name}>\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{ color: Color.DarkGrey }}\n icon={field.icon}\n inputProps={{ disabled: isLoading }}\n wide\n placeholder={field.label}\n required\n validationStatus={getValidationClass(field.name)}\n {...formMethods.register(field.name as Path<T>, { required: true })}\n />\n </InputGroup>\n </div>\n ))}\n\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
|
|
1
|
+
{"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IMemberVerification, IMessage, nameof } from '@roomstay/core';\nimport classNames from 'classnames';\nimport React, { useContext, useState } from 'react';\nimport { FieldValues, Path, SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { BasketContext, CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport UserProfile from '@/models/UserProfile';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ntype ExternalMemberModalProps<T extends FieldValues> = {\n title: string;\n image: string;\n isOpen: boolean;\n fields: ExternalMemberModelField<T>[];\n};\n\ntype ExternalMemberModelField<T extends FieldValues> = {\n name: keyof T & string;\n icon: IconType;\n label: string;\n profileMapping?: keyof UserProfile;\n};\n\nconst ExternalMemberModal = <T extends FieldValues & IMemberVerification>(props: ExternalMemberModalProps<T>) => {\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const { signUserIn, closeMemberSignupModal, memberOnlyModalPromotion } = useContext(CompanyContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const formMethods = useForm<T>();\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n const getValidationClass = (name: keyof T) => {\n if (formMethods.formState.errors) {\n if (formMethods.formState.errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n\n const onSubmit: SubmitHandler<T> = async (fields) => {\n setIsLoading(true);\n setErrorMessage('');\n\n try {\n const hotelId = hotel?.hotelID as string;\n const member = await API.Member.verifyMember(hotelId, fields);\n\n if (member && member.memberId) {\n signUserIn(\n {\n memberNumber: member.memberId,\n firstName: fields.firstName,\n lastName: fields.lastName,\n email: fields.email,\n },\n true\n );\n\n const promoCode = member.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n basketContext.updateBasketRow(row);\n });\n }\n\n // Preset checkout defaults\n basketContext.currentBasketRows?.forEach(\n (row) =>\n (row.checkoutDefaults = {\n FirstName: fields.firstName,\n LastName: fields.lastName,\n Email: fields.email,\n })\n );\n } else {\n setErrorMessage(t(Translation.ExternalMemberPopup.InvalidMember));\n }\n } catch (e: any) {\n if (e[nameof<IMessage>('Message')]) {\n setErrorMessage(e.Message);\n } else {\n throw e;\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const { isMobile } = useWindowSize();\n\n return (\n <SimpleModal open={props.isOpen} onClose={closeMemberSignupModal} size={SimpleModalSize.Normal} alignCenter>\n <div className=\"row\" style={{ minHeight: '500px' }}>\n <div\n className={classNames('col-md-6 u-mh-none')}\n style={{\n background: 'url(\"' + RoomstayThemeEngine.getImageAssetUrl(props.image) + '\")',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n ...(isMobile && {\n height: '500px',\n }),\n }}\n />\n\n <div className=\"col-md-6 u-pad--heavy\">\n <div className=\"u-pad\">\n <Headline bold color={modalPrimaryColor}>\n {props.title}\n </Headline>\n\n <form onSubmit={formMethods.handleSubmit(onSubmit)}>\n {props.fields.map((field) => (\n <div className=\"u-marg-top u-marg-bottom\" key={field.name}>\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{ color: Color.DarkGrey }}\n icon={field.icon}\n inputProps={{ disabled: isLoading }}\n wide\n placeholder={field.label}\n required\n validationStatus={getValidationClass(field.name)}\n {...formMethods.register(field.name as Path<T>, { required: true })}\n />\n </InputGroup>\n </div>\n ))}\n\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
|
|
@@ -280,7 +280,7 @@ function InternalMemberSignInModal(props) {
|
|
|
280
280
|
backgroundSize: 'cover',
|
|
281
281
|
} }),
|
|
282
282
|
react_1.default.createElement("div", { className: "col-md-6" },
|
|
283
|
-
react_1.default.createElement("div", { className: "u-pad u-pad-heavy
|
|
283
|
+
react_1.default.createElement("div", { className: "u-pad u-pad-heavy" },
|
|
284
284
|
react_1.default.createElement("div", { className: "u-marg-bottom-half" },
|
|
285
285
|
react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Money, size: "24px", color: modalPrimaryColor, useColorAsBackground: hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor, backgroundColor: Color_1.Color.SuccessTint })),
|
|
286
286
|
react_1.default.createElement("div", { className: "u-marg-bottom-half" },
|
|
@@ -293,15 +293,16 @@ function InternalMemberSignInModal(props) {
|
|
|
293
293
|
react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: modalSubtitle } }))),
|
|
294
294
|
react_1.default.createElement(react_hook_form_1.FormProvider, Object.assign({}, methods),
|
|
295
295
|
react_1.default.createElement("div", null, modalInputs.Lines.map((inputLine, lineIndex) => {
|
|
296
|
-
return (react_1.default.createElement(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
required: input.isRequired,
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
296
|
+
return (react_1.default.createElement("div", { className: "u-marg-bottom-xxx", key: lineIndex },
|
|
297
|
+
react_1.default.createElement(InputGroup_1.default, { dimensions: inputLine.Dimension }, inputLine.Inputs.map((input, inputIndex) => {
|
|
298
|
+
switch (input.type) {
|
|
299
|
+
case 'TextBox':
|
|
300
|
+
return (react_1.default.createElement(TextBox_1.default, Object.assign({ key: inputIndex, wide: true, placeholder: input.placeholder, required: input.isRequired, validationStatus: getValidationClass(input.name) }, register(input.name, {
|
|
301
|
+
required: input.isRequired,
|
|
302
|
+
validate: input.validate,
|
|
303
|
+
}))));
|
|
304
|
+
}
|
|
305
|
+
}))));
|
|
305
306
|
})),
|
|
306
307
|
react_1.default.createElement("div", { className: "u-marg-top--light", style: { marginBottom: '45px' } },
|
|
307
308
|
captchaScriptLoaded && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalMemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { MemberOnlyModalViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport * as Sentry from '@sentry/browser';\nimport { ErrorHandler } from 'contexts/ErrorContext';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { InternalMemberSignInInputs } from '@/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport { EMAIL_REGEX } from '@/util/Validation';\n\ninterface MemberSignInModalProps {\n onClose?: () => void;\n isOpen?: boolean;\n}\n\nexport default function InternalMemberSignInModal(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 [captchaRendered, setCaptchaRendered] = useState(false);\n const [reCaptchaSecret, setReCaptchaSecret] = useState<string | null>(null);\n const [captchaError, setCaptchaError] = useState<string | null | undefined>(null);\n\n const captchaRef = useRef(null);\n\n const shouldLoadCaptcha = !!hotel?.googleReCaptcha?.loadForMembers && !!hotel?.googleReCaptcha?.siteKey;\n\n const MemberOnlyModalDefaultInputs: InternalMemberSignInInputs = useMemo(() => {\n return {\n Lines: [\n {\n Dimension: '2/2',\n Inputs: [\n {\n name: 'FirstName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.FirstName),\n isRequired: true,\n },\n {\n name: 'LastName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.LastName),\n isRequired: true,\n },\n ],\n },\n {\n Dimension: '1',\n Inputs: [\n {\n name: 'Email',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.Email.Label),\n isRequired: true,\n validate: (input: string) => {\n if (!input.match(EMAIL_REGEX)) {\n return t(Translation.MemberOnlyPopup.Fields.Email.Validation.Invalid) as string;\n }\n return true;\n },\n },\n ],\n },\n ],\n };\n }, []);\n\n const { raise } = useEvent();\n\n useEffect(() => {\n if (props.isOpen) {\n const event = new MemberOnlyModalViewEvent();\n raise(event);\n }\n }, [props.isOpen]);\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 try {\n (window as any).grecaptcha.ready(() => {\n if (!cancelled) {\n setCaptchaScriptLoaded(true);\n }\n });\n } catch (ex) {\n console.log('Captcha loaded too quickly, will try again');\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [hotel]);\n\n useEffect(() => {\n if (shouldLoadCaptcha && captchaScriptLoaded && captchaRef?.current && !captchaRendered && props.isOpen) {\n try {\n setTimeout(() => {\n const captchaCallback = (secret: string) => {\n setReCaptchaSecret(secret);\n setCaptchaError(undefined);\n };\n\n (window as any).grecaptcha.render(captchaRef.current, {\n sitekey: hotel.googleReCaptcha?.siteKey,\n callback: captchaCallback,\n });\n\n setCaptchaRendered(true);\n }, 5);\n } catch (ex) {\n console.log(ex);\n\n Sentry.captureException(ex);\n }\n }\n }, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef?.current, captchaRendered]);\n\n useEffect(() => {\n if (!props.isOpen) {\n setReCaptchaSecret(null);\n setCaptchaError(null);\n setCaptchaRendered(false);\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 }\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: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Title),\n message: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Message),\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 as string, reCaptchaSecret as string);\n\n if (response.error) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.ValidationError));\n } else {\n ccx.signUserIn({ memberNumber: Email, firstName: FirstName, lastName: LastName, email: Email });\n\n if (hotel?.memberOnlyPromoCode && !ccx.memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(hotel?.memberOnlyPromoCode as string);\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: InternalMemberSignInInputs = 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 const modalTitle =\n ccx?.memberOnlyModalPromotion?.memberOnlyModalTitle ??\n t(Translation.MemberOnlyPopup.Headline, {\n companyShort: ccx?.companyShort,\n });\n\n const modalSubtitle = ccx?.memberOnlyModalPromotion?.memberOnlyModalSubtitle ?? t(Translation.MemberOnlyPopup.Subtitle);\n\n const modalButtonText = ccx?.memberOnlyModalPromotion?.memberOnlyModalButtonText ?? t(Translation.MemberOnlyPopup.SubmitButtonText);\n const modalLeadImage = useMemo(() => {\n if (ccx.memberOnlyModalPromotion?.memberOnlyModalImage) {\n return ccx.memberOnlyModalPromotion?.memberOnlyModalImage;\n }\n\n if (hotel?.memberOnlyModalImage) {\n return hotel?.memberOnlyModalImage;\n }\n\n if (hotel?.heroImage) {\n return hotel?.heroImage;\n }\n }, [hotel?.heroImage, hotel?.memberOnlyModalImage, ccx?.memberOnlyModalPromotion?.memberOnlyModalImage]);\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n return (\n <SimpleModal open={props.isOpen} onClose={loadingOnClose} size={SimpleModalSize.Normal} alignCenter>\n <div className=\"row\">\n <div\n className=\"col-md-6 u-mh-none\"\n style={{\n background: 'url(\"' + (modalLeadImage && ImageProvider.resizeImage(modalLeadImage, ImageSize.Original)) + '\")',\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\n icon={IconType.Money}\n size=\"24px\"\n color={modalPrimaryColor}\n useColorAsBackground={hotel?.memberOnlyModalUsePrimaryColor}\n backgroundColor={Color.SuccessTint}\n />\n </div>\n <div className=\"u-marg-bottom-half\">\n <Headline bold color={modalPrimaryColor}>\n <div\n style={{ color: modalPrimaryColor }}\n dangerouslySetInnerHTML={{\n __html: modalTitle as string,\n }}\n ></div>\n </Headline>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: modalSubtitle as string }}></span>\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\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\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n isLoading={isLoading}\n stopIconAnimation\n icon={context.screenSize > ScreenSize.Mobile ? IconType.ArrowRight : undefined}\n onClick={buttonOnClickHandler}\n >\n {modalButtonText}\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":"InternalMemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { MemberOnlyModalViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport * as Sentry from '@sentry/browser';\nimport { ErrorHandler } from 'contexts/ErrorContext';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { InternalMemberSignInInputs } from '@/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport { EMAIL_REGEX } from '@/util/Validation';\n\ninterface MemberSignInModalProps {\n onClose?: () => void;\n isOpen?: boolean;\n}\n\nexport default function InternalMemberSignInModal(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 [captchaRendered, setCaptchaRendered] = useState(false);\n const [reCaptchaSecret, setReCaptchaSecret] = useState<string | null>(null);\n const [captchaError, setCaptchaError] = useState<string | null | undefined>(null);\n\n const captchaRef = useRef(null);\n\n const shouldLoadCaptcha = !!hotel?.googleReCaptcha?.loadForMembers && !!hotel?.googleReCaptcha?.siteKey;\n\n const MemberOnlyModalDefaultInputs: InternalMemberSignInInputs = useMemo(() => {\n return {\n Lines: [\n {\n Dimension: '2/2',\n Inputs: [\n {\n name: 'FirstName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.FirstName),\n isRequired: true,\n },\n {\n name: 'LastName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.LastName),\n isRequired: true,\n },\n ],\n },\n {\n Dimension: '1',\n Inputs: [\n {\n name: 'Email',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.Email.Label),\n isRequired: true,\n validate: (input: string) => {\n if (!input.match(EMAIL_REGEX)) {\n return t(Translation.MemberOnlyPopup.Fields.Email.Validation.Invalid) as string;\n }\n return true;\n },\n },\n ],\n },\n ],\n };\n }, []);\n\n const { raise } = useEvent();\n\n useEffect(() => {\n if (props.isOpen) {\n const event = new MemberOnlyModalViewEvent();\n raise(event);\n }\n }, [props.isOpen]);\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 try {\n (window as any).grecaptcha.ready(() => {\n if (!cancelled) {\n setCaptchaScriptLoaded(true);\n }\n });\n } catch (ex) {\n console.log('Captcha loaded too quickly, will try again');\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [hotel]);\n\n useEffect(() => {\n if (shouldLoadCaptcha && captchaScriptLoaded && captchaRef?.current && !captchaRendered && props.isOpen) {\n try {\n setTimeout(() => {\n const captchaCallback = (secret: string) => {\n setReCaptchaSecret(secret);\n setCaptchaError(undefined);\n };\n\n (window as any).grecaptcha.render(captchaRef.current, {\n sitekey: hotel.googleReCaptcha?.siteKey,\n callback: captchaCallback,\n });\n\n setCaptchaRendered(true);\n }, 5);\n } catch (ex) {\n console.log(ex);\n\n Sentry.captureException(ex);\n }\n }\n }, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef?.current, captchaRendered]);\n\n useEffect(() => {\n if (!props.isOpen) {\n setReCaptchaSecret(null);\n setCaptchaError(null);\n setCaptchaRendered(false);\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 }\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: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Title),\n message: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Message),\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 as string, reCaptchaSecret as string);\n\n if (response.error) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.ValidationError));\n } else {\n ccx.signUserIn({ memberNumber: Email, firstName: FirstName, lastName: LastName, email: Email });\n\n if (hotel?.memberOnlyPromoCode && !ccx.memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(hotel?.memberOnlyPromoCode as string);\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: InternalMemberSignInInputs = 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 const modalTitle =\n ccx?.memberOnlyModalPromotion?.memberOnlyModalTitle ??\n t(Translation.MemberOnlyPopup.Headline, {\n companyShort: ccx?.companyShort,\n });\n\n const modalSubtitle = ccx?.memberOnlyModalPromotion?.memberOnlyModalSubtitle ?? t(Translation.MemberOnlyPopup.Subtitle);\n\n const modalButtonText = ccx?.memberOnlyModalPromotion?.memberOnlyModalButtonText ?? t(Translation.MemberOnlyPopup.SubmitButtonText);\n const modalLeadImage = useMemo(() => {\n if (ccx.memberOnlyModalPromotion?.memberOnlyModalImage) {\n return ccx.memberOnlyModalPromotion?.memberOnlyModalImage;\n }\n\n if (hotel?.memberOnlyModalImage) {\n return hotel?.memberOnlyModalImage;\n }\n\n if (hotel?.heroImage) {\n return hotel?.heroImage;\n }\n }, [hotel?.heroImage, hotel?.memberOnlyModalImage, ccx?.memberOnlyModalPromotion?.memberOnlyModalImage]);\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n return (\n <SimpleModal open={props.isOpen} onClose={loadingOnClose} size={SimpleModalSize.Normal} alignCenter>\n <div className=\"row\">\n <div\n className=\"col-md-6 u-mh-none\"\n style={{\n background: 'url(\"' + (modalLeadImage && ImageProvider.resizeImage(modalLeadImage, ImageSize.Original)) + '\")',\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\">\n <div className=\"u-marg-bottom-half\">\n <Icon\n icon={IconType.Money}\n size=\"24px\"\n color={modalPrimaryColor}\n useColorAsBackground={hotel?.memberOnlyModalUsePrimaryColor}\n backgroundColor={Color.SuccessTint}\n />\n </div>\n <div className=\"u-marg-bottom-half\">\n <Headline bold color={modalPrimaryColor}>\n <div\n style={{ color: modalPrimaryColor }}\n dangerouslySetInnerHTML={{\n __html: modalTitle as string,\n }}\n ></div>\n </Headline>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: modalSubtitle as string }}></span>\n </Text>\n </div>\n <FormProvider {...methods}>\n <div>\n {modalInputs.Lines.map((inputLine, lineIndex) => {\n return (\n <div className=\"u-marg-bottom-xxx\" key={lineIndex}>\n <InputGroup dimensions={inputLine.Dimension}>\n {inputLine.Inputs.map((input, inputIndex) => {\n switch (input.type) {\n case 'TextBox':\n return (\n <TextBox\n key={inputIndex}\n wide\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 </div>\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\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n isLoading={isLoading}\n stopIconAnimation\n icon={context.screenSize > ScreenSize.Mobile ? IconType.ArrowRight : undefined}\n onClick={buttonOnClickHandler}\n >\n {modalButtonText}\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"]}
|
|
@@ -39,27 +39,27 @@ function TransportDistanceFromHotelBlock(props) {
|
|
|
39
39
|
const { transportDistances } = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
|
|
40
40
|
const { vertical, tightMargins } = props;
|
|
41
41
|
const distanceValues = [
|
|
42
|
-
{ icon: Icon_1.IconType.Airplane, name: 'Airport', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.plane, configuration: (_a = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _a === void 0 ? void 0 : _a.plane },
|
|
43
|
-
{ icon: Icon_1.IconType.Train, name: 'Train', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.train, configuration: (_b = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _b === void 0 ? void 0 : _b.train },
|
|
44
|
-
{ icon: Icon_1.IconType.Bus, name: 'Bus', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.bus, configuration: (_c = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _c === void 0 ? void 0 : _c.bus },
|
|
45
|
-
{ icon: Icon_1.IconType.Taxi, name: 'Taxi', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.taxi, configuration: (_d = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _d === void 0 ? void 0 : _d.taxi },
|
|
42
|
+
{ icon: Icon_1.IconType.Airplane, name: 'Airport', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.plane, configuration: ((_a = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _a === void 0 ? void 0 : _a.plane) || {} },
|
|
43
|
+
{ icon: Icon_1.IconType.Train, name: 'Train', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.train, configuration: ((_b = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _b === void 0 ? void 0 : _b.train) || {} },
|
|
44
|
+
{ icon: Icon_1.IconType.Bus, name: 'Bus', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.bus, configuration: ((_c = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _c === void 0 ? void 0 : _c.bus) || {} },
|
|
45
|
+
{ icon: Icon_1.IconType.Taxi, name: 'Taxi', distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.taxi, configuration: ((_d = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _d === void 0 ? void 0 : _d.taxi) || {} },
|
|
46
46
|
{
|
|
47
47
|
icon: Icon_1.IconType.Ferry,
|
|
48
48
|
name: 'Ferry',
|
|
49
49
|
distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.ferry,
|
|
50
|
-
configuration: (_e = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _e === void 0 ? void 0 : _e.ferry,
|
|
50
|
+
configuration: ((_e = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _e === void 0 ? void 0 : _e.ferry) || {},
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
icon: Icon_1.IconType.Location,
|
|
54
54
|
name: 'Drive',
|
|
55
55
|
distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.location,
|
|
56
|
-
configuration: (_f = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _f === void 0 ? void 0 : _f.location,
|
|
56
|
+
configuration: ((_f = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _f === void 0 ? void 0 : _f.location) || {},
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
icon: Icon_1.IconType.Car,
|
|
60
60
|
name: 'Drive',
|
|
61
61
|
distance: transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.car,
|
|
62
|
-
configuration: (_g = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _g === void 0 ? void 0 : _g.car,
|
|
62
|
+
configuration: ((_g = transportDistances === null || transportDistances === void 0 ? void 0 : transportDistances.configuration) === null || _g === void 0 ? void 0 : _g.car) || {},
|
|
63
63
|
},
|
|
64
64
|
].filter(({ distance }) => !!distance);
|
|
65
65
|
const tightMarginClass = tightMargins ? 'u-marg-left-right' : 'u-marg-left-right--heavy';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportDistanceFromHotelBlock.js","sourceRoot":"/","sources":["src/components/summary/TransportDistanceFromHotelBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA2D;AAC3D,4DAAoC;AACpC,+CAA0C;AAE1C,6EAAqD;AACrD,uEAAgE;AAChE,kEAA2D;AAG3D,wCAAqC;AACrC,wDAAiD;AAgBjD,SAAwB,+BAA+B,CAAC,KAA2C;;IAC/F,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IACjE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAEzC,MAAM,cAAc,GAAG;QACnB,EAAE,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,KAAK,EAAE,aAAa,EAAE,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,aAAa,0CAAE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"TransportDistanceFromHotelBlock.js","sourceRoot":"/","sources":["src/components/summary/TransportDistanceFromHotelBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HotelOverridesContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\n\nimport Distance from '@/components/generic/Distance';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { TransportDistancesConfig } from '@/models/Api/HotelOverrideDTO';\nimport type { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface TransportDistanceFromHotelBlockProps {\n vertical?: boolean;\n\n tightMargins?: boolean;\n distanceOverrides?: any;\n\n hotel?: Hotel;\n}\ninterface IDistanceValue {\n icon: IconType;\n name: string;\n distance: string | number;\n configuration: TransportDistancesConfig;\n}\nexport default function TransportDistanceFromHotelBlock(props: TransportDistanceFromHotelBlockProps) {\n const { transportDistances } = useContext(HotelOverridesContext);\n const { vertical, tightMargins } = props;\n\n const distanceValues = [\n { icon: IconType.Airplane, name: 'Airport', distance: transportDistances?.plane, configuration: transportDistances?.configuration?.plane || {} },\n { icon: IconType.Train, name: 'Train', distance: transportDistances?.train, configuration: transportDistances?.configuration?.train || {} },\n { icon: IconType.Bus, name: 'Bus', distance: transportDistances?.bus, configuration: transportDistances?.configuration?.bus || {} },\n { icon: IconType.Taxi, name: 'Taxi', distance: transportDistances?.taxi, configuration: transportDistances?.configuration?.taxi || {} },\n {\n icon: IconType.Ferry,\n name: 'Ferry',\n distance: transportDistances?.ferry,\n configuration: transportDistances?.configuration?.ferry || {},\n },\n {\n icon: IconType.Location,\n name: 'Drive',\n distance: transportDistances?.location,\n configuration: transportDistances?.configuration?.location || {},\n },\n {\n icon: IconType.Car,\n name: 'Drive',\n distance: transportDistances?.car,\n configuration: transportDistances?.configuration?.car || {},\n },\n ].filter(({ distance }) => !!distance) as IDistanceValue[];\n\n const tightMarginClass = tightMargins ? 'u-marg-left-right' : 'u-marg-left-right--heavy';\n\n return transportDistances?.displayCard ? (\n <div\n className=\"rs-transport-distances d-flex flex-wrap justify-content-between\"\n style={{\n width: '100%',\n }}\n >\n {distanceValues.map((distanceValue, index) => (\n <DistanceDisplayCard key={index} {...distanceValue} vertical={vertical} totalValues={distanceValues.length} />\n ))}\n </div>\n ) : (\n <>\n {distanceValues.map((distanceValue, index) => (\n <DistanceDisplay key={index} {...distanceValue} vertical={vertical} tightMarginClass={tightMarginClass} />\n ))}\n </>\n );\n}\n\nconst DistanceDisplayCard = ({\n icon,\n distance,\n configuration: { suffix, subTitle, unit },\n totalValues,\n vertical,\n}: IDistanceValue & { totalValues: number; vertical?: boolean }) => (\n <div\n style={{\n ...(!vertical && {\n minWidth: `${100 / totalValues}%`,\n }),\n }}\n className=\"d-flex flex-row transport-card\"\n >\n <div style={{ paddingRight: '4px' }} className=\"transport-card-icon\">\n <Icon icon={icon} size=\"1.3em\" color={Color.Accent} />\n </div>\n <div className=\"d-flex flex-column transport-card-details\">\n <Text bold align={TextAlign.Left} type={vertical ? TextType.Small : TextType.Body} color={Color.Accent} className=\"transport-card-title\">\n <Distance distance={distance} unit={unit} /> {suffix ?? ''}\n </Text>\n <Text align={TextAlign.Left} type={vertical ? TextType.Label : TextType.Small} color={Color.Graphite} className=\"transport-card-subtitle\">\n {subTitle}\n </Text>\n </div>\n </div>\n);\n\nconst DistanceDisplay = ({ name, icon, distance, configuration: { unit }, vertical, tightMarginClass }: IDistanceValue & { vertical?: boolean; tightMarginClass: string }) => (\n <div className={vertical ? 'u-flex flex-column u-marg-top-bottom' : `${tightMarginClass} u-marg-left-right@l-`}>\n <Text align={vertical ? TextAlign.Center : undefined} type={TextType.Small} color={Color.DarkGrey}>\n <strong>{name}</strong>\n </Text>\n <div\n className={classNames('u-flex u-marg-top--light', {\n 'justify-content-start flex-column align-items-center': vertical,\n 'align-items-end': !vertical,\n })}\n >\n <Icon icon={icon} size=\"1.3em\" />\n <span className={vertical ? 'u-marg-top--light' : 'u-marg-left--light'}>\n <Text type={TextType.Small}>\n <span className=\"u-nowrap\">\n <Distance unit={unit} distance={distance} />\n </span>\n </Text>\n </span>\n </div>\n </div>\n);\n"]}
|