{"version":3,"sources":["redux/history.ts","actions/rootWidget/RootWidgetActionsTypes.ts","config/constants.ts","helpers/helpers.ts","reducers/RootWidgetReducer.ts","actions/reserveForm/ReserveFormActionsTypes.ts","reducers/ReseveFormReducer.ts","reducers/index.ts","config/systems.ts","config/api.js","helpers/dateHelpers.ts","helpers/localStorageHelpers.ts","api/index.ts","api/utils.ts","actions/rootWidget/RootWidgetActions.ts","actions/reserveForm/ReserveFormActions.ts","locales/index.ts","helpers/constants.ts","sagas/RootWidgetSagas.ts","sagas/ReserveFormSaga.ts","sagas/index.ts","redux/index.ts","containers/App/ShowIfInitializedComp/ShowInitialized.tsx","containers/App/ShowIfInitializedComp/index.tsx","containers/App/ThemeComp/ThemeComp.tsx","utils.ts","containers/App/ThemeComp/index.tsx","components/BookingForm/PersonSelect.tsx","components/BookingForm/DatePicker.tsx","components/BookingForm/WidgetReserveTimeSelect.tsx","components/Common/TextFieldComp.tsx","components/Common/TextAreaComp.tsx","components/Common/CheckBoxComp.tsx","components/BookingForm/PhoneField.tsx","components/BookingForm/BookingFields.tsx","components/BookingForm/index.tsx","containers/ReserveFormCont/ReserveForm.tsx","containers/ReserveFormCont/index.ts","components/SMSCodeForm/PinCode.tsx","components/SMSCodeForm/index.tsx","containers/SmsCodeFormCont/SmsCodeForm.tsx","containers/SmsCodeFormCont/index.ts","components/ReserveProcessing/index.tsx","containers/ReserveProcessingCont/ReserveProcessingCont.tsx","containers/ReserveProcessingCont/index.ts","components/Common/ReserveInfo.tsx","components/ReserveSuccess/index.tsx","containers/ReserveSuccessCont/ReserveSuccessCont.tsx","containers/ReserveSuccessCont/index.ts","components/Errors/UnknownError.tsx","components/Errors/ActiveReserveError.tsx","containers/ErrorCont/ErrorCont.tsx","containers/ErrorCont/index.ts","containers/RootWidgetCont/RootWidget.tsx","containers/RootWidgetCont/styles.ts","containers/RootWidgetCont/index.ts","containers/App/AppComp.tsx","containers/App/App.tsx","index.jsx"],"names":["history","createBrowserHistory","INIT_APP","INIT_APP_RESTAURANT_INFO","INIT_APP_WIDGET_STATE","SMS_CODE_VERIFY_REQUEST","SMS_CODE_VERIFY_SUCCESS","SMS_CODE_VERIFY_ERROR","GUEST_BOOKING_REQUEST","GUEST_BOOKING_QUEUE_PROCESSING","GUEST_BOOKING_SUCCESS","GUEST_BOOKING_ERROR","DELETE_RESERVE_REQUEST","DELETE_RESERVE_SUCCESS","DELETE_RESERVE_ERROR","REGISTRATION_REQUEST","REGISTRATION_REQUEST_SUCCESS","REGISTRATION_REQUEST_ERROR","RESEND_REGISTRATION_REQUEST","reserveWidgetState","FORM_STATE","SMS_VERIFY_STATE","PROCESSING_STATE","SUCCESS_STATE","ERROR","emptyTime","emptyString","weekDays","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY","errorType","unknownError","activeReserve","phoneCode","ru","key","code","firstLabel","secondLabel","title","ukr","est","uz","am","ge","kz","ae","us","az","sortPhoneCodeByTitle","a","b","nameA","toUpperCase","nameB","onlyNumbers","value","replace","normalizePhone","onlyNums","length","concat","slice","azPos","azLength","getWidgetIdFromUrl","id","window","location","pathname","match","parseInt","isFullScreen","document","body","clientWidth","initState","widgetId","widgetState","confirmCodeRequested","timeLeft","restaurantInfoInitialized","restaurantInfo","address","name","phone","countryCode","bookingIsProcessing","smsCodeError","bookingId","undefined","bookingError","bookingReqData","comment","persons","time","date","dateForReq","fullName","smsNotificationIsEnabled","reducer","state","arguments","action","type","RootWidgetActionsTypes","Object","objectSpread","payload","bookingData","error","reserveInfo","GET_TABLES_COUNT_REQUEST","GET_TABLES_COUNT_SUCCESS","GET_TABLES_COUNT_ERROR","GET_MAX_PERSON_COUNT_REQUEST","GET_MAX_PERSON_COUNT_SUCCESS","GET_MAX_PERSON_COUNT_ERROR","RESTAURANT_SCHEDULE_REQUEST","RESTAURANT_SCHEDULE_SUCCESS","freeTables","freeTablesError","maxPersons","scheduleOptions","ReserveFormActionsTypes","systems","clientId","secretKey","host","process","api","token","restaurantWidget","restaurantTable","restaurantSchedule","sendConfirmCode","widgetBooking","itsTomorrow","open","reserveTime","mergeDateAndTime","parseTime","split","moment","set","hour","minute","second","millisecond","getWidgetTimeList","targetDate","workTime","timeLabels","_workTime$weekDay","locale","format","start","end","endParse","endMoment","hours","minutes","startParse","startMoment","diff","interval","Math","ceil","roundCurrentTimeBy","add","timesToStop","i","push","parseDateForReq","getWidgetMergedSchedule","scheduleList","reduce","schedule","group","records","_objectSpread2","nextDay","day","getNextWeekDay","forEach","defineProperty","previous","WIDGET_ACCESS_TOKEN_KEY","WIDGET_REFRESH_TOKEN_KEY","getToken","tokenName","widgetData","localStorage","getItem","tokens","JSON","parse","removeItem","setTokens","accessToken","refreshToken","_data","data","setItem","stringify","setWidgetData","reserveId","userData","oldWidgetData","newData","getWidgetData","parseWidgetData","clearWidgetData","axios","create","withCredentials","interceptors","request","use","config","configResult","url","ConfigAPI","headers","Authorization","response","originalRequest","status","Promise","reject","_retry","base64BasicKey","btoa","post","refreshTokenReq","then","res","parseOldWidgetData","updateToken","access_token","refresh_token","getTablesCountReq","get","params","r","count","sendConfirmCodeReq","verifySmsCodeReq","formData","FormData","append","guestBookingReq","parsedName","firstName","lastName","splice","join","isNotificationEnabled","getRestaurantInfo","bookingStatus","getActiveBookingInfo","deleteBooking","delete","getRestaurantScheduleReq","getMaxPersonCountReq","maxCapacity","queryWithRetry","requestFunction","retries","lastError","_args","regenerator_default","wrap","_context","prev","next","abrupt","sent","t0","Error","delay","stop","_marked","ActionTypes","initAppRestaurantInfo","initAppWidgetState","sendRegistrationRequest","resendRegistrationRequest","verifySmsCode","smsCode","verifySmsCodeSuccess","verifySmsCodeError","guestBooking","guestBookingSuccess","guestBookingQueueProcessing","guestBookingError","getFreeTables","getRestaurantSchedule","getRestaurantScheduleSuccess","getMaxPersonCount","getMaxPersonCountError","i18next","init","lng","debug","resources","locales","fallbackColors","mainColor","formBackground","pageBackground","formHeaderColor","formBaseColor","formFieldColor","fallbackValue","settings","isShowHeader","isEmailRequired","isLastNameRequired","colors","watchStatus","initApp","sendConfirmationCodeSaga","verifyConfirmationCodeSaga","approveReserveStatusSaga","guestBookingSaga","deleteReserveSaga","saga","BOOKING_STATUS_ACCEPTED","BOOKING_STATUS_ERROR","BOOKING_STATUS_DECLINED","BOOKING_STATUS_CANCELED","BOOKING_STATUS_CREATED","BOOKING_SENT","BOOKING_STATUS_REQUEST_DELAY","INCORRECT_CODE_CODE","BOOKING_NOT_CLOSED","route","matched","_ref","select","router","matchPath","path","strict","Number","put","ReserveWidgetActions","ReserveFormActions","RootWidgetSagas_marked","_context2","call","Sentry","_marked2","addressString","restaurantName","_ref3","_context3","fork","apiUtils","city","street","home","info","assign","console","log","message","_marked3","_ref4","_ref5","confirmReqData","_context4","root","t","t1","_","isUndefined","_marked4","_ref6","verifyReqData","errorMessage","_context5","_marked5","apiResponse","_context6","_marked6","_ref7","bookingInfo","_context7","_marked7","_context8","_marked8","_context9","all","takeLatest","LOCATION_CHANGE","ReserveWidgetActionsTypes","_marked9","getFreeTablesSaga","getMaxPersonsCountSaga","_action$payload","ReserveFormSaga_marked","scheduleData","onlyDefaultScheduleList","weekScheduleCollection","filter","ReserveFormSaga_marked2","ReserveFormSaga_marked3","ReserveFormSaga_marked4","rootSaga","rootWidget","reserveFormSaga","sagas_marked","sagaMiddleware","createSagaMiddleware","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","sentryReduxEnhancer","enhancer","applyMiddleware","routerMiddleware","store","createStore","combineReducers","reserveForm","form","run","ShowInitialized","initialized","children","react_default","createElement","Fragment","connect","ThemeComp","_useState","useState","_useState2","slicedToArray","theme","setTheme","useEffect","createMuiTheme","themeColors","primary","primaryHover","darken","primarySelected","fade","primaryPostHover","typography","h4","fontFamily","fontSize","lineHeight","h5","h6","subtitle1","subtitle2","body1","caption","color","button","textTransform","palette","main","contrastText","secondary","text","hint","overrides","MuiInput","input","&:-webkit-autofill","-webkit-box-shadow","-webkit-text-fill-color","underline","&:hover:not($disabled):not($focused):not($error):before","borderBottomColor","MuiFormLabel","MuiDialog","backgroundColor","MuiBackdrop","MuiDialogContent","MuiTooltip","tooltip","maxWidth","padding","MuiPaper","MuiPickersToolbarText","toolbarTxt","MuiPickersCalendarHeader","iconButton","MuiMenu","paper","MuiMenuItem","&$selected","fontWeight","&:focus","&:hover","generateThemeOptions","ThemeProvider","styles","createStyles","isError","withStyles","_ref$meta","meta","touched","classes","capacityList","Array","fill","map","v","FormControl","fullWidth","InputLabel","htmlFor","Select","className","classNames","MenuItem","person","DatePickerComp","renderDate","isSame","useUtils_cfb96ac9","libInstance","utils","MomentUtils","DatePicker","autoOk","variant","label","disablePast","invalidLabel","emptyLabel","TextFieldComponent","props","onClick","inputRef","colorError","TextField","InputProps","style","disabled","shrink","inputProps","selected","alignItems","TextFieldComp","staticValue","readOnly","formTextInput","textAlign","& .MuiTypography-root","textAreaCont","&& textarea","overflowX","_ref$rows","rows","multiline","maxLength","Typography_default","CheckBoxComp","FormControlLabel_default","control","Checkbox_default","FormHelperText","fieldWrap","display","paddingTop","phoneField","marginRight","endAdornment","number","change","_useState3","_useState4","focused","setFocused","first","substr","firstTwo","firstThree","getCodePhoneNumber","codeValue","firstCountryKey","getLocale","prototype","hasOwnProperty","toLocaleLowerCase","onChange","e","target","disableUnderline","defaultValue","renderValue","codes","values","sort","toConsumableArray","item","getPhoneCodes","onFocus","onBlur","BookingFields","_this","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","onChangeDate","getSchedule","selectedTime","setState","updateBookingData","onChangeTime","onChangePersonsCount","personsCount","onChangeAgreement","checked","agreement","_this$state","_this$props","valueChanged","mergedDate","_this2","_this$state2","_this$props2","tables","Grid_default","container","spacing","xs","sm","Field","component","PersonSelect","WidgetReserveTimeSelect","PhoneField","TextAreaComp","tablesNumberText","tablesNumber","tablesNumberError","errorWrap","errorText","paddingBottom","href","textDecoration","PureComponent","fieldStyle","content","width","marginLeft","height","flexDirection","justifyContent","position","BookingForm","handleSubmit","isLoading","fullScreen","formWrap","onSubmit","BookingForm_BookingFields","Button_default","btnStyle","CircularProgress","size","provideDesc","provideDescFullScreen","logo","marginBottom","reduxForm","validate","errors","ReserveFormCont","handleSubmitForm","smsInfo","mergeDate","onBookingFieldsChange","onScheduleRequest","components_BookingForm","initialValues","dispatch","bindActionCreators","ReserveForm","discardNaN","string","result","char","PinCode","textInputs","handleKeyDown","element","currentId","dataset","prevElement","keyCode","focus","handleInput","fieldMaxLength","numberOnly","inputs","nextElement","neWinputs","newValue","rest","handleChange","onFullFilled","isFullFilled","_this$props3","fieldsCount","String","_this$props4","safariStyles","navigator","vendor","indexOf","userAgent","inputsCont","inputField","safariInput","ref","data-id","tabIndex","onInput","onKeyDown","defaultProps","margin","outline","border","background","borderBottom","SMSCodeForm","tick","timeLeftFromReq","clearInterval","showResend","startResendTimer","setInterval","handleSendSmsCode","handleVerifySmsCode","phoneNumber","Typography_Typography","align","SMSCodeForm_PinCode","seconds","onClickResendSms","flex","marginTop","opacity","SmsCodeForm","components_SMSCodeForm","_state$root","processCont","processText","processCancel","handleDeleteBooking","Button_Button","ReserveProcessingCont","ReserveProcessing","confirmedPaper","confirmedInfo","confirmedCell","confirmedIcon","Paper","elevation","Grid_Grid","Group_default","AccessTime_default","Index","successCont","restaurantInfoWrap","Common_ReserveInfo","RootWidget","ReserveSuccess","ReserveSuccessCont","cancelSharpIcon","msgWrap","CancelSharp_default","ErrorCont","errorBody","Errors_UnknownError","Errors_ActiveReserveError","DialogContent","Component","widgetContent","containers_ReserveFormCont","SmsCodeFormCont","containers_ReserveProcessingCont","containers_ReserveSuccessCont","containers_ErrorCont","Dialog","aria-labelledby","scroll","DialogTitle","minHeight","AppComp","react","CssBaseline","react_router","ReserveWidget","App","es","connected_react_router_esm","ShowIfInitializedComp","App_ThemeComp","App_AppComp","REACT_APP_SENTRY_DSN","REACT_APP_NAME","REACT_APP_VERSION","sentryConfig","dsn","environment","integrations","Integrations","BrowserTracing","tracesSampleRate","release","ReactDOM","render","containers_App_App","getElementById"],"mappings":"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","file":"static/js/main.0b5a3c45.chunk.js","sourcesContent":["import { createBrowserHistory, History } from 'history';\n\nconst history: History = createBrowserHistory();\n\nexport default history;\n","export const INIT_APP = 'INIT_APP';\nexport const INIT_APP_RESTAURANT_INFO = 'INIT_APP_RESTAURANT_INFO';\nexport const INIT_APP_WIDGET_STATE = 'INIT_APP_WIDGET_STATE';\n\nexport const SMS_CODE_VERIFY_REQUEST = 'SMS_CODE_VERIFY_REQUEST';\nexport const SMS_CODE_VERIFY_SUCCESS = 'SMS_CODE_VERIFY_SUCCESS';\nexport const SMS_CODE_VERIFY_ERROR = 'SMS_CODE_VERIFY_ERROR';\n\nexport const GUEST_BOOKING_REQUEST = 'GUEST_BOOKING_REQUEST';\nexport const GUEST_BOOKING_QUEUE_PROCESSING = 'GUEST_BOOKING_QUEUE_PROCESSING';\nexport const GUEST_BOOKING_SUCCESS = 'GUEST_BOOKING_SUCCESS';\nexport const GUEST_BOOKING_ERROR = 'GUEST_BOOKING_ERROR';\n\nexport const DELETE_RESERVE_REQUEST = 'DELETE_RESERVE_REQUEST';\nexport const DELETE_RESERVE_SUCCESS = 'DELETE_RESERVE_SUCCESS';\nexport const DELETE_RESERVE_ERROR = 'DELETE_RESERVE_ERROR';\n\nexport const REGISTRATION_REQUEST = 'REGISTRATION_REQUEST';\nexport const REGISTRATION_REQUEST_SUCCESS = 'REGISTRATION_REQUEST_SUCCESS';\nexport const REGISTRATION_REQUEST_ERROR = 'REGISTRATION_REQUEST_ERROR';\n\nexport const RESEND_REGISTRATION_REQUEST = 'RESEND_REGISTRATION_REQUEST';\n","import { IBookingErrorType } from '../types/IRootWidgetStore';\n\nexport const reserveWidgetState = {\n FORM_STATE: 'FORM_STATE',\n SMS_VERIFY_STATE: 'SMS_VERIFY_STATE',\n PROCESSING_STATE: 'PROCESSING_STATE',\n SUCCESS_STATE: 'SUCCESS_STATE',\n ERROR: 'ERROR',\n};\n\nexport const emptyTime = '-';\n\nexport const emptyString = '-';\n\nexport const weekDays = {\n MONDAY: 'MONDAY',\n TUESDAY: 'TUESDAY',\n WEDNESDAY: 'WEDNESDAY',\n THURSDAY: 'THURSDAY',\n FRIDAY: 'FRIDAY',\n SATURDAY: 'SATURDAY',\n SUNDAY: 'SUNDAY',\n};\n\nexport const errorType: {\n [types: string]: IBookingErrorType\n} = {\n unknownError: 'unknownError',\n activeReserve: 'activeReserve'\n};\n\ninterface IPhoneCode {\n key: string;\n code: string;\n firstLabel: string;\n secondLabel: string;\n title: string;\n}\n\ninterface IPhoneCodes {\n [key: string]: IPhoneCode;\n}\n\nexport const phoneCode: IPhoneCodes = {\n ru: {\n key: 'ru',\n code: '+7',\n firstLabel: '🇷🇺 (+7)',\n secondLabel: '🇷🇺 Россия (+7)',\n title: 'Россия',\n },\n ukr: {\n key: 'ukr',\n code: '+380',\n firstLabel: '🇺🇦 (+380)',\n secondLabel: '🇺🇦 Украина (+380)',\n title: 'Украина',\n },\n est: {\n key: 'est',\n code: '+372',\n firstLabel: '🇪🇪 (+372)',\n secondLabel: '🇪🇪 Эстония (+372)',\n title: 'Эстония',\n },\n uz: {\n key: 'uz',\n code: '+998',\n firstLabel: '🇺🇿 (+998)',\n secondLabel: '🇺🇿 Узбекистан (+998)',\n title: 'Узбекистан',\n },\n am: {\n key: 'am',\n code: '+374',\n firstLabel: '🇦🇲 (+374)',\n secondLabel: '🇦🇲 Армения (+374)',\n title: 'Армения',\n },\n ge: {\n key: 'ge',\n code: '+995',\n firstLabel: '🇬🇪 (+995)',\n secondLabel: '🇬🇪 Грузия (+995)',\n title: 'Грузия',\n },\n kz: {\n key: 'kz',\n code: '+77',\n firstLabel: '🇰🇿 (+77)',\n secondLabel: '🇰🇿 Казахстан (+77)',\n title: 'Казахстан',\n },\n ae: {\n key: 'ae',\n code: '+971',\n firstLabel: '🇦🇪 (+971)',\n secondLabel: '🇦🇪 ОАЭ (+971)',\n title: 'ОАЭ',\n },\n us: {\n key: 'us',\n code: '+1',\n firstLabel: '🇺🇸 (+1)',\n secondLabel: '🇺🇸 США (+1)',\n title: 'США',\n },\n az: {\n key: 'az',\n code: '+994',\n firstLabel: '🇦🇿 (+994)',\n secondLabel: '🇦🇿 Азербайджан (+994)',\n title: 'Азербайджан',\n },\n};\n\nconst sortPhoneCodeByTitle = (a: IPhoneCode, b: IPhoneCode) => {\n const nameA = a.title.toUpperCase();\n const nameB = b.title.toUpperCase();\n\n if (nameA < nameB) {\n return -1;\n }\n\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n};\n\nexport const getPhoneCodes = (firstCountryKey?: string): Array => {\n const codes = Object.values(phoneCode).sort(sortPhoneCodeByTitle);\n\n if (firstCountryKey) {\n return [\n phoneCode[firstCountryKey],\n ...codes.filter(item => item.key !== firstCountryKey),\n ];\n }\n\n return codes;\n};\n","import { phoneCode } from '../config/constants';\n\nfunction onlyNumbers(value: string) {\n return value.replace(/[^\\d]/g, '');\n}\n\n/** @description Разбор номера на код и номер */\nfunction getCodePhoneNumber(number: string): {\n code: string,\n number: string,\n} {\n const onlyNums = onlyNumbers(number);\n const first = onlyNums.length >= 1 && onlyNums.substr(0, 1);\n const firstTwo = onlyNums.length >= 2 && onlyNums.substr(0, 2);\n const firstThree = onlyNums.length >= 3 && onlyNums.substr(0, 3);\n\n if (first) {\n if (firstThree) {\n if (`+${firstThree}` === phoneCode.uz.code) {\n return {\n code: phoneCode.uz.code,\n number: normalizePhone(onlyNums.slice(3), phoneCode.uz.code),\n };\n }\n\n if (`+${firstThree}` === phoneCode.am.code) {\n return {\n code: phoneCode.am.code,\n number: normalizePhone(onlyNums.slice(3), phoneCode.am.code),\n };\n }\n\n if (`+${firstThree}` === phoneCode.ge.code) {\n return {\n code: phoneCode.ge.code,\n number: normalizePhone(onlyNums.slice(3), phoneCode.ge.code),\n };\n }\n\n if (`+${firstThree}` === phoneCode.az.code) {\n return {\n code: phoneCode.az.code,\n number: normalizePhone(onlyNums.slice(3), phoneCode.az.code),\n };\n }\n\n if (`+${firstThree}` === phoneCode.ae.code) {\n return {\n code: phoneCode.ae.code,\n number: normalizePhone(onlyNums.slice(3), phoneCode.ae.code),\n };\n }\n }\n\n if (firstTwo) {\n if (`+${firstTwo}` === phoneCode.ukr.code) {\n return {\n code: phoneCode.ukr.code,\n number: normalizePhone(onlyNums.slice(2), phoneCode.ukr.code),\n };\n }\n\n if (`+${firstTwo}` === phoneCode.est.code) {\n return {\n code: phoneCode.est.code,\n number: normalizePhone(onlyNums.slice(2), phoneCode.est.code),\n };\n }\n\n if (`+${firstTwo}` === phoneCode.kz.code) {\n return {\n code: phoneCode.kz.code,\n number: normalizePhone(onlyNums.slice(2), phoneCode.kz.code),\n };\n }\n }\n\n if (`+${first}` === phoneCode.ru.code) {\n return {\n code: phoneCode.ru.code,\n number: normalizePhone(onlyNums.slice(1), phoneCode.ru.code),\n };\n }\n\n if (`+${first}` === phoneCode.us.code) {\n return {\n code: phoneCode.us.code,\n number: normalizePhone(onlyNums.slice(1), phoneCode.us.code),\n };\n }\n }\n\n return {\n code: phoneCode.ru.code,\n number: '',\n };\n}\n\n/** @description Нормализация номера телефона в формат +7 999 9999999 или +380 99 999999 для полей ввода */\nconst normalizePhone = (value: string, code: string): string => {\n const onlyNums = onlyNumbers(value);\n if (onlyNums) {\n if (\n code === phoneCode.ru.code\n || code === phoneCode.us.code\n ) {\n if (onlyNums.length <= 3) {\n return onlyNums;\n }\n\n return `${onlyNums.slice(0, 3)} ${onlyNums.slice(3, 10)}`;\n\n } else if (code === phoneCode.az.code) {\n // Если добавляют 0 перед кодом, например +994 055 225 2206\n const azPos = onlyNums[0] === '0' ? 3 : 2;\n const azLength = onlyNums[0] === '0' ? 10 : 9;\n\n if (onlyNums.length <= azPos) {\n return onlyNums;\n }\n\n return `${onlyNums.slice(0, azPos)} ${onlyNums.slice(azPos, azLength)}`;\n\n } else if (\n code === phoneCode.ukr.code\n || code === phoneCode.uz.code\n || code === phoneCode.am.code\n || code === phoneCode.ge.code\n || code === phoneCode.kz.code\n || code === phoneCode.ae.code\n ) {\n if (onlyNums.length <= 2) {\n return onlyNums;\n }\n\n return `${onlyNums.slice(0, 2)} ${onlyNums.slice(2, 9)}`;\n\n } else if (code === phoneCode.est.code) {\n if (onlyNums.length <= 2) {\n return onlyNums;\n }\n\n return `${onlyNums.slice(0, 2)} ${onlyNums.slice(2, 8)}`;\n }\n\n return value;\n }\n\n return '';\n};\n\nfunction getWidgetIdFromUrl() {\n const id = window.location.pathname.match(/\\d+/g);\n\n if (id && id.length > 0) {\n return parseInt(id[0]);\n }\n\n return 0\n}\n\nfunction isFullScreen() {\n return document.body.clientWidth < 960;\n}\n\nfunction isSafari() {\n return navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\n navigator.userAgent &&\n navigator.userAgent.indexOf('CriOS') == -1 &&\n navigator.userAgent.indexOf('FxiOS') == -1;\n}\n\nexport {\n normalizePhone,\n getWidgetIdFromUrl,\n isFullScreen,\n isSafari,\n onlyNumbers,\n getCodePhoneNumber,\n};\n","import { IAppActions } from '../types/IAppActions';\nimport { IRootWidgetStore } from '../types/IRootWidgetStore';\nimport * as RootWidgetActionsTypes from '../actions/rootWidget/RootWidgetActionsTypes';\nimport { reserveWidgetState } from '../config/constants';\nimport { getWidgetIdFromUrl } from '../helpers/helpers';\n\nexport const initState: IRootWidgetStore = {\n widgetId: getWidgetIdFromUrl(),\n widgetState: reserveWidgetState.FORM_STATE,\n confirmCodeRequested: false,\n timeLeft: 0,\n restaurantInfoInitialized: true,\n restaurantInfo: {\n address: ' ',\n name: ' ',\n phone: ' ',\n countryCode: '',\n },\n bookingIsProcessing: false,\n smsCodeError: '',\n bookingId: undefined,\n bookingError: undefined,\n bookingReqData: {\n comment: '',\n persons: 0,\n time: '-',\n date: '-',\n dateForReq: '',\n fullName: '',\n phone: '',\n smsNotificationIsEnabled: true,\n }\n};\n\nexport default function reducer(state = initState, action: IAppActions): IRootWidgetStore {\n switch (action.type) {\n case RootWidgetActionsTypes.INIT_APP_RESTAURANT_INFO: {\n return {\n ...state,\n restaurantInfo: action.payload.restaurantInfo,\n restaurantInfoInitialized: true,\n }\n }\n\n case RootWidgetActionsTypes.REGISTRATION_REQUEST:\n return {\n ...state,\n confirmCodeRequested: true,\n bookingReqData: action.payload.bookingData,\n };\n\n case RootWidgetActionsTypes.REGISTRATION_REQUEST_SUCCESS:\n let widgetState = reserveWidgetState.SMS_VERIFY_STATE\n if (state.restaurantInfo.countryCode !== 'RU') {\n widgetState = reserveWidgetState.PROCESSING_STATE\n }\n\n return {\n ...state,\n widgetState: widgetState,\n confirmCodeRequested: true,\n timeLeft: action.payload.timeLeft,\n };\n\n case RootWidgetActionsTypes.REGISTRATION_REQUEST_ERROR:\n return {\n ...state,\n confirmCodeRequested: false,\n };\n\n case RootWidgetActionsTypes.SMS_CODE_VERIFY_REQUEST:\n return {\n ...state,\n smsCodeError: '',\n };\n\n case RootWidgetActionsTypes.SMS_CODE_VERIFY_SUCCESS:\n return {\n ...state,\n widgetState: reserveWidgetState.PROCESSING_STATE,\n };\n\n case RootWidgetActionsTypes.SMS_CODE_VERIFY_ERROR:\n return {\n ...state,\n smsCodeError: action.payload.smsCodeError,\n };\n\n case RootWidgetActionsTypes.GUEST_BOOKING_SUCCESS:\n return {\n ...state,\n widgetState: reserveWidgetState.SUCCESS_STATE,\n };\n\n case RootWidgetActionsTypes.GUEST_BOOKING_ERROR:\n return {\n ...state,\n widgetState: reserveWidgetState.ERROR,\n bookingError: {\n type: action.error,\n bookingData: action.bookingData,\n },\n };\n\n case RootWidgetActionsTypes.GUEST_BOOKING_QUEUE_PROCESSING:\n return {\n ...state,\n bookingIsProcessing: true,\n bookingId: action.payload.bookingId,\n };\n\n case RootWidgetActionsTypes.DELETE_RESERVE_SUCCESS:\n return {\n ...state,\n bookingIsProcessing: false,\n widgetState: reserveWidgetState.FORM_STATE,\n };\n\n case RootWidgetActionsTypes.INIT_APP_WIDGET_STATE: {\n if (action.payload.state === reserveWidgetState.PROCESSING_STATE) {\n return {\n ...state,\n bookingReqData: action.payload.reserveInfo,\n widgetState: reserveWidgetState.PROCESSING_STATE\n }\n }\n\n return {\n ...state,\n bookingReqData: action.payload.reserveInfo,\n }\n }\n\n default:\n return state;\n }\n}\n","export const GET_TABLES_COUNT_REQUEST = 'GET_TABLES_COUNT_REQUEST';\nexport const GET_TABLES_COUNT_SUCCESS = 'GET_TABLES_COUNT_SUCCESS';\nexport const GET_TABLES_COUNT_ERROR = 'GET_TABLES_COUNT_ERROR';\n\nexport const GET_MAX_PERSON_COUNT_REQUEST = 'GET_MAX_PERSON_COUNT_REQUEST';\nexport const GET_MAX_PERSON_COUNT_SUCCESS = 'GET_MAX_PERSON_COUNT_SUCCESS';\nexport const GET_MAX_PERSON_COUNT_ERROR = 'GET_MAX_PERSON_COUNT_ERROR';\n\nexport const RESTAURANT_SCHEDULE_REQUEST = 'RESTAURANT_SCHEDULE_REQUEST';\nexport const RESTAURANT_SCHEDULE_SUCCESS = 'RESTAURANT_SCHEDULE_SUCCESS';\n","import { IAppActions } from '../types/IAppActions';\nimport { IReserveFormStore } from '../types/IReserveFormStore';\nimport * as ReserveFormActionsTypes from '../actions/reserveForm/ReserveFormActionsTypes';\n\nexport const initState: IReserveFormStore = {\n freeTables: 0,\n freeTablesError: false,\n maxPersons: 8,\n date: '',\n persons: 0,\n scheduleOptions: [],\n};\n\nexport default function reducer(state = initState, action: IAppActions): IReserveFormStore {\n switch (action.type) {\n case ReserveFormActionsTypes.GET_TABLES_COUNT_REQUEST:\n return {\n ...state,\n date: action.payload.date,\n persons: action.payload.persons,\n };\n\n case ReserveFormActionsTypes.GET_TABLES_COUNT_SUCCESS:\n return {\n ...state,\n freeTables: action.payload.freeTables,\n freeTablesError: !action.payload.freeTables || action.payload.freeTables === 0,\n };\n\n case ReserveFormActionsTypes.RESTAURANT_SCHEDULE_SUCCESS:\n return {\n ...state,\n scheduleOptions: action.payload.scheduleOptions,\n };\n\n case ReserveFormActionsTypes.GET_MAX_PERSON_COUNT_SUCCESS:\n case ReserveFormActionsTypes.GET_MAX_PERSON_COUNT_ERROR:\n return {\n ...state,\n maxPersons: action.payload.persons,\n };\n\n case ReserveFormActionsTypes.GET_TABLES_COUNT_ERROR: {\n return {\n ...state,\n freeTablesError: true,\n freeTables: 0,\n }\n }\n\n default:\n return state;\n }\n}\n","import { combineReducers } from 'redux';\nimport { connectRouter as router } from 'connected-react-router';\nimport { reducer as form } from 'redux-form';\n\nimport root from './RootWidgetReducer';\nimport reserveForm from './ReseveFormReducer';\n\nexport default (history: any) => combineReducers({\n reserveForm,\n root,\n router: router(history),\n form,\n});\n","const systems: { [details: string]: string; } = {\n clientId: 'guestme-client',\n secretKey: '9ACepV68zJ2x3AtN',\n};\n\nexport default systems;\n","const host = process.env.REACT_APP_BACKEND_URL_VAR;\nconst api = `${host}/api`;\nconst token = `${host}/oauth/token`;\nconst restaurantWidget = `${api}/restaurant-widget`;\nconst restaurantTable = `${api}/restaurant-table/widget`;\nconst restaurantSchedule = `${api}/restaurant-schedule/widget`;\nconst sendConfirmCode = `${api}/account/confirmation/code/request`;\nconst widgetBooking = `${api}/widget/booking`;\n\nexport {\n restaurantWidget,\n restaurantTable,\n restaurantSchedule,\n sendConfirmCode,\n token,\n widgetBooking,\n};\n","import moment, { Moment } from 'moment';\nimport { emptyString, weekDays } from '../config/constants';\n\n/**\n * @description Округление текущей даты\n * @param roundBy - дефолтное значение 15\n * @returns {Object}\n */\nconst roundCurrentTimeBy = (roundBy: number = 15): Moment => {\n const interval = roundBy * 60 * 1000;\n // @ts-ignore\n return moment(Math.ceil(moment() / interval) * interval);\n};\n\n/** @description Проверка на завтра */\nexport function itsTomorrow(open: string, reserveTime: string): boolean {\n return parseInt(open) > parseInt(reserveTime);\n}\n\n/** @description Функция для получения следующего дня недели */\nfunction getNextWeekDay(day: string): string {\n switch (day) {\n case weekDays.MONDAY:\n return weekDays.TUESDAY;\n case weekDays.TUESDAY:\n return weekDays.WEDNESDAY;\n case weekDays.WEDNESDAY:\n return weekDays.THURSDAY;\n case weekDays.THURSDAY:\n return weekDays.FRIDAY;\n case weekDays.FRIDAY:\n return weekDays.SATURDAY;\n case weekDays.SATURDAY:\n return weekDays.SUNDAY;\n case weekDays.SUNDAY:\n return weekDays.MONDAY;\n default: return emptyString;\n }\n}\n\n/**\n * @description Слияние даты и времени для запроса на бронирование\n * @param {date} date\n * @param {string} time\n */\nconst mergeDateAndTime = (date: any, time: any): Moment => {\n const parseTime = time.split(':');\n return moment(date).set(({\n hour: parseTime[0], minute: parseTime[1], second: 0, millisecond: 0,\n }));\n};\n\n/**\n * Формирование списка опций выбора доступного времени виджета\n * @param targetDate - Нужная дата\n * @param workTime - Время работы по дням\n * @returns {Array}\n */\nconst getWidgetTimeList = (targetDate: any, workTime: any) => {\n const timeLabels = [];\n const weekDay = moment(targetDate)\n .locale('en')\n .format('dddd')\n .toUpperCase();\n const { start, end } = workTime[weekDay];\n\n if (start && end) {\n const endParse = end.split(':');\n const endMoment = moment().hours(endParse[0]).minutes(endParse[1]);\n\n const startParse = start.split(':');\n let startMoment = moment().hours(startParse[0]).minutes(startParse[1]);\n const isToday = moment(0, 'HH').diff(targetDate, 'day') === 0;\n\n // Делаем невозможность выбора в прошлом\n if (isToday && moment() > startMoment) {\n startMoment = roundCurrentTimeBy();\n }\n\n // Если открытие позже закрытия, считаем и на следующий день\n if (parseInt(startParse[0]) > parseInt(endParse[0])) {\n endMoment.add(1, 'day');\n }\n\n const timesToStop = endMoment.diff(startMoment, 'minutes') / 15;\n\n for (let i = 0; i <= timesToStop; i += 1) {\n startMoment.add(i === 0 ? 0 : 15, 'minutes');\n timeLabels.push(startMoment.format('HH:mm'));\n }\n }\n\n return timeLabels;\n};\n\n/** @description Парсинг даты для отправки на бэк */\nconst parseDateForReq = (date: string | Moment): string => moment(date).format('YYYY-MM-DDTHH:mm:ss');\n\n/** @description Мержим расписание для формирования списка времени работы ресторана для виджета */\nconst getWidgetMergedSchedule = (scheduleList: Array) => {\n return scheduleList.reduce((schedule: any, group) => {\n if (group.records.length > 1) {\n const nextDay = getNextWeekDay(group.day);\n const time = {\n start: '',\n end: '',\n };\n\n group.records.forEach((i: any) => i.day === group.day\n ? time.start = i.start\n : time.end = i.end);\n\n return {\n ...schedule,\n [group.day]: {\n ...schedule[group.day],\n start: time.start,\n end: time.end,\n },\n [nextDay]: {\n ...schedule[nextDay],\n previous: time.end,\n },\n };\n }\n\n return {\n ...schedule,\n [group.day]: {\n ...schedule[group.day],\n start: group.records[0].start,\n end: group.records[0].end,\n },\n };\n }, {});\n};\n\nexport {\n roundCurrentTimeBy,\n mergeDateAndTime,\n getWidgetMergedSchedule,\n parseDateForReq,\n getWidgetTimeList,\n};\n","import moment from 'moment';\n\nimport { getWidgetIdFromUrl } from './helpers';\nimport { IBookingData } from '../types/IRootWidgetStore';\n\nconst WIDGET_ACCESS_TOKEN_KEY = 'WIDGET_ACCESS_TOKEN_KEY';\nconst WIDGET_REFRESH_TOKEN_KEY = 'WIDGET_REFRESH_TOKEN_KEY';\n\ntype widgetData = {\n WIDGET_ACCESS_TOKEN_KEY: string;\n WIDGET_REFRESH_TOKEN_KEY: string;\n date: string;\n reserveId: number;\n userData: IBookingData\n};\n\n/**\n * @description Получить токен по ключу\n * @param tokenName\n */\nfunction getToken(tokenName: string): string | null {\n const id = getWidgetIdFromUrl();\n const widgetData = localStorage.getItem(`${id}`);\n\n if (!widgetData) {\n return null;\n }\n\n const tokens = JSON.parse(widgetData);\n\n if (tokens[tokenName]) {\n const currentTime = moment();\n\n if (currentTime.diff(moment(tokens.date), 'h') < 24) {\n return tokens[tokenName];\n } else {\n localStorage.removeItem(`${id}`);\n }\n\n return null;\n }\n\n return null;\n}\n\n/**\n * @description Сохраняем токены в локал сторадж\n * т.к этот метод вызывается в момент авторизации/регистрации юзера то перетераем старрые данные\n * @param accessToken\n * @param refreshToken\n */\nfunction setTokens(\n accessToken: string,\n refreshToken: string,\n) {\n const id = getWidgetIdFromUrl();\n\n const data = {\n [WIDGET_ACCESS_TOKEN_KEY]: accessToken,\n [WIDGET_REFRESH_TOKEN_KEY]: refreshToken,\n date: moment().format(),\n };\n\n localStorage.setItem(`${id}`, JSON.stringify(data));\n}\n\n\n/**\n * @description Обновление токена\n * @param accessToken\n * @param refreshToken\n */\nfunction updateToken(accessToken: string, refreshToken: string) {\n const id = getWidgetIdFromUrl();\n const oldWidgetData = localStorage.getItem(`${id}`);\n\n if (oldWidgetData) {\n const parseOldWidgetData = JSON.parse(oldWidgetData);\n\n const newData = {\n ...parseOldWidgetData,\n [WIDGET_ACCESS_TOKEN_KEY]: accessToken,\n [WIDGET_REFRESH_TOKEN_KEY]: refreshToken,\n };\n\n localStorage.setItem(`${id}`, JSON.stringify(newData))\n }\n}\n\n/**\n * @description Сохраняем данные о брони\n * @param reserveId\n * @param userData\n */\nfunction setWidgetData(\n reserveId: number,\n userData: any,\n) {\n const id = getWidgetIdFromUrl();\n const oldWidgetData = localStorage.getItem(`${id}`);\n\n if (oldWidgetData) {\n const newData: widgetData = {\n ...JSON.parse(oldWidgetData),\n reserveId,\n userData,\n };\n\n localStorage.setItem(`${id}`, JSON.stringify(newData));\n }\n}\n\n/** @description Запрашиваем данные виджета */\nfunction getWidgetData() {\n const id = getWidgetIdFromUrl();\n const widgetData = localStorage.getItem(`${id}`);\n\n if (widgetData) {\n const parseWidgetData: widgetData = JSON.parse(widgetData);\n const currentTime = moment();\n\n if (currentTime.diff(moment(parseWidgetData.date), 'h') < 24) {\n return {\n reserveId: parseWidgetData.reserveId,\n userData: parseWidgetData.userData,\n };\n } else {\n localStorage.removeItem(`${id}`);\n return null;\n }\n }\n\n return null;\n}\n\n/** @description Удаляем данные о видежте */\nfunction clearWidgetData() {\n const id = getWidgetIdFromUrl();\n\n localStorage.removeItem(`${id}`)\n}\n\n/** @description Получить access токен авторизации */\nconst getAccessToken = () => getToken(WIDGET_ACCESS_TOKEN_KEY);\n\n/** @description Получить refresh токен авторизации */\nconst getRefreshToken = () => getToken(WIDGET_REFRESH_TOKEN_KEY);\n\n\nexport {\n clearWidgetData,\n setWidgetData,\n getAccessToken,\n getRefreshToken,\n getWidgetData,\n updateToken,\n setTokens,\n};\n","import axios, { AxiosRequestConfig } from 'axios';\nimport moment from 'moment';\n\nimport systems from '../config/systems';\nimport * as ConfigAPI from '../config/api';\nimport { parseDateForReq } from '../helpers/dateHelpers';\nimport { IBookingDataReq, TRestaurant } from '../types/IRootWidgetStore';\nimport {\n getAccessToken,\n getRefreshToken,\n updateToken,\n} from '../helpers/localStorageHelpers';\n\nconst api = axios.create({ withCredentials: true });\n\n/**\n * Запрос на получение обновление токена\n * @param refreshToken\n * @returns {Promise>}\n */\nexport const refreshTokenReq = (refreshToken: string) => {\n const userData = `refresh_token=${refreshToken}&grant_type=refresh_token`;\n const base64BasicKey = btoa(`${systems.clientId}:${systems.secretKey}`);\n\n return api.post(\n ConfigAPI.token, userData, { headers: { Authorization: `Basic ${base64BasicKey}` } },\n );\n};\n\napi.interceptors.request.use((config: AxiosRequestConfig) => {\n const accessToken = getAccessToken();\n const configResult = { ...config };\n\n if (accessToken && accessToken !== 'undefined' && config.url !== ConfigAPI.token) {\n configResult.headers.Authorization = `Bearer ${accessToken}`;\n }\n return configResult;\n});\n\napi.interceptors.response.use(response => response, (error) => {\n const originalRequest = error.config;\n\n if (error.response && error.response.status === 401 && originalRequest.url === ConfigAPI.token) {\n return Promise.reject(error);\n }\n\n if (error.response && error.response.status === 401 && !originalRequest._retry) { // eslint-disable-line no-underscore-dangle\n originalRequest._retry = true; // eslint-disable-line no-underscore-dangle\n const refreshToken = getRefreshToken();\n\n if (refreshToken) {\n return refreshTokenReq(refreshToken).then((res: {\n status: number;\n data: {\n access_token: string;\n refresh_token: string;\n }\n }) => {\n if (res.status === 200) {\n updateToken(res.data.access_token, res.data.refresh_token);\n originalRequest.headers.Authorization = `Bearer ${res.data.access_token}`;\n\n return axios(originalRequest);\n }\n return null;\n });\n }\n return null;\n }\n return Promise.reject(error);\n});\n\n/**\n * Запрос на получение количества столов для резерва по выбранным параметрам\n * @param widgetId\n * @param date - дата\n * @param persons - количество персон\n * @returns {Promise>}\n */\nexport const getTablesCountReq = (widgetId: number, date: string, persons: number) => api\n .get(`${ConfigAPI.restaurantTable}/${widgetId}/free/count`, {\n params: {\n time: parseDateForReq(date),\n persons,\n },\n }).then(r => r.data.count);\n\n/**\n * Отправить запрос на отправку кода подтверждения\n * @param phone - Номер телефона\n */\nexport const sendConfirmCodeReq = (phone: string) => api.post(ConfigAPI.sendConfirmCode, {\n phone,\n});\n\n/**\n * Проверка кода подтверждения\n * @param code\n * @param phone\n */\nexport const verifySmsCodeReq = (code: string, phone: string) => {\n const base64BasicKey = btoa(`${systems.clientId}:${systems.secretKey}`);\n const formData = new FormData();\n\n formData.append(\"phone\", phone);\n formData.append(\"code\", code);\n formData.append(\"grant_type\", 'sms_code');\n\n return api\n .post(ConfigAPI.token, formData, { headers: { Authorization: `Basic ${base64BasicKey}` } })\n .then(\n response => response.data,\n error => error.response.data,\n );\n};\n\n/**\n * Резервирования для виджета\n * @param bookingData\n */\nexport const guestBookingReq = (bookingData: IBookingDataReq) => {\n const {\n widgetId,\n comment,\n persons,\n date,\n fullName,\n smsNotificationIsEnabled,\n phone,\n } = bookingData;\n const parsedName = fullName.split(' ');\n return api\n .post(ConfigAPI.widgetBooking, {\n widgetId,\n comment,\n persons,\n date: parseDateForReq(date),\n firstName: parsedName[0],\n lastName: parsedName.splice(1).join(\" \"),\n isNotificationEnabled: smsNotificationIsEnabled,\n phone,\n })\n .then(res => res.data);\n};\n\n/**\n * Загрузка данных по ресторану\n * @param {number} widgetId\n */\nexport const getRestaurantInfo = (widgetId: number): Promise => api\n .get(`${ConfigAPI.restaurantWidget}/${widgetId}/info`)\n .then(res => res.data);\n\n/**\n * Проверка статуса бронирования\n * @param bookingId\n */\nexport const bookingStatus = (bookingId: number) => api\n .get(`${ConfigAPI.widgetBooking}/${bookingId}/status`)\n .then(res => res.data);\n\n/** *\n * Запрос информации по брони, для кейсов когда у юзера есть активная бронь в этом ресторане\n */\nexport const getActiveBookingInfo = (bookingId: number) => api\n .get(`${ConfigAPI.widgetBooking}/${bookingId}`)\n .then(res => res.data);\n\n/**\n * Дроп бронирования\n * @param bookingId\n */\nexport const deleteBooking = (bookingId: number) => api\n .delete(`${ConfigAPI.widgetBooking}/${bookingId}`);\n\n/**\n * Загрузка расписания ресторана по id и дате c исклюючениями\n * @param widgetId\n * @param date\n */\nexport const getRestaurantScheduleReq = (\n widgetId: number, date: string,\n) => api.get(`${ConfigAPI.restaurantSchedule}/${widgetId}`, {\n params: {\n date: moment(date).format('YYYY-MM-DD'),\n },\n}).then(res => res.data);\n\n/**\n * Запрос на получение максимальной вместимости столов\n * @param widgetId\n */\nexport const getMaxPersonCountReq = (widgetId: number) => api\n .get(`${ConfigAPI.restaurantTable}/${widgetId}/capacity/maximum`)\n .then(r => r.data.maxCapacity);\n","import { delay } from 'redux-saga/effects'\n\ntype RequestCall = (args: TP) => Promise;\n\nexport function* queryWithRetry(requestFunction: RequestCall, params: P, retries = 5) {\n let lastError = null;\n for (let i = 0; i < retries; i++) {\n try {\n return yield requestFunction(params);\n } catch (err) {\n if (err && err.response && err.response.status == 404) {\n throw new Error(err);\n }\n\n lastError = err;\n if (i < (retries - 1)) {\n yield delay((i + 1) * 3000);\n }\n }\n }\n\n // Stop failed several attempts\n throw new Error(lastError || 'request failed');\n}\n","import * as ActionTypes from './RootWidgetActionsTypes';\nimport { IRootWidgetActions } from './IRootWidgetActions';\nimport {\n TRestaurant,\n IBookingData,\n IBookingErrorType,\n TErrorBookingData\n} from '../../types/IRootWidgetStore';\n\n/** @description Экшен для запроса инфы о ресторане при ините виджета */\nexport function getRestaurantInfo(widgetId: number): IRootWidgetActions {\n return {\n type: ActionTypes.INIT_APP,\n payload: {\n widgetId,\n },\n };\n}\n\n/** @description Экшен для успешной обработки запроса инфы о ресторане при ините виджета */\nexport function initAppRestaurantInfo(restaurantInfo: TRestaurant): IRootWidgetActions {\n return {\n type: ActionTypes.INIT_APP_RESTAURANT_INFO,\n payload: {\n restaurantInfo,\n },\n };\n}\n\n/** @description Экшен для успешной обработки запроса инфы о ресторане при ините виджета */\nexport function initAppWidgetState(reserveInfo: IBookingData, state?: string): IRootWidgetActions {\n return {\n type: ActionTypes.INIT_APP_WIDGET_STATE,\n payload: {\n reserveInfo,\n state,\n },\n };\n}\n\n/** @description Экшен для запроса кода регистрации */\nexport function sendRegistrationRequest(bookingData: IBookingData): IRootWidgetActions {\n return {\n type: ActionTypes.REGISTRATION_REQUEST,\n payload: {\n bookingData,\n },\n };\n}\n\n/** @description Экшен для обработки запроса кода регистрации */\nexport function sendRegistrationRequestSuccess(timeLeft: number): IRootWidgetActions {\n return {\n type: ActionTypes.REGISTRATION_REQUEST_SUCCESS,\n payload: {\n timeLeft,\n },\n };\n}\n\n/** @description Экшен для запроса кода регистрации */\nexport function sendRegistrationRequestError(): IRootWidgetActions {\n return {\n type: ActionTypes.REGISTRATION_REQUEST_ERROR,\n };\n}\n\n/** @description Экшен для повторного запроса кода регистрации */\nexport function resendRegistrationRequest(): IRootWidgetActions {\n return {\n type: ActionTypes.RESEND_REGISTRATION_REQUEST,\n };\n}\n\n/** @description Экшен для отправки запроса на проверку смс */\nexport function verifySmsCode(smsCode: string): IRootWidgetActions {\n return {\n type: ActionTypes.SMS_CODE_VERIFY_REQUEST,\n payload: {\n smsCode,\n },\n };\n}\n\n/** @description Экшен для обработки успешного запроса на проверку смс */\nexport function verifySmsCodeSuccess(): IRootWidgetActions {\n return {\n type: ActionTypes.SMS_CODE_VERIFY_SUCCESS,\n };\n}\n\n/** @description Экшен для обработки ошибки запроса на проверку смс */\nexport function verifySmsCodeError(error: string): IRootWidgetActions {\n return {\n type: ActionTypes.SMS_CODE_VERIFY_ERROR,\n payload: {\n smsCodeError: error,\n },\n };\n}\n\n/** @description Экшен для отправки запроса на резервирование столика */\nexport function guestBooking(): IRootWidgetActions {\n return {\n type: ActionTypes.GUEST_BOOKING_REQUEST,\n };\n}\n\n/** @description Экшен для обработки успешного запроса на резервирование столика */\nexport function guestBookingSuccess(): IRootWidgetActions {\n return {\n type: ActionTypes.GUEST_BOOKING_SUCCESS,\n };\n}\n\n/** @description Экшен для обработки ошибки запроса на резервирование столика */\nexport function guestBookingQueueProcessing(bookingId: number): IRootWidgetActions {\n return {\n type: ActionTypes.GUEST_BOOKING_QUEUE_PROCESSING,\n payload: {\n bookingId,\n },\n };\n}\n\n/** @description Экшен для обработки ошибки запроса на резервирование столика */\nexport function guestBookingError(error: IBookingErrorType, bookingData?: TErrorBookingData): IRootWidgetActions {\n return {\n type: ActionTypes.GUEST_BOOKING_ERROR,\n error,\n bookingData,\n };\n}\n\n/** @description Экшен для удаления бронирования */\nexport function deleteBooking(bookingId: number): IRootWidgetActions {\n return {\n type: ActionTypes.DELETE_RESERVE_REQUEST,\n payload: {\n bookingId,\n },\n };\n}\n\n/** @description Экшен для обработки успешного удаления бронирования */\nexport function deleteBookingSuccess(): IRootWidgetActions {\n return {\n type: ActionTypes.DELETE_RESERVE_SUCCESS,\n };\n}\n\n/** @description Экшен для обработки ошибки запроса на удаление бронирования */\nexport function deleteBookingError(error: string): IRootWidgetActions {\n return {\n type: ActionTypes.DELETE_RESERVE_ERROR,\n error,\n };\n}\n","import * as ActionTypes from './ReserveFormActionsTypes';\nimport { IReserveFormActions } from './IReserveFormActions';\n\n/** @description Экшен для отправки запроса на получение свободных столов */\nexport function getFreeTables(date: string, persons: number): IReserveFormActions {\n return {\n type: ActionTypes.GET_TABLES_COUNT_REQUEST,\n payload: {\n date,\n persons,\n },\n };\n}\n\n/** @description Экшен для обработки успешного запроса на получение столов */\nexport function getFreeTablesSuccess(freeTables: number): IReserveFormActions {\n return {\n type: ActionTypes.GET_TABLES_COUNT_SUCCESS,\n payload: {\n freeTables,\n },\n };\n}\n\n/** @description Экшен для обработки ошибки запроса на получение столов */\nexport function getFreeTablesError(): IReserveFormActions {\n return {\n type: ActionTypes.GET_TABLES_COUNT_ERROR,\n };\n}\n\n/** @description Экшен для отправки запроса на получение расписания ресторана */\nexport function getRestaurantSchedule(date: string): IReserveFormActions {\n return {\n type: ActionTypes.RESTAURANT_SCHEDULE_REQUEST,\n payload: {\n date,\n },\n };\n}\n\n/** @description Экшен для успешного запроса на получение расписания ресторана */\nexport function getRestaurantScheduleSuccess(scheduleOptions: Array): IReserveFormActions {\n return {\n type: ActionTypes.RESTAURANT_SCHEDULE_SUCCESS,\n payload: {\n scheduleOptions,\n },\n };\n}\n\n/** @description Экшен для запроса максимальной вместимости столов */\nexport function getMaxPersonCount(widgetId: number): IReserveFormActions {\n return {\n type: ActionTypes.GET_MAX_PERSON_COUNT_REQUEST,\n payload: {\n widgetId,\n },\n };\n}\n\n/** @description Экшен для обработки успешного запроса максимальной вместимости столов */\nexport function getMaxPersonCountSuccess(persons: number): IReserveFormActions {\n return {\n type: ActionTypes.GET_MAX_PERSON_COUNT_SUCCESS,\n payload: {\n persons,\n },\n };\n}\n\n/** @description Экшен для обработки ошибки запроса максимальной вместимости столов */\nexport function getMaxPersonCountError(persons: number): IReserveFormActions {\n return {\n type: ActionTypes.GET_MAX_PERSON_COUNT_SUCCESS,\n payload: {\n persons,\n },\n };\n}\n","// TODO Поправить типизацию i18next\n// @ts-ignore\nimport i18next from 'i18next';\nimport locales from './locales.json';\n\nexport default i18next.init({\n lng: 'ru',\n debug: true,\n resources: locales,\n});\n","import {\n TWidgetColors,\n TWidgetSettings,\n} from '../types/IRootWidgetStore';\n\ntype Settings = {\n settings: Required & {\n colors: Required\n }\n}\n\nexport const fallbackColors: Required = {\n mainColor: '#6ae9c5',\n formBackground: '#ffffff',\n pageBackground: '#737577',\n formHeaderColor: '#323232',\n formBaseColor: '#323232',\n formFieldColor: '#aaaaaa',\n}\n\nexport const fallbackValue: Settings = {\n settings: {\n isShowHeader: true,\n isEmailRequired: false,\n isLastNameRequired: false,\n colors: fallbackColors,\n },\n};\n","import {\n put, all, takeLatest, delay, call, select, fork,\n} from 'redux-saga/effects';\nimport _ from 'lodash';\nimport { LOCATION_CHANGE } from 'connected-react-router';\nimport { matchPath } from 'react-router';\nimport * as Sentry from '@sentry/react';\n\nimport {\n verifySmsCodeReq,\n guestBookingReq,\n bookingStatus,\n getRestaurantInfo,\n deleteBooking,\n sendConfirmCodeReq,\n getActiveBookingInfo,\n} from '../api';\nimport * as apiUtils from '../api/utils'\nimport * as ReserveWidgetActionsTypes\n from '../actions/rootWidget/RootWidgetActionsTypes';\nimport * as ReserveWidgetActions from '../actions/rootWidget/RootWidgetActions';\nimport * as IReserveActions from '../actions/rootWidget/IRootWidgetActions';\nimport * as ReserveFormActions\n from '../actions/reserveForm/ReserveFormActions';\n\nimport locales from '../locales';\nimport {\n setWidgetData,\n setTokens,\n getWidgetData,\n clearWidgetData\n} from '../helpers/localStorageHelpers';\nimport { IAppStore } from '../types/IAppStore';\nimport { errorType, reserveWidgetState } from '../config/constants';\nimport { IGetRestaurantInfo } from '../actions/rootWidget/IRootWidgetActions';\nimport { fallbackValue } from '../helpers/constants';\n\nconst BOOKING_STATUS_ACCEPTED = 'ACCEPTED';\nconst BOOKING_STATUS_ERROR = 'ERROR';\nconst BOOKING_STATUS_DECLINED = 'DECLINED';\nconst BOOKING_STATUS_CANCELED = 'CANCELED';\nconst BOOKING_STATUS_CREATED = 'CREATED';\nconst BOOKING_SENT = 'SENT';\n\nconst BOOKING_STATUS_REQUEST_DELAY = 5000;\nconst INCORRECT_CODE_CODE = 'code_incorrect';\nconst BOOKING_NOT_CLOSED = 'guest_have_not_closed_booking';\n\n/**\n * @description Trigger data fetching, since main component wont be rendered\n * until restaurant data initialized\n */\nfunction* init() {\n const route = yield select((state: IAppStore) => state.router.location);\n const matched = matchPath(route.pathname, {\n path: '/:key',\n strict: false\n })\n if (matched) {\n // @ts-ignore\n const { key }: { key: string | null } = (matched.params || { key: null });\n const widgetId = typeof key === 'string' ? Number(key) : null;\n if (widgetId) {\n yield put(ReserveWidgetActions.getRestaurantInfo(widgetId));\n yield put(ReserveFormActions.getMaxPersonCount(widgetId));\n }\n }\n}\n\n/**\n * @description watch widget status,\n */\nfunction* watchStatus(widgetData: any) {\n if (widgetData) {\n try {\n const state = yield call(bookingStatus, widgetData.reserveId);\n\n if (state.status === BOOKING_STATUS_CREATED || state.status === BOOKING_SENT) {\n yield put(ReserveWidgetActions.initAppWidgetState(\n widgetData.userData,\n reserveWidgetState.PROCESSING_STATE\n ));\n\n // blocks execution until resolved\n const isApproved = yield call(approveReserveStatusSaga, widgetData.reserveId);\n\n if (isApproved) {\n yield put(ReserveWidgetActions.guestBookingSuccess());\n }\n }\n\n if (state.status === BOOKING_STATUS_ACCEPTED) {\n yield put(ReserveWidgetActions.initAppWidgetState(widgetData.userData));\n yield put(ReserveWidgetActions.guestBookingSuccess());\n }\n\n if (state.status === BOOKING_STATUS_CANCELED) {\n clearWidgetData();\n }\n } catch (e) {\n Sentry.captureException(e);\n clearWidgetData();\n }\n }\n}\n\n/** @description Сага для инита виджета */\nfunction* initApp(action: IGetRestaurantInfo) {\n const widgetData = getWidgetData();\n\n yield fork(watchStatus, widgetData);\n\n try {\n const restaurantInfo = yield apiUtils.queryWithRetry(getRestaurantInfo, action.payload.widgetId);\n const { address } = restaurantInfo || { address: {} };\n const addressString = `${address.city}, ${address.street}, ${address.home}`;\n const restaurantName = restaurantInfo ? restaurantInfo.name : 'Рестаран';\n const settings = restaurantInfo ? restaurantInfo.settings : null;\n const { phone } = restaurantInfo ? restaurantInfo.info : '';\n\n yield put(ReserveWidgetActions.initAppRestaurantInfo({\n address: addressString,\n name: restaurantName,\n phone,\n countryCode: address.countryCode,\n settings: Object.assign({}, fallbackValue.settings, settings)\n }));\n\n Sentry.setContext('restaurant', {\n widgetId: action.payload.widgetId,\n address: addressString,\n name: restaurantName,\n phone,\n });\n } catch (e) {\n Sentry.captureException(e);\n console.log('initApp', e.message);\n }\n}\n\n/** @description Сага для запроса кода подтверждения*/\nfunction* sendConfirmationCodeSaga() {\n try {\n const { phone } = yield select((state: IAppStore) => state.root.bookingReqData);\n const { countryCode } = yield select((state: IAppStore) => state.root.restaurantInfo);\n\n const confirmReqData = yield sendConfirmCodeReq(phone);\n yield put(ReserveWidgetActions.sendRegistrationRequestSuccess(confirmReqData.data.timeLeft));\n\n if(countryCode !== 'RU'){\n try {\n yield put(ReserveWidgetActions.verifySmsCodeSuccess());\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveWidgetActions.verifySmsCodeError(locales.t('common.errors.reserveWidget.smsCodeError')));\n }\n }\n\n } catch (e) {\n Sentry.captureException(e);\n\n let error = locales.t('common.errors.reserveWidget.unknownError');\n\n if (!_.isUndefined(e.response.data[0]) && e.response.data[0].code === 'mobile_phone_is_incorrect') {\n error = locales.t('common.errors.reserveWidget.phoneParseError');\n }\n yield put(ReserveWidgetActions.sendRegistrationRequestError());\n }\n}\n\n/** @description Сага для подтверждения кода из смс */\nfunction* verifyConfirmationCodeSaga(action: IReserveActions.ISendSmsCode) {\n try {\n const { phone } = yield select((state: IAppStore) => state.root.bookingReqData);\n const { smsCode } = action.payload;\n const verifyReqData = yield verifySmsCodeReq(smsCode, phone);\n\n if (verifyReqData.error) {\n let errorMessage = locales.t('common.errors.reserveWidget.smsCodeError');\n\n if (verifyReqData.error === INCORRECT_CODE_CODE) {\n errorMessage = locales.t('common.errors.reserveWidget.pinIncorrect');\n }\n\n yield put(ReserveWidgetActions.verifySmsCodeError(errorMessage));\n } else {\n setTokens(verifyReqData.access_token, verifyReqData.refresh_token);\n\n yield put(ReserveWidgetActions.verifySmsCodeSuccess());\n }\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveWidgetActions.verifySmsCodeError(locales.t('common.errors.reserveWidget.smsCodeError')));\n }\n}\n\n/**\n * @description Сага для проверки статуса бронирования,\n * - вызывается \"bookingStatus\" с интервалом \"BOOKING_STATUS_REQUEST_DELAY\"\n * @param bookingId\n */\nfunction* approveReserveStatusSaga(bookingId: number) {\n\n yield put(ReserveWidgetActions.guestBookingQueueProcessing(bookingId));\n\n while (true) {\n try {\n const apiResponse = yield call(bookingStatus, bookingId);\n const { status } = apiResponse;\n\n if (status === BOOKING_STATUS_ACCEPTED) {\n return true;\n }\n if (status === BOOKING_STATUS_ERROR || status === BOOKING_STATUS_DECLINED) {\n yield put(ReserveWidgetActions.guestBookingError(apiResponse.status));\n return false;\n }\n if (status === BOOKING_STATUS_CANCELED) {\n return false;\n }\n\n yield delay(BOOKING_STATUS_REQUEST_DELAY);\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveWidgetActions.guestBookingError(locales.t('common.errors.reserveWidget.unknownError')));\n return false;\n }\n }\n}\n\n/** @description Сага для бронирования */\nfunction* guestBookingSaga() {\n const widgetId = yield select((state: IAppStore) => state.root.widgetId);\n const {\n persons,\n dateForReq,\n comment,\n fullName,\n smsNotificationIsEnabled,\n phone,\n } = yield select((state: IAppStore) => state.root.bookingReqData);\n\n try {\n const bookingInfo = yield call(guestBookingReq, {\n widgetId,\n persons,\n date: dateForReq,\n comment,\n fullName,\n smsNotificationIsEnabled,\n phone,\n });\n\n setWidgetData(bookingInfo.id, {\n persons,\n date: dateForReq,\n comment,\n fullName,\n smsNotificationIsEnabled,\n phone,\n });\n\n const isApproved = yield call(approveReserveStatusSaga, bookingInfo.id);\n\n if (isApproved) {\n yield put(ReserveWidgetActions.guestBookingSuccess());\n }\n } catch (e) {\n Sentry.captureException(e);\n\n if (e.response && e.response.data[0]) {\n const response = e.response.data[0];\n\n switch (response.code) {\n case BOOKING_NOT_CLOSED:\n const bookingData = yield call(getActiveBookingInfo, response.params.id);\n yield put(ReserveWidgetActions.guestBookingError(errorType.activeReserve, {\n ...bookingData,\n phone,\n fullName,\n }));\n break;\n default:\n yield put(ReserveWidgetActions.guestBookingError(errorType.unknownError));\n break;\n }\n\n } else yield put(ReserveWidgetActions.guestBookingError(errorType.unknownError));\n }\n}\n\n/** @description Удаление бронирования */\nfunction* deleteReserveSaga(action: IReserveActions.IDeleteBooking) {\n try {\n yield deleteBooking(action.payload.bookingId);\n yield put(ReserveWidgetActions.deleteBookingSuccess());\n clearWidgetData();\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveWidgetActions.deleteBookingError(e));\n }\n}\n\nexport default function* saga() {\n yield all([\n takeLatest(LOCATION_CHANGE, init),\n takeLatest(ReserveWidgetActionsTypes.INIT_APP, initApp),\n takeLatest([\n ReserveWidgetActionsTypes.REGISTRATION_REQUEST,\n ReserveWidgetActionsTypes.RESEND_REGISTRATION_REQUEST,\n ], sendConfirmationCodeSaga),\n takeLatest(ReserveWidgetActionsTypes.SMS_CODE_VERIFY_REQUEST, verifyConfirmationCodeSaga),\n takeLatest(ReserveWidgetActionsTypes.SMS_CODE_VERIFY_SUCCESS, guestBookingSaga),\n takeLatest(ReserveWidgetActionsTypes.DELETE_RESERVE_REQUEST, deleteReserveSaga),\n ]);\n}\n","import {\n put, all, takeLatest, select\n} from 'redux-saga/effects';\n\nimport * as Sentry from '@sentry/react';\n\nimport {\n getTablesCountReq,\n getRestaurantScheduleReq,\n getMaxPersonCountReq,\n} from '../api';\nimport * as ReserveFormActionsTypes from '../actions/reserveForm/ReserveFormActionsTypes';\nimport * as ReserveFormActions from '../actions/reserveForm/ReserveFormActions';\nimport * as IReserveFormActions from '../actions/reserveForm/IReserveFormActions';\nimport { getWidgetMergedSchedule, getWidgetTimeList } from '../helpers/dateHelpers';\nimport { IAppStore } from '../types/IAppStore';\n\n/** @description Получение списка всех доступных столов у ресторана подходящих под параметры фильтра. */\nfunction* getFreeTablesSaga(action: IReserveFormActions.IGetFreeTables) {\n try {\n const widgetId = yield select((state: IAppStore) => state.root.widgetId);\n const { date, persons } = action.payload;\n const count = yield getTablesCountReq(\n widgetId, date, persons,\n );\n\n yield put(ReserveFormActions.getFreeTablesSuccess(count));\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveFormActions.getFreeTablesError());\n }\n}\n\n/** @description Получение расписания ресторана */\nfunction* getRestaurantSchedule(action: IReserveFormActions.IRestaurantScheduleRequest) {\n try {\n const widgetId = yield select((state: IAppStore) => state.root.widgetId);\n const { date } = action.payload;\n const scheduleData = yield getRestaurantScheduleReq(widgetId, date);\n\n const onlyDefaultScheduleList = scheduleData.filter((schedule: any) => !schedule.date);\n const weekScheduleCollection: any = getWidgetMergedSchedule(onlyDefaultScheduleList);\n const scheduleOptions = getWidgetTimeList(date, weekScheduleCollection);\n\n yield put(ReserveFormActions.getRestaurantScheduleSuccess(scheduleOptions));\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveFormActions.getRestaurantScheduleSuccess([]));\n }\n}\n\n/** @description Получение максимального числа */\nfunction* getMaxPersonsCountSaga(action: IReserveFormActions.IGetMaxPersonCountReq) {\n try {\n const maxPersons = yield getMaxPersonCountReq(action.payload.widgetId);\n yield put(ReserveFormActions.getMaxPersonCountSuccess(maxPersons));\n } catch (e) {\n Sentry.captureException(e);\n yield put(ReserveFormActions.getMaxPersonCountError(8));\n }\n}\n\nexport default function* saga() {\n yield all([\n takeLatest(ReserveFormActionsTypes.GET_TABLES_COUNT_REQUEST, getFreeTablesSaga),\n takeLatest(ReserveFormActionsTypes.RESTAURANT_SCHEDULE_REQUEST, getRestaurantSchedule),\n takeLatest(ReserveFormActionsTypes.GET_MAX_PERSON_COUNT_REQUEST, getMaxPersonsCountSaga),\n ]);\n}\n","import { all } from 'redux-saga/effects';\n\nimport rootWidget from './RootWidgetSagas';\nimport reserveFormSaga from './ReserveFormSaga';\n\nexport default function* rootSaga() {\n yield all([\n rootWidget(),\n reserveFormSaga(),\n ]);\n}\n","import { applyMiddleware, createStore, compose } from 'redux';\nimport { routerMiddleware } from 'connected-react-router';\nimport createSagaMiddleware from 'redux-saga';\nimport * as Sentry from '@sentry/react';\nimport reducer from '../reducers';\nimport history from './history';\nimport rootSaga from '../sagas';\n\nconst sagaMiddleware = createSagaMiddleware();\n\nconst composeEnhancers = typeof window === 'object'\n// @ts-ignore\n && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n // @ts-ignore\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...\n }) : compose;\n\nconst sentryReduxEnhancer = Sentry.createReduxEnhancer();\n\nconst enhancer = composeEnhancers(\n applyMiddleware(\n sagaMiddleware,\n routerMiddleware(history),\n ),\n sentryReduxEnhancer,\n);\n\nconst store = createStore(\n reducer(history),\n enhancer,\n);\n\nsagaMiddleware.run(rootSaga);\n\nexport default store;\n","import React from 'react';\n\nimport { IProps } from \"./IShowInitialized\";\n\nconst ShowInitialized: React.FC = ({\n initialized, children\n }) => {\n\n return <>\n {initialized ? children : null}\n ;\n}\n\nexport default ShowInitialized;\n","import { connect } from 'react-redux';\n\nimport ShowInitialized from './ShowInitialized';\nimport { IAppStore } from '../../../types/IAppStore';\nimport { StateProps } from './IShowInitialized';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const { restaurantInfoInitialized } = state.root;\n return {\n initialized: restaurantInfoInitialized,\n }\n}\n\nexport default connect(mapStateToProps, null)(ShowInitialized);\n\n","import React, { useEffect, useState } from 'react';\nimport { Theme } from \"@material-ui/core\";\nimport { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';\n\nimport { IProps } from \"./IThemeComp\";\nimport { generateThemeOptions } from \"../../../utils\";\n\nconst ThemeComp: React.FC = ({\n colors, children\n }) => {\n const [theme, setTheme] = useState(null);\n useEffect(() => {\n if (colors) setTheme(createMuiTheme(generateThemeOptions(colors)))\n }, [\n colors\n ]);\n\n return theme ? (\n \n {children}\n \n ) : null;\n}\n\nexport default ThemeComp;\n","import { ThemeOptions } from \"@material-ui/core/styles/createMuiTheme\";\nimport {\n darken,\n fade,\n} from \"@material-ui/core/styles/colorManipulator\";\nimport { TWidgetColors } from \"./types/IRootWidgetStore\";\nimport { fallbackColors } from \"./helpers/constants\";\n\n/**\n * @description generates ThemeOptions, defaults are set if colors is missing values\n */\nexport function generateThemeOptions(colors?: TWidgetColors | null): ThemeOptions {\n const fontFamilyMedium = 'GolosTextWebMedium';\n\n const themeColors: Required = Object.assign({}, fallbackColors, colors);\n\n const primary = themeColors.mainColor;\n const primaryHover = darken(primary, 0.1503);\n const primarySelected = fade(primary, 0.3);\n const primaryPostHover = fade(primary, 0.05);\n\n return {\n typography: {\n h4: {\n fontFamily: fontFamilyMedium,\n fontSize: 29,\n lineHeight: '32pt',\n },\n h5: {\n fontFamily: fontFamilyMedium,\n fontSize: 24,\n lineHeight: '28pt',\n },\n h6: {\n fontFamily: fontFamilyMedium,\n fontSize: 20,\n lineHeight: '24pt',\n },\n subtitle1: {\n fontSize: 16,\n lineHeight: '16pt',\n },\n subtitle2: {\n fontFamily: fontFamilyMedium,\n fontSize: 16,\n lineHeight: '16pt',\n },\n body1: {\n fontSize: 14,\n lineHeight: '1.4',\n },\n caption: {\n color: themeColors.formBaseColor,\n fontSize: 12,\n lineHeight: '14pt',\n },\n button: {\n textTransform: 'none',\n },\n fontFamily: '\"GolosTextWebRegular\", \"Roboto\", \"Arial\"',\n },\n palette: {\n primary: {\n main: primary,\n contrastText: themeColors.formHeaderColor,\n },\n secondary: {\n main: '#c0c0c0',\n contrastText: '#fff',\n },\n text: {\n primary: themeColors.formBaseColor,\n hint: themeColors.formFieldColor,\n },\n /**\n * @deprecated\n grey: {\n main: '#898989',\n },\n buttonGrey: {\n main: '#79919d',\n hover: '#667a86',\n contrastText: '#fff',\n },\n */\n },\n overrides: {\n MuiInput: {\n /**\n * @description reset values to form specific\n */\n input: {\n '&:-webkit-autofill': {\n '-webkit-box-shadow': `0 0 0px 1000px ${themeColors.formBackground} inset`,\n '-webkit-text-fill-color': `${themeColors.formBaseColor}`,\n },\n },\n underline: {\n '&:hover:not($disabled):not($focused):not($error):before': {borderBottomColor: primary},\n },\n },\n MuiFormLabel: {\n root: {\n color: themeColors.formFieldColor\n }\n },\n MuiDialog: {\n root: {\n backgroundColor: themeColors.pageBackground\n }\n },\n MuiBackdrop: {\n root: {\n backgroundColor: themeColors.pageBackground\n }\n },\n MuiDialogContent: {\n root: {\n backgroundColor: themeColors.formBackground\n }\n },\n MuiTooltip: {\n tooltip: {\n fontSize: 12,\n maxWidth: 360,\n padding: '16px 15px 17px 24px',\n },\n },\n MuiPaper: {\n root: {\n backgroundColor: themeColors.formBackground,\n }\n },\n // @ts-ignore\n MuiPickersToolbarText: {\n toolbarTxt: {\n color: themeColors.formFieldColor,\n }\n },\n // @ts-ignore\n MuiPickersCalendarHeader: {\n iconButton: {\n backgroundColor: themeColors.formBackground,\n }\n },\n MuiMenu: {\n paper: {\n backgroundColor: themeColors.formBackground,\n }\n },\n MuiMenuItem: {\n root: {\n color: themeColors.formBaseColor,\n '&$selected': {\n backgroundColor: primarySelected,\n fontWeight: 500,\n '&:focus': {\n backgroundColor: primarySelected,\n },\n '&:hover': {\n backgroundColor: primaryHover,\n },\n },\n '&:hover': {\n backgroundColor: primaryHover,\n },\n '&:focus': {\n backgroundColor: primaryPostHover,\n },\n },\n },\n },\n }\n}\n","import { connect } from 'react-redux';\n\nimport ThemeComp from './ThemeComp';\nimport { IAppStore } from '../../../types/IAppStore';\nimport { StateProps } from './IThemeComp';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const { settings } = state.root.restaurantInfo;\n return {\n colors: settings ? settings.colors : null,\n }\n}\n\nexport default connect(mapStateToProps, null)(ThemeComp);\n\n","import React from 'react';\nimport { WrappedFieldProps } from 'redux-form';\nimport classNames from 'classnames';\n\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\n\nimport locales from '../../locales';\n\nconst styles = createStyles({\n isError: {\n color: 'red',\n },\n fontSize: {\n fontSize: 14 // КОСТЫЛЬ ДЛЯ IOS\n }\n});\n\ninterface IProps extends WrappedFieldProps, WithStyles {\n maxCapacity: number\n}\n\n/** @description Селектор для выбора количества персон */\nconst PersonSelect: React.FC = (\n { input, meta: { touched, error }, maxCapacity, classes }\n) => {\n const isError = touched && !!error;\n const capacityList = new Array(maxCapacity)\n .fill('')\n .map((v, i) => i + 1);\n\n return (\n \n { locales.t('common.reserveModal.persons') }\n \n {\n input.value === 0 && (\n \n { locales.t('common.reserveModal.emptyPersons') }\n \n )\n }\n {\n capacityList.map(person => (\n \n { `${person} чел.` }\n \n ))\n }\n \n \n );\n};\n\nexport default withStyles(styles)(PersonSelect);\n","import React from 'react';\nimport { WrappedFieldProps } from 'redux-form';\nimport MomentUtils from '@date-io/moment';\nimport moment from 'moment';\nimport \"moment/locale/ru\";\n\nimport { DatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport TextField from '@material-ui/core/TextField';\n\nimport locales from '../../locales';\nimport { emptyTime } from '../../config/constants';\n\ninterface IProps extends WrappedFieldProps {}\n\n// TODO Переписать логику отображения значений для \"Сегодня\" и \"Выберете дату\"\nconst DatePickerComp: React.FC = (\n { input, meta: { touched, error }, }\n) => {\n const renderDate = input.value !== emptyTime && moment(input.value).isSame(moment(), 'day')\n ? ''\n : input.value;\n\n const isError = touched && error;\n\n const FieldComp = (props: any) => {\n const {\n error, label, value, onClick, inputRef,\n } = props;\n const colorError = error ? { color: 'red' } : {};\n\n return (\n \n );\n };\n\n return (\n \n \n \n);\n};\n\nexport default DatePickerComp;\n","import React, { ChangeEvent } from 'react';\nimport { WrappedFieldProps } from 'redux-form';\nimport classNames from 'classnames';\n\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport InputLabel from '@material-ui/core/InputLabel';\n\nimport locales from '../../locales';\nimport { emptyTime } from '../../config/constants';\n\nconst styles = createStyles({\n isError: {\n color: 'red',\n },\n fontSize: {\n fontSize: 14 // КОСТЫЛЬ ДЛЯ IOS\n }\n});\n\ninterface IProps extends WrappedFieldProps, WithStyles {\n time: Array;\n selectedTime: string;\n handleSetTime: (event: ChangeEvent) => void;\n}\n\n/** @description Селектор для выбора времени бронирования */\nconst WidgetReserveTimeSelect: React.FC = ({\n input,\n meta: { touched, error },\n time,\n classes,\n}) => {\n const isError = touched && error;\n\n return (\n \n \n {locales.t('common.reserveModal.time')}\n \n \n {\n input.value === emptyTime && (\n \n { locales.t('common.reserveModal.emptyTime') }\n \n )\n }\n {\n time.map(t => (\n \n { t }\n \n ))\n }\n \n \n );\n};\n\nexport default withStyles(styles)(WidgetReserveTimeSelect);\n","import React from 'react';\nimport { WrappedFieldInputProps, WrappedFieldMetaProps } from 'redux-form';\n\nimport TextField from '@material-ui/core/TextField';\n\ninterface IProps {\n input: WrappedFieldInputProps;\n meta: WrappedFieldMetaProps;\n staticValue: string;\n label: string;\n readOnly: boolean;\n type: string;\n}\n\nconst TextFieldComp: React.FC = ({\n input, label, type, staticValue, readOnly, meta: { touched, error },\n}) => (\n \n);\n\nexport default TextFieldComp;\n","import React from 'react';\nimport { WrappedFieldProps } from 'redux-form';\nimport FormControl from '@material-ui/core/FormControl';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography/Typography';\nimport { withStyles, WithStyles, createStyles } from '@material-ui/core';\nimport { Theme } from \"@material-ui/core/styles\";\n\nconst styles = (theme: Theme) => createStyles({\n formTextInput: {\n // fontSize: '0.8125rem'\n },\n wrap: {\n textAlign: 'right',\n '& .MuiTypography-root': {\n color: theme.palette.text.hint\n }\n },\n textAreaCont: {\n '&& textarea': {\n overflowX: 'hidden',\n },\n },\n});\n\ninterface IProps extends WithStyles, WrappedFieldProps {\n label: string;\n type: string;\n staticValue: string;\n rows: number;\n}\n\nconst TextAreaComp: React.FC = ({\n input,\n label,\n type,\n staticValue,\n meta: { touched, error },\n rows = 3,\n classes,\n}) => (\n \n \n
\n \n {input.value ? input.value.length : 0}\n /160\n \n
\n
\n);\n\nexport default withStyles(styles)(TextAreaComp);\n","import React from 'react';\nimport { WrappedFieldInputProps, WrappedFieldMetaProps } from 'redux-form';\n\nimport Checkbox from '@material-ui/core/Checkbox/Checkbox';\nimport Typography from '@material-ui/core/Typography/Typography';\nimport FormControlLabel from '@material-ui/core/FormControlLabel/FormControlLabel';\nimport HelperText from '@material-ui/core/FormHelperText';\n\ninterface IProps {\n input: WrappedFieldInputProps;\n meta: WrappedFieldMetaProps;\n label: string;\n}\n\nconst CheckBoxComp: React.FC = ({\n input,\n label,\n meta: { touched, error },\n}) => {\n // eslint-disable-next-line\n delete input.value; // грязный хак\n\n return (\n <>\n \n )}\n label={(\n \n { label }\n {touched && error && (\n { error }\n )}\n \n )}\n />\n \n );\n};\n\nexport default CheckBoxComp;\n","import React, { useState, useEffect } from 'react';\n\nimport { createStyles, withStyles, WithStyles } from '@material-ui/core';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport { WrappedFieldInputProps, WrappedFieldMetaProps } from 'redux-form';\n\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport { getCodePhoneNumber, normalizePhone, onlyNumbers } from '../../helpers/helpers';\nimport { phoneCode, getPhoneCodes } from '../../config/constants';\n\nconst styles = createStyles({\n fieldWrap: {\n display: 'flex',\n paddingTop: 16,\n },\n phoneField: {\n marginRight: 8,\n },\n});\n\ninterface IProps extends WithStyles {\n input: WrappedFieldInputProps;\n meta: WrappedFieldMetaProps;\n staticValue: string;\n label: string;\n readOnly: boolean;\n type: string;\n endAdornment: any;\n disabled?: boolean;\n locale?: string;\n}\n\n// TODO видимо нужно рефакторить логику переключения локалей\nconst PhoneFieldComp: React.FC = ({\n classes,\n input,\n label,\n type,\n staticValue,\n readOnly,\n endAdornment,\n meta: { touched, error },\n disabled,\n locale,\n}) => {\n const [value, change] = useState({\n code: phoneCode.ru.code,\n number: '',\n });\n\n const [focused, setFocused] = useState(false);\n const onFocus = () => setFocused(true);\n const onBlur = () => setFocused(false);\n\n useEffect(() => {\n if (input.value !== '') {\n change({\n ...getCodePhoneNumber(input.value),\n });\n } else {\n let codeValue;\n switch (locale) {\n case 'UA':\n codeValue = phoneCode.ukr.code;\n break;\n case 'EE':\n codeValue = phoneCode.est.code;\n break;\n case 'UZ':\n codeValue = phoneCode.uz.code;\n break;\n case 'AM':\n codeValue = phoneCode.am.code;\n break;\n case 'GE':\n codeValue = phoneCode.ge.code;\n break;\n case 'KZ':\n codeValue = phoneCode.kz.code;\n break;\n case 'AE':\n codeValue = phoneCode.ae.code;\n break;\n case 'US':\n codeValue = phoneCode.us.code;\n break;\n case 'AZ':\n codeValue = phoneCode.az.code;\n break;\n default:\n case 'RU':\n codeValue = phoneCode.ru.code;\n break;\n }\n change({\n ...value,\n code: codeValue,\n });\n }\n }, []);\n\n const onChange = (e: any) => {\n const number = normalizePhone(e.target.value, value.code);\n\n if (e.target.value === '') {\n input.onChange('');\n } else {\n input.onChange(`${value.code}${onlyNumbers(number)}`);\n }\n\n change({\n ...value,\n [e.target.name]: number,\n });\n };\n\n const onChangeCode = (e: any) => {\n input.onChange(`${e.target.value}${value.number}`);\n\n change({\n code: e.target.value,\n number: '', // normalizePhone(value.number, e.target.value),\n });\n };\n\n const getLocale = (locale?: string) => {\n if (!locale) {\n return phoneCode.ru.code;\n }\n\n switch (locale) {\n case 'RU':\n return phoneCode.ru.code;\n case 'UA':\n return phoneCode.ukr.code;\n case 'EE':\n return phoneCode.est.code;\n case 'UZ':\n return phoneCode.uz.code;\n case 'AM':\n return phoneCode.am.code;\n case 'GE':\n return phoneCode.ge.code;\n case 'KZ':\n return phoneCode.kz.code;\n case 'AE':\n return phoneCode.ae.code;\n case 'US':\n return phoneCode.us.code;\n case 'AZ':\n return phoneCode.az.code;\n default:\n return phoneCode.ru.code;\n }\n };\n\n let firstCountryKey: undefined | string;\n\n useEffect(() => {\n change({\n ...value,\n code: getLocale(locale),\n });\n\n firstCountryKey = locale && Object.prototype.hasOwnProperty.call(phoneCode, locale.toLocaleLowerCase())\n ? undefined\n : 'ru';\n }, [locale]);\n\n return (\n \n \n { label }\n \n
\n {\n switch (code) {\n case phoneCode.ru.code:\n return phoneCode.ru.firstLabel;\n case phoneCode.ukr.code:\n return phoneCode.ukr.firstLabel;\n case phoneCode.est.code:\n return phoneCode.est.firstLabel;\n case phoneCode.uz.code:\n return phoneCode.uz.firstLabel;\n case phoneCode.am.code:\n return phoneCode.am.firstLabel;\n case phoneCode.ge.code:\n return phoneCode.ge.firstLabel;\n case phoneCode.kz.code:\n return phoneCode.kz.firstLabel;\n case phoneCode.ae.code:\n return phoneCode.ae.firstLabel;\n case phoneCode.us.code:\n return phoneCode.us.firstLabel;\n case phoneCode.az.code:\n return phoneCode.az.firstLabel;\n default:\n return phoneCode.ru.firstLabel;\n }\n }}\n >\n {getPhoneCodes(firstCountryKey).map(phoneCode => (\n \n { phoneCode.secondLabel }\n \n ))}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(PhoneFieldComp);\n","import React, { ChangeEvent, PureComponent } from 'react';\nimport { Field } from 'redux-form';\n\nimport {\n withStyles, createStyles, WithStyles, Theme,\n} from '@material-ui/core';\nimport Grid from '@material-ui/core/Grid/Grid';\n\nimport { mergeDateAndTime, itsTomorrow } from '../../helpers/dateHelpers';\nimport PersonSelect from './PersonSelect';\nimport DatePicker from './DatePicker';\nimport { emptyTime } from '../../config/constants';\nimport WidgetReserveTimeSelect from './WidgetReserveTimeSelect';\nimport TextField from '../Common/TextFieldComp';\nimport locales from '../../locales';\nimport TextAreaComp from '../Common/TextAreaComp';\nimport Typography from '@material-ui/core/Typography/Typography';\nimport classNames from 'classnames';\nimport CheckBoxComp from '../Common/CheckBoxComp';\nimport PhoneField from './PhoneField';\n\nconst styles = (theme: Theme) => createStyles({\n fieldStyle: {\n paddingTop: 23,\n },\n wrap: {\n display: 'flex',\n alignItems: 'center',\n },\n content: {\n padding: '0 8px',\n width: '100%',\n },\n tablesNumber: {\n fontSize: '29px',\n marginLeft: 5,\n color: theme.palette.primary.main,\n },\n tablesNumberError: {\n color: '#f44336',\n },\n tablesNumberText: {\n height: 50,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n errorWrap: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n color: theme.palette.text.secondary,\n },\n errorText: {\n position: 'absolute',\n }\n});\n\ninterface IProps extends WithStyles {\n valueChanged: (date: string, persons: number) => void;\n getSchedule: (date: string) => void;\n scheduleOptions: Array;\n maxPersons: number;\n tables: number;\n freeTablesError: boolean;\n countryCode: string;\n}\n\ninterface IState {\n personsCount: number;\n date: string;\n selectedTime: string;\n agreement: boolean;\n}\n\n// TODO Вынести логику запроса свободных столов в сагу или контейнер формы.\nclass BookingFields extends PureComponent {\n constructor(props: IProps) {\n super(props);\n this.state = {\n personsCount: 0,\n date: emptyTime,\n selectedTime: emptyTime,\n agreement: false,\n };\n }\n\n onChangeDate = (date: string) => {\n const { getSchedule } = this.props;\n const { selectedTime } = this.state;\n\n this.setState({ date }, this.updateBookingData);\n getSchedule(mergeDateAndTime(date, selectedTime).format());\n };\n\n onChangeTime = (time: string) => {\n this.setState({ selectedTime: time }, this.updateBookingData);\n };\n\n onChangePersonsCount = (personsCount: string) => {\n this.setState({\n personsCount: parseInt(personsCount, 10),\n }, this.updateBookingData);\n };\n\n onChangeAgreement = (checked: boolean) => {\n this.setState({\n agreement: checked,\n }, this.updateBookingData);\n };\n\n updateBookingData() {\n const { date, personsCount, selectedTime } = this.state;\n const { scheduleOptions, valueChanged } = this.props;\n\n if (personsCount && selectedTime && selectedTime !== emptyTime) {\n const mergedDate = mergeDateAndTime(date, selectedTime);\n\n if (itsTomorrow(scheduleOptions[0], selectedTime)) {\n mergedDate.add(1, 'd');\n }\n valueChanged(mergedDate.format(), personsCount);\n }\n }\n\n render() {\n const { personsCount, date, selectedTime } = this.state;\n const { scheduleOptions, maxPersons, tables, freeTablesError, classes, countryCode} = this.props;\n\n return (\n \n \n ) => this.onChangePersonsCount(e.target.value)\n }\n />\n \n \n this.onChangeDate(date)\n }\n />\n \n \n ) => this.onChangeTime(e.target.value)\n }\n />\n \n \n \n \n \n \n \n \n \n \n \n {\n !tables && !freeTablesError ? (\n \n { locales.t('common.reserveWidget.tablesForReserveInit') }\n \n ) : (\n \n { locales.t('common.reserveWidget.tablesForReserve') }\n \n { tables }\n \n \n )\n }\n {\n freeTablesError && (\n
\n \n { locales.t('common.reserveWidget.tablesForReserveError') }\n \n
\n )\n }\n
\n {/*\n \n \n \n */}\n \n \n { locales.t('common.reserveWidget.agreementPhrase1') }\n {' '}\n \n { locales.t('common.reserveWidget.agreementPhrase2') }\n \n {' '}\n { locales.t('common.reserveWidget.agreementPhrase3') }\n \n }\n component={CheckBoxComp}\n onChange={\n (e: ChangeEvent) => this.onChangeAgreement(e.target.checked)\n }\n />\n {/*\n ) => this.onChangeAgreement(e.target.checked)\n }\n />\n }\n label={\n \n { locales.t('common.reserveWidget.agreementPhrase1') }\n {' '}\n \n { locales.t('common.reserveWidget.agreementPhrase2') }\n \n {' '}\n { locales.t('common.reserveWidget.agreementPhrase3') }\n \n }\n />\n */}\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(BookingFields);\n","import React, { PureComponent } from 'react';\nimport { reduxForm } from 'redux-form';\nimport { compose } from 'recompose';\nimport classNames from 'classnames';\n\nimport Button from '@material-ui/core/Button/Button';\nimport Typography from '@material-ui/core/Typography/Typography';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\nimport { Theme } from \"@material-ui/core\";\n\nimport locales from '../../locales';\n\nimport BookingFields from './BookingFields';\nimport { isFullScreen } from '../../helpers/helpers';\n\nconst styles = (theme: Theme) => createStyles({\n formWrap: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n btnStyle: {\n fontSize: '18px',\n width: '100%',\n height: 52,\n marginBottom: '12px',\n },\n logo: {\n color: theme.palette.text.primary,\n fontWeight: 'bold',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'none',\n color: theme.palette.text.primary,\n }\n },\n provideDesc: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n color: theme.palette.text.hint,\n paddingBottom: 4,\n\n '& .MuiTypography-root': {\n color: theme.palette.text.hint,\n }\n },\n provideDescFullScreen: {\n display: 'block'\n }\n});\n\ninterface IProps extends WithStyles {\n handleSubmit: (data: any) => void;\n tables: number;\n isLoading: boolean;\n maxPersons: number;\n valueChanged: (date: string, persons: number) => void;\n getSchedule: (date: string) => void;\n scheduleOptions: Array;\n freeTablesError: boolean;\n countryCode: string;\n}\n\nclass BookingForm extends PureComponent {\n render() {\n const {\n classes,\n handleSubmit,\n tables,\n isLoading,\n scheduleOptions,\n getSchedule,\n valueChanged,\n maxPersons,\n freeTablesError,\n countryCode,\n } = this.props;\n\n const fullScreen = isFullScreen();\n\n return (\n \n \n
\n \n {locales.t('common.reserveWidget.reserve')}\n { isLoading && }\n \n \n \n {locales.t('common.reserveWidget.serviceProvided')}\n  \n \n GuestMe\n \n  \n { `— ${locales.t('common.reserveWidget.serviceProvidedDescription')}` }\n \n {/*\n \n {locales.t('common.reserveWidget.servicePolicyDesc')}\n \n { locales.t('common.reserveWidget.servicePolicyDescLink') }\n \n \n */}\n
\n \n \n );\n }\n}\n\nconst validate = ({\n name, phone, persons, date, time, agreement,\n}: any) => {\n const errors: any = {};\n\n if (persons === 0) errors.persons = locales.t('common.reserveWidget.formErrors.personsError');\n if (date === '-') errors.date = locales.t('common.reserveWidget.formErrors.dateError');\n if (time === '-') errors.time = locales.t('common.reserveWidget.formErrors.timeError');\n if (!name) errors.name = locales.t('common.reserveWidget.formErrors.nameError');\n if (!phone) errors.phone = locales.t('common.reserveWidget.formErrors.phoneError');\n\n if (!agreement) {\n errors.agreement = locales.t('common.reserveWidget.formErrors.agreementError');\n }\n\n return errors;\n};\n\nexport default compose(\n withStyles(styles),\n reduxForm({\n form: 'reserveWidgetForm',\n validate,\n }),\n)(BookingForm);\n","import React, { PureComponent } from 'react';\nimport BookingForm from '../../components/BookingForm';\nimport { IProps } from './IReserveForm';\nimport { itsTomorrow, mergeDateAndTime } from '../../helpers/dateHelpers';\n\nclass ReserveFormCont extends PureComponent {\n handleSubmitForm = (data: any): void => {\n const { sendRegistrationRequest, freeTables, scheduleOptions } = this.props;\n\n if (freeTables > 0) {\n const {\n comment, date, name, persons, phone, smsInfo, time\n } = data;\n\n const mergeDate = mergeDateAndTime(date, time);\n\n const dateForReq = itsTomorrow(scheduleOptions[0], time)\n ? mergeDate.add(1, 'day').format()\n : mergeDate.format();\n\n sendRegistrationRequest({\n comment,\n persons,\n date: mergeDateAndTime(date, time).format(),\n dateForReq,\n time: time,\n fullName: name,\n phone,\n smsNotificationIsEnabled: !!smsInfo,\n });\n }\n };\n\n onBookingFieldsChange = (\n date: string,\n personsCount: number,\n ) => {\n const { getFreeTables } = this.props;\n getFreeTables(date, personsCount);\n };\n\n onScheduleRequest = (date: string) => {\n const { getRestaurantSchedule} = this.props;\n\n getRestaurantSchedule(date);\n };\n\n render() {\n const {\n isLoading,\n freeTables,\n maxPersons,\n scheduleOptions,\n bookingData,\n freeTablesError,\n countryCode,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default ReserveFormCont;\n","import { connect } from 'react-redux';\nimport { bindActionCreators, Dispatch } from 'redux';\n\nimport ReserveForm from './ReserveForm';\nimport { IAppStore } from '../../types/IAppStore';\nimport { DispatchProps, StateProps } from './IReserveForm';\nimport { IAppActions } from '../../types/IAppActions';\nimport {\n getFreeTables,\n getMaxPersonCount,\n getRestaurantSchedule,\n} from '../../actions/reserveForm/ReserveFormActions';\nimport { sendRegistrationRequest } from '../../actions/rootWidget/RootWidgetActions';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n return {\n freeTables: state.reserveForm.freeTables,\n freeTablesError: state.reserveForm.freeTablesError,\n maxPersons: state.reserveForm.maxPersons,\n date: state.reserveForm.date,\n persons: state.reserveForm.persons,\n scheduleOptions: state.reserveForm.scheduleOptions,\n isLoading: state.root.bookingIsProcessing,\n bookingData: state.root.bookingReqData,\n countryCode: state.root.restaurantInfo.countryCode,\n }\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch): DispatchProps {\n return bindActionCreators({\n getFreeTables,\n getMaxPersonCount,\n getRestaurantSchedule,\n sendRegistrationRequest,\n }, dispatch)\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ReserveForm);\n\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport {\n createStyles, Theme, withStyles,\n} from '@material-ui/core/styles';\nimport { isSafari } from '../../helpers/helpers';\n\nconst styles = (theme: Theme) => createStyles({\n inputsCont: {\n display: 'flex',\n justifyContent: 'center',\n },\n inputField: {\n fontSize: '36px',\n fontFamily: theme.typography.fontFamily,\n fontWeight: 'bold',\n lineHeight: '43px',\n width: '32px',\n margin: '0 16px',\n textAlign: 'center',\n outline: 'none',\n border: 'none',\n color: theme.palette.text.primary,\n background: \"none\",\n borderBottom: `3px solid ${theme.palette.text.primary}`,\n },\n safariInput: {\n fontSize: '20px',\n textAlign: 'start',\n width: '32px',\n }\n});\n\nconst discardNaN = (string?: string) => {\n if (typeof string !== 'string') {\n return '';\n }\n\n let result = '';\n for (let i = 0; i < string.length; i += 1) {\n const char = string[i];\n\n if ((char >= '0' && char <= '9')) {\n result = `${result}${char}`;\n }\n }\n return result;\n};\n\nclass PinCode extends PureComponent {\n value: string = '';\n\n textInputs: Array = [];\n\n static propTypes = {\n fieldsCount: PropTypes.number,\n fieldMaxLength: PropTypes.number,\n numberOnly: PropTypes.bool,\n onChange: PropTypes.func,\n onFullFilled: PropTypes.func,\n };\n\n static defaultProps = {\n numberOnly: false,\n onChange: () => null,\n onFullFilled: () => null,\n fieldsCount: 4,\n fieldMaxLength: 1,\n };\n\n constructor(props: any) {\n super(props);\n const inputs = [];\n\n for (let i = 0; i < props.fieldsCount; i += 1) {\n inputs[i] = '';\n }\n this.state = { inputs };\n }\n\n componentDidMount() {\n this.textInputs[0].focus();\n }\n\n handleKeyDown = (e: any) => {\n const element = e.target;\n const currentId = parseInt(element.dataset.id, 10);\n const prevElement = currentId > 0 ? this.textInputs[currentId - 1] : null;\n\n if (\n e.keyCode === 8\n && !element.value\n && prevElement\n ) {\n prevElement.focus();\n }\n };\n\n handleInput = (e: any) => {\n const { fieldMaxLength, numberOnly } = this.props;\n const { inputs } = this.state;\n const element = e.target;\n const currentId = parseInt(element.dataset.id, 10);\n let nextElement = this.textInputs[currentId + 1];\n const neWinputs = inputs.slice();\n let { value } = element;\n\n if (numberOnly && typeof value !== 'number') {\n value = discardNaN(value);\n }\n\n while (nextElement && nextElement.value && nextElement.value.length >= fieldMaxLength) {\n nextElement = this.textInputs[parseInt(nextElement.dataset.id, 10) + 1];\n }\n\n if (value.length === fieldMaxLength && nextElement) {\n nextElement.focus();\n }\n\n if (value.length > fieldMaxLength) {\n const newValue = value.substr(0, value.length - 1);\n const rest = value.substr(-1);\n\n value = newValue;\n\n if (nextElement) {\n neWinputs[nextElement.dataset.id] = `${neWinputs[nextElement.dataset.id]}${rest}`;\n nextElement.focus();\n }\n }\n\n neWinputs[currentId] = value;\n this.setState({ inputs: neWinputs });\n this.value = neWinputs.join('');\n this.handleChange(this.value);\n };\n\n handleChange = (value: string) => {\n const { onChange, onFullFilled } = this.props;\n\n onChange(value);\n\n if (this.isFullFilled()) {\n onFullFilled(value);\n }\n };\n\n isFullFilled = () => {\n const { fieldMaxLength, fieldsCount } = this.props;\n\n return String(this.value).length === fieldMaxLength * fieldsCount;\n };\n\n render() {\n const { fieldMaxLength, numberOnly, classes } = this.props;\n const { inputs } = this.state;\n const safariStyles = isSafari();\n\n return (\n
\n {\n inputs.map((value: string, i: number) => (\n {\n this.textInputs[i] = ref;\n }}\n data-id={i}\n type={numberOnly ? 'tel' : 'text'}\n tabIndex={i + 1}\n maxLength={fieldMaxLength}\n value={value}\n onInput={this.handleInput}\n onKeyDown={this.handleKeyDown}\n key={`code-${i}`}\n />\n ))\n }\n
\n );\n }\n}\n\nexport default withStyles(styles)(PinCode);\n","import React, { PureComponent } from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button/Button';\nimport {\n createStyles, Theme, withStyles, WithStyles,\n} from '@material-ui/core/styles';\n\nimport locales from '../../locales';\nimport PinCode from './PinCode';\n\nconst styles = (theme: Theme) => createStyles({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n flex: 1,\n padding: '40px 16px',\n maxWidth: '450px',\n margin: '0 auto',\n },\n phone: {\n marginBottom: '32px',\n },\n btnStyle: {\n marginTop: '64px',\n width: '100%',\n height: 52,\n fontSize: '18px',\n },\n timeLeft: {\n marginTop: '24px',\n opacity: '.7',\n color: theme.palette.text.hint,\n },\n errorMessage: {\n marginTop: '24px',\n },\n});\n\ninterface IProps extends WithStyles {\n timeLeftFromReq: number;\n phoneNumber?: string;\n errorMessage: string;\n handleSendSmsCode: () => void;\n handleVerifySmsCode: (code: string) => void;\n}\n\ninterface IState {\n timeLeft: number;\n showResend: boolean;\n}\n\nclass SMSCodeForm extends PureComponent {\n interval: number = 0;\n\n constructor(props: any) {\n super(props);\n this.state = {\n timeLeft: 99,\n showResend: false,\n };\n }\n\n componentDidMount() {\n this.startResendTimer();\n }\n\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n startResendTimer() {\n const { timeLeftFromReq } = this.props;\n\n this.setState({\n showResend: false,\n timeLeft: timeLeftFromReq,\n });\n\n this.interval = window.setInterval(this.tick, 1000);\n }\n\n onClickResendSms() {\n const { handleSendSmsCode } = this.props;\n handleSendSmsCode();\n this.startResendTimer();\n }\n\n onFullFilled(code: string) {\n const { handleVerifySmsCode } = this.props;\n handleVerifySmsCode(code);\n }\n\n tick = () => {\n const { timeLeft } = this.state;\n const { timeLeftFromReq } = this.props;\n\n if (timeLeft <= 0) {\n clearInterval(this.interval);\n this.setState({\n showResend: true,\n timeLeft: timeLeftFromReq,\n });\n } else {\n this.setState({\n timeLeft: timeLeft - 1,\n });\n }\n };\n\n render() {\n const { classes, phoneNumber, errorMessage } = this.props;\n const { showResend, timeLeft } = this.state;\n\n return (\n
\n \n {locales.t('common.reserveWidget.enterCode')}\n \n \n { phoneNumber }\n \n this.onFullFilled(code)}\n />\n {errorMessage && (\n \n { errorMessage }\n \n )}\n {!showResend && !errorMessage && (\n \n {locales.t('common.reserveWidget.resendMessage')}\n {locales.t('common.reserveWidget.resendMessageSec', { seconds: timeLeft })}\n \n )}\n {(showResend || errorMessage) && (\n this.onClickResendSms()}\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n {locales.t('common.reserveWidget.receiveSms')}\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(SMSCodeForm);\n","import React, { PureComponent } from 'react';\n\nimport { IProps } from './ISmsCodeFormCont';\nimport SMSCodeForm from '../../components/SMSCodeForm';\n\nclass SmsCodeForm extends PureComponent {\n render() {\n const {\n resendRegistrationRequest,\n verifySmsCode,\n timeLeft,\n smsCodeError,\n phoneNumber,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default SmsCodeForm\n","import { connect } from 'react-redux';\nimport { bindActionCreators, Dispatch } from 'redux';\n\nimport { IAppStore } from '../../types/IAppStore';\nimport { IAppActions } from '../../types/IAppActions';\nimport { StateProps, DispatchProps } from './ISmsCodeFormCont';\n\nimport {\n verifySmsCode,\n resendRegistrationRequest,\n} from '../../actions/rootWidget/RootWidgetActions';\nimport SmsCodeForm from './SmsCodeForm';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const {\n timeLeft,\n smsCodeError,\n bookingReqData,\n } = state.root;\n\n return {\n timeLeft,\n smsCodeError,\n phoneNumber: bookingReqData.phone,\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch): DispatchProps {\n return bindActionCreators({\n verifySmsCode,\n resendRegistrationRequest,\n }, dispatch);\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SmsCodeForm);\n","import React from 'react';\n\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles\n} from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Typography from '@material-ui/core/Typography';\n\nimport locales from '../../locales';\n\nconst styles = (theme: Theme) => createStyles({\n processCont: {\n padding: '100px 48px 44px',\n maxWidth: '500px',\n margin: '0 auto',\n textAlign: 'center',\n },\n processText: {\n fontSize: '16px',\n color: theme.palette.text.primary,\n margin: '24px 0 42px',\n },\n processCancel: {\n width: '100%',\n height: 52,\n fontSize: '18px',\n },\n});\n\ninterface IProps extends WithStyles {\n bookingIsProcessing: boolean;\n handleDeleteBooking: () => void;\n}\n\nconst Index: React.FC = ({classes, bookingIsProcessing, handleDeleteBooking}) => (\n
\n \n \n { bookingIsProcessing\n ? locales.t('common.reserveWidget.queueProcessing')\n : locales.t('common.reserveWidget.requestProcessing')\n }\n \n \n {locales.t('common.cancel')}\n \n
\n);\n\nexport default withStyles(styles)(Index);\n","import React, { PureComponent } from 'react';\n\nimport { IProps } from './IReserveProcessingCont';\nimport ReserveProcessing from '../../components/ReserveProcessing';\n\nclass ReserveProcessingCont extends PureComponent {\n /** @description Ручка для отмены брони */\n handleDeleteBooking = () => {\n const {\n bookingId,\n deleteBooking,\n } = this.props;\n\n if (bookingId) {\n deleteBooking(bookingId);\n }\n };\n\n render() {\n const {\n bookingIsProcessing,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default ReserveProcessingCont\n","import { connect } from 'react-redux';\nimport { bindActionCreators, Dispatch } from 'redux';\n\nimport { IAppStore } from '../../types/IAppStore';\nimport { IAppActions } from '../../types/IAppActions';\nimport { StateProps, DispatchProps } from './IReserveProcessingCont';\n\nimport {\n deleteBooking,\n} from '../../actions/rootWidget/RootWidgetActions';\nimport ReserveProcessingCont from './ReserveProcessingCont';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const {\n bookingIsProcessing,\n bookingId,\n widgetId\n } = state.root;\n\n return {\n widgetId,\n bookingIsProcessing,\n bookingId,\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch): DispatchProps {\n return bindActionCreators({\n deleteBooking,\n }, dispatch);\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ReserveProcessingCont);\n","import React from 'react';\nimport moment from 'moment';\n\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles\n} from '@material-ui/core/styles';\nimport AccessTimeIcon from '@material-ui/icons/AccessTime';\nimport GroupIcon from '@material-ui/icons/Group';\nimport Paper from '@material-ui/core/Paper';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\n\nimport locales from '../../locales';\nimport { TRestaurant } from '../../types/IRootWidgetStore';\n\nconst styles = (theme: Theme) => createStyles({\n confirmedPaper: {\n padding: '20px 24px',\n textAlign: 'left',\n },\n confirmedInfo: {\n margin: '20px 0 8px',\n },\n confirmedCell: {\n display: 'flex',\n alignItems: 'center',\n padding: '4px 0',\n color: theme.palette.text.primary,\n },\n confirmedIcon: {\n marginRight: '8px',\n },\n subtitle2: {\n color: theme.palette.text.primary,\n },\n caption: {\n color: theme.palette.text.hint,\n }\n});\n\ninterface IProps extends WithStyles {\n bookingData: any\n restaurantInfo: TRestaurant,\n}\n\nconst ReserveInfo: React.FC = ({\n classes,\n bookingData,\n restaurantInfo,\n}) => {\n const { persons, date, fullName, phone } = bookingData;\n\n return (\n \n \n { restaurantInfo.name }\n \n \n { restaurantInfo.address }\n \n \n \n \n \n { persons } {locales.t('common.reserveWidget.personSuffix')}\n \n \n \n \n { fullName }\n \n \n \n \n \n { moment(date).format('DD MMMM, HH:mm') }\n \n \n \n \n { phone }\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ReserveInfo);\n","import React, { PureComponent } from 'react';\n\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles\n} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography/Typography';\n\nimport locales from '../../locales';\nimport ReserveInfo from '../Common/ReserveInfo';\n\nconst styles = (theme: Theme) => createStyles({\n successCont: {\n maxWidth: '450px',\n margin: '0 auto',\n textAlign: 'center',\n paddingTop: '32px',\n },\n restaurantInfoWrap: {\n textAlign: 'center',\n marginTop: 33,\n },\n body1: {\n color: theme.palette.text.primary,\n }\n});\n\ninterface IProps extends WithStyles {\n bookingReqData: any\n restaurantInfo: any;\n}\n\nclass Index extends PureComponent {\n render() {\n const {\n classes,\n bookingReqData,\n restaurantInfo,\n } = this.props;\n\n return (\n
\n \n {locales.t('common.reserveWidget.confirmedTitle')}\n \n \n {locales.t('common.reserveWidget.confirmedDesc')}\n \n
\n \n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(Index);\n","import React, { PureComponent } from 'react';\n\nimport { IProps } from './IReserveSuccess';\nimport ReserveSuccess from '../../components/ReserveSuccess';\n\nclass RootWidget extends PureComponent {\n render() {\n const {\n restaurantInfo,\n bookingReqData,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default RootWidget\n","import { connect } from 'react-redux';\n\nimport ReserveSuccessCont from \"./ReserveSuccessCont\"\nimport { IAppStore } from '../../types/IAppStore';\nimport { StateProps } from './IReserveSuccess';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const {\n restaurantInfo,\n bookingReqData,\n } = state.root;\n\n return {\n restaurantInfo,\n bookingReqData,\n };\n}\n\nexport default connect(mapStateToProps, {})(ReserveSuccessCont);\n","import React from 'react';\n\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\nimport CancelSharpIcon from '@material-ui/icons/CancelSharp';\nimport Typography from '@material-ui/core/Typography';\n\nimport locales from '../../locales';\n\nconst styles = createStyles({\n wrap: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n cancelSharpIcon: {\n fontSize: '58px',\n margin: '72px 0 12px',\n },\n msgWrap: {\n maxWidth: 420,\n textAlign: 'center',\n },\n});\n\ninterface IProps extends WithStyles {}\n\nconst UnknownError: React.FC = ({ classes }) => (\n
\n \n
\n \n {locales.t('common.reserveWidget.declineDesc')}\n \n
\n
\n);\n\nexport default withStyles(styles)(UnknownError);\n","import React from 'react';\n\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\n\nimport locales from '../../locales';\nimport ReserveInfo from '../Common/ReserveInfo';\n\nconst styles = createStyles({\n wrap: {\n maxWidth: '450px',\n margin: '0 auto',\n textAlign: 'center',\n },\n restaurantInfoWrap: {\n textAlign: 'center',\n marginTop: 20,\n }\n});\n\ninterface IProps extends WithStyles {\n restaurantInfo?: any;\n bookingData: any;\n}\n\nconst ActiveReserveError: React.FC = (props) => {\n const {\n classes,\n restaurantInfo,\n bookingData,\n } = props;\n return (\n
\n \n {locales.t('common.errors.reserveWidget.activeReserve')}\n \n \n {locales.t('common.errors.reserveWidget.activeReserveDesc')} { restaurantInfo.phone }\n \n
\n \n {locales.t('common.reserveWidget.yourCurrentReserve')}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(ActiveReserveError);\n","import React, { Component } from 'react';\n\nimport DialogContent from '@material-ui/core/DialogContent';\n\nimport { IProps } from './IErrorCont';\nimport { errorType } from '../../config/constants';\nimport UnknownError from '../../components/Errors/UnknownError';\nimport ActiveReserveError from '../../components/Errors/ActiveReserveError';\n\nclass ErrorCont extends Component {\n render() {\n const { bookingError, restaurantInfo } = this.props;\n let errorBody = ;\n\n if (bookingError) {\n switch (bookingError.type) {\n case errorType.activeReserve: {\n errorBody = (\n \n );\n break;\n }\n default: {\n errorBody = (\n \n );\n break;\n }\n }\n }\n\n return (\n \n { errorBody }\n \n );\n }\n}\n\nexport default ErrorCont;\n","import { connect } from 'react-redux';\n\nimport { IAppStore } from '../../types/IAppStore';\nimport { StateProps } from './IErrorCont';\n\nimport ErrorCont from './ErrorCont';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const {\n widgetState,\n bookingError,\n restaurantInfo\n } = state.root;\n\n return {\n widgetState,\n bookingError,\n restaurantInfo,\n };\n}\n\nexport default connect(mapStateToProps, {})(ErrorCont);\n","import React, { PureComponent } from 'react';\n\nimport { withStyles } from '@material-ui/core';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\n\nimport styles from './styles';\nimport locales from '../../locales';\nimport { IProps } from './IRootWidget';\nimport { reserveWidgetState } from '../../config/constants';\nimport ReserveForm from '../ReserveFormCont';\nimport SMSCodeForm from '../SmsCodeFormCont';\nimport ReserveProcessing from '../ReserveProcessingCont';\nimport ReserveSuccess from '../ReserveSuccessCont';\nimport ErrorCont from '../ErrorCont';\nimport { isFullScreen } from '../../helpers/helpers';\nimport { fallbackValue } from '../../helpers/constants'\n\nclass RootWidget extends PureComponent {\n render() {\n const {\n classes,\n widgetState,\n restaurantInfo,\n } = this.props;\n\n let widgetContent = null;\n\n switch (widgetState) {\n case reserveWidgetState.FORM_STATE:\n widgetContent = (\n \n );\n break;\n\n case reserveWidgetState.SMS_VERIFY_STATE:\n widgetContent = (\n \n );\n break;\n\n case reserveWidgetState.PROCESSING_STATE:\n widgetContent = (\n \n );\n break;\n\n case reserveWidgetState.SUCCESS_STATE:\n widgetContent = (\n \n );\n break;\n case reserveWidgetState.ERROR: {\n widgetContent = (\n \n );\n break;\n }\n default:\n widgetContent = null;\n break;\n }\n\n return (\n \n { (restaurantInfo.settings || fallbackValue.settings).isShowHeader\n ? (\n \n {`${locales.t('common.reserveWidget.reserveTitle')} ${restaurantInfo.name}`}\n \n )\n : null}\n \n { widgetContent }\n \n \n );\n }\n}\n\nexport default withStyles(styles)(RootWidget)\n","import { createStyles } from '@material-ui/core';\nimport { Theme } from \"@material-ui/core/styles\";\n\nexport default (theme: Theme) => createStyles({\n content: {\n minHeight: 371,\n paddingTop: 12,\n display: 'flex',\n color: theme.palette.text.primary,\n },\n title: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n },\n});\n","import { connect } from 'react-redux';\nimport { bindActionCreators, Dispatch } from 'redux';\n\nimport { IAppStore } from '../../types/IAppStore';\nimport { IAppActions } from '../../types/IAppActions';\nimport { StateProps, DispatchProps } from './IRootWidget';\n\nimport {\n verifySmsCode,\n guestBooking,\n deleteBooking,\n sendRegistrationRequest,\n} from '../../actions/rootWidget/RootWidgetActions';\nimport RootWidget from './RootWidget';\n\nfunction mapStateToProps(state: IAppStore): StateProps {\n const {\n widgetState,\n restaurantInfo,\n } = state.root;\n\n return {\n widgetState,\n restaurantInfo,\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch): DispatchProps {\n return bindActionCreators({\n verifySmsCode,\n guestBooking,\n deleteBooking,\n sendRegistrationRequest,\n }, dispatch);\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RootWidget);\n","import React, { Fragment } from 'react';\nimport CssBaseline from '@material-ui/core/CssBaseline';\n\nimport ReserveWidget from '../RootWidgetCont';\nimport { Route } from 'react-router';\n\nconst AppComp: React.FC<{}> = () => (\n \n \n \n \n);\n\nexport default AppComp;\n","import React from 'react';\nimport { Provider } from 'react-redux';\n\nimport { ConnectedRouter as Router } from 'connected-react-router';\nimport 'typeface-roboto';\nimport history from '../../redux/history';\nimport store from '../../redux';\nimport ShowIfInitialized from \"./ShowIfInitializedComp\";\nimport ThemeComp from './ThemeComp';\nimport AppComp from './AppComp';\n\nconst App = () => (\n \n \n \n \n \n \n \n \n \n);\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport * as Sentry from '@sentry/react';\nimport { Integrations } from '@sentry/tracing';\n\nimport './index.css';\nimport App from './containers/App/App';\n\nconst { REACT_APP_SENTRY_DSN, REACT_APP_NAME, REACT_APP_VERSION } = process.env;\n\nif (REACT_APP_SENTRY_DSN) {\n const sentryConfig = {\n dsn: REACT_APP_SENTRY_DSN,\n environment: process.env.NODE_ENV,\n integrations: [\n new Integrations.BrowserTracing(),\n ],\n tracesSampleRate: 0.5,\n };\n\n if (REACT_APP_NAME && REACT_APP_VERSION) {\n sentryConfig.release = `${REACT_APP_NAME}@${REACT_APP_VERSION}`;\n }\n\n Sentry.init(sentryConfig);\n}\n\nReactDOM.render(, document.getElementById('root'));\n"],"sourceRoot":""}