{"version":3,"file":"static/js/Home.8783a24c.chunk.js","mappings":"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","sources":["components/CallToAction.tsx","components/DataPolicy/DataPolicy.tsx","components/BookingFlow/JumpToEnd/JumpToEnd.tsx","components/AboutUs/AboutUs.tsx","contexts/BookingFlowContext.ts","components/BookingFlow/StepNumber/StepNumber.tsx","components/form-components/FixedButton/FixedButton.tsx","contexts/ReservationEndContext.ts","components/BookingFlow/ReservationEnd/sections/ReservationsSection/ReservationsSection.tsx","components/BookingFlow/ReservationEnd/functions/createFunctions.ts","components/BookingFlow/ReservationEnd/sections/PersonalDetailsSection/PersonalDetailsSection.tsx","components/BookingFlow/ReservationEnd/PaymentSelect/PaymentSelect.tsx","components/BookingFlow/ReservationEnd/sections/PaymentSelectSection/PaymentSelectSection.tsx","components/BookingFlow/ReservationEnd/sections/UserInvoiceDetailsSection/UserInvoiceDetailsSection.tsx","components/BookingFlow/ReservationEnd/statements/BarionStatement/BarionStatement.tsx","components/BookingFlow/ReservationEnd/statements/PrivacyStatement/PrivacyStatement.tsx","components/BookingFlow/ReservationEnd/statements/TermsConditionsStatement/TermsConditionsStatement.tsx","components/BookingFlow/ReservationEnd/sections/StatementSection/StatementSection.tsx","components/BookingFlow/ReservationEnd/ReservationEnd.tsx","components/BookingFlow/StepValue/StepValue.tsx","components/BookingFlow/BookingFlowReducer.ts","components/BookingFlow/Step/Step.tsx","components/BookingFlow/modules/withSearchParams.tsx","components/CalendarDescription/CalendarDescription.tsx","components/BookingFlow/modules/CalendarSelect/CalendarItem/CalendarItem.tsx","components/BookingFlow/modules/SelectButton.tsx","components/BookingFlow/modules/CalendarSelect/CalendarSelect.tsx","test-mocks/MockModule.tsx","components/BookingFlow/modules/ServiceSelect/ServiceItem/ServiceItem.tsx","components/BookingFlow/modules/ServiceSelect/ServiceSelect.tsx","components/BookingFlow/modules/DateTimeSelect/DateTimeSelectStep.tsx","components/BookingFlow/modules/CustomerData/CustomerDataStep.tsx","components/BookingFlow/modules/TimeTableSelect/TimeTableSelect.tsx","components/BookingFlow/Stepper/Stepper.tsx","components/ContactInfo/ContactInfo.tsx","services/bookingFlowUtils.ts","components/BookingFlow/BookingFlow.tsx","components/icons/Email.tsx","components/icons/Location.tsx","components/icons/Phone.tsx","components/icons/Facebook.tsx","components/icons/WebSite.tsx","components/Home/Home.tsx","services/api/reservationConfirm.ts","services/validations/reservationEndRules.ts","services/validations/signupRules.ts"],"sourcesContent":["import React from 'react';\r\nimport { HashLink as Link } from 'react-router-hash-link';\r\nimport { Routes } from 'src/routes';\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst messages = defineMessages({\r\n callToAction: {\r\n id: 'callToAction',\r\n defaultMessage: 'Időpont foglalása'\r\n }\r\n})\r\n\r\nconst CallToAction = () => {\r\n const location = useLocation();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default CallToAction;","import React, { useEffect, useState } from 'react';\r\nimport CustomScroll from 'react-custom-scroll';\r\nimport { useIntl } from 'react-intl';\r\nimport { getDataPolicy } from 'src/services/api/company';\r\nimport makeCancelable from 'src/services/cancelablePromise';\r\nimport PrimaryButton from '../form-components/PrimaryButton/PrimaryButton';\r\nimport { IPopupable } from '../Popup/Popup';\r\nimport globalMessages from 'src/services/globalMessages';\r\n\r\nconst DataPolicy: React.FC = ({ closePopup }) => {\r\n const intl = useIntl();\r\n const [adminPrivacyStatement, setAdminPrivacyStatement] = useState('');\r\n const [clientApprovalStatement, setClientApprovalStatement] = useState('');\r\n const fetchDataPolicy = (language: string) => {\r\n const dataPolicySubscription = makeCancelable(getDataPolicy(language));\r\n dataPolicySubscription.promise\r\n .then((dataPolicy) => {\r\n setAdminPrivacyStatement(dataPolicy.AdminPrivacyStatement);\r\n setClientApprovalStatement(dataPolicy.ClientApprovalStatement);\r\n })\r\n .catch(() => null);\r\n return dataPolicySubscription;\r\n };\r\n\r\n useEffect(() => {\r\n const dataPolicySubscription = fetchDataPolicy(intl.locale);\r\n\r\n return () => {\r\n dataPolicySubscription.cancel();\r\n };\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {closePopup && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default DataPolicy;\r\n","import React from 'react';\r\nimport { useState } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport Confirmation from 'src/components/Confirmation/Confirmation';\r\nimport Popup from 'src/components/Popup/Popup';\r\nimport SecondaryButton from '../../form-components/SecondaryButton/SecondaryButton';\r\nimport globalMessages from 'src/services/globalMessages';\r\n\r\nconst messages = defineMessages({\r\n pendingCount: {\r\n id: 'pendingCount',\r\n defaultMessage: '{n} függő foglalás'\r\n },\r\n jumpTo: {\r\n id: 'jumpTo',\r\n defaultMessage: 'Ugrás ide'\r\n },\r\n jumpToReservationEnd: {\r\n id: 'jumpToReservationEnd',\r\n defaultMessage: 'Vissza a véglegesítéshez'\r\n },\r\n confirmJumpToEnd: {\r\n id: 'confirmJumpToEnd',\r\n defaultMessage: 'A most megkezdett foglalás adatai el fognak veszni. Biztosan a Véglegesítés lépésre ugrasz?'\r\n }\r\n});\r\n\r\nexport const enum PendingJumpType {\r\n Top,\r\n Bottom\r\n}\r\n\r\ninterface IPendingJumpProps {\r\n type: PendingJumpType;\r\n reservationCount: number;\r\n action: () => void;\r\n}\r\n\r\nconst JumpToEnd: React.FunctionComponent = (props) => {\r\n const [isWarningVisible, setIsWarningVisible] = useState(false);\r\n const { type, action, reservationCount } = props;\r\n const caption = type === PendingJumpType.Top ? messages.jumpToReservationEnd : messages.jumpTo;\r\n const className = type === PendingJumpType.Top ? 'stepper__jump-to-pending--top' : 'stepper__jump-to-pending--bottom';\r\n\r\n return <>\r\n
\r\n \r\n setIsWarningVisible(true)} />\r\n
\r\n setIsWarningVisible(false)} visible={isWarningVisible}>\r\n \r\n \r\n \r\n};\r\n\r\nexport default JumpToEnd;\r\n","import React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport globalMessages from 'src/services/globalMessages';\r\n\r\n/**\r\n * @property body - rich text\r\n */\r\nexport interface IAboutUsProps {\r\n body: string | null;\r\n}\r\n\r\nconst AboutUs: React.FunctionComponent = ({ body }) =>\r\n body ?\r\n
\r\n

\r\n
\r\n
\r\n : null\r\n\r\n\r\nexport default AboutUs;","import React from 'react';\r\nimport { IBookingFlowProps } from 'src/components/BookingFlow/BookingFlow';\r\nimport { initialUserState } from 'src/components/UserDetails/UserDetails';\r\nimport { IBookingFlowState } from 'src/models/bookingFlow';\r\nimport { ReservationOrder } from 'src/entities/company';\r\nimport { IReservationModel } from 'src/entities/reservation';\r\nimport { IReservationEndUser } from 'src/entities/user';\r\nimport { StepType } from 'src/services/getStepOrder';\r\n\r\nexport interface IBookingFlowActions {\r\n setReservationEndUser: (value: IReservationEndUser) => void;\r\n handleUserChange: (value: any, name: string) => void;\r\n handleInvoiceChange: (value: any, name: string) => void;\r\n reloadReservations: (reservationOrder: ReservationOrder, newReservations: IReservationModel[]) => void;\r\n setReservationModel: (stepType: StepType, value: IReservationModel) => void;\r\n addNewReservation: () => void;\r\n removeReservation: (index?: number) => void;\r\n setActiveReservation: (index: number) => void;\r\n autoSelected: () => void;\r\n}\r\n\r\nexport type IBookingFlowProvidedState = IBookingFlowState & IBookingFlowProps;\r\n\r\nexport const BookingContext = React.createContext({\r\n reservationEndUser: initialUserState,\r\n stepOrderTypes: [],\r\n reservations: [],\r\n activeReservationIndex: 0,\r\n actions: {\r\n setReservationEndUser: () => undefined,\r\n handleUserChange: () => undefined,\r\n handleInvoiceChange: () => undefined,\r\n reloadReservations: () => undefined,\r\n setReservationModel: () => undefined,\r\n addNewReservation: () => undefined,\r\n removeReservation: () => undefined,\r\n setActiveReservation: () => undefined,\r\n autoSelected: () => undefined\r\n },\r\n hasAutoSelected: false,\r\n activeStepIndex: 0,\r\n reservationOrder: ReservationOrder.CalendarFirst\r\n});\r\n\r\nexport const BookingProvider = BookingContext.Provider;\r\nexport const BookingConsumer = BookingContext.Consumer;","import React from 'react';\r\nimport { FormattedMessage, MessageDescriptor } from 'react-intl';\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\n\r\ninterface IStepNumberProps {\r\n name: MessageDescriptor;\r\n touched: boolean;\r\n index: number;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst StepNumber: React.FunctionComponent = ({ touched, name, index, isLoading }) => {\r\n const stepTouchedClass = touched ? 'step-number--touched' : '';\r\n return (\r\n
\r\n
\r\n {isLoading\r\n ? \r\n : {index}\r\n }\r\n
\r\n

\r\n \r\n

\r\n
\r\n );\r\n};\r\n\r\nexport default StepNumber;\r\n","import React from 'react';\r\nimport PrimaryButton from '../PrimaryButton/PrimaryButton';\r\nimport { IButtonProps } from '../Button/Button';\r\nimport { Helmet } from 'react-helmet';\r\n\r\ntype IFixedButtonProps = Pick\r\n\r\nconst FixedButton: React.FC = ({ caption, onClick, className, form }) =>\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\nexport default FixedButton;","import React from 'react';\r\nimport { IPaymentSelectOption } from 'src/entities/pocket';\r\nimport { IServiceSubtotal } from 'src/entities/service';\r\n\r\nexport interface IReservationEndActions {\r\n setHasOnlinePocket: (value: boolean) => void;\r\n setSelectedPayment: (value: IPaymentSelectOption | null) => void;\r\n setShouldSignUp: (value: boolean) => void;\r\n}\r\n\r\nexport interface IReservationEndProvidedState {\r\n hasOnlinePocket: boolean;\r\n selectedPayment: IPaymentSelectOption | null;\r\n shouldSignUp: boolean;\r\n displayedSubtotal: IServiceSubtotal | null;\r\n actions: IReservationEndActions;\r\n}\r\n\r\nexport const ReservationEndContext = React.createContext({\r\n hasOnlinePocket: false,\r\n selectedPayment: null,\r\n shouldSignUp: false,\r\n displayedSubtotal: null,\r\n actions: {\r\n setHasOnlinePocket: () => undefined,\r\n setSelectedPayment: () => undefined,\r\n setShouldSignUp: () => undefined\r\n }\r\n});\r\n\r\nexport const ReservationEndProvider = ReservationEndContext.Provider;\r\nexport const ReservationEndConsumer = ReservationEndContext.Consumer;","import React, { useContext } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport FormattedPrice from 'src/components/BookingFlow/modules/ServiceSelect/FormattedPrice/FormattedPrice';\r\nimport SecondaryButton from 'src/components/form-components/SecondaryButton/SecondaryButton';\r\nimport Reservation from 'src/components/Reservations/Reservation';\r\nimport { Section } from 'src/components/Section';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { ReservationEndContext } from 'src/contexts/ReservationEndContext';\r\nimport { reservationModelToRequest } from 'src/services/api/reservation';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { getPaymentNeedWithPrice } from '../../functions/helperFunctions';\r\n\r\nconst messages = defineMessages({\r\n addNewReservation: {\r\n id: 'addNewReservation',\r\n defaultMessage: 'További időpont hozzáadása'\r\n },\r\n reservations: {\r\n id: 'reservations',\r\n defaultMessage: 'Időpontok'\r\n }\r\n});\r\n\r\nconst ReservationsSection: React.FC = () => {\r\n\r\n const { company } = useContext(AppContext);\r\n const { reservations, actions } = useContext(BookingContext);\r\n const { hasOnlinePocket, displayedSubtotal } = useContext(ReservationEndContext);\r\n\r\n return (\r\n
\r\n {reservations.map((reservation, i) =>\r\n actions.setActiveReservation(i)}\r\n onDelete={() => actions.removeReservation(i)}\r\n isReservationEnd={true}\r\n />\r\n )}\r\n
\r\n {!company?.IsCartDisabled &&\r\n \r\n }\r\n {(company?.PaymentSettings.IsPaymentEnabled && hasOnlinePocket && displayedSubtotal && displayedSubtotal.Price !== 0) &&\r\n
\r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ReservationsSection;","import { IReservationRequiredFieldProps, isEmailRequired, isNameRequired, isPhoneNumberRequired } from 'src/entities/reservation';\r\nimport { IReservationEndUser, IUser, IUserInvoice } from 'src/entities/user';\r\nimport FormValidator from 'src/services/formValidator';\r\nimport { invoiceDetailsRules } from 'src/services/validations/invoiceDetailsRules';\r\nimport { reservationEndRules } from 'src/services/validations/reservationEndRules';\r\n\r\nexport const createUserInvoice = (actUser?: IUser | null): IUserInvoice => {\r\n if (actUser && actUser.InvoiceDetails) {\r\n return actUser.InvoiceDetails;\r\n }\r\n\r\n return {\r\n InvoiceName: '',\r\n Country: '',\r\n City: '',\r\n StreetAddress: '',\r\n PostalCode: '',\r\n PrivatePerson: false,\r\n TaxNumber: ''\r\n }\r\n}\r\n\r\nexport const createReservationEndUser = (actUser: IUser | null): IReservationEndUser => {\r\n if (actUser) {\r\n if (!actUser.InvoiceDetails) {\r\n actUser.InvoiceDetails = createUserInvoice();\r\n }\r\n const { Email, Name, Phone, InvoiceDetails, PrivacyStatementAccepted } = actUser;\r\n return { Email, Name, Phone, InvoiceDetails, PrivacyStatementAccepted, TermsAccepted: false };\r\n }\r\n\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const nameParam = urlSearchParams.get('name');\r\n const emailParam = urlSearchParams.get('email');\r\n const phoneParam = urlSearchParams.get('phone');\r\n\r\n return {\r\n Email: emailParam || '',\r\n Name: nameParam || '',\r\n Phone: phoneParam || '',\r\n PrivacyStatementAccepted: false,\r\n InvoiceDetails: createUserInvoice(actUser),\r\n TermsAccepted: false\r\n }\r\n}\r\n\r\nexport const createValidator = (props: IReservationRequiredFieldProps, shouldSignUp: boolean, isTermsRequired: boolean) => {\r\n return {\r\n personalValidator: new FormValidator(\r\n reservationEndRules(\r\n shouldSignUp || isEmailRequired(props),\r\n shouldSignUp || isPhoneNumberRequired(props),\r\n shouldSignUp || isNameRequired(props),\r\n isTermsRequired)),\r\n invoiceValidator: new FormValidator(invoiceDetailsRules())\r\n };\r\n}\r\n\r\nexport const createValidation = (actValidator: FormValidator, data: any, submitted: boolean) => {\r\n return submitted\r\n ? actValidator.validate(data)\r\n : actValidator.getInitial();\r\n}","import React, { forwardRef, useContext, useState } from 'react';\r\nimport { FormattedMessage, defineMessages } from 'react-intl';\r\nimport Login from 'src/components/Login/Login';\r\nimport Popup from 'src/components/Popup/Popup';\r\nimport { Section } from 'src/components/Section';\r\nimport PersonalDetails, { IPersonalDetails } from 'src/components/UserDetails/PersonalDetails/PersonalDetails';\r\nimport Checkbox from 'src/components/form-components/Checkbox/Checkbox';\r\nimport SecondaryButton from 'src/components/form-components/SecondaryButton/SecondaryButton';\r\nimport TextInput, { TextInputType, createInputId } from 'src/components/form-components/TextInput/TextInput';\r\nimport ValidationMessage from 'src/components/form-components/ValidationMessage/ValidationMessage';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { EmbedContext } from 'src/contexts/EmbedContext';\r\nimport { ReservationEndContext } from 'src/contexts/ReservationEndContext';\r\nimport { defaultRequiredInfo } from 'src/entities/company';\r\nimport { IReservationRequiredFieldProps, isEmailRequired, isNameRequired, isPhoneNumberRequired } from 'src/entities/reservation';\r\nimport { IReservationEndUser } from 'src/entities/user';\r\nimport FormValidator, { IValidation } from 'src/services/formValidator';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { signupFields, signupRules } from 'src/services/validations/signupRules';\r\nimport { createValidation } from '../../functions/createFunctions';\r\n\r\nconst messages = defineMessages({\r\n reservationEndLogin: {\r\n id: 'reservationEndLogin',\r\n defaultMessage: 'Van fiókom, bejelentkezem'\r\n },\r\n or: {\r\n id: 'or',\r\n defaultMessage: 'Vagy'\r\n },\r\n signUpOnReservation: {\r\n id: 'signUpOnReservation',\r\n defaultMessage: 'Fiók létrehozása'\r\n }\r\n});\r\n\r\nexport interface IPersonalDetailsSectionProps {\r\n validation: IValidation;\r\n submitted: boolean;\r\n}\r\n\r\nconst PersonalDetailsSection = forwardRef (({ validation, submitted }, ref) => {\r\n\r\n const { isAuthenticated, company, user, actions } = useContext(AppContext);\r\n const { hideUser } = useContext(EmbedContext)\r\n const { reservationEndUser, actions: { handleUserChange } } = useContext(BookingContext);\r\n const { shouldSignUp, actions: { setShouldSignUp } } = useContext(ReservationEndContext)\r\n\r\n const [isLoginVisible, setLoginVisible] = useState(false);\r\n\r\n const requiredFieldInfo: IReservationRequiredFieldProps = {\r\n isAuthenticated,\r\n requiredFieldInfo: company ? company.RequiredFieldInfo : defaultRequiredInfo\r\n }\r\n\r\n const toggleLogin = () => {\r\n setLoginVisible(!isLoginVisible);\r\n }\r\n\r\n const validator = new FormValidator(signupRules);\r\n const passwordValidation = createValidation(validator, reservationEndUser, submitted);\r\n\r\n return (\r\n
\r\n
\r\n \r\n {!user && !hideUser &&\r\n \r\n \r\n \r\n }\r\n \r\n {!user && !hideUser && shouldSignUp && reservationEndUser &&\r\n <>\r\n \r\n \r\n \r\n }\r\n \r\n\r\n {!user && !hideUser && <>\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n )\r\n});\r\n\r\nexport default PersonalDetailsSection;\r\n","import classNames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport Radio from 'src/components/form-components/Radio/Radio';\r\nimport Placeholder from 'src/components/Placeholder/Placeholder';\r\nimport { PaymentType } from 'src/entities/company';\r\nimport { IPaymentSelectOption, IPocket, IProviderMessage, PaymentProvider, PocketType } from 'src/entities/pocket';\r\n\r\nconst messages = defineMessages({\r\n onSitePayment: {\r\n id: 'onSitePayment',\r\n defaultMessage: 'Helyszíni fizetés'\r\n },\r\n onBarionPayment: {\r\n id:'onBarionPayment',\r\n defaultMessage: 'Bankkártyás fizetés Barionnal'\r\n },\r\n onPayPalPayment: {\r\n id:'onPayPalPayment',\r\n defaultMessage: 'PayPal'\r\n }\r\n})\r\n\r\nconst PayPalImg = ;\r\nconst BarionImg = ;\r\n\r\nexport interface IPaymentSelectProps {\r\n pockets: IPocket[];\r\n paymentType: PaymentType;\r\n onChange: (value: IPaymentSelectOption) => void;\r\n selected: IPaymentSelectOption | null;\r\n}\r\n\r\nconst PaymentSelect: React.FunctionComponent = ({ pockets, paymentType, onChange, selected }) => {\r\n\r\n const [hasInit, setHasInit] = useState(false);\r\n const selectOptions: IPaymentSelectOption[] = createOptions();\r\n\r\n useEffect(() => {\r\n\r\n if (hasInit || !pockets.length) {\r\n return;\r\n }\r\n\r\n const selectedPocket = selected ? (selectOptions.find(opt => opt.Id === selected.Id) ?? selectOptions[0]) : selectOptions[0];\r\n onChange(selectedPocket);\r\n setHasInit(true);\r\n\r\n }, [pockets, hasInit]);\r\n\r\n function createOptions() {\r\n /* eslint-disable-next-line no-bitwise */\r\n const result: IPaymentSelectOption[] = pockets.filter(pocket => (PocketType.Online === (pocket.Type & PocketType.Online)) && pocket.IsActive);\r\n\r\n\r\n if (paymentType === PaymentType.NeedAccept || paymentType === PaymentType.NoNeedToPay) {\r\n result.push({\r\n Id: -1,\r\n Name: messages.onSitePayment.defaultMessage,\r\n PaymentProvider: PaymentProvider.NoProvider,\r\n NeedsInvoice: false,\r\n DisplayName: messages.onSitePayment\r\n });\r\n }\r\n \r\n return addLocalizedDisplayNameToOptions(result);\r\n }\r\n\r\n function addLocalizedDisplayNameToOptions(result: IPaymentSelectOption[]): IPaymentSelectOption[] {\r\n const providerMessages: Partial> = {\r\n [PaymentProvider.Barion]: {\r\n displayName: messages.onBarionPayment,\r\n name: messages.onBarionPayment.defaultMessage\r\n },\r\n [PaymentProvider.Paypal]: {\r\n displayName: messages.onPayPalPayment,\r\n name: messages.onPayPalPayment.defaultMessage\r\n }\r\n // Add more payment providers here if needed\r\n };\r\n \r\n return result.map(o => {\r\n const providerMessage = o.PaymentProvider ? providerMessages[o.PaymentProvider] : undefined;\r\n if (providerMessage) {\r\n return {\r\n ...o,\r\n DisplayName: providerMessage.displayName,\r\n Name: providerMessage.name\r\n };\r\n }\r\n \r\n return o;\r\n });\r\n }\r\n \r\n return (\r\n (selectOptions && selected) ?\r\n \r\n options={selectOptions}\r\n selected={(payment) => payment.Id === selected.Id}\r\n onChange={onChange}\r\n rootClassName=\"payment\"\r\n buttonClassName=\"payment-method\"\r\n labelClassName=\"payment-method__label\"\r\n inputClassName=\"payment-method__input\"\r\n getLabel={(payment, checked) =>\r\n
\r\n \r\n {payment.DisplayName\r\n ? \r\n : payment.Name\r\n }\r\n \r\n {payment.PaymentProvider === PaymentProvider.Paypal && PayPalImg}\r\n {payment.PaymentProvider === PaymentProvider.Barion && BarionImg}\r\n
}\r\n name={'payment'}\r\n />\r\n :\r\n \r\n )\r\n}\r\n\r\nexport default PaymentSelect;","import React, { useContext } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport FormattedPrice from 'src/components/BookingFlow/modules/ServiceSelect/FormattedPrice/FormattedPrice';\r\nimport { Section } from 'src/components/Section';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { ReservationEndContext } from 'src/contexts/ReservationEndContext';\r\nimport { IPocket, PocketType } from 'src/entities/pocket';\r\nimport { useConditionalFetch } from 'src/hooks';\r\nimport { getActivePockets } from 'src/services/api/company';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport PaymentSelect from '../../PaymentSelect/PaymentSelect';\r\n\r\nconst messages = defineMessages({\r\n paymentSelect: {\r\n id: 'paymentSelect',\r\n defaultMessage: 'Fizetési mód'\r\n }\r\n});\r\n\r\nconst PaymentSelectSection: React.FC = () => {\r\n\r\n const { company } = useContext(AppContext);\r\n const { displayedSubtotal, selectedPayment, hasOnlinePocket, actions: { setHasOnlinePocket, setSelectedPayment } } = useContext(ReservationEndContext);\r\n\r\n const checkOnlinePockets = (pocketList: IPocket[]) => {\r\n /* eslint-disable-next-line no-bitwise */\r\n setHasOnlinePocket(pocketList.some(pocket => (PocketType.Online === (pocket.Type & PocketType.Online))));\r\n }\r\n\r\n const isSelectNeeded = (company?.PaymentSettings.IsPaymentEnabled && displayedSubtotal && displayedSubtotal?.Price !== 0) as boolean;\r\n\r\n const [activePockets, isLoading] = useConditionalFetch(getActivePockets, checkOnlinePockets, isSelectNeeded, []);\r\n\r\n return (\r\n (hasOnlinePocket && company && isSelectNeeded && displayedSubtotal && !isLoading)\r\n ?\r\n
\r\n \r\n \r\n }>\r\n \r\n
\r\n :\r\n null\r\n )\r\n}\r\n\r\nexport default PaymentSelectSection;","import React, { useContext } from 'react';\r\nimport { Section } from 'src/components/Section';\r\nimport UserInvoiceDetails from 'src/components/UserDetails/InvoiceDetails/UserInvoiceDetails';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { ReservationEndContext } from 'src/contexts/ReservationEndContext';\r\nimport { IValidation } from 'src/services/formValidator';\r\nimport globalMessages from 'src/services/globalMessages';\r\n\r\nexport interface IUserInvoiceDetailsSectionProps {\r\n validation: IValidation;\r\n}\r\n\r\nconst UserInvoiceDetailsSection: React.FC = ({ validation }) => {\r\n\r\n const { company } = useContext(AppContext);\r\n const { reservationEndUser, actions: { handleInvoiceChange } } = useContext(BookingContext);\r\n const { selectedPayment, displayedSubtotal } = useContext(ReservationEndContext);\r\n\r\n return (\r\n (company?.PaymentSettings.IsBillingEnabled &&\r\n selectedPayment?.NeedsInvoice && reservationEndUser &&\r\n displayedSubtotal && displayedSubtotal?.Price !== 0)\r\n ?\r\n
\r\n \r\n
\r\n :\r\n null\r\n )\r\n}\r\n\r\nexport default UserInvoiceDetailsSection;","import React, { useContext } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport { ReservationEndContext } from 'src/contexts/ReservationEndContext';\r\nimport { PaymentProvider } from 'src/entities/pocket';\r\n\r\nconst messages = defineMessages({\r\n barionStatement: {\r\n id: 'barionStatement',\r\n defaultMessage: 'Az online fizetést a Barion Payment Zrt. biztosítja, MNB engedély száma: H-EN-I-1064/2013.'\r\n }\r\n})\r\n\r\nconst BarionStatement: React.FC = () => {\r\n\r\n const { selectedPayment } = useContext(ReservationEndContext);\r\n\r\n return (\r\n (selectedPayment?.PaymentProvider === PaymentProvider.Barion)\r\n ?\r\n
\r\n \r\n
\r\n :\r\n null\r\n );\r\n}\r\n\r\nexport default BarionStatement;","import React, { useContext, useState } from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport DataPolicy from 'src/components/DataPolicy/DataPolicy';\r\nimport Checkbox from 'src/components/form-components/Checkbox/Checkbox';\r\nimport ValidationMessage from 'src/components/form-components/ValidationMessage/ValidationMessage';\r\nimport Popup from 'src/components/Popup/Popup';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { reservationEndFields } from 'src/services/validations/reservationEndRules';\r\nimport { IPrivacyStatementProps } from '../../sections/StatementSection/StatementSection';\r\n\r\nconst PrivacyStatement: React.FC = ({ validation, setDataPolicy }) => {\r\n\r\n const { user } = useContext(AppContext);\r\n const { reservationEndUser } = useContext(BookingContext);\r\n const [isDataPolicyVisible, setDataPolicyVisible] = useState(false);\r\n\r\n const handleCheckBoxLinkClick = (e: React.MouseEvent) => {\r\n e.preventDefault(); \r\n e.stopPropagation();\r\n setDataPolicyVisible(true);\r\n }\r\n\r\n return (\r\n (!user || !user.PrivacyStatementAccepted)\r\n ?\r\n
\r\n \r\n (\r\n {msg})}}\r\n />\r\n \r\n \r\n setDataPolicyVisible(false)}\r\n title={globalMessages.dataPolicyTitle}>\r\n setDataPolicyVisible(false)} />\r\n \r\n
\r\n :\r\n null\r\n );\r\n}\r\n\r\nexport default PrivacyStatement;","import React, { useContext } from 'react';\r\nimport { defineMessages, FormattedMessage } from 'react-intl';\r\nimport Checkbox from 'src/components/form-components/Checkbox/Checkbox';\r\nimport ValidationMessage from 'src/components/form-components/ValidationMessage/ValidationMessage';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { reservationEndFields } from 'src/services/validations/reservationEndRules';\r\nimport { ITermsCondidtionsProps } from '../../sections/StatementSection/StatementSection';\r\n\r\nconst messages = defineMessages({\r\n termsStatement: {\r\n id: 'termsStatement',\r\n defaultMessage: 'Elfogadom az Általános Szerződési Feltételeket.'\r\n }\r\n})\r\n\r\nconst TermsConditionsStatement: React.FC = ({ validation, setTermsAccepted }) => {\r\n const { company } = useContext(AppContext);\r\n const { reservationEndUser } = useContext(BookingContext);\r\n\r\n return ((company?.TermsAndConditionsLink)\r\n ?\r\n
\r\n \r\n \r\n \r\n {msg}\r\n }} />\r\n \r\n \r\n
\r\n : \r\n null\r\n );\r\n}\r\n\r\nexport default TermsConditionsStatement;","import React from 'react';\r\nimport { IValidation } from 'src/services/formValidator';\r\nimport BarionStatement from '../../statements/BarionStatement/BarionStatement';\r\nimport PrivacyStatement from '../../statements/PrivacyStatement/PrivacyStatement';\r\nimport TermsConditionsStatement from '../../statements/TermsConditionsStatement/TermsConditionsStatement';\r\n\r\ninterface IStatementSectionPropsBase {\r\n validation: IValidation;\r\n}\r\n\r\nexport interface IPrivacyStatementProps extends IStatementSectionPropsBase {\r\n setDataPolicy: (value: boolean) => void;\r\n}\r\n\r\nexport interface ITermsCondidtionsProps extends IStatementSectionPropsBase {\r\n setTermsAccepted: (value: boolean) => void;\r\n}\r\n\r\nexport interface IStatementSectionProps extends IPrivacyStatementProps {\r\n setTermsAccepted: (value: boolean) => void;\r\n}\r\n\r\nconst StatementSection: React.FC = ({ validation, setDataPolicy, setTermsAccepted }) => {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default StatementSection;","import React, { createRef, useCallback, useContext, useEffect, useState } from 'react';\r\nimport { defineMessages, WrappedComponentProps, injectIntl, MessageDescriptor, FormattedMessage } from 'react-intl';\r\nimport { NavigationType, useLocation, useNavigate, useNavigationType } from 'react-router-dom';\r\nimport { IPersonalDetails } from 'src/components/UserDetails/PersonalDetails/PersonalDetails';\r\nimport { IReservationRequiredFieldProps, IReservationResponse, populateReservations } from 'src/entities/reservation';\r\nimport { postReservation, reservationModelToRequest } from 'src/services/api/reservation';\r\nimport FormValidator from 'src/services/formValidator';\r\nimport { StepType } from '../../../services/getStepOrder';\r\nimport StepNumber from '../StepNumber/StepNumber';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { IConfirmationLocationState } from '../ReservationConfirm/ReservationConfirm';\r\nimport FixedButton from 'src/components/form-components/FixedButton/FixedButton';\r\nimport { signupRules } from 'src/services/validations/signupRules';\r\nimport { Routes } from 'src/routes';\r\nimport { IPaymentSelectOption, PaymentProvider } from 'src/entities/pocket';\r\nimport { defaultRequiredInfo, PaymentType, ReservationOrder } from 'src/entities/company';\r\nimport { IPostPaymentReservationParams, postPaymentReservations, redirectToBarion, reservationEndUserToPaymentUser, reservationModelToPaymentRequest } from 'src/services/api/paymentReservation';\r\nimport ReservationsSection from './sections/ReservationsSection/ReservationsSection';\r\nimport PersonalDetailsSection from './sections/PersonalDetailsSection/PersonalDetailsSection';\r\nimport PaymentSelectSection from './sections/PaymentSelectSection/PaymentSelectSection';\r\nimport UserInvoiceDetailsSection from './sections/UserInvoiceDetailsSection/UserInvoiceDetailsSection';\r\nimport StatementSection from './sections/StatementSection/StatementSection';\r\nimport ValidationMessage from 'src/components/form-components/ValidationMessage/ValidationMessage';\r\nimport { getPaymentNeedWithPrice, getServiceFromReservation, getServicesFromReservations, getSubtotal, isReservationEndUserDirty, isValidSubtotal, transformResponse } from './functions/helperFunctions';\r\nimport { createReservationEndUser, createValidation, createValidator } from './functions/createFunctions';\r\nimport { localStore } from 'src/services/storage';\r\nimport { redirectAfterSendReservation } from 'src/services/api/reservationConfirm';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { IReservationEndProvidedState, ReservationEndProvider } from 'src/contexts/ReservationEndContext';\r\nimport { IPaymentReservationResponse } from 'src/entities/paymentReservation';\r\nimport Popup from 'src/components/Popup/Popup';\r\n\r\nconst messages = defineMessages({\r\n sendReservation: {\r\n id: 'sendReservation',\r\n defaultMessage: 'Foglalás véglegesítése'\r\n },\r\n toPaymentSite: {\r\n id: 'toPaymentSite',\r\n defaultMessage: 'Tovább a fizetéshez'\r\n },\r\n reservationWarningHeader: {\r\n id: 'reservationWarningHeader',\r\n defaultMessage: 'Hiba a foglalások beküldésekor'\r\n },\r\n reservationWarningDefault: {\r\n id: 'reservationWarningDefault',\r\n defaultMessage: 'Általános hiba a foglalás véglegesítéskor'\r\n },\r\n reservationWarningCollision: {\r\n id: 'reservationWarningCollision',\r\n defaultMessage: 'Foglalás ütközés fizetendő foglalásnál'\r\n },\r\n reservationWarningPayment: {\r\n id: 'reservationWarningPayment',\r\n defaultMessage: 'Fizetési szolgáltatás hiba'\r\n }\r\n});\r\n\r\ntype IReservationEndProps =\r\n WrappedComponentProps\r\n & {\r\n index: number;\r\n isEndStep: boolean;\r\n onEndStep: () => void;\r\n reservationOrder: ReservationOrder;\r\n }\r\n\r\nexport interface ISendReservationResponse {\r\n ReservedReservations: IReservationResponse[] | null,\r\n PaymentReservationResponse: IPaymentReservationResponse | null\r\n}\r\n\r\nconst ReservationEnd: React.FC = ({ index, isEndStep, onEndStep, intl, reservationOrder }) => {\r\n\r\n const location = useLocation();\r\n const navigationType = useNavigationType();\r\n const navigate = useNavigate();\r\n const isReservationEndRoute = location.pathname === Routes.ReservationEnd;\r\n const { company, isAuthenticated, actions, user } = useContext(AppContext);\r\n const { reservationEndUser, reservations, activeReservationIndex,\r\n actions: { reloadReservations, setActiveReservation, handleUserChange, setReservationEndUser } } = useContext(BookingContext);\r\n const [selectedPayment, setSelectedPayment] = useState(null);\r\n const [sendCondition, setSendCondition] = useState(false);\r\n const [isWarningVisible, setIsWarningVisible] = useState(false);\r\n const [warningText, setWarningText] = useState(messages.reservationWarningDefault);\r\n\r\n const requiredFieldInfo: IReservationRequiredFieldProps = {\r\n isAuthenticated,\r\n requiredFieldInfo: company ? company.RequiredFieldInfo : defaultRequiredInfo\r\n }\r\n\r\n const sendReservation = useCallback(async () => {\r\n const postReservationParams = {\r\n user: reservationEndUser,\r\n reservations: reservations.map(reservationModelToRequest),\r\n shouldSignUp,\r\n termsAccepted: reservationEndUser.TermsAccepted,\r\n language: intl.locale,\r\n setUser: actions.setUser\r\n }\r\n\r\n if (!selectedPayment || selectedPayment.PaymentProvider === PaymentProvider.NoProvider || !isValidSubtotal(reservations)) {\r\n return postReservation(postReservationParams);\r\n }\r\n else {\r\n let postPaymentReservationParams: IPostPaymentReservationParams = {\r\n paymentReservations: reservations\r\n .filter(reservation => {\r\n const service = getServiceFromReservation(reservation);\r\n return getPaymentNeedWithPrice(company?.PaymentSettings.IsPaymentEnabled, service);\r\n })\r\n .map(reservationModelToPaymentRequest),\r\n paymentUser: reservationEndUserToPaymentUser(reservationEndUser, selectedPayment),\r\n termsAccepted: reservationEndUser.TermsAccepted,\r\n }\r\n postReservationParams.reservations = postReservationParams.reservations\r\n .filter(reservation => !getPaymentNeedWithPrice(company?.PaymentSettings.IsPaymentEnabled, reservation.Service));\r\n\r\n if (postReservationParams.reservations.length === 0) {\r\n postPaymentReservationParams = {\r\n ...postPaymentReservationParams,\r\n user: reservationEndUser,\r\n shouldSignUp,\r\n setUser: actions.setUser\r\n }\r\n\r\n return postPaymentReservations(postPaymentReservationParams);\r\n }\r\n else {\r\n return Promise.all([postReservation(postReservationParams), postPaymentReservations(postPaymentReservationParams)]);\r\n }\r\n }\r\n\r\n }, [sendCondition, selectedPayment, reservations, reservationEndUser]);\r\n\r\n const afterSend = async (responseAny: any) => {\r\n setSendCondition(false);\r\n const response = transformResponse(responseAny);\r\n actions.setLoading(false);\r\n\r\n if (!response || (!response.PaymentReservationResponse && !response.ReservedReservations)) {\r\n showWarningPopup(messages.reservationWarningDefault);\r\n return;\r\n }\r\n\r\n if (response.PaymentReservationResponse) {\r\n if (response.PaymentReservationResponse.HasCollision) {\r\n showWarningPopup(messages.reservationWarningCollision);\r\n return;\r\n }\r\n\r\n if (response.PaymentReservationResponse.HasPaymentError) {\r\n showWarningPopup(messages.reservationWarningPayment);\r\n return;\r\n }\r\n }\r\n\r\n if (selectedPayment?.PaymentProvider === PaymentProvider.NoProvider || !response.PaymentReservationResponse) {\r\n const navigationState: IConfirmationLocationState =\r\n {\r\n UserEmail: reservationEndUser.Email,\r\n Reservations: response.ReservedReservations\r\n ? populateReservations((response.ReservedReservations), getServicesFromReservations(reservations))\r\n : [],\r\n didSignUp: shouldSignUp\r\n };\r\n redirectAfterSend = redirectAfterSendReservation(navigationState, company?.CustomSuccessLink);\r\n\r\n if (!redirectAfterSend) {\r\n navigate(Routes.Confirmation, { state: navigationState });\r\n }\r\n }\r\n else {\r\n if (response.ReservedReservations) {\r\n localStore.setItem('reservationResponse', JSON.stringify(response.ReservedReservations));\r\n localStore.setItem('didSignUp', JSON.stringify(shouldSignUp));\r\n }\r\n\r\n if (selectedPayment?.PaymentProvider === PaymentProvider.Barion) {\r\n redirectToBarion(response.PaymentReservationResponse.PaymentUrl);\r\n }\r\n else if (selectedPayment?.PaymentProvider === PaymentProvider.Paypal) {\r\n // TODO FINANCE redirect to PayPal \r\n }\r\n }\r\n }\r\n\r\n const onSend = async () => {\r\n let validation = validator.personalValidator.validate(reservationEndUser).isValid;\r\n\r\n if (company?.PaymentSettings.IsBillingEnabled && selectedPayment?.NeedsInvoice) {\r\n validation = validation && (validator.invoiceValidator.validate(reservationEndUser.InvoiceDetails).isValid);\r\n }\r\n\r\n const signUpValidation = !shouldSignUp || new FormValidator(signupRules).validate(reservationEndUser).isValid;\r\n setSubmitted(true);\r\n\r\n if (!validation || !signUpValidation || submitting) {\r\n setSendCondition(false);\r\n return;\r\n }\r\n\r\n setSendCondition(true);\r\n submitting = true;\r\n actions.setLoading(true);\r\n redirectAfterSend = false;\r\n }\r\n\r\n useEffect(() => {\r\n if (sendCondition) {\r\n sendReservation().then(\r\n afterSend,\r\n (reason) => {\r\n setErrorMessage(reason.errorMessage);\r\n actions.setLoading(false);\r\n submitting = false;\r\n setSendCondition(false);\r\n }\r\n );\r\n }\r\n }, [sendCondition])\r\n\r\n const [shouldSignUp, setShouldSignUp] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [validator, setValidator] = useState(createValidator(requiredFieldInfo, shouldSignUp, !!company?.TermsAndConditionsLink));\r\n const [hasOnlinePocket, setHasOnlinePocket] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState();\r\n\r\n const personalDetailsRef = createRef();\r\n const personalValidation = createValidation(validator.personalValidator, reservationEndUser, submitted)\r\n const invoiceValidation = createValidation(validator.invoiceValidator, reservationEndUser.InvoiceDetails, submitted)\r\n\r\n const showWarningPopup = (warningTextValue: MessageDescriptor) => {\r\n setWarningText(warningTextValue);\r\n setIsWarningVisible(true);\r\n }\r\n\r\n const closeWarningPopup = () => {\r\n setIsWarningVisible(false);\r\n navigate(Routes.HomeSlash);\r\n }\r\n\r\n useEffect(() => {\r\n if (!isReservationEndUserDirty(reservationEndUser)) {\r\n setReservationEndUser(createReservationEndUser(user));\r\n }\r\n if (personalDetailsRef.current) {\r\n personalDetailsRef.current.reset();\r\n }\r\n }, [user]);\r\n\r\n useEffect(() => {\r\n setValidator(createValidator(requiredFieldInfo, shouldSignUp, !!company?.TermsAndConditionsLink));\r\n }, [isAuthenticated, shouldSignUp]);\r\n\r\n useEffect(() => {\r\n if (location && location.state && location.state.reservationModels\r\n && location.state.reservationEndUser && location.state.selectedPaymentId && !isEndStep) {\r\n onEndStep();\r\n setReservationEndUser({ ...location.state.reservationEndUser, PrivacyStatementAccepted: user?.PrivacyStatementAccepted ?? false });\r\n setSelectedPayment({ Id: location.state.selectedPaymentId, Name: '', NeedsInvoice: false })\r\n reloadReservations(reservationOrder, location.state.reservationModels);\r\n location.state.reservationModels = undefined;\r\n location.state.reservationEndUser = undefined;\r\n location.state.selectedPaymentId = undefined;\r\n }\r\n else if (isReservationEndRoute && !isEndStep) {\r\n navigate({\r\n pathname: Routes.Book,\r\n search: location.search\r\n });\r\n }\r\n }, [isEndStep]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (navigationType === NavigationType.Pop && location.pathname === Routes.Book) {\r\n setActiveReservation(activeReservationIndex);\r\n }\r\n };\r\n }, [location, navigationType])\r\n\r\n useEffect(() => {\r\n setErrorMessage(undefined);\r\n }, [reservationEndUser, shouldSignUp])\r\n \r\n\r\n if (!isEndStep || !reservations) {\r\n return null;\r\n }\r\n\r\n const displayedSubtotal = company?.PaymentSettings.IsPaymentEnabled ? getSubtotal(reservations) : null;\r\n let redirectAfterSend: boolean = false;\r\n let submitting: boolean = false;\r\n\r\n const reservationEndContext: IReservationEndProvidedState = {\r\n hasOnlinePocket,\r\n selectedPayment,\r\n shouldSignUp,\r\n displayedSubtotal,\r\n actions: {\r\n setHasOnlinePocket,\r\n setSelectedPayment,\r\n setShouldSignUp\r\n }\r\n }\r\n\r\n if (!isReservationEndRoute) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n handleUserChange(value, 'PrivacyStatementAccepted')}\r\n setTermsAccepted={(value) => handleUserChange(value, 'TermsAccepted')}\r\n />\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n

\r\n \r\n

\r\n

\r\n \r\n

\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default injectIntl(ReservationEnd);\r\n","import React from 'react';\r\nimport SecondaryButton from '../../form-components/SecondaryButton/SecondaryButton';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { FormattedMessage, MessageDescriptor } from 'react-intl';\r\nimport { isMessageDescriptor } from 'src/components/form-components/helpers';\r\n\r\ninterface IStepValueProps {\r\n action: () => void;\r\n isModifiable: boolean;\r\n selectedValue?: string | MessageDescriptor;\r\n}\r\n\r\nconst StepValue: React.FunctionComponent = (props) => {\r\n const { action, selectedValue, isModifiable } = props;\r\n return <>\r\n \r\n {isMessageDescriptor(selectedValue)\r\n ? \r\n : selectedValue\r\n }\r\n \r\n {isModifiable &&\r\n \r\n }\r\n \r\n};\r\n\r\nexport default StepValue;\r\n","import { useReducer } from 'react';\r\nimport { IBookingFlowState } from 'src/models/bookingFlow';\r\nimport { ReservationOrder } from 'src/entities/company';\r\nimport { IReservationModel } from 'src/entities/reservation';\r\nimport { IReservationEndUser, IUserInvoice } from 'src/entities/user';\r\nimport { clearObsoleteStepValues } from 'src/services/bookingFlowUtils';\r\nimport getStepOrder, {\r\n StepOrderType,\r\n StepType,\r\n getMatchingStepOrderType,\r\n reloadReservationStepOrders,\r\n} from 'src/services/getStepOrder';\r\nimport { initialUserState } from '../UserDetails/UserDetails';\r\nimport { CalendarType } from 'src/entities/calendar';\r\n\r\nexport enum BookingFlowActionTypes {\r\n SET_RESERVATION_END_USER = 'SET_RESERVATION_END_USER',\r\n HANDLE_USER_CHANGE = 'HANDLE_USER_CHANGE',\r\n HANDLE_INVOICE_CHANGE = 'HANDLE_INVOICE_CHANGE',\r\n RELOAD_RESERVATIONS = 'RELOAD_RESERVATIONS',\r\n SET_RESERVATIONS = 'SET_RESERVATIONS',\r\n ADD_RESERVATION = 'ADD_RESERVATION',\r\n REMOVE_RESERVATION = 'REMOVE_RESERVATION',\r\n SET_ACTIVE_RESERVATION = 'SET_ACTIVE_RESERVATION',\r\n SET_AUTO_SELECTED = 'SET_AUTO_SELECTED',\r\n SET_STEP_ORDER_TYPES = 'SET_STEP_ORDER_TYPES',\r\n SET_ACTIVE_STEP_INDEX = 'SET_ACTIVE_STEP_INDEX',\r\n}\r\n\r\ninterface ISetReservationEndUserAction {\r\n type: BookingFlowActionTypes.SET_RESERVATION_END_USER;\r\n value: IReservationEndUser;\r\n}\r\n\r\ninterface IHandleUserChangeAction {\r\n type: BookingFlowActionTypes.HANDLE_USER_CHANGE;\r\n value: { value: unknown; name: keyof IReservationEndUser };\r\n}\r\n\r\ninterface IHandleInvoiceChangeAction {\r\n type: BookingFlowActionTypes.HANDLE_INVOICE_CHANGE;\r\n value: { value: unknown; name: keyof IUserInvoice };\r\n}\r\n\r\ninterface IReloadReservationsAction {\r\n type: BookingFlowActionTypes.RELOAD_RESERVATIONS;\r\n value: { reservationOrder: ReservationOrder; newReservations: IReservationModel[] };\r\n}\r\n\r\ninterface ISetReservationsAction {\r\n type: BookingFlowActionTypes.SET_RESERVATIONS;\r\n value: { stepType: StepType; value: IReservationModel };\r\n}\r\n\r\ninterface IAddReservationAction {\r\n type: BookingFlowActionTypes.ADD_RESERVATION;\r\n value: { stepOrderType: StepOrderType };\r\n}\r\n\r\ninterface IRemoveReservationAction {\r\n type: BookingFlowActionTypes.REMOVE_RESERVATION;\r\n value: number | undefined;\r\n}\r\n\r\ninterface ISetActiveReservationAction {\r\n type: BookingFlowActionTypes.SET_ACTIVE_RESERVATION;\r\n value: number;\r\n}\r\n\r\ninterface ISetAutoSelectedAction {\r\n type: BookingFlowActionTypes.SET_AUTO_SELECTED;\r\n}\r\n\r\ninterface ISetStepOrderTypesAction {\r\n type: BookingFlowActionTypes.SET_STEP_ORDER_TYPES;\r\n value: { stepType: StepType; value: IReservationModel };\r\n}\r\n\r\ninterface ISetActiveStepIndexAction {\r\n type: BookingFlowActionTypes.SET_ACTIVE_STEP_INDEX;\r\n value: number;\r\n}\r\n\r\nexport type BookingFlowActions =\r\n | ISetReservationEndUserAction\r\n | IHandleUserChangeAction\r\n | IHandleInvoiceChangeAction\r\n | IReloadReservationsAction\r\n | ISetReservationsAction\r\n | IAddReservationAction\r\n | IRemoveReservationAction\r\n | ISetActiveReservationAction\r\n | ISetAutoSelectedAction\r\n | ISetStepOrderTypesAction\r\n | ISetActiveStepIndexAction;\r\n\r\nexport const bookingFlowReducer = (\r\n state: IBookingFlowState,\r\n action: BookingFlowActions\r\n): IBookingFlowState => {\r\n switch (action.type) {\r\n case BookingFlowActionTypes.SET_RESERVATION_END_USER: {\r\n return { ...state, reservationEndUser: action.value };\r\n }\r\n\r\n case BookingFlowActionTypes.HANDLE_USER_CHANGE: {\r\n return {\r\n ...state,\r\n reservationEndUser: {\r\n ...state.reservationEndUser,\r\n [action.value.name]: action.value.value,\r\n },\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.HANDLE_INVOICE_CHANGE: {\r\n return {\r\n ...state,\r\n reservationEndUser: {\r\n ...state.reservationEndUser,\r\n InvoiceDetails: {\r\n ...state.reservationEndUser.InvoiceDetails,\r\n [action.value.name]: action.value.value,\r\n ...(action.value.name === 'PrivatePerson' && action.value.value\r\n ? { TaxNumber: '' }\r\n : {}),\r\n },\r\n },\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.RELOAD_RESERVATIONS: {\r\n const { reservationOrder, newReservations } = action.value;\r\n const newStepOrderTypes = reloadReservationStepOrders(\r\n reservationOrder,\r\n newReservations\r\n );\r\n const newActiveReservationIndex = newReservations.length - 1;\r\n const newActiveStepIndex =\r\n getStepOrder(newStepOrderTypes[newActiveReservationIndex]).length - 1;\r\n\r\n return {\r\n ...state,\r\n reservations: newReservations,\r\n stepOrderTypes: newStepOrderTypes,\r\n activeReservationIndex: newActiveReservationIndex,\r\n activeStepIndex: newActiveStepIndex,\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.SET_RESERVATIONS: {\r\n const { activeReservationIndex, reservations, stepOrderTypes } = state;\r\n const { stepType, value } = action.value;\r\n const currentReservation = reservations[activeReservationIndex];\r\n const currentStepOrder = stepOrderTypes[activeReservationIndex];\r\n\r\n const newReservation = { ...currentReservation, ...value };\r\n const newReservations = [...reservations];\r\n newReservations[activeReservationIndex] = clearObsoleteStepValues(\r\n stepType,\r\n currentStepOrder,\r\n newReservation,\r\n currentReservation\r\n );\r\n\r\n return { ...state, reservations: newReservations };\r\n }\r\n\r\n case BookingFlowActionTypes.ADD_RESERVATION: {\r\n return {\r\n ...state,\r\n reservations: [\r\n ...state.reservations,\r\n {\r\n searchParams: {\r\n CalendarId: 'unset',\r\n ServiceId: 'unset',\r\n Date: 'unset',\r\n },\r\n },\r\n ],\r\n hasAutoSelected: false,\r\n activeReservationIndex: state.reservations.length,\r\n activeStepIndex: 0,\r\n stepOrderTypes: [...state.stepOrderTypes, action.value.stepOrderType],\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.REMOVE_RESERVATION: {\r\n const removableIndex = action.value ?? state.activeReservationIndex;\r\n const removedReservations = state.reservations.filter(\r\n (_, i: number) => i !== removableIndex\r\n );\r\n const removedStepOrderTypes = state.stepOrderTypes.filter(\r\n (_, i: number) => i !== removableIndex\r\n );\r\n\r\n return {\r\n ...state,\r\n reservations: removedReservations,\r\n activeReservationIndex: removedReservations.length - 1,\r\n stepOrderTypes: removedStepOrderTypes,\r\n activeStepIndex:\r\n getStepOrder(removedStepOrderTypes[removedReservations.length - 1]).length - 1,\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.SET_ACTIVE_RESERVATION: {\r\n const currentStepOrder = getStepOrder(state.stepOrderTypes[action.value]);\r\n const newActiveStepIndex =\r\n (currentStepOrder.indexOf(StepType.Timetable) + 1 ||\r\n currentStepOrder.indexOf(StepType.Date) + 1) - 1;\r\n\r\n return {\r\n ...state,\r\n activeReservationIndex: action.value,\r\n activeStepIndex: newActiveStepIndex,\r\n };\r\n }\r\n\r\n case BookingFlowActionTypes.SET_AUTO_SELECTED: {\r\n return { ...state, hasAutoSelected: true };\r\n }\r\n\r\n case BookingFlowActionTypes.SET_STEP_ORDER_TYPES: {\r\n const { stepOrderTypes, activeReservationIndex } = state;\r\n const { stepType, value } = action.value;\r\n const calendar = value[StepType.Calendar];\r\n const service = value[StepType.Service] || value[StepType.Timetable]?.service;\r\n const newStepOrderTypes = [...stepOrderTypes];\r\n let newStepOrderType = newStepOrderTypes[activeReservationIndex];\r\n\r\n if (stepType === StepType.Calendar) {\r\n if (calendar?.Type === CalendarType.Timetable) {\r\n newStepOrderType = StepOrderType.Timetable;\r\n } else if (\r\n calendar?.Type === CalendarType.Classic &&\r\n (newStepOrderType === StepOrderType.Timetable ||\r\n newStepOrderType === StepOrderType.TimetableWithQuestions)\r\n ) {\r\n newStepOrderType = StepOrderType.CalendarFirst;\r\n }\r\n\r\n newStepOrderTypes[activeReservationIndex] = newStepOrderType;\r\n }\r\n\r\n if ((stepType === StepType.Service || stepType === StepType.Timetable) && service) {\r\n newStepOrderTypes[activeReservationIndex] = getMatchingStepOrderType(\r\n newStepOrderType,\r\n service.HasQuestions || service.HasArriveTime\r\n );\r\n }\r\n\r\n return { ...state, stepOrderTypes: newStepOrderTypes };\r\n }\r\n\r\n case BookingFlowActionTypes.SET_ACTIVE_STEP_INDEX: {\r\n return { ...state, activeStepIndex: action.value };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const useBookingFlowReducer = (stepOrderType: StepOrderType) => {\r\n const [state, dispatch] = useReducer(bookingFlowReducer, {\r\n stepOrderTypes: [stepOrderType],\r\n reservations: [\r\n {\r\n searchParams: {\r\n CalendarId: 'unset',\r\n ServiceId: 'unset',\r\n Date: 'unset',\r\n },\r\n },\r\n ],\r\n activeReservationIndex: 0,\r\n hasAutoSelected: false,\r\n activeStepIndex: 0,\r\n reservationEndUser: initialUserState,\r\n actions: {\r\n setReservationEndUser: () => undefined,\r\n handleUserChange: () => undefined,\r\n handleInvoiceChange: () => undefined,\r\n reloadReservations: () => undefined,\r\n setReservationModel: () => undefined,\r\n addNewReservation: () => undefined,\r\n removeReservation: () => undefined,\r\n setActiveReservation: () => undefined,\r\n autoSelected: () => undefined,\r\n },\r\n });\r\n\r\n const setReservationEndUser = (value: IReservationEndUser) => {\r\n dispatch({ type: BookingFlowActionTypes.SET_RESERVATION_END_USER, value });\r\n };\r\n const handleUserChange = (value: unknown, name: keyof IReservationEndUser) => {\r\n dispatch({ type: BookingFlowActionTypes.HANDLE_USER_CHANGE, value: { value, name } });\r\n };\r\n const handleInvoiceChange = (value: unknown, name: keyof IUserInvoice) => {\r\n dispatch({ type: BookingFlowActionTypes.HANDLE_INVOICE_CHANGE, value: { value, name } });\r\n };\r\n const reloadReservations = (\r\n reservationOrder: ReservationOrder,\r\n newReservations: IReservationModel[]\r\n ) => {\r\n dispatch({\r\n type: BookingFlowActionTypes.RELOAD_RESERVATIONS,\r\n value: { reservationOrder, newReservations },\r\n });\r\n };\r\n const setReservations = (stepType: StepType, value: IReservationModel) => {\r\n dispatch({\r\n type: BookingFlowActionTypes.SET_RESERVATIONS,\r\n value: { stepType, value },\r\n });\r\n };\r\n const addNewReservation = () => {\r\n dispatch({ type: BookingFlowActionTypes.ADD_RESERVATION, value: { stepOrderType } });\r\n };\r\n const removeReservation = (index?: number) => {\r\n dispatch({ type: BookingFlowActionTypes.REMOVE_RESERVATION, value: index });\r\n };\r\n const setActiveReservation = (value: number) => {\r\n dispatch({ type: BookingFlowActionTypes.SET_ACTIVE_RESERVATION, value });\r\n };\r\n const autoSelected = () => {\r\n dispatch({ type: BookingFlowActionTypes.SET_AUTO_SELECTED });\r\n };\r\n const setStepOrderTypes = (stepType: StepType, value: IReservationModel) => {\r\n dispatch({ type: BookingFlowActionTypes.SET_STEP_ORDER_TYPES, value: { stepType, value } });\r\n };\r\n const setReservationModel = (stepType: StepType, value: IReservationModel) => {\r\n setReservations(stepType, value);\r\n setStepOrderTypes(stepType, value);\r\n };\r\n const setActiveStepIndex = (value: number) => {\r\n dispatch({ type: BookingFlowActionTypes.SET_ACTIVE_STEP_INDEX, value });\r\n };\r\n\r\n return {\r\n state: {\r\n ...state,\r\n actions: {\r\n setReservationEndUser,\r\n handleUserChange,\r\n handleInvoiceChange,\r\n reloadReservations,\r\n setReservationModel,\r\n addNewReservation,\r\n removeReservation,\r\n setActiveReservation,\r\n autoSelected,\r\n setActiveStepIndex,\r\n },\r\n },\r\n };\r\n};\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport { MessageDescriptor } from 'react-intl';\r\nimport { IReservationModel } from '../../../entities/reservation';\r\nimport { StepType } from '../../../services/getStepOrder';\r\nimport StepNumber from '../StepNumber/StepNumber';\r\nimport StepValue from '../StepValue/StepValue';\r\nimport JumpToEnd, { PendingJumpType } from '../JumpToEnd/JumpToEnd';\r\nimport { useContext, useState, useEffect } from 'react';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { Routes } from 'src/routes';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { IStepModuleProps } from 'src/models/modules';\r\nimport { motion } from 'framer-motion';\r\nimport { isAppointmentCalendar } from 'src/entities/calendar';\r\nimport { scrollToStep } from 'src/services/scrollerFunctions';\r\nimport { BookingContext, IBookingFlowProvidedState } from 'src/contexts/BookingFlowContext';\r\n\r\nexport interface IStepState {\r\n isModifiable: boolean;\r\n}\r\n\r\nexport interface IStepProps {\r\n isActive: boolean;\r\n isCompleted: boolean;\r\n isLast: boolean;\r\n isProgressBarHidden?: boolean;\r\n name: MessageDescriptor;\r\n content: React.FC;\r\n step: StepType;\r\n stepIndex: number;\r\n nextHandler: () => void;\r\n jumpToEndHandler: () => void;\r\n modifyHandler: (stepIndex: number) => void;\r\n}\r\n\r\nexport const getStepSelectedValue = (step: StepType, reservation: IReservationModel = {}): string | MessageDescriptor => {\r\n if (step === StepType.Calendar && !reservation[step]) {\r\n return globalMessages.whichever\r\n }\r\n const currentStep = step as keyof Omit;\r\n return reservation[currentStep] && reservation[currentStep]?.displayValue || '';\r\n}\r\n\r\nconst isEverySearchParamSet = (searchParams: IReservationModel['searchParams']) =>\r\n searchParams && !Object.values(searchParams).includes('unset')\r\n\r\nconst variants: React.ComponentProps['variants'] = {\r\n visible: { opacity: 1, height: 'auto', overflow: 'hidden', transitionEnd: { overflow: 'visible' }, transition: { duration: 1 } },\r\n hidden: { opacity: 0, height: 0, overflow: 'hidden', transitionEnd: { overflow: 'hidden' }, transition: { duration: 0.5 } },\r\n}\r\n\r\nconst Navigator: React.FunctionComponent<{ isOpen: boolean, index: number }> = ({ isOpen, index }) => {\r\n useEffect(() => {\r\n if (isOpen && index > 0) {\r\n setTimeout(() => {\r\n scrollToStep(index);\r\n }, 0);\r\n }\r\n }, [isOpen, index])\r\n\r\n return null;\r\n}\r\n\r\nconst Step: React.FunctionComponent = (\r\n { content, name, nextHandler, isActive, step, modifyHandler, isCompleted, stepIndex, isLast, isProgressBarHidden, jumpToEndHandler }\r\n) => {\r\n\r\n const context: IBookingFlowProvidedState = useContext(BookingContext);\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n const isHomeSlashRoute = location.pathname === Routes.HomeSlash;\r\n\r\n const [isModifiable, setIsModifiable] = useState(true);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const reservationData = context.reservations[context.activeReservationIndex] || {\r\n searchParams: {\r\n CalendarId: 'unset',\r\n ServiceId: 'unset',\r\n Date: 'unset'\r\n }\r\n };\r\n\r\n const bookingStepClasses = classNames(\r\n 'booking-step',\r\n { 'booking-step--touched': isActive || isCompleted },\r\n { 'booking-step--progress-bar-hidden': isProgressBarHidden },\r\n {\r\n 'booking-step--full-width':\r\n step === StepType.Timetable\r\n || step === StepType.Date && isAppointmentCalendar(reservationData[StepType.Calendar])\r\n },\r\n { 'booking-step--last': isLast }\r\n )\r\n\r\n const selectedValue = getStepSelectedValue(step, reservationData);\r\n const showReservationsNumber = context.reservations.length > 1 && isLast;\r\n\r\n const onCompleteHandler = (value: IReservationModel, hasSkipped?: boolean) => {\r\n if (!hasSkipped && isHomeSlashRoute) {\r\n navigate({\r\n pathname: Routes.Book,\r\n search: location.search\r\n })\r\n }\r\n\r\n context.actions.setReservationModel(step, value);\r\n if (!context.hasAutoSelected && isEverySearchParamSet(value.searchParams)) {\r\n context.actions.autoSelected();\r\n }\r\n setIsModifiable(!hasSkipped)\r\n nextHandler();\r\n }\r\n\r\n const isOpen = isActive && !isLoading;\r\n\r\n return (\r\n
\r\n \r\n {isProgressBarHidden || }\r\n
\r\n \r\n
\r\n {content({\r\n isActive,\r\n isFirst: stepIndex === 0,\r\n data: reservationData,\r\n onComplete: onCompleteHandler,\r\n onIsModifiable: setIsModifiable,\r\n onLoadingChanged: setIsLoading\r\n })}\r\n
\r\n \r\n {(isCompleted && !isActive || showReservationsNumber) &&\r\n \r\n {showReservationsNumber\r\n ? \r\n : modifyHandler(stepIndex)}\r\n isModifiable={isModifiable}\r\n />\r\n }\r\n \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Step;\r\n","import React, { useContext } from 'react';\r\nimport { IStepModuleProps, ModuleSearchParam } from '../../../models/modules';\r\nimport { ISearchParams } from 'src/entities/reservation';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport interface ISearchParamsOptions {\r\n paramName: ModuleSearchParam;\r\n}\r\n\r\nconst withSearchParams =

(\r\n WrappedComponent: React.ComponentType

,\r\n options: ISearchParamsOptions\r\n) => {\r\n const WithSearchParams: React.FC

= (props) => {\r\n const context = useContext(BookingContext);\r\n const searchParam = !context.hasAutoSelected\r\n ? new URLSearchParams(window.location.search).get(options.paramName)\r\n : null;\r\n\r\n const searchParams = props.data.searchParams\r\n ? { ...props.data.searchParams, [options.paramName]: searchParam }\r\n : { [options.paramName]: searchParam };\r\n\r\n const extendedData = { ...props.data, searchParams };\r\n\r\n const newProps = { ...props, data: extendedData };\r\n\r\n return ;\r\n };\r\n\r\n return WithSearchParams;\r\n};\r\n\r\nexport const getDateParam = (searchParams?: ISearchParams): string | undefined => {\r\n return searchParams?.Date || undefined;\r\n};\r\n\r\nexport default withSearchParams;\r\n","import React from 'react';\r\nimport CustomScroll from 'react-custom-scroll';\r\nimport { FormattedDate, FormattedMessage } from 'react-intl';\r\nimport { ICalendar } from 'src/entities/calendar';\r\nimport PrimaryButton from '../form-components/PrimaryButton/PrimaryButton';\r\nimport SecondaryButton from '../form-components/SecondaryButton/SecondaryButton';\r\nimport { IPopupable } from '../Popup/Popup';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { useStyleLinks } from 'src/hooks';\r\nimport { useRef } from 'react';\r\n\r\ninterface ICalendarDescriptionProps extends IPopupable {\r\n calendar: ICalendar;\r\n firstFreeSlot: Date | null;\r\n startReservation: () => void;\r\n}\r\n\r\nconst CalendarDescription: React.FunctionComponent = props => {\r\n const { Description } = props.calendar;\r\n const { firstFreeSlot, closePopup, startReservation } = props;\r\n const handleOk = () => {\r\n closePopup?.();\r\n startReservation();\r\n }\r\n\r\n const bodyRef = useRef(null);\r\n useStyleLinks(bodyRef);\r\n\r\n return (\r\n

\r\n {firstFreeSlot &&\r\n

\r\n {': '}\r\n \r\n

\r\n }\r\n {Description &&\r\n \r\n
\r\n \r\n }\r\n
\r\n {closePopup && }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default CalendarDescription;","import React from 'react';\r\nimport { FormattedDate, FormattedMessage } from 'react-intl';\r\nimport { ICalendarBase, ICalendar, isRandomCalendar } from '../../../../../entities/calendar';\r\nimport { getCalendarFirstFreeSlot } from '../../../../../services/api/calendar';\r\nimport CalendarDescription from '../../../../CalendarDescription/CalendarDescription';\r\nimport Image from '../../../../Image/Image';\r\nimport Popup from '../../../../Popup/Popup';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { useContext, useCallback, useState } from 'react';\r\nimport { useSubscription } from 'src/hooks';\r\nimport { getServiceFirstFreeSlot } from 'src/services/api/service';\r\nimport { IServiceDetails } from 'src/entities/service';\r\nimport { Bone, TextSkeleton, ParagraphSkeleton } from 'src/components/Placeholder/Placeholder';\r\nimport { ButtonSkeleton } from 'src/components/form-components/Button/Button';\r\nimport { AppContext, IAppProvidedState } from 'src/contexts/AppContext';\r\n\r\ninterface ICalendarItemProps {\r\n calendar: ICalendar;\r\n service?: IServiceDetails;\r\n button: React.ReactElement;\r\n selectCalendar: (calendar: ICalendarBase) => void;\r\n withLogoSpace: boolean;\r\n}\r\n\r\nconst CalendarItem: React.FunctionComponent = ({ calendar, service, withLogoSpace, button, selectCalendar }) => {\r\n const [isLongDescriptionVisible, setIsLongDescriptionVisible] = useState(false);\r\n\r\n const { company } = useContext(AppContext);\r\n\r\n const fetchFirstFreeSlot = useCallback(async () => {\r\n if (!company?.ShouldDisplayFirstTime) {\r\n return;\r\n }\r\n\r\n if (isRandomCalendar(calendar.Id)) {\r\n if (!service) {\r\n return;\r\n }\r\n return getServiceFirstFreeSlot(service.Id);\r\n }\r\n\r\n if (button.props.isFirstStep) {\r\n return getCalendarFirstFreeSlot(calendar.Id);\r\n }\r\n\r\n return getCalendarFirstFreeSlot(calendar.Id, service?.Id);\r\n }, [calendar.Id, company?.ShouldDisplayFirstTime]);\r\n\r\n const [firstFreeSlot, isLoading] = useSubscription(fetchFirstFreeSlot);\r\n\r\n return (\r\n
\r\n {calendar.PictureLink\r\n ? \r\n : withLogoSpace &&
\r\n }\r\n
\r\n

\r\n {isRandomCalendar(calendar.Id) ?\r\n \r\n : calendar.Name}\r\n

\r\n
\r\n {(firstFreeSlot || isLoading)\r\n && <>\r\n \r\n \r\n \r\n {isLoading\r\n ? \r\n : }\r\n \r\n }\r\n
\r\n
\r\n {button}\r\n {\r\n (calendar.ShortDescription || calendar.Description) &&\r\n
\r\n {calendar.ShortDescription &&\r\n

{calendar.ShortDescription}

\r\n }\r\n {calendar.Description &&\r\n <>\r\n \r\n setIsLongDescriptionVisible(false)}\r\n title={calendar.Name}>\r\n selectCalendar(calendar)} />\r\n \r\n \r\n }\r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport const CalendarItemSkeleton = () =>\r\n
\r\n \r\n
\r\n
\r\n \r\n {'Skeleton calendar'}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\nexport default CalendarItem;","import React from 'react';\r\nimport SecondaryButton from 'src/components/form-components/SecondaryButton/SecondaryButton';\r\nimport PrimaryButton from 'src/components/form-components/PrimaryButton/PrimaryButton';\r\nimport { defineMessages } from 'react-intl';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { IButtonProps } from 'src/components/form-components/Button/Button';\r\n\r\nconst messages = defineMessages({\r\n keepSelected: {\r\n id: 'keepSelected',\r\n defaultMessage: 'Maradjon'\r\n }\r\n})\r\n\r\nconst getSelectCaption = (isFirstStep?: boolean) =>\r\n isFirstStep ? globalMessages.firstStepAction : globalMessages.next\r\n\r\ninterface ISelectButtonProps extends Omit {\r\n selected: boolean;\r\n isFirstStep: boolean;\r\n}\r\n\r\nconst SelectButton: React.FC = ({ selected, isFirstStep, onClick }) =>\r\n !selected\r\n ? \r\n : \r\n\r\nexport default SelectButton","import React, { useEffect, useRef, useState } from 'react';\r\nimport { IReservationModel } from 'src/entities/reservation';\r\nimport { ICalendarBase, ICalendar, randomCalendarItem } from '../../../../entities/calendar';\r\nimport { IStepModuleProps, ModuleSearchParam } from '../../../../models/modules';\r\nimport { getCalendars, getCalendarsByService } from '../../../../services/api/calendar';\r\nimport makeCancelable, { ICancelablePromise } from '../../../../services/cancelablePromise';\r\nimport { StepType } from '../../../../services/getStepOrder';\r\nimport withSearchParams, { ISearchParamsOptions } from '../withSearchParams';\r\nimport CalendarItem, { CalendarItemSkeleton } from './CalendarItem/CalendarItem';\r\nimport AvailabilityWarning from 'src/components/AvailabilityWarning';\r\nimport { isSame } from 'src/entities/common';\r\nimport SelectButton from '../SelectButton';\r\n\r\ninterface ICalendarSelectProps extends IStepModuleProps {\r\n shouldGetByService?: boolean;\r\n hasRandomCalendar?: boolean;\r\n canUserSelectCalendar?: boolean;\r\n}\r\n\r\nconst searchParamsOptions: ISearchParamsOptions = {\r\n paramName: ModuleSearchParam.CalendarId,\r\n};\r\n\r\nexport const CalendarSelect: React.FC = ({\r\n isActive,\r\n isFirst,\r\n data,\r\n shouldGetByService,\r\n hasRandomCalendar,\r\n canUserSelectCalendar,\r\n onIsModifiable,\r\n onLoadingChanged,\r\n onComplete = () =>\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n 'CalendarSelect module onComplete event is not set, please attach an event handler'\r\n ),\r\n}) => {\r\n const prevProps = useRef({ data });\r\n const calendarsSubscription = useRef>();\r\n const service = data[StepType.Service];\r\n const selectedCalendar = data[StepType.Calendar] as ICalendar | undefined;\r\n const [calendars, setCalendars] = useState([]);\r\n const [hasLoaded, setHasLoaded] = useState(false);\r\n const [prevHasLoaded, setPrevHasLoaded] = useState(false);\r\n const [shouldPreSelect, setShouldPreSelect] = useState(false);\r\n const [shouldCheckSelectedCalendar, setShouldCheckSelectedCalendar] = useState(false);\r\n const [shouldFetchWhenUpdate, setShouldFetchWhenUpdate] = useState(false);\r\n const hasAnyLogo = calendars.some((calendar) => calendar.PictureLink);\r\n\r\n const selectCalendar = (calendar: ICalendar, hasSkipped?: boolean) => {\r\n if (isActive) {\r\n onComplete(createSelectedCalendar(calendar), !canUserSelectCalendar || hasSkipped);\r\n }\r\n };\r\n\r\n const checkSelectedCalendar = () => {\r\n if (!data[StepType.Calendar]) {\r\n const searchCalendar = getSearchCalendar();\r\n if (searchCalendar) {\r\n const calendar = calendars.find((c) => c.Id === +searchCalendar);\r\n if (calendar) {\r\n selectCalendar(calendar);\r\n } else {\r\n setCalendars([]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const fetchCalendars = async () => {\r\n setHasLoaded(false);\r\n if (shouldGetByService && service) {\r\n calendarsSubscription.current = makeCancelable(getCalendarsByService(service.Id));\r\n } else {\r\n calendarsSubscription.current = makeCancelable(getCalendars());\r\n }\r\n\r\n calendarsSubscription.current.promise\r\n .then((calendarList) => {\r\n if (hasRandomCalendar && calendarList.length > 1) {\r\n calendarList = [randomCalendarItem, ...calendarList];\r\n }\r\n setCalendars(calendarList);\r\n setHasLoaded(true);\r\n setShouldCheckSelectedCalendar(true);\r\n })\r\n .catch(() => null);\r\n };\r\n\r\n const createSelectedCalendar = (calendar: ICalendar): IReservationModel => {\r\n if (calendar.Id <= 0) {\r\n return {\r\n ...data,\r\n [StepType.Calendar]: undefined,\r\n };\r\n }\r\n return {\r\n ...data,\r\n [StepType.Calendar]: {\r\n ...calendar,\r\n displayValue: calendar.Name,\r\n },\r\n };\r\n };\r\n\r\n const preSelect = () => {\r\n if (isActive && hasLoaded && hasSingleEmptyCalendar()) {\r\n selectCalendar(calendars[0], true);\r\n }\r\n };\r\n\r\n const isCalendarEmpty = (calendar: ICalendar) => {\r\n return !calendar.PictureLink && !calendar.ShortDescription && !calendar.Description;\r\n };\r\n\r\n const hasSingleEmptyCalendar = () => {\r\n return calendars.length === 1 && isCalendarEmpty(calendars[0]);\r\n };\r\n\r\n const getSearchCalendar = () => {\r\n const searchCalendar = data?.searchParams?.CalendarId;\r\n return searchCalendar ?? null;\r\n };\r\n\r\n const handleCanUserSelectCalendar = (): boolean => {\r\n if (!canUserSelectCalendar) {\r\n if (onIsModifiable) {\r\n onIsModifiable(false);\r\n }\r\n const searchCalendar = getSearchCalendar();\r\n if (!searchCalendar) {\r\n setHasLoaded(true);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n if (handleCanUserSelectCalendar()) {\r\n return;\r\n }\r\n if (!isActive) {\r\n setShouldFetchWhenUpdate(true);\r\n return;\r\n }\r\n fetchCalendars();\r\n\r\n return () => {\r\n calendarsSubscription.current?.cancel();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (shouldFetchWhenUpdate) {\r\n fetchCalendars();\r\n setShouldFetchWhenUpdate(false);\r\n }\r\n\r\n const serviceChanged = !isSame(\r\n prevProps.current.data[StepType.Service],\r\n data[StepType.Service]\r\n );\r\n if (shouldGetByService && serviceChanged) {\r\n if (handleCanUserSelectCalendar()) {\r\n prevProps.current = { data };\r\n return;\r\n }\r\n fetchCalendars().then(() => setShouldPreSelect(true));\r\n } else {\r\n if (canUserSelectCalendar && onIsModifiable && data[StepType.Service]) {\r\n onIsModifiable(!hasSingleEmptyCalendar());\r\n }\r\n\r\n setShouldPreSelect(true);\r\n }\r\n\r\n if (prevHasLoaded !== hasLoaded) {\r\n onLoadingChanged?.(!hasLoaded);\r\n }\r\n\r\n prevProps.current = { data };\r\n setPrevHasLoaded(hasLoaded);\r\n }, [shouldFetchWhenUpdate, data, shouldGetByService, canUserSelectCalendar, hasLoaded]);\r\n\r\n useEffect(() => {\r\n if (shouldCheckSelectedCalendar) {\r\n checkSelectedCalendar();\r\n setShouldCheckSelectedCalendar(false);\r\n }\r\n }, [shouldCheckSelectedCalendar]);\r\n\r\n useEffect(() => {\r\n if (shouldPreSelect) {\r\n preSelect();\r\n setShouldPreSelect(false);\r\n }\r\n }, [shouldPreSelect])\r\n \r\n\r\n if (!hasLoaded) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!calendars.length) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n {calendars.map((calendar) => (\r\n selectCalendar(calendar)}\r\n selected={selectedCalendar?.Id === calendar.Id}\r\n />\r\n }\r\n selectCalendar={selectCalendar}\r\n withLogoSpace={hasAnyLogo}\r\n />\r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default withSearchParams(\r\n CalendarSelect,\r\n searchParamsOptions\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { IStepModuleProps } from 'src/models/modules';\r\nimport { StepValue, IReservationModel } from 'src/entities/reservation';\r\nimport { StepType } from 'src/services/getStepOrder';\r\n\r\ninterface IMockModuleComponentProps extends IStepModuleProps {\r\n name: StepType;\r\n}\r\n\r\nconst MockModule: React.FC = ({ data, name, onComplete }) => {\r\n const [value, setValue] = useState('');\r\n const handleInputChange = (event: React.ChangeEvent) => {\r\n setValue(event.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n const stepData: StepValue | undefined =\r\n data[name as keyof Omit];\r\n setValue(stepData ? stepData.displayValue : '');\r\n }, []);\r\n\r\n return (\r\n
\r\n

{name} component

\r\n \r\n \r\n onComplete({\r\n [name]: {\r\n Id: 1,\r\n Type: 1,\r\n Name: 'Calendar 1',\r\n displayValue: value,\r\n },\r\n })\r\n }\r\n >\r\n Next\r\n \r\n
\r\n

\r\n Lorem Ipsum egy egyszerû szövegrészlete, szövegutánzata a betûszedõ és\r\n nyomdaiparnak. A Lorem Ipsum az 1500-as évek óta standard szövegrészletként\r\n szolgált az iparban; mikor egy ismeretlen nyomdász összeállította a\r\n betûkészletét és egy példa-könyvet vagy szöveget nyomott papírra, ezt használta.\r\n Nem csak 5 évszázadot élt túl, de az elektronikus betûkészleteknél is\r\n változatlanul megmaradt. Az 1960-as években népszerûsítették a Lorem Ipsum\r\n részleteket magukbafoglaló Letraset lapokkal, és legutóbb softwarekkel mint\r\n például az Aldus Pagemaker.\r\n

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MockModule;\r\n","import React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\nimport Popup from 'src/components/Popup/Popup';\r\nimport ServiceDescription from 'src/components/ServiceDescription/ServiceDescription';\r\nimport { calculateGrossPrice, IService, IServiceDetails } from '../../../../../entities/service';\r\nimport Image from '../../../../Image/Image';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport FormattedPrice from '../FormattedPrice/FormattedPrice';\r\nimport { useState } from 'react';\r\nimport { CalendarItemSkeleton } from '../../CalendarSelect/CalendarItem/CalendarItem';\r\n\r\ninterface IServiceItemProps {\r\n service: IServiceDetails;\r\n selectService: (service: IService) => void;\r\n button: React.ReactElement;\r\n withLogoSpace: boolean;\r\n needsPayment?: boolean;\r\n}\r\n\r\nconst ServiceItem: React.FC = ({ service, selectService, button, withLogoSpace, needsPayment }) => {\r\n\r\n const [isLongDescriptionShown, setIsLongDescriptionShown] = useState(false);\r\n\r\n const { PictureLink, Name, IsDurationVisible, DurationToUser, ShortDescription, Description, DisplayedPrice, DisplayedCurrency, Price, Currency, PaymentMethod, VatPercentage } = service;\r\n\r\n return (\r\n
\r\n {PictureLink ?\r\n \r\n : withLogoSpace &&
\r\n }\r\n
\r\n

{Name}

\r\n

\r\n \r\n {IsDurationVisible &&\r\n \r\n \r\n \r\n }\r\n {DisplayedPrice &&\r\n \r\n \r\n \r\n }\r\n {needsPayment &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n

\r\n
\r\n {button}\r\n {(ShortDescription || Description) &&\r\n
\r\n {ShortDescription &&\r\n

\r\n {ShortDescription}\r\n

\r\n }\r\n {Description &&\r\n <>\r\n \r\n setIsLongDescriptionShown(false)}\r\n title={service.Name}>\r\n selectService(service)}\r\n needsPayment={needsPayment}\r\n />\r\n \r\n \r\n }\r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport const ServiceItemSkeleton = CalendarItemSkeleton;\r\n\r\nexport default ServiceItem;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { IStepModuleProps, ModuleSearchParam } from '../../../../models/modules';\r\nimport { IReservationModel } from '../../../../entities/reservation';\r\nimport { IService, IServiceDetails } from '../../../../entities/service';\r\nimport { getServices, getServicesByCalendar } from '../../../../services/api/service';\r\nimport makeCancelable, { ICancelablePromise } from '../../../../services/cancelablePromise';\r\nimport { StepType } from '../../../../services/getStepOrder';\r\nimport withSearchParams, { ISearchParamsOptions } from '../withSearchParams';\r\nimport ServiceItem, { ServiceItemSkeleton } from './ServiceItem/ServiceItem';\r\nimport AvailabilityWarning from 'src/components/AvailabilityWarning';\r\nimport { isSame } from 'src/entities/common';\r\nimport SelectButton from '../SelectButton';\r\nimport { getPaymentNeed } from '../../ReservationEnd/functions/helperFunctions';\r\n\r\ninterface IServiceSelectProps extends IStepModuleProps {\r\n shouldGetByCalendar?: boolean;\r\n isPaymentEnabled?: boolean;\r\n}\r\n\r\nconst searchParamsOptions: ISearchParamsOptions = {\r\n paramName: ModuleSearchParam.ServiceId,\r\n};\r\n\r\nexport const ServiceSelect: React.FC = ({\r\n shouldGetByCalendar,\r\n isPaymentEnabled,\r\n data,\r\n isActive,\r\n isFirst,\r\n onComplete = () =>\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n 'ServiceSelect module onComplete event is not set, please attach an event handler'\r\n ),\r\n onIsModifiable,\r\n onLoadingChanged,\r\n}) => {\r\n const servicesSubscription = useRef>();\r\n const selectedService = data[StepType.Service] as IServiceDetails;\r\n const [services, setServices] = useState([]);\r\n const [hasLoaded, setHasLoaded] = useState(false);\r\n const [prevHasLoaded, setPrevHasLoaded] = useState(false);\r\n const [shouldPreSelect, setShouldPreSelect] = useState(false);\r\n const hasAnyLogo = services.some((service) => service.PictureLink);\r\n const prevProps = useRef({ isActive, data });\r\n\r\n const fetchServices = async () => {\r\n setHasLoaded(false);\r\n\r\n const calendar = data[StepType.Calendar];\r\n\r\n if (shouldGetByCalendar && calendar) {\r\n servicesSubscription.current = makeCancelable(\r\n getServicesByCalendar(calendar.Id)\r\n );\r\n } else {\r\n servicesSubscription.current = makeCancelable(getServices(true));\r\n }\r\n try {\r\n const servicesFormSubscription = await servicesSubscription.current.promise;\r\n setServices(servicesFormSubscription);\r\n setHasLoaded(true);\r\n } catch (err) {\r\n return;\r\n }\r\n };\r\n\r\n const selectService = (service: IServiceDetails, hasSkipped?: boolean) => {\r\n if (isActive) {\r\n onComplete(createSelectedService(service), hasSkipped);\r\n }\r\n };\r\n\r\n const createSelectedService = (service: IServiceDetails): IReservationModel => ({\r\n ...data,\r\n [StepType.Service]: {\r\n ...service,\r\n displayValue: service.Name,\r\n },\r\n });\r\n\r\n const checkSelectedService = () => {\r\n if (!data[StepType.Service]) {\r\n const { searchParams } = data;\r\n if (searchParams) {\r\n const searchService = searchParams.ServiceId;\r\n if (searchService) {\r\n if (services) {\r\n const service = services.find((s) => s.Id === +searchService);\r\n if (service) {\r\n selectService(service);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n const isServiceEmpty = (service: IServiceDetails) => {\r\n return !service.PictureLink && !service.ShortDescription && !service.Description;\r\n };\r\n\r\n const hasSingleEmptyService = () => {\r\n return (\r\n services.length === 1 &&\r\n isServiceEmpty(services[0]) &&\r\n !getPaymentNeed(isPaymentEnabled, services[0].Payable)\r\n );\r\n };\r\n\r\n const preSelect = () => {\r\n if (hasLoaded) {\r\n const isSingleEmptyService = hasSingleEmptyService();\r\n\r\n if (isSingleEmptyService) {\r\n selectService(services[0], true);\r\n }\r\n\r\n if (onIsModifiable) {\r\n onIsModifiable(!isSingleEmptyService);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (isActive || (!hasLoaded && data[StepType.Service])) {\r\n fetchServices().then(() => setShouldPreSelect(true));\r\n }\r\n\r\n return () => {\r\n servicesSubscription?.current?.cancel();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (hasLoaded) {\r\n checkSelectedService();\r\n }\r\n }, [hasLoaded]);\r\n\r\n useEffect(() => {\r\n if (!isActive) {\r\n prevProps.current = { isActive, data };\r\n return;\r\n }\r\n\r\n const isActiveChanged = prevProps.current.isActive !== isActive;\r\n const calendarChanged = !isSame(\r\n prevProps.current.data[StepType.Calendar],\r\n data[StepType.Calendar]\r\n );\r\n const shouldFetch =\r\n isActiveChanged && (!hasLoaded || (shouldGetByCalendar && calendarChanged));\r\n\r\n if (shouldFetch) {\r\n fetchServices().then(() => setShouldPreSelect(true));\r\n } else {\r\n setShouldPreSelect(true);\r\n }\r\n\r\n if (prevHasLoaded !== hasLoaded) {\r\n onLoadingChanged?.(!hasLoaded);\r\n }\r\n\r\n prevProps.current = { isActive, data };\r\n setPrevHasLoaded(hasLoaded);\r\n }, [isActive, data, shouldGetByCalendar, hasLoaded]);\r\n\r\n useEffect(() => {\r\n if (shouldPreSelect) {\r\n preSelect()\r\n setShouldPreSelect(false);\r\n } \r\n }, [shouldPreSelect])\r\n \r\n\r\n if (!hasLoaded) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (!services.length) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n {services.map((service, i) => (\r\n selectService(service)}\r\n selected={selectedService?.Id === service.Id}\r\n />\r\n }\r\n withLogoSpace={hasAnyLogo}\r\n />\r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default withSearchParams(ServiceSelect, searchParamsOptions);\r\n","import Moment from 'moment';\r\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport { IStepModuleProps, ModuleSearchParam } from '../../../../models/modules';\r\nimport {\r\n IReservationModel,\r\n reservationValueChanged,\r\n IPendingReservation,\r\n} from '../../../../entities/reservation';\r\nimport { StepType } from '../../../../services/getStepOrder';\r\nimport withSearchParams, { ISearchParamsOptions, getDateParam } from '../withSearchParams';\r\nimport { getDate, getTime, setTimeOnDate } from 'src/services/dateTime';\r\nimport DateTimeSelect from './DateTimeSelect';\r\nimport ValidationMessage from 'src/components/form-components/ValidationMessage/ValidationMessage';\r\nimport FormValidator from 'src/services/formValidator';\r\nimport { dateTimeSelectRules } from 'src/services/validations/dateTimeSelectRules';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport makeCancelable, { ICancelablePromise } from 'src/services/cancelablePromise';\r\nimport {\r\n getCalendarFirstFreeSlot,\r\n googleSyncByCalendar,\r\n googleSyncAll,\r\n} from 'src/services/api/calendar';\r\nimport AvailabilityWarning from 'src/components/AvailabilityWarning';\r\nimport { IResponseDto } from 'src/entities/common';\r\nimport { reservationModelToPendingRequest } from 'src/services/api/reservation';\r\nimport { getServiceFirstFreeSlot } from 'src/services/api/service';\r\nimport FixedButton from 'src/components/form-components/FixedButton/FixedButton';\r\nimport AppointmentCalendar from './AppointmentCalendar';\r\nimport Placeholder from 'src/components/Placeholder/Placeholder';\r\nimport { isAppointmentCalendar, isRandomCalendar, CalendarType } from 'src/entities/calendar';\r\nimport { BookingContext } from 'src/contexts/BookingFlowContext';\r\nimport { IDateTimeSelectStepState } from 'src/entities/dateTime';\r\n\r\nconst searchParamsOptions: ISearchParamsOptions = {\r\n paramName: ModuleSearchParam.Date,\r\n};\r\n\r\nconst DateTimeSelectStep: React.FC = ({\r\n isActive,\r\n data,\r\n onLoadingChanged,\r\n onComplete,\r\n}) => {\r\n const prevProps = useRef({ isActive, data });\r\n const intl = useIntl();\r\n const { reservations } = useContext(BookingContext);\r\n const firstFreeSlotSubScription = useRef>();\r\n const googleSyncSubscription = useRef>();\r\n const validator = new FormValidator(dateTimeSelectRules);\r\n const appointment = data[StepType.Date];\r\n const [pendingReservations, setPendingReservations] = useState([]);\r\n const [prevHasLoaded, setPrevHasLoaded] = useState(false);\r\n const [readyToFinish, setReadyToFinish] = useState(false);\r\n const [state, setState] = useState({\r\n ...(appointment\r\n ? {\r\n personCount: appointment.personCount,\r\n selectedDate: getDate(appointment.startTime),\r\n selectedTime: getTime(appointment.startTime),\r\n submitted: false,\r\n }\r\n : {\r\n personCount: 1,\r\n selectedDate: '',\r\n submitted: false,\r\n }),\r\n firstFreeSlot: '',\r\n hasLoaded: false,\r\n calendarChanged: false,\r\n clickedByUser: false,\r\n });\r\n const {\r\n selectedDate,\r\n selectedTime,\r\n submitted,\r\n firstFreeSlot,\r\n hasLoaded,\r\n calendarChanged,\r\n clickedByUser,\r\n personCount,\r\n } = state;\r\n const calendar = data[StepType.Calendar];\r\n const service = data[StepType.Service];\r\n const validation = submitted\r\n ? validator.validate({ selectedDate, selectedTime: selectedTime || '' })\r\n : validator.getInitial();\r\n const autoSelectedDate = isActive ? getDateParam(data.searchParams) : undefined;\r\n const isAppointmentView = isAppointmentCalendar(calendar);\r\n\r\n const handleDateTimeChange = useCallback(\r\n (newDateTime: string) => {\r\n setState({ ...state, selectedDate: newDateTime, selectedTime: getTime(newDateTime) });\r\n setReadyToFinish(true);\r\n },\r\n [state]\r\n );\r\n const handleDateChange = useCallback(\r\n (newDate: string) => {\r\n setState({\r\n ...state,\r\n selectedDate: newDate,\r\n selectedTime: undefined,\r\n clickedByUser: false,\r\n });\r\n },\r\n [state]\r\n );\r\n const handleTimeChange = useCallback(\r\n (newTime: string, clicked?: boolean) => {\r\n setState({ ...state, selectedTime: newTime, clickedByUser: clicked ?? false });\r\n },\r\n [state]\r\n );\r\n const handlePersonCountChange = useCallback(\r\n (newPersonCount: number) => {\r\n setState({ ...state, personCount: newPersonCount });\r\n },\r\n [state]\r\n );\r\n const fetchFirstFreeSlot = () => {\r\n if (!service) {\r\n return;\r\n }\r\n firstFreeSlotSubScription.current = makeCancelable(\r\n calendar\r\n ? getCalendarFirstFreeSlot(calendar.Id, service.Id)\r\n : getServiceFirstFreeSlot(service.Id)\r\n );\r\n firstFreeSlotSubScription.current.promise\r\n .then((result) => {\r\n setState({ ...state, firstFreeSlot: result, hasLoaded: true });\r\n })\r\n .catch(() => null);\r\n };\r\n\r\n const googleSync = () => {\r\n if (calendar && !isRandomCalendar(calendar.Id) && !calendar.GoogleCalendarName) {\r\n fetchFirstFreeSlot();\r\n return;\r\n }\r\n\r\n if (!calendar || isRandomCalendar(calendar.Id)) {\r\n googleSyncSubscription.current = makeCancelable(googleSyncAll());\r\n } else if (calendar.GoogleCalendarName) {\r\n googleSyncSubscription.current = makeCancelable(googleSyncByCalendar(calendar.Id));\r\n }\r\n\r\n googleSyncSubscription.current?.promise\r\n .catch(() => null)\r\n .finally(() => {\r\n fetchFirstFreeSlot();\r\n });\r\n };\r\n\r\n const finish = () => {\r\n setState({ ...state, submitted: true });\r\n if (selectedDate && selectedTime && service) {\r\n const startTime = Moment.utc(setTimeOnDate(selectedDate, selectedTime)).format();\r\n const endTime = Moment.utc(startTime).add(service.DurationToUser, 'minutes').format();\r\n const reservation: IReservationModel = {\r\n ...data,\r\n [StepType.Date]: {\r\n startTime,\r\n endTime,\r\n personCount,\r\n displayValue: `${intl.formatDate(startTime)}, ${intl.formatTime(startTime)}`,\r\n },\r\n };\r\n onComplete(reservation);\r\n }\r\n };\r\n\r\n const recalculatePersonCount = (): number => {\r\n let newPersonCount = personCount;\r\n if (calendar && calendar.ConcurrentNum < newPersonCount) {\r\n newPersonCount = 1;\r\n }\r\n return newPersonCount;\r\n };\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n googleSync();\r\n }\r\n\r\n setPendingReservations(\r\n (reservations &&\r\n (reservations.slice(0, -1) as IReservationModel[])\r\n .filter((r) => r.calendar?.Type === CalendarType.Classic)\r\n .map((r) => reservationModelToPendingRequest(r))) ||\r\n []\r\n );\r\n\r\n return () => {\r\n firstFreeSlotSubScription.current?.cancel();\r\n googleSyncSubscription.current?.cancel();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (readyToFinish) {\r\n finish();\r\n }\r\n }, [readyToFinish]);\r\n\r\n useEffect(() => {\r\n const isCalendarChanged = reservationValueChanged(data, prevProps.current.data, 'calendar');\r\n if (isCalendarChanged) {\r\n setState({\r\n ...state,\r\n personCount: recalculatePersonCount(),\r\n calendarChanged: isCalendarChanged,\r\n });\r\n }\r\n\r\n if (!isActive) {\r\n prevProps.current = { isActive, data };\r\n return;\r\n }\r\n\r\n const isServiceChanged = reservationValueChanged(data, prevProps.current.data, 'service');\r\n const isActiveChanged = prevProps.current.isActive !== isActive;\r\n if (isActiveChanged || isCalendarChanged || isServiceChanged) {\r\n setState({\r\n ...state,\r\n firstFreeSlot: '',\r\n submitted: false,\r\n hasLoaded: false,\r\n });\r\n setReadyToFinish(false);\r\n googleSync();\r\n }\r\n\r\n if (prevHasLoaded !== hasLoaded) {\r\n onLoadingChanged?.(!hasLoaded);\r\n }\r\n\r\n prevProps.current = { isActive, data };\r\n setPrevHasLoaded(hasLoaded);\r\n }, [isActive, data, hasLoaded]);\r\n\r\n if (!hasLoaded) {\r\n return ;\r\n }\r\n\r\n if (!firstFreeSlot) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n {(calendar && service && isAppointmentView && (\r\n \r\n )) || (\r\n \r\n )}\r\n
\r\n \r\n
\r\n {!isAppointmentView && !calendar?.Readonly && isActive && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withSearchParams(DateTimeSelectStep, searchParamsOptions);\r\n","import React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport FixedButton from 'src/components/form-components/FixedButton/FixedButton';\r\nimport JsApiContext from 'src/contexts/JsApi/JsApiContext';\r\nimport { IJsApiQuestion, IQuestion } from 'src/entities/question';\r\nimport { reservationValueChanged } from 'src/entities/reservation';\r\nimport { getCustomParams } from 'src/services/api/service';\r\nimport makeCancelable from 'src/services/cancelablePromise';\r\nimport FormValidator from 'src/services/formValidator';\r\nimport { StepType } from 'src/services/getStepOrder';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport { createValidationRules } from 'src/services/validations/validations';\r\nimport { AppLocale, IStepModuleProps } from '../../../../models/modules';\r\nimport { toAnswers, toCustomerData } from '../helpers';\r\nimport CustomerData, { ICustomerData } from './CustomerData';\r\n\r\nconst CustomerDataStep: React.FC = ({\r\n isActive,\r\n data,\r\n onLoadingChanged,\r\n onComplete,\r\n}) => {\r\n const intl = useIntl();\r\n const jsApiContext = useContext(JsApiContext);\r\n const prevProps = useRef({ data });\r\n const customerDataStepValue = data[StepType.CustomerData];\r\n const initialAnswers = customerDataStepValue\r\n ? toCustomerData(customerDataStepValue.answers)\r\n : {};\r\n const [validator, setValidator] = useState();\r\n const [answers, setAnswers] = useState(initialAnswers);\r\n const [questions, setQuestions] = useState([]);\r\n const [selectedArriveTime, setSelectedArriveTime] = useState(\r\n customerDataStepValue?.arriveTime || ''\r\n );\r\n const [shouldValidate, setShouldValidate] = useState(false);\r\n const [hasQuestionsLoaded, setHasQuestionsLoaded] = useState(false);\r\n const [prevHasQuestionsLoaded, setPrevHasQuestionsLoaded] = useState(false);\r\n const validation = validator\r\n ? shouldValidate\r\n ? validator.validate(answers)\r\n : validator.getInitial()\r\n : undefined;\r\n\r\n const cleanAnswers = (currentAnswers: ICustomerData, currentQuestions: IQuestion[]) => {\r\n return Object.entries(currentAnswers).reduce((acc, entry) => {\r\n if (currentQuestions.some((q) => q.Id === +entry[0])) {\r\n acc[+entry[0]] = entry[1];\r\n jsApiContext.setQuestionValue(+entry[0], entry[1]);\r\n } else {\r\n jsApiContext.cleanQuestionValue(+entry[0]);\r\n }\r\n return acc;\r\n }, {} as ICustomerData);\r\n };\r\n\r\n const fetchQuestions = () => {\r\n const service = data[StepType.Service] || data[StepType.Timetable]?.service;\r\n\r\n if (service) {\r\n const questionsSubscription = makeCancelable(getCustomParams(service.Id));\r\n questionsSubscription.promise\r\n .then((result) => {\r\n const contextDataMap = jsApiContext?.data\r\n ? jsApiContext.data.reduce((acc, question) => {\r\n acc[question.Id] = question;\r\n return acc;\r\n }, {} as Record)\r\n : {};\r\n\r\n const mergedQuestions = result\r\n .filter((question) => result.some((q) => q.Id === question.Id))\r\n .map((question) => contextDataMap[question.Id] || question);\r\n\r\n jsApiContext.setData(mergedQuestions);\r\n\r\n setQuestions(mergedQuestions); // setting merged questions to state\r\n setAnswers(cleanAnswers(answers, mergedQuestions));\r\n setHasQuestionsLoaded(true);\r\n\r\n const event = new CustomEvent('new-questions', { detail: mergedQuestions });\r\n window.dispatchEvent(event);\r\n })\r\n .catch(() => null);\r\n return questionsSubscription;\r\n }\r\n return undefined;\r\n };\r\n\r\n const setValidatorByQuestions = (value: IQuestion[]) => {\r\n setValidator(new FormValidator(createValidationRules(value, intl.locale as AppLocale)));\r\n };\r\n\r\n const handleNext = () => {\r\n setShouldValidate(true);\r\n };\r\n\r\n const handleChange = (question: IQuestion, currentAnswers: ICustomerData) => {\r\n const event = new CustomEvent('new-valueChanged', {\r\n detail: { question, answer: currentAnswers[question.Id] },\r\n });\r\n window.dispatchEvent(event);\r\n\r\n jsApiContext.setQuestionValue(question.Id, currentAnswers[question.Id]);\r\n\r\n setAnswers(currentAnswers);\r\n setShouldValidate(false);\r\n };\r\n\r\n const handleArriveTimeChange = (arriveTime: string) => {\r\n setSelectedArriveTime(arriveTime);\r\n };\r\n\r\n useEffect(() => {\r\n const questionsSubscription = fetchQuestions();\r\n\r\n return () => {\r\n if (questionsSubscription) {\r\n questionsSubscription.cancel();\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (reservationValueChanged(data, prevProps.current.data, 'service')) {\r\n fetchQuestions();\r\n }\r\n\r\n if (prevHasQuestionsLoaded !== hasQuestionsLoaded) {\r\n onLoadingChanged?.(!hasQuestionsLoaded);\r\n }\r\n\r\n if (jsApiContext.data.length > 0) {\r\n setValidatorByQuestions(jsApiContext.data);\r\n }\r\n\r\n prevProps.current = { data };\r\n setPrevHasQuestionsLoaded(hasQuestionsLoaded);\r\n }, [data, hasQuestionsLoaded, jsApiContext.data]);\r\n\r\n useEffect(() => {\r\n if (hasQuestionsLoaded) {setValidatorByQuestions(questions);}\r\n }, [hasQuestionsLoaded]);\r\n\r\n useEffect(() => {\r\n if (shouldValidate && validator?.validate(answers).isValid) {\r\n const displayValue = intl.formatMessage(globalMessages.nAnswers, {\r\n n: Object.values(answers).filter((a) => !!a).length,\r\n });\r\n onComplete({\r\n ...data,\r\n [StepType.CustomerData]: {\r\n answers: toAnswers(questions, answers),\r\n displayValue,\r\n arriveTime: selectedArriveTime,\r\n },\r\n });\r\n }\r\n }, [shouldValidate]);\r\n\r\n return (\r\n
\r\n \r\n {isActive && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default CustomerDataStep;\r\n","import React from 'react';\r\nimport { IStepModuleProps, ModuleSearchParam } from 'src/models/modules';\r\nimport { StepType } from 'src/services/getStepOrder';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n useSchedules,\r\n handleEventRender,\r\n handleEventClassNames,\r\n IEventRenderInfo,\r\n} from 'src/components/BookingFlow/modules/TimeTableSelect/fullcalendarFunctions';\r\nimport { IServiceDetails } from 'src/entities/service';\r\nimport { ISchedule } from 'src/entities/schedule';\r\nimport { useSubscription } from 'src/hooks';\r\nimport { getCalendarFirstFreeSlot } from 'src/services/api/calendar';\r\nimport { lazy, Suspense } from 'react';\r\nimport Placeholder from 'src/components/Placeholder/Placeholder';\r\nimport withSearchParams, { getDateParam, ISearchParamsOptions } from '../withSearchParams';\r\nimport AvailabilityWarning from 'src/components/AvailabilityWarning';\r\nimport { ReadonlyInfo } from 'src/components/ReadonlyInfo/ReadonlyInfo';\r\n\r\nconst Timetable = lazy(\r\n () => import(/* webpackChunkName: \"Timetable\" */ '../DateTimeSelect/Timetable')\r\n);\r\n\r\ninterface ITimeTableSelectProps extends IStepModuleProps {\r\n isPaymentEnabled?: boolean;\r\n}\r\n\r\nconst TimeTableSelect: React.FunctionComponent = ({\r\n data,\r\n onComplete,\r\n isPaymentEnabled,\r\n}) => {\r\n const calendar = data[StepType.Calendar]!;\r\n\r\n const intl = useIntl();\r\n const { getSchedules, scheduleLists, isLoading } = useSchedules(calendar);\r\n const fetchFirstSlot = React.useCallback(\r\n () => getCalendarFirstFreeSlot(calendar.Id),\r\n [calendar.Id]\r\n );\r\n const [firstFreeSlot, isFirstFreeSlotLoading] = useSubscription(fetchFirstSlot, '');\r\n const userViewSlotMinutes = calendar.UserViewSlotMinutes;\r\n\r\n const handleServiceSelect = (\r\n service: IServiceDetails,\r\n schedule: ISchedule,\r\n personCount: number\r\n ) => {\r\n onComplete({\r\n ...data,\r\n [StepType.Timetable]: {\r\n service,\r\n schedule,\r\n personCount,\r\n displayValue: service.Name,\r\n },\r\n });\r\n };\r\n\r\n const eventRender = (arg: IEventRenderInfo & { currentWeekDay: number | false }) =>\r\n handleEventRender({\r\n ...arg,\r\n intl,\r\n handleServiceSelect,\r\n currentWeekDay: arg.currentWeekDay,\r\n minTimeReserve: calendar.MinTimeReserve,\r\n isReadonly: calendar.Readonly,\r\n hideSeatCount: calendar.HideSeatCount,\r\n isWeekendDisabled: calendar.WeekendDisabled,\r\n isPaymentEnabled,\r\n firstFreeSlot\r\n });\r\n\r\n const eventClassNames = (arg: IEventRenderInfo) =>\r\n handleEventClassNames({\r\n ...arg,\r\n minTimeReserve: calendar.MinTimeReserve,\r\n firstFreeSlot\r\n });\r\n\r\n if (isFirstFreeSlotLoading) {\r\n return ;\r\n }\r\n\r\n if (!firstFreeSlot) {\r\n return ;\r\n }\r\n\r\n return (\r\n }>\r\n {calendar.Readonly && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst searchParamsOptions: ISearchParamsOptions = {\r\n paramName: ModuleSearchParam.Date\r\n};\r\n\r\nexport default withSearchParams(TimeTableSelect, searchParamsOptions);","import React, { useEffect, useState } from 'react';\r\nimport { defineMessages } from 'react-intl';\r\nimport { StepType } from '../../../services/getStepOrder';\r\nimport Step from '../Step/Step';\r\nimport JumpToEnd, { PendingJumpType } from '../JumpToEnd/JumpToEnd';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport CalendarSelect from '../modules/CalendarSelect/CalendarSelect';\r\nimport MockModule from 'src/test-mocks/MockModule';\r\nimport ServiceSelect from '../modules/ServiceSelect/ServiceSelect';\r\nimport DateTimeSelectStep from '../modules/DateTimeSelect/DateTimeSelectStep';\r\nimport CustomerDataStep from '../modules/CustomerData/CustomerDataStep';\r\nimport TimeTableSelect from '../modules/TimeTableSelect/TimeTableSelect';\r\nimport { ReservationOrder, ICompany } from 'src/entities/company';\r\nimport { IStepModuleProps } from 'src/models/modules';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { Routes } from 'src/routes';\r\nimport { useAppContext } from 'src/contexts/AppContext';\r\n\r\nconst stepNames = defineMessages({\r\n [StepType.Calendar]: {\r\n id: 'calendar',\r\n defaultMessage: 'Naptár',\r\n },\r\n [StepType.Timetable]: {\r\n id: 'timetable',\r\n defaultMessage: 'Órarend',\r\n },\r\n [StepType.Service]: {\r\n id: 'service',\r\n defaultMessage: 'Szolgáltatás',\r\n },\r\n [StepType.Date]: globalMessages.dateTime,\r\n [StepType.CustomerData]: globalMessages[StepType.CustomerData],\r\n [StepType.ReservationEnd]: globalMessages[StepType.ReservationEnd],\r\n});\r\n\r\ntype CompletedStep = { [step in StepType]?: boolean };\r\n\r\nexport interface IStepperProps {\r\n stepOrder: StepType[];\r\n pendingLength: number;\r\n isActive: boolean;\r\n shouldHideInitialProgressBar?: boolean;\r\n onChange: (activeStepIndex: number) => void;\r\n activeStepIndex: number;\r\n removeReservation: () => void;\r\n}\r\n\r\nconst Stepper: React.FC = ({\r\n activeStepIndex,\r\n stepOrder,\r\n pendingLength,\r\n isActive,\r\n shouldHideInitialProgressBar,\r\n onChange,\r\n removeReservation,\r\n}) => {\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n const { company: companyFromContext } = useAppContext();\r\n const [completedSteps, setCompletedSteps] = useState({});\r\n const [hasProgressed, setHasProgressed] = useState(false);\r\n const lastIndex = stepOrder.length - 1;\r\n\r\n useEffect(() => {\r\n if (!hasProgressed && activeStepIndex > 0) {\r\n setHasProgressed(true);\r\n }\r\n\r\n if (activeStepIndex && !Object.keys(completedSteps).length) {\r\n const steps: CompletedStep = {};\r\n stepOrder.forEach((step, index) => {\r\n if (index !== stepOrder.length - 1) {\r\n steps[step] = true;\r\n }\r\n });\r\n setCompletedSteps({ ...steps });\r\n }\r\n }, [activeStepIndex, stepOrder, completedSteps, hasProgressed]);\r\n\r\n const getStepByIndex = (index: number): StepType => stepOrder[index];\r\n const getStepIsCompleted = (index: number): boolean => !!completedSteps[getStepByIndex(index)];\r\n const getAllStepIsCompleted = (): boolean => {\r\n const steps = [...stepOrder];\r\n steps.pop();\r\n return steps.every((step) => completedSteps[step]);\r\n };\r\n const getStepsAfterModify = (modifiedStepIndex: number): CompletedStep => {\r\n return Object.keys(completedSteps).reduce((steps: CompletedStep, currentStep: StepType) => {\r\n if (modifiedStepIndex < stepOrder.findIndex((step) => step === currentStep)) {\r\n steps[currentStep] = false;\r\n }\r\n return steps;\r\n }, {});\r\n };\r\n const nextStep = () => {\r\n let stepsToReset: CompletedStep = {};\r\n\r\n if (getStepIsCompleted(activeStepIndex)) {\r\n stepsToReset = getStepsAfterModify(activeStepIndex);\r\n }\r\n\r\n setCompletedSteps({\r\n ...completedSteps,\r\n [stepOrder[activeStepIndex]]: true,\r\n ...stepsToReset,\r\n });\r\n\r\n if (activeStepIndex + 1 === stepOrder.length - 1) {\r\n navigate({\r\n pathname: Routes.ReservationEnd,\r\n search: location.search,\r\n });\r\n }\r\n\r\n onChange(activeStepIndex + 1);\r\n };\r\n const modifyStep = (stepIndex: number) => {\r\n onChange(stepIndex);\r\n };\r\n const jumpToEnd = () => {\r\n if (!getAllStepIsCompleted()) {\r\n removeReservation();\r\n } else {\r\n onChange(stepOrder.length - 1);\r\n }\r\n\r\n navigate({\r\n pathname: Routes.ReservationEnd,\r\n search: location.search,\r\n });\r\n };\r\n const getStepComponent = (\r\n step: StepType,\r\n isFirstStep: boolean,\r\n company: ICompany | null\r\n ): React.FC => {\r\n switch (step) {\r\n case StepType.Calendar:\r\n return (props) => (\r\n \r\n );\r\n\r\n case StepType.Timetable:\r\n return (props) => (\r\n \r\n );\r\n case StepType.Service:\r\n return (props) => (\r\n \r\n );\r\n case StepType.Date:\r\n return (props) => ;\r\n case StepType.CustomerData:\r\n return (props) => ;\r\n case StepType.ReservationEnd:\r\n return (props) => ;\r\n }\r\n };\r\n\r\n if (!isActive) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {pendingLength > 1 && (\r\n \r\n )}\r\n {stepOrder.map((step: StepType, i: number) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default Stepper;\r\n","import React from 'react';\r\nimport { FormattedMessage, MessageDescriptor, defineMessages } from 'react-intl';\r\nimport { IContactInfo } from '../../entities/company';\r\nimport EmailIcon from '../icons/Email';\r\nimport Location from '../icons/Location';\r\nimport PhoneIcon from '../icons/Phone';\r\nimport Nl2br from '../Nl2br/Nl2br';\r\nimport Facebook from '../icons/Facebook';\r\nimport globalMessages from 'src/services/globalMessages';\r\nimport WebSite from '../icons/WebSite';\r\nimport { useLayoutEffect, useRef } from 'react';\r\nimport { useWindowWidth } from 'src/hooks';\r\nimport { isMessageDescriptor } from 'src/components/form-components/helpers';\r\n\r\nconst messages = defineMessages({\r\n webpage: {\r\n id: 'webpage',\r\n defaultMessage: 'Weboldal'\r\n },\r\n facebookPage: {\r\n id: 'facebookPage',\r\n defaultMessage: 'Facebook oldal'\r\n }\r\n});\r\n\r\nexport const enum ContactDetailType {\r\n Phone = 'tel:',\r\n Email = 'mailto:',\r\n External = ''\r\n}\r\n\r\ninterface IContactDetailProps {\r\n icon: JSX.Element,\r\n text: string | MessageDescriptor,\r\n type: ContactDetailType,\r\n link: string | null\r\n}\r\n\r\nconst ContactDetail: React.FunctionComponent = ({ icon, text, type, link }) => {\r\n const createRealLink = () => {\r\n if (!link) {\r\n return undefined;\r\n }\r\n\r\n if (type === ContactDetailType.External\r\n && !(link.startsWith('http://') || link.startsWith('https://'))) {\r\n return '//' + link;\r\n }\r\n\r\n return type + link;\r\n }\r\n\r\n const linkAttributes = {\r\n href: createRealLink(),\r\n className: 'contact',\r\n target: type === ContactDetailType.External && link ? '_blank' : '_self',\r\n rel: 'noopener noreferrer'\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst ContactInfo = (contactInfo: IContactInfo) => {\r\n\r\n const { PublicEmail, PublicPhoneNumber, Address, MapLink, OpeningHours, WebPageLink, FacebookPageLink } = contactInfo;\r\n const hasDetails = PublicEmail || PublicPhoneNumber || Address || MapLink;\r\n const hasSocial = WebPageLink || FacebookPageLink;\r\n\r\n const ref = useRef(null);\r\n\r\n const Details = () =>\r\n hasDetails ?\r\n
\r\n {PublicEmail && } type={ContactDetailType.Email} link={PublicEmail} />}\r\n {Address && } type={ContactDetailType.External} link={MapLink} />}\r\n {PublicPhoneNumber && } type={ContactDetailType.Phone} link={PublicPhoneNumber} />}\r\n
: null\r\n\r\n const Hours = () => OpeningHours ?\r\n
\r\n {OpeningHours}\r\n
: null\r\n\r\n const Social = () => hasSocial ?\r\n
\r\n {WebPageLink && } type={ContactDetailType.External} link={WebPageLink} />}\r\n {FacebookPageLink && } type={ContactDetailType.External} link={FacebookPageLink} />}\r\n
: null\r\n\r\n const windowWidth = useWindowWidth();\r\n\r\n useLayoutEffect(() => {\r\n\r\n if (!ref.current) {\r\n return;\r\n }\r\n\r\n const contactsSection = ref.current;\r\n contactsSection.classList.remove('contacts--vertical');\r\n\r\n if (contactsSection.children.length > 1) {\r\n const hasOverlappingElements =\r\n twoCombinations(\r\n Array.from(contactsSection.children,\r\n c => c.children[0].getBoundingClientRect())\r\n ).some(([rect1, rect2]) =>\r\n rect1.right > rect2.left)\r\n\r\n if (hasOverlappingElements) {\r\n contactsSection.classList.add('contacts--vertical');\r\n }\r\n }\r\n }, [windowWidth, ref.current]);\r\n\r\n return (\r\n hasDetails || OpeningHours || hasSocial ?\r\n
\r\n

\r\n \r\n

\r\n
\r\n \r\n \r\n
\r\n : null\r\n );\r\n}\r\n\r\nconst twoCombinations = (arr: T[]): Array<[T, T]> => {\r\n return (arr.length === 3\r\n ? [\r\n [arr[0], arr[1]],\r\n [arr[0], arr[2]],\r\n [arr[1], arr[2]]\r\n ]\r\n : [arr]\r\n ) as Array<[T, T]>\r\n}\r\n\r\nexport default ContactInfo;\r\n","import { isSame } from 'src/entities/common';\r\nimport { IReservationModel } from 'src/entities/reservation';\r\nimport getStepOrder, { StepType, StepOrderType } from 'src/services/getStepOrder';\r\n\r\nexport const clearObsoleteStepValues = (\r\n stepType: StepType,\r\n orderType: StepOrderType,\r\n newReservation: IReservationModel,\r\n reservation: IReservationModel\r\n): IReservationModel => {\r\n const currentStepOrder = getStepOrder(orderType);\r\n const stepIndex = currentStepOrder.findIndex((step) => step === stepType);\r\n\r\n const reservationStepType = stepType as keyof IReservationModel;\r\n const value = newReservation[\r\n reservationStepType\r\n ] as IReservationModel[typeof reservationStepType] & { Id: number };\r\n const value2 = reservation[\r\n reservationStepType\r\n ] as IReservationModel[typeof reservationStepType] & { Id: number };\r\n const hasValueChanged = !isSame(value, value2);\r\n\r\n const rules = [\r\n {\r\n stepIndex: 0,\r\n dependentSteps: [1, 2],\r\n },\r\n {\r\n stepIndex: 1,\r\n dependentSteps: [2],\r\n },\r\n ];\r\n\r\n const rule = rules.find((r) => r.stepIndex === stepIndex);\r\n\r\n if (hasValueChanged && rule) {\r\n return rule.dependentSteps.reduce(\r\n (acc, i) => ({ ...acc, [currentStepOrder[i]]: undefined }),\r\n {\r\n ...newReservation,\r\n }\r\n );\r\n }\r\n\r\n return { ...newReservation };\r\n};\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { AppContext } from 'src/contexts/AppContext';\r\nimport { BookingProvider } from 'src/contexts/BookingFlowContext';\r\nimport { ReservationOrder } from 'src/entities/company';\r\nimport { ICommonModuleProps } from '../../models/modules';\r\nimport getStepOrder, { mapReservationOrder } from '../../services/getStepOrder';\r\nimport ReservationEnd from './ReservationEnd/ReservationEnd';\r\nimport { createReservationEndUser } from './ReservationEnd/functions/createFunctions';\r\nimport Stepper from './Stepper/Stepper';\r\nimport { Routes } from 'src/routes';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { useBookingFlowReducer } from './BookingFlowReducer';\r\n\r\nexport interface IBookingFlowProps extends ICommonModuleProps {\r\n shouldHideInitialProgressBar?: boolean;\r\n reservationOrder: ReservationOrder;\r\n}\r\n\r\nconst BookingFlow: React.FC = (props) => {\r\n const { shouldHideInitialProgressBar, reservationOrder } = props;\r\n const context = useContext(AppContext);\r\n const location = useLocation();\r\n const stepOrderType = mapReservationOrder(reservationOrder);\r\n const { state } = useBookingFlowReducer(stepOrderType);\r\n const { reservations, activeReservationIndex, stepOrderTypes, activeStepIndex, actions } =\r\n state;\r\n const { setReservationEndUser, addNewReservation, removeReservation, setActiveStepIndex } =\r\n actions;\r\n const stepOrder = getStepOrder(stepOrderTypes[activeReservationIndex]);\r\n\r\n const handleActiveStepIndexChange = (index: number) => {\r\n setActiveStepIndex(index);\r\n };\r\n\r\n const handleEndStep = () => {\r\n setActiveStepIndex(stepOrder.length - 1);\r\n };\r\n\r\n useEffect(() => {\r\n setReservationEndUser(createReservationEndUser(context.user));\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (reservations.length === 0) {\r\n addNewReservation();\r\n }\r\n }, [reservations]);\r\n\r\n useEffect(() => {\r\n if (location.state?.newReservation) {\r\n reservations.forEach(() => removeReservation());\r\n }\r\n }, [location]);\r\n\r\n return (\r\n
\r\n \r\n {reservations.map((_, index) => (\r\n \r\n ))}\r\n {location.pathname === Routes.ReservationEnd && (\r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default BookingFlow;\r\n","import React from 'react';\r\nimport Circle from './Circle';\r\n\r\nconst Email = () =>\r\n \r\n \r\n \r\n \r\n \r\n\r\nexport default Email;","import React from 'react';\r\nimport Circle from './Circle';\r\n\r\nconst Location = () =>\r\n \r\n \r\n \r\n \r\n \r\n\r\nexport default Location;","import React from 'react';\r\nimport Circle from './Circle';\r\n\r\nconst Phone = () =>\r\n \r\n \r\n \r\n \r\n \r\n\r\nexport default Phone;\r\n\r\n","import React from 'react';\r\nimport Circle from './Circle';\r\n\r\nconst Facebook = () =>\r\n \r\n \r\n \r\n \r\n \r\n\r\nexport default Facebook;","import React from 'react';\r\nimport Circle from './Circle';\r\n\r\nconst WebSite = () =>\r\n \r\n \r\n \r\n \r\n \r\n\r\nexport default WebSite;\r\n\r\n","import React from 'react';\r\nimport { ICompany, IContactInfo, ReservationOrder } from 'src/entities/company';\r\nimport AboutUs from '../AboutUs/AboutUs';\r\nimport BookingFlow from '../BookingFlow/BookingFlow';\r\nimport ContactInfo from '../ContactInfo/ContactInfo';\r\nimport Placeholder, { PagePlaceholder } from '../Placeholder/Placeholder';\r\nimport { useReducer, useEffect } from 'react';\r\nimport AvailabilityWarning from '../AvailabilityWarning';\r\nimport { EmbedModeType } from 'src/embed';\r\nimport { Routes } from 'src/routes';\r\nimport CallToAction from '../CallToAction';\r\nimport { useEmbedOptions } from 'src/contexts/EmbedContext';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\ninterface IHomeProps {\r\n company: ICompany | null;\r\n contactInfo: IContactInfo | null;\r\n}\r\n\r\nconst Home = ({ company, contactInfo }: IHomeProps) => {\r\n const location = useLocation();\r\n const hasDetails = company && (\r\n company.Description ||\r\n company.ShortDescription ||\r\n company.LogoLink ||\r\n company.BackgroundLink\r\n );\r\n\r\n const isHomeSlashRoute = location.pathname === Routes.HomeSlash;\r\n const isBookRoute = location.pathname === Routes.Book;\r\n const embedOptions = useEmbedOptions();\r\n const hideCompanyInfo = embedOptions && (embedOptions.hideCompanyInfo || embedOptions.mode !== EmbedModeType.WebPage);\r\n const [key, resetBookingFlow] = useReducer(state => ++state, 0);\r\n\r\n useEffect(() => {\r\n if (isHomeSlashRoute) {\r\n resetBookingFlow();\r\n }\r\n }, [isHomeSlashRoute])\r\n\r\n if (!company) {\r\n return \r\n }\r\n\r\n const hasBookingFlow = company.ReservationOrder !== ReservationOrder.OnlyPreReservation;\r\n\r\n return <>\r\n
\r\n {hasBookingFlow\r\n ? \r\n : }\r\n
\r\n\r\n {isHomeSlashRoute && !hideCompanyInfo &&\r\n <>\r\n {company.Description &&\r\n <>\r\n
\r\n \r\n
\r\n {hasBookingFlow &&\r\n
\r\n \r\n
\r\n }\r\n \r\n }\r\n
\r\n {contactInfo && || }\r\n
\r\n \r\n }\r\n \r\n}\r\n\r\nexport default Home;\r\n\r\n\r\n","import { IConfirmationLocationState } from 'src/components/BookingFlow/ReservationConfirm/ReservationConfirm';\r\n\r\nexport const redirectAfterSendReservation = (state: IConfirmationLocationState, customSuccesLink?: string): boolean => {\r\n if (customSuccesLink) {\r\n const hasAnyBlocked = state.Reservations!.some(r => r.Blocked);\r\n\r\n if (!hasAnyBlocked) {\r\n const queryParams = createQueryParams(state);\r\n const divider = customSuccesLink.includes('?') ? '&' : '?';\r\n window.location.href = `${customSuccesLink}${divider}${queryParams}`;\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\r\nconst createQueryParams = (state: IConfirmationLocationState): string => {\r\n const params = new URLSearchParams();\r\n const reservation = state.Reservations![0];\r\n\r\n params.append('instanceUrl', window.location.hostname);\r\n\r\n if (reservation.CalendarId) {\r\n params.append('calendarId', reservation.CalendarId.toString());\r\n }\r\n\r\n params.append('serviceId', reservation.ServiceId.toString());\r\n params.append('reservationId', reservation.Id.toString());\r\n\r\n if (state.clientKey) {\r\n params.append('clientKey', state.clientKey);\r\n }\r\n if (reservation.User) {\r\n params.append('email', reservation.User.Email);\r\n params.append('phone', reservation.User.Phone);\r\n params.append('fullName', reservation.User.Name);\r\n }\r\n\r\n params.append('personCount', reservation.PersonCount.toString());\r\n\r\n return params.toString();\r\n}","import { IReservationEndUser } from 'src/entities/user';\r\nimport { IValidationRule, required, emailFormat, phoneFormat, isChecked } from './validations';\r\nimport { personalDetailsFields } from './userDetailsRules';\r\n\r\nconst getReservationEndFields = () => {\r\n const privacyField: keyof IReservationEndUser = 'PrivacyStatementAccepted';\r\n\r\n return {\r\n ...personalDetailsFields,\r\n PrivacyStatementAccepted: privacyField,\r\n TermsAccepted: 'TermsAccepted'\r\n }\r\n}\r\n\r\nexport const reservationEndFields = getReservationEndFields();\r\n\r\nexport const reservationEndRules = (isEmailRequired: boolean, isPhoneNumberRequired: boolean, isNameRequired: boolean, isTermsRequired: boolean)\r\n : IValidationRule[] => {\r\n const rules = [\r\n emailFormat(reservationEndFields.Email),\r\n phoneFormat(reservationEndFields.Phone),\r\n isChecked(reservationEndFields.PrivacyStatementAccepted)\r\n ];\r\n\r\n if (isEmailRequired) {\r\n rules.push(required(reservationEndFields.Email));\r\n }\r\n if (isPhoneNumberRequired) {\r\n rules.push(required(reservationEndFields.Phone));\r\n }\r\n if (isNameRequired) {\r\n rules.push(required(reservationEndFields.Name));\r\n }\r\n if(isTermsRequired) {\r\n rules.push(isChecked(reservationEndFields.TermsAccepted));\r\n }\r\n\r\n return rules;\r\n}\r\n\r\n\r\n","import { ISignupUser } from 'src/entities/user';\r\nimport { IValidationRule, required, emailFormat, phoneFormat, isChecked, isValidLength } from './validations';\r\nimport { } from './userDetailsRules';\r\nimport { reservationEndFields } from './reservationEndRules';\r\nimport config from 'src/constants';\r\n\r\nconst getSignupFields = () => {\r\n const passwordField: keyof ISignupUser = 'Password';\r\n\r\n return {\r\n ...reservationEndFields,\r\n Password: passwordField\r\n }\r\n}\r\n\r\nexport const signupFields = getSignupFields();\r\n\r\nexport const signupRules: IValidationRule[] = [\r\n required(signupFields.Name),\r\n required(signupFields.Email),\r\n emailFormat(signupFields.Email),\r\n required(signupFields.Phone),\r\n phoneFormat(signupFields.Phone),\r\n isChecked(signupFields.PrivacyStatementAccepted),\r\n required(signupFields.Password),\r\n isValidLength(signupFields.Password, config.MIN_PASSWORD_LENGTH, config.MAX_PASSWORD_LENGTH) \r\n];"],"names":["messages","callToAction","id","defaultMessage","location","to","pathname","Book","hash","search","className","closePopup","intl","useState","adminPrivacyStatement","setAdminPrivacyStatement","clientApprovalStatement","setClientApprovalStatement","useEffect","dataPolicySubscription","language","promise","then","dataPolicy","AdminPrivacyStatement","ClientApprovalStatement","catch","fetchDataPolicy","locale","cancel","dangerouslySetInnerHTML","__html","autoFocus","onClick","caption","dataPolicyOk","PendingJumpType","body","globalMessages","aboutUs","BookingContext","reservationEndUser","initialUserState","stepOrderTypes","reservations","activeReservationIndex","actions","setReservationEndUser","handleUserChange","handleInvoiceChange","reloadReservations","setReservationModel","addNewReservation","removeReservation","setActiveReservation","autoSelected","hasAutoSelected","activeStepIndex","reservationOrder","CalendarFirst","BookingProvider","Provider","Consumer","touched","name","index","isLoading","stepTouchedClass","size","color","form","PrimaryButton","Helmet","media","ReservationEndContext","hasOnlinePocket","selectedPayment","shouldSignUp","displayedSubtotal","setHasOnlinePocket","setSelectedPayment","setShouldSignUp","ReservationEndProvider","company","useContext","AppContext","Section","title","map","reservation","i","Reservation","key","displayReadMore","canModify","needsPayment","PaymentSettings","IsPaymentEnabled","service","timetable","onEdit","onDelete","isReservationEnd","IsCartDisabled","SecondaryButton","Price","subtotal","FormattedPrice","value","currency","Currency","createUserInvoice","actUser","InvoiceDetails","InvoiceName","Country","City","StreetAddress","PostalCode","PrivatePerson","TaxNumber","createReservationEndUser","Email","Name","Phone","PrivacyStatementAccepted","TermsAccepted","urlSearchParams","URLSearchParams","window","nameParam","get","createValidator","props","isTermsRequired","personalValidator","reservationEndRules","invoiceValidator","invoiceDetailsRules","createValidation","actValidator","data","submitted","validate","getInitial","reservationEndLogin","or","signUpOnReservation","PersonalDetailsSection","forwardRef","ref","validation","isAuthenticated","user","hideUser","EmbedContext","isLoginVisible","setLoginVisible","requiredFieldInfo","RequiredFieldInfo","toggleLogin","validator","signupRules","passwordValidation","personalDetails","autoComplete","noValidate","Checkbox","checked","onChange","PersonalDetails","defaultUser","isEmailRequired","isPhoneNumberRequired","isNameRequired","adminCountryCode","DefaultCountryCode","TextInput","type","Password","fieldName","label","password","required","ValidationMessage","message","fields","formatValues","messageValues","Popup","visible","Login","setUser","onSitePayment","onBarionPayment","onPayPalPayment","PayPalImg","src","BarionImg","result","pockets","paymentType","selected","hasInit","setHasInit","selectOptions","filter","pocket","Online","Type","IsActive","NeedAccept","NoNeedToPay","push","Id","PaymentProvider","NoProvider","NeedsInvoice","DisplayName","providerMessages","Barion","displayName","Paypal","o","providerMessage","undefined","addLocalizedDisplayNameToOptions","length","selectedPocket","find","opt","Radio","options","payment","rootClassName","buttonClassName","labelClassName","inputClassName","getLabel","Placeholder","count","paymentSelect","isSelectNeeded","pocketList","some","activePockets","otherTitle","PaymentType","IsBillingEnabled","invoiceDetails","UserInvoiceDetails","defaultUserInvoice","barionStatement","setDataPolicy","isDataPolicyVisible","setDataPolicyVisible","handleCheckBoxLinkClick","e","preventDefault","stopPropagation","privacyAccept","values","span","msg","dataPolicyTitle","DataPolicy","termsStatement","setTermsAccepted","TermsAndConditionsLink","a","href","target","rel","sendReservation","toPaymentSite","reservationWarningHeader","reservationWarningDefault","reservationWarningCollision","reservationWarningPayment","injectIntl","isEndStep","onEndStep","navigationType","navigate","isReservationEndRoute","ReservationEnd","sendCondition","setSendCondition","isWarningVisible","setIsWarningVisible","warningText","setWarningText","useCallback","postReservationParams","termsAccepted","postPaymentReservationParams","paymentReservations","paymentUser","Service","Promise","all","afterSend","responseAny","response","setLoading","PaymentReservationResponse","ReservedReservations","showWarningPopup","HasCollision","HasPaymentError","setItem","JSON","stringify","PaymentUrl","navigationState","UserEmail","Reservations","didSignUp","CustomSuccessLink","Confirmation","state","reason","setErrorMessage","errorMessage","submitting","setSubmitted","setValidator","personalDetailsRef","createRef","personalValidation","invoiceValidation","warningTextValue","current","reset","reservationModels","selectedPaymentId","Pop","reservationEndContext","NeedPay","isValid","signUpValidation","HomeSlash","action","selectedValue","isModifiable","modify","pendingCount","jumpTo","jumpToReservationEnd","confirmJumpToEnd","BookingFlowActionTypes","reservationCount","Top","n","description","affirmativeCaption","yes","affirmativeAction","variants","opacity","height","overflow","transitionEnd","transition","duration","hidden","Navigator","isOpen","setTimeout","content","nextHandler","isActive","step","modifyHandler","isCompleted","stepIndex","isLast","isProgressBarHidden","jumpToEndHandler","context","isHomeSlashRoute","setIsModifiable","setIsLoading","reservationData","searchParams","CalendarId","ServiceId","Date","bookingStepClasses","Timetable","Calendar","whichever","currentStep","displayValue","getStepSelectedValue","showReservationsNumber","div","initial","animate","isFirst","onComplete","hasSkipped","Object","includes","onIsModifiable","onLoadingChanged","delay","Bottom","getDateParam","WrappedComponent","searchParam","paramName","extendedData","newProps","Description","calendar","firstFreeSlot","startReservation","bodyRef","useRef","close","firstStepAction","CalendarItemSkeleton","role","Button","lines","withLogoSpace","button","selectCalendar","isLongDescriptionVisible","setIsLongDescriptionVisible","fetchFirstFreeSlot","ShouldDisplayFirstTime","isFirstStep","PictureLink","Image","year","month","day","hour","minute","ShortDescription","readMore","keepSelected","getSelectCaption","next","shouldGetByService","hasRandomCalendar","canUserSelectCalendar","console","warn","prevProps","calendarsSubscription","selectedCalendar","calendars","setCalendars","hasLoaded","setHasLoaded","prevHasLoaded","setPrevHasLoaded","shouldPreSelect","setShouldPreSelect","shouldCheckSelectedCalendar","setShouldCheckSelectedCalendar","shouldFetchWhenUpdate","setShouldFetchWhenUpdate","hasAnyLogo","createSelectedCalendar","fetchCalendars","calendarList","hasSingleEmptyCalendar","getSearchCalendar","searchCalendar","handleCanUserSelectCalendar","serviceChanged","c","checkSelectedCalendar","AvailabilityWarning","A","setValue","stepData","style","width","event","ServiceItemSkeleton","selectService","isLongDescriptionShown","setIsLongDescriptionShown","IsDurationVisible","DurationToUser","DisplayedPrice","DisplayedCurrency","PaymentMethod","VatPercentage","toBePaid","ServiceDescription","shouldGetByCalendar","isPaymentEnabled","servicesSubscription","selectedService","services","setServices","fetchServices","servicesFormSubscription","createSelectedService","s","checkSelectedService","isActiveChanged","calendarChanged","isSingleEmptyService","Payable","preSelect","useIntl","firstFreeSlotSubScription","googleSyncSubscription","dateTimeSelectRules","appointment","pendingReservations","setPendingReservations","readyToFinish","setReadyToFinish","personCount","selectedDate","startTime","selectedTime","clickedByUser","setState","autoSelectedDate","isAppointmentView","handleDateTimeChange","newDateTime","handleDateChange","newDate","handleTimeChange","newTime","clicked","handlePersonCountChange","newPersonCount","googleSync","GoogleCalendarName","finally","finish","format","endTime","add","formatDate","formatTime","slice","r","Classic","isCalendarChanged","ConcurrentNum","isServiceChanged","AppointmentCalendar","querySelectedDate","onDateTimeSelect","Readonly","onPersonCountChange","DateTimeSelect","time","date","firstFreeDay","autoSelect","onDateChange","onTimeChange","allowAlreadySelected","isOnlyService","dateTimeRequired","modifier","jsApiContext","JsApiContext","customerDataStepValue","CustomerData","initialAnswers","answers","setAnswers","questions","setQuestions","arriveTime","selectedArriveTime","setSelectedArriveTime","shouldValidate","setShouldValidate","hasQuestionsLoaded","setHasQuestionsLoaded","prevHasQuestionsLoaded","setPrevHasQuestionsLoaded","fetchQuestions","questionsSubscription","currentAnswers","currentQuestions","contextDataMap","reduce","acc","question","mergedQuestions","q","setData","entries","entry","setQuestionValue","cleanQuestionValue","CustomEvent","detail","dispatchEvent","setValidatorByQuestions","formatMessage","nAnswers","reservationStart","schedule","Start","answer","onArriveTimeChange","lazy","getSchedules","scheduleLists","fetchFirstSlot","isFirstFreeSlotLoading","userViewSlotMinutes","UserViewSlotMinutes","handleServiceSelect","Suspense","fallback","ReadonlyInfo","phoneNumber","PhoneNumber","getEventTimes","handleEventRender","arg","currentWeekDay","minTimeReserve","MinTimeReserve","isReadonly","hideSeatCount","HideSeatCount","isWeekendDisabled","WeekendDisabled","handleEventClassNames","eventTimes","slotDuration","areEventsLoading","stepNames","dateTime","stepOrder","pendingLength","shouldHideInitialProgressBar","companyFromContext","completedSteps","setCompletedSteps","hasProgressed","setHasProgressed","lastIndex","keys","forEach","getStepIsCompleted","getStepByIndex","nextStep","modifiedStepIndex","stepsToReset","steps","findIndex","modifyStep","jumpToEnd","pop","every","getStepComponent","ReservationOrder","ServiceFirstWithAllCalendarOption","CanUserSelectCalendar","ContactDetailType","bookingFlowReducer","SET_RESERVATION_END_USER","HANDLE_USER_CHANGE","HANDLE_INVOICE_CHANGE","RELOAD_RESERVATIONS","newReservations","newStepOrderTypes","newActiveReservationIndex","newActiveStepIndex","getStepOrder","SET_RESERVATIONS","stepType","currentReservation","currentStepOrder","newReservation","orderType","reservationStepType","value2","hasValueChanged","rule","dependentSteps","clearObsoleteStepValues","ADD_RESERVATION","stepOrderType","REMOVE_RESERVATION","removedReservations","_","removedStepOrderTypes","SET_ACTIVE_RESERVATION","indexOf","SET_AUTO_SELECTED","SET_STEP_ORDER_TYPES","newStepOrderType","TimetableWithQuestions","HasQuestions","HasArriveTime","SET_ACTIVE_STEP_INDEX","useReducer","dispatch","setReservations","setStepOrderTypes","setActiveStepIndex","useBookingFlowReducer","handleActiveStepIndexChange","Circle","fill","focusable","x","y","viewBox","d","webpage","facebookPage","ContactDetail","icon","text","link","linkAttributes","External","startsWith","createRealLink","Nl2br","contactInfo","PublicEmail","PublicPhoneNumber","Address","MapLink","OpeningHours","WebPageLink","FacebookPageLink","hasDetails","hasSocial","windowWidth","useLayoutEffect","contactsSection","classList","remove","children","hasOverlappingElements","arr","Array","from","getBoundingClientRect","rect1","rect2","right","left","contactUs","LogoLink","BackgroundLink","isBookRoute","embedOptions","hideCompanyInfo","mode","WebPage","resetBookingFlow","hasBookingFlow","OnlyPreReservation","order","ProgressBar","CallToAction","redirectAfterSendReservation","customSuccesLink","Blocked","queryParams","createQueryParams","divider","params","append","hostname","toString","clientKey","User","PersonCount","reservationEndFields","rules","signupFields","MIN_PASSWORD_LENGTH","MAX_PASSWORD_LENGTH"],"sourceRoot":""}