{"version":3,"sources":["utils/JSONHelper.ts","redux/actions/order.ts","aqua-delivery-web-client-ui/components/loader/Loader.tsx","aqua-delivery-web-client-ui/components/loader/LoaderContainer.tsx","utils/enums/PaymentCodes.ts","redux/actions/client.ts","redux/actions/payment.ts","redux/actions/user.ts","aqua-delivery-web-client-ui/components/EmptyPanel.tsx","aqua-delivery-web-client-ui/hooks/useDocumentLanguage.ts","aqua-delivery-web-client-ui/localization/Localization.ts","aqua-delivery-web-client-ui/localization/localizationConfig.ts","components/Seo/Seo.tsx","components/YandexMetrika/YandexMetrika.tsx","aqua-delivery-web-client-ui/customFetch.ts","config.ts","hooks/useAntdLocale.tsx","App.tsx","serviceWorker.ts","index.tsx","redux/reducers/addresses.ts","redux/reducers/addressPredictions.ts","redux/reducers/bannersDeeplink.ts","redux/reducers/bonusPoints.ts","redux/reducers/cart.ts","redux/reducers/catalog.ts","redux/reducers/company.ts","redux/reducers/history.ts","redux/reducers/layout.ts","redux/reducers/returnedBottles.ts","redux/reducers/user.ts","redux/reducers/index.ts","redux/store.ts","redux/actions/intervals.ts","aqua-delivery-web-client-ui/components/View.tsx","redux/actions/cart.ts","redux/actions/bannersDeeplink.ts","aqua-delivery-web-client-ui/translations/ui/ru.ts","aqua-delivery-web-client-ui/translations/ui/en.ts","aqua-delivery-web-client-ui/translations/ui/index.ts","aqua-delivery-web-client-ui/components/AbsoluteFilledLoader.tsx","aqua-delivery-web-client-ui/components/loader/SuspenseWithLoader.tsx","aqua-delivery-client-graphql/utils.ts","redux/reducers/order.ts","utils/appConfig.ts","utils/enums/NetworkStatus.ts","types.ts","utils/token.ts","translations/en/index.ts","translations/en/cookieNotification.ts","translations/en/downloadAppRedirect.ts","translations/en/cart.ts","translations/en/cartDrawer.ts","translations/en/cartModal.ts","translations/en/catalog.ts","translations/en/catalogBottomSection.ts","translations/en/errors.ts","translations/en/layout.ts","translations/en/login.ts","translations/en/notifications.ts","translations/en/ordersHistory.ts","translations/en/pointsModal.ts","translations/en/product.ts","translations/en/profile.ts","translations/en/staticPages.ts","translations/en/banners.ts","translations/ru/index.ts","translations/ru/cookieNotification.ts","translations/ru/downloadAppRedirect.ts","translations/ru/cart.ts","translations/ru/cartDrawer.ts","translations/ru/cartModal.ts","translations/ru/catalog.ts","translations/ru/catalogBottomSection.ts","translations/ru/errors.ts","translations/ru/layout.ts","translations/ru/login.ts","translations/ru/notifications.ts","translations/ru/ordersHistory.ts","translations/ru/pointsModal.ts","translations/ru/product.ts","translations/ru/profile.ts","translations/ru/staticPages.ts","translations/ru/banners.ts","translations/tr/index.ts","translations/tr/cookieNotification.ts","translations/tr/downloadAppRedirect.ts","translations/tr/cart.ts","translations/tr/cartDrawer.ts","translations/tr/cartModal.ts","translations/tr/catalog.ts","translations/tr/catalogBottomSection.ts","translations/tr/errors.ts","translations/tr/layout.ts","translations/tr/login.ts","translations/tr/notifications.ts","translations/tr/ordersHistory.ts","translations/tr/pointsModal.ts","translations/tr/product.ts","translations/tr/profile.ts","translations/tr/staticPages.ts","translations/tr/banners.ts","translations/index.ts","redux/actions/addresses.ts","redux/actions/returnedBottles.ts","redux/actions/company.ts","utils/DateHelper.ts","redux/actions/catalog.ts","utils/URLHelper.ts","redux/actions/history.ts","aqua-delivery-web-client-ui/translations/plural/ru.ts","aqua-delivery-web-client-ui/translations/plural/en.ts","aqua-delivery-web-client-ui/i18n.tsx","utils/validators/getHeaderURLValue.tsx","utils/httpClient.ts","redux/actions/bonusPoints.ts","redux/actions/addressPredictions.ts","redux/actions/partner.ts","aqua-delivery-web-client-ui/components/loader/LoaderContext.tsx","utils/StorageHelper.ts","redux/actions/layout.ts","utils/Logger.ts","utils/SentryLogger.ts"],"names":["JSONHelper","str","jsonTemplate","test","data","match","length","JSON","parse","Types","TypesInterval","TypesPayment","SET_READY_FIELD","SET_DEFAULT_FIELD","SET_NETWORK_STATUS","SET_PROMOCODE_STATUS","SET_PROMOCODE_ERROR","SET_ORDER_MODAL","SET_CANCEL_ORDER_REASONS","SET_ORDER_ERROR_MESSAGE","errorHandler","error","defaultErrorMessage","Axios","isCancel","response","status","errorMessage","message","concat","_message","tMap","translateMap","errors","OrderActions","assignNote","value","async","dispatch","getState","_ref","httpClientServices","services","info","cart","note","getClient","post","then","this","setReadyField","CheckoutFields","catch","assignPromocode","_ref2","promotionCode","setNetworkStatus","NetworkStatus","loading","_ref3","batch","valid","PromocodeStatus","Valid","Invalid","setPromocodeStatus","setPromocodeError","e","t","finally","ready","type","payload","sendOnlinePayment","order","_ref4","company","userData","user","partnerId","username","email","firstName","phone_number","phone","partner","getPartnerToken","_ref5","requestData","documentId","orderDetails","uuid","orderNumber","payment","clientId","client","clientEmail","amount","total","context","returnUrl","window","location","origin","id","clientPhone","paymentMethod","paymentMethodId","clientAddress","address","name","currency","autoRedirect","paymentRequest","headers","Authorization","token","stringify","uniqueDeviceId","localStorage","getItem","_ref6","CartActions","clearCart","paymentUrl","PaymentActions","setPaymentUrl","setOrderModal","show","isSuccess","orderId","shippingDate","dayjs","tz","timeZone","format","shippingDateTo","_e$response","completeOrder","formData","_ref7","onlineCodes","PaymentCodes","sbp","online","isReadyFields","isUsingBonusPoints","bonusPoints","Object","values","every","field","BonusPointsActions","assignBonusPointsToCart","complete","_ref8","payments","clearOrder","CompanyActions","fetchCompanyInfo","find","setup","code","includes","errorStr","isJsonInString","json","getJsonFromString","firstKey","keys","setOrderErrorMessage","Error","defaultFields","forEach","key","setDefaultField","cancelOrder","reasonId","_","_ref9","externalOrder","clientCancelOrder","HistoriesAction","clearHistories","fetchHistories","fetchCancelOrderReasons","_ref10","api","get","cancelReason","_ref11","setCancelOrderReasons","networkItem","networkItems","reasons","fieldName","Loader","loaderId","React","text","possible","i","charAt","Math","floor","random","makeid","loader","LoaderContext","setLoaderState","LoaderContainer","children","height","tip","setState","useState","showLoader","item","createElement","Provider","states","state","_Spin","style","minHeight","spinning","delay","ClientActions","clientEnrichToken","selectedAddress","addresses","TokenHelper","isAnon","_selectedAddress$exte","body","externalUserId","externalLocationId","external_id","phone_code","setTokens","cleanTokens","SET_PAYMENTS","SET_SELECTED_PAYMENT","SET_PAYMENT_URL","paymentCancelToken","CancelToken","source","fetchPayments","getPaymentMethods","cancelToken","setPayments","fetchAnonPayments","legalPersonId","legal_person_id","url","assignPayment","monolithType","description","setSelectedPayment","SET_USER","userCancelToken","applicationId","getAppConfig","parseMessage","parseError","UserActions","fetchUser","updateUserDataByJWTToken","ordersource","success","fetchProfile","AddressesActions","fetchAddresses","removeItem","logoutUser","getProfile","setUser","assignUser","fio","phoneNumber","register","auth","completeRegistration","Application","refreshToken","PartnerActions","partnerEnrichToken","update","__","clearAddresses","deleteAccount","delete","reload","EmptyPanel","containerStyle","View","className","_Empty","image","PRESENTED_IMAGE_SIMPLE","useDocumentLanguage","htmlElement","useMemo","document","querySelector","updateDocumentLocale","useCallback","locale","lang","Localization","createContext","countries","defaultCurrency","localizationConfig","AZ","AM","BY","KZ","KG","MD","RU","TJ","UZ","BE","GR","LT","PT","ES","LU","FR","SI","DK","MT","SK","DE","IT","NL","FI","EE","CY","AT","IE","LV","Seo","metaTags","localUrl","HelmetProvider","Helmet","prioritizeSeoTags","title","property","content","keywords","rel","href","YandexMetrika","yandexMetrikaId","Fragment","YMInitializer","accounts","options","webvisor","version","config","getEnvVariable","env","I18n","undefined","getBaseUrl","localStorageKey","envKey","conf","initConfig","baseAuthApi","basePartnerApi","baseCourierApi","baseTemporalApi","baseWikiApi","baseMarketingApi","baseSMSApi","baseBillingApi","basePaymentApi","baseDeliveryPeriodApi","basePricingPlansApi","baseInvoiceApi","baseIotApi","baseAmoApi","invoiceClientUrl","setConfig","tokenStoreKey","refreshTokenStoreKey","policylUrl","contractUrl","partnerLoginUrl","payPalClientId","integrations","knowledgeUrl","dashboard","contactEmail","isAppUpdating","paymentMethodsAvailability","metrics","ga","ym","gtm","domain","base","getToken","refreshTokenUrl","resetPasswordRequest","confirmSms","enrichToken","courier","temporal","wiki","marketing","sms","billing","pricingPlans","deliveryPeriod","invoice","iot","amo","locales","ru","en","Sentry","dsn","maxBreadcrumbs","sampleRate","environment","process","tracesSampleRate","release","history","createBrowserHistory","ClientAsync","lazy","TechnicalWorkPageAsync","Page404Async","I18nSetConfig","translations","restoreTokens","App","setLocale","googleTagManager","antdLocale","useContext","I18nContext","useAntdLocale","appParams","useUrlSearchParams","Boolean","gtmArgs","gtmId","TagManager","initialize","useEffect","navigator","language","split","fallback","ReduxProvider","store","require","default","innerHeight","SuspenseWithLoader","_ConfigProvider","renderEmpty","Router","Switch","Route","path","component","AppLoader","hostname","__DEV__","timer","setInterval","ReactDOM","render","getElementById","checkIfDevEnvironmentChanged","serverUrl","getDomain","StorageHelper","clearLocalStorageWithExceptions","setItem","fetchAppConfig","renderApp","clearInterval","serviceWorker","registration","unregister","initState","networkStatus","pending","newState","arguments","action","SET_ADDRESS","SET_SELECTED_ADDRESS","predictions","yandexPredictions","yandexPredictionGeocode","isYaAutocompleteEnabled","addressPredictions","SET_PREDICTIONS","SET_YA_PREDICTIONS","SET_YA_PREDICTION_GEOCODE","SET_IS_YA_AUTOCOMPLETE_ENABLED","bannersAction","SET_COMPONENT_SHOW","aboutLoyaltySystem","SET_BONUS_POINTS_HISTORY","SET_ABOUT_LOYALTY_SYSTEM","SET_IS_USING_BONUS_POINTS","items","deletedItems","calculate","calculateNetworkStatus","detailNetworkStatus","initCartNetworkStatus","Cart","INIT_CART","SET_PRODUCTS","SET_DELETED_PRODUCTS","SET_CALCULATE_NETWORK_STATUS","SET_DETAIL_NETWORK_STATUS","SET_INIT_CART_NETWORK_STATUS","SET_CALCULATE","products","productSets","categories","catalog","activeTab","isTouchTab","SET_PRODUCT_SETS","SET_CATEGORIES","SET_ACTIVE_TAB","SET_CATALOG","SET_IS_TOUCH_TAB","logo","mockup","banners","bannersNetworkStatus","SET_COMPANY_INFO","SET_COMPANY_LOGO","SET_COMPANY_MOCKUP","SET_COMPANY_BANNERS","SET_BANNERS_NETWORK_STATUS","pagination","histories","SET_HISTORIES","SET_PAGINATION","header","hidden","footer","noScroll","layout","LayoutActionTypes","LAYOUT_SET_HEADER_HIDDEN","LAYOUT_SET_FOOTER_HIDDEN","LAYOUT_SET_BODY_NO_SCROLL","quantity","isUserTriggeredContainerBlock","isUserTriggeredReturnedBottles","helpModalContent","returnedBottles","SET_BOTTLE_QUANTITY","SET_IS_USER_TRIGGERED_CONTAINER_BLOCK","SET_IS_USER_TRIGGERED_RETURNED_BOTTLES","SET_HELP_MODAL_CONTENT","rootReducer","combineReducers","bannersDeeplink","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","middleware","thunk","withExtraArgument","createStore","applyMiddleware","SET_INTERVALS","IntervalActions","fetchIntervals","params","longitude","latitude","getIntervalsByCoords","setIntervals","assignInterval","intervalId","date","_info$cart","periodId","interval","intervals","ref","center","inline","wrap","other","centerStyles","alignItems","justifyContent","inlineStyles","display","flexWrap","classNames","ContainersToReturn","initCart","setInitCartNetworkStatus","setInfoCart","assignAddress","restoreCart","cartId","setDetailNetworkStatus","URLHelper","buildUrl","restore","map","_item$product","_item$productSet","productId","product","externalId","productSet","cartItem","_data$returnableConta","_data$returnableConta2","restoreProducts","ReturnedBottles","setQuantity","returnableContainer","_localStorage$getItem","flat","cartItems","requiredProducts","requiredProductsIds","_items$find","productStrId","isRequired","tooltipText","setCartItems","authenticate","isAnonymousCart","anonymousSelectedAddresses","addressId","newCartId","authenticatedCart","addProductToCart","productName","addProduct","reduce","acc","current","filtered","filter","isProductSet","setDeletedCartItems","addProductSetToCart","productSetId","addProductSet","reduceProduct","reduceProductSet","_ref12","_ref13","removeProduct","_ref14","_getState$cart$calcul","_getState$cart$calcul2","calculateProduct","_product$product","_product$productSet","isEmptyCart","removeCartProduct","push","restoreCartProduct","restoreCartProductSet","haveContainersToReturn","haveBottles","_ref15","setCalculateNetworkStatus","_ref16","_ref17","_data$returnableConta3","insufficientReturnableContainer","addReturnedBottle","externalProductId","reason","fromEntries","setCalculate","clearBottles","setCartItemsSets","BannersDeeplinkActions","setComponentShow","copyButton","copy","fileField","label","multipleLabel","multipleFilesLabel","imageField","preview","autoCompleteField","placeholder","daysField","save","weekdays","weekends","selectorLang","cloudPaymentsButton","noData","countryPicker","selectCountry","checkboxSelector","checkAll","ok","technicalWorkPage","subtitle","translationMap","createTranslationMap","ui","AbsoluteFilledLoader","assign","position","top","bottom","left","right","backgroundColor","maxHeight","Suspense","lcFirst","toLowerCase","slice","isAxiosError","axiosError","apolloError","graphQLErrors","debugMessage","networkError","selectedPayment","AddressField","IntervalField","PaymentField","NoteField","promocode","orderModal","promocodeStatus","promocodeError","cancelOrderReasons","orderErrorMessage","Order","REACT_APP_ENV","replace","fetch","URL","toString","searchParams","URLSearchParams","axios","timeout","UserRoles","Tokens","constructor","instance","refresh","isAnonToken","decodeToken","roles","AnonymousAggregatorClient","RoleClientApp","some","JwtDecode","hasPartner","partner_id","getRefreshToken","needRefresh","exp","Date","tokensObj","saveTokens","tokenHelper","index","cookieNotification","button","downloadAppRedirect","backBtn","relatedTitle","cartEmpty","backToCatalog","next","autoProduct","buttons","addBottles","skipBottles","deletedProduct","restoreProductBtn","addAddress","btnOpen","back","noFoundAdress","manuallyLocation","mainLocation","secondaryLocation","coordinates","btnConfirm","btnNext","fullAddress","street","house","entrance","room","noRoomNumber","comment","errorLocationSearch","notFound","addressField","noAddresses","changeAddress","city","deliveryTime","noTimeForAdress","bonusField","useBonuses","notSufficientBonuses","firstOrder","payExtra","more","enterPhoneNumber","notValidPhoneNumber","orderCost","orderSum","deliveryCost","paymentLoading","errorPaymentLoading","promocodeTitle","apply","pc","addressNotSelected","helpMessageOk","infoMessage","sum","bonuses","shortBonuses","delivery","сheckout","cartDrawer","empty","backButton","btnAuth","btnAnon","login","anon","btnSend","orAuth","or","cartModal","noSuccess","subTitle","btnClose","addressSelector","enterAddressPanel","buttonMap","buttonNotFoundAddress","inputPlaceholder","confirmDeleteAddress","confirmClearCart","catalogBottomSection","aboutCompany","deliveryPayment","shippingTime","titlePaymentMethods","paymentMethods","softInvoice","sberbankRecurring","yandexKassa","yooMoneyRecurring","offlineAcquiring","cash","googlePay","applePay","sberbank","loyalty","contract","eximbank","sberbankOnlineByPhone","sberbankOnlineByQr","liqpay","tinkoff","sberbanksbp","contractForLegalPerson","downloadAppModal","textMobile","img","accessError","reduceReturnedBottle","addressExists","fetchProductSets","changeProductQuantity","changeProductSetQuantity","createAddress","createAnonAddress","buttonBack","buttonCheckout","mobileMenu","contractOffer","privacyPolicy","partnerWebsite","logout","titleBonus","article","termsOfUse","link","smsCode","smsText","phoneCallText","emailText","codeDidNotCome","resendCode","timeLeft","form","fields","validations","password","rememberMe","links","recoveryPassword","profileButton","loginButton","logoutButton","submitButton","confirm","notifications","addToDesktop","ordersHistory","btn","repeat","toCatalog","pay","noOrders","details","shippingAddress","leaveComment","selectReasonAndNote","cancel","orderStatus","new","completed","approved","cancelled","inProcess","undelivered","requiresConfirmation","pointsModal","rulesTitle","historyTitle","download","start","end","btnDownload","count","totalPay","addButton","addedButton","price","promotion","maxCountMessage","ct","profile","myAddress","historyOrders","messages","share","downloadApp","signOut","btnLogoutOk","modalDeleteAccount","btnDelete","messageSignOut","userPlaceholder","emailPlaceholder","deliveryAmount","staticPages","comingSoon","clickBanner","infoBanner","storyBanner","productSetBanner","makeOrder","emailCode","langs","tr","sort","anonymousAddresses","getAddresses","setAddresses","restoreSelectedAddress","addAnonymousAddressAfterLogin","restoreAddresses","existedAddresses","selectAddress","setSelectedAddress","deleteAnonymousAddress","addressUUID","existedSelectedAddress","warning","unshift","createAnonymousAddress","newAnonymousAddress","district","district_id","itemAddress","tempAddress","housing","building","isAuth","obj","deleteAddress","addAdditionalAddressInfo","patch","addReturnableContainer","noBottles","reduceReturnableContainer","fetchHelpModalContent","_getState$company$inf","about_returned_package_url","setHelpModalContent","setIsUserTriggeredContainerBlock","IsUserTriggered","setIsUserTriggeredReturnedBottles","Content","about","setCompanyInfo","fetchCompanyLogo","setCompanyLogo","contentUrl","fetchCompanyMockup","setCompanyMockup","fetchCompanyBanners","_info$defaultCity","_info$defaultCity2","defaultCity","center_latitude","center_longitude","setBannersNetworkStatus","setCompanyBanners","padTo2Digits","num","padStart","DateHelper","getDate","getMonth","getFullYear","join","catalogCancelToken","CatalogsActions","getProduct","category","getProductSet","_addresses$selectedAd","cityId","city_id","formatDate","paymentType","setProductSets","fetchAllProducts","_addresses$selectedAd2","getLocale","setCatalog","setProducts","setCategories","setActiveTab","setIsTouchTab","sets","RegExp","string","paramString","curr","FETCH_HISTORY","page","getHistories","setHistories","current_page_number","setPagination","addOrder","cartProducts","hProduct","hProductSet","pSet","reorder","payForOrder","shipping","Number","paidAmount","months","one","few","many","days","hours","minutes","partnersDative","definedLocale","extend","utc","timezone","fallbacks","defaultLocale","pluralizationFunction","pluralization","pluralizeRu","uiTranslations","pluralTranslations","plural","momentLocatization","dayjsRu","dayjsEn","setI18nConfig","setAppropriateLocale","isLocaleDefined","userLanguage","translation","result","flatten","unflatten","object","getHeaderURLValue","_config$url","_baseURL","_path","baseURL","endsWith","startsWith","defaultToken","mutex","Mutex","requests","localToken","enrichPartner","accessErrorHandler","clearLocalStorage","rToken","refresh_token","userLocale","additionalHeadersToService","clients","Map","defaultUrl","originRequest","Promise","reject","waitForUnlock","request","_error$config","_error$response","_error$response2","Logger","method","toUpperCase","status_code","dateFinish","now","toUTCString","xz_config","x_data","isLocked","acquire","_additionalHeadersToS","service","has","additionalHeaders","newClient","create","withCredentials","interceptors","use","_config$method$toUppe","_config$method","hash","sha1","dateStart","x_json_data","_config$config$method","x_response","responseError","set","setDefaultUrl","paidByPoints","fetchBonusPointsHistory","setBonusPointsHistory","fetchAboutLoyaltySystem","about_loyalty_system_url","setAboutLoyaltySystem","setIsUsingBonusPoints","isUsing","AddressPredictionsActions","getAddressPredictions","lat","lon","setAddressPredictions","getYandexPredictionGeocode","apiKey","yandexMapsToken","apikey","geocode","_geo$find","_geo$find2","_geo$find3","_geo$find4","coords","GeoObjectCollection","featureMember","GeoObject","Point","pos","geo","metaDataProperty","GeocoderMetaData","Address","Components","house_number","kind","road","county","parseFloat","setYandexPredictionGeocode","setIsYaAutocompleteEnabled","getYandexAddressPredictions","yandexSuggestToken","suggestions","results","setYandexAddressPredictions","yaPredictions","_info$partnerId","_class","defaultExceptions","exceptions","LayoutActions","setHeaderHidden","setFooterHidden","setBodyNoScroll","overflowY","createBreadcrumb","sendEvents","breadcrumb","addBreadcrumb","captureMessage","breadcrumbData","level","captureException"],"mappings":"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","file":"static/js/main.c197cb76.chunk.js","sourcesContent":["export default class JSONHelper {\r\n static jsonTemplate = /[{[]{1}([,:{}[]0-9.-+Eaeflnr-u \\n\\r\\t]|\".*?\")+[}]]{1}/gi;\r\n\r\n static isJsonInString(str: string) {\r\n return JSONHelper.jsonTemplate.test(str);\r\n }\r\n\r\n static getJsonFromString(str: string) {\r\n const data = str.match(JSONHelper.jsonTemplate);\r\n\r\n if (!data?.length) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(data[0]);\r\n }\r\n}\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport dayjs from 'dayjs';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { BonusPointsActions } from './bonusPoints';\r\nimport { CartActions } from './cart';\r\nimport { CompanyActions } from './company';\r\nimport { HistoriesAction } from './history';\r\nimport { TIntervalActions, Types as TypesInterval } from './intervals';\r\nimport { PaymentActions, TPaymentActions, Types as TypesPayment } from './payment';\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\nimport { TFormOrder } from '../../routes/cart/hooks/useOrder';\r\nimport { translateMap } from '../../translations';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { PaymentCodes } from '../../utils/enums/PaymentCodes';\r\nimport JSONHelper from '../../utils/JSONHelper';\r\nimport {\r\n CheckoutFields,\r\n OrderNetworkItems,\r\n PromocodeStatus,\r\n TPromocodeStatus,\r\n} from '../reducers/order';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n ...TypesInterval,\r\n ...TypesPayment,\r\n SET_READY_FIELD: 'ORDER@SET:READY:FIELD',\r\n SET_DEFAULT_FIELD: 'ORDER@SET:DEFAULT:FIELD',\r\n SET_NETWORK_STATUS: 'ORDER@SET:NETWORK:STATUS',\r\n SET_PROMOCODE_STATUS: 'ORDER@SET:PROMOCODE:STATUS',\r\n SET_PROMOCODE_ERROR: 'ORDER@SET:PROMOCODE:ERROR',\r\n SET_ORDER_MODAL: 'ORDER@SET:ORDER:MODAL',\r\n SET_CANCEL_ORDER_REASONS: 'ORDER@SET:CANCEL:ORDER:REASONS',\r\n SET_ORDER_ERROR_MESSAGE: 'ORDER@SET:ORDER:ERROR:MESSAGE',\r\n};\r\n\r\nexport type TSetReadyField = {\r\n type: typeof Types.SET_READY_FIELD;\r\n payload: Record;\r\n};\r\n\r\nexport type TSetDefaultField = {\r\n type: typeof Types.SET_DEFAULT_FIELD;\r\n payload: Record;\r\n};\r\n\r\nexport type TSetNetworkStatus = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: Record;\r\n};\r\n\r\nexport type TSetPromocodeStatus = {\r\n type: typeof Types.SET_PROMOCODE_STATUS;\r\n payload: TPromocodeStatus;\r\n};\r\n\r\nexport type TSetPromocodeError = {\r\n type: typeof Types.SET_PROMOCODE_ERROR;\r\n payload: string | null;\r\n};\r\n\r\nexport type TSetCancelOrderReasons = {\r\n type: typeof Types.SET_CANCEL_ORDER_REASONS;\r\n payload: TCancelOrderReasons[];\r\n};\r\n\r\nexport type TSetOrderErrorMessage = {\r\n type: typeof Types.SET_ORDER_ERROR_MESSAGE;\r\n payload: string;\r\n};\r\n\r\nexport type OrderModal = {\r\n show: boolean;\r\n isSuccess: boolean;\r\n orderId: number | null;\r\n shippingDate: string | null;\r\n shippingDateTo: string | null;\r\n};\r\n\r\nexport type TSetOrderModal = {\r\n type: typeof Types.SET_ORDER_MODAL;\r\n payload: OrderModal | null;\r\n};\r\n\r\nexport type TOrderActions =\r\n | TIntervalActions\r\n | TPaymentActions\r\n | TSetReadyField\r\n | TSetPromocodeStatus;\r\n\r\nexport type TTokenResponse = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n basicLegalPerson: string;\r\n basicLegalPersonId: string;\r\n familyName: null | string;\r\n firstName: string;\r\n id: number;\r\n middleName: null | string;\r\n partnerId: string;\r\n phone: string;\r\n token: string;\r\n username: string;\r\n};\r\n\r\nexport type TOrderResponse = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n cart: string;\r\n id: string;\r\n createdAt: string;\r\n order: string;\r\n orderDetails: {\r\n '@type': string;\r\n '@id': string;\r\n id: number;\r\n source: string;\r\n status: string;\r\n paymentType: string;\r\n orderType: string;\r\n deliveryCost: number;\r\n coinsAmount: number;\r\n createdAt: string;\r\n updatedAt: string;\r\n shippingDate: string;\r\n shippingDateTo: string;\r\n items: {\r\n '@type': string;\r\n '@id': string;\r\n product: {\r\n '@type': string;\r\n '@id': string;\r\n uuid: string;\r\n id: number;\r\n name: string;\r\n description: string;\r\n image: string;\r\n };\r\n quantity: number;\r\n price: number;\r\n }[];\r\n total: number;\r\n currency: string;\r\n address: {\r\n '@type': string;\r\n '@id': string;\r\n identity: {\r\n '@type': string;\r\n '@id': string;\r\n serviceUuid: string;\r\n monolithUuid: string;\r\n monolithId: number;\r\n };\r\n city: string;\r\n street: string;\r\n house: string;\r\n coordinates: {\r\n '@type': string;\r\n '@id': string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n name: string;\r\n cityId: number;\r\n districtId: number;\r\n };\r\n client: {\r\n '@type': string;\r\n '@id': string;\r\n phoneNumber: string;\r\n name: string;\r\n status: string;\r\n type: string;\r\n contractNumber: number;\r\n createdAt: string;\r\n updatedAt: string;\r\n externalId: string;\r\n email: string;\r\n partnerId: string;\r\n uuid: string;\r\n };\r\n payment: {\r\n '@type': string;\r\n '@id': string;\r\n partnerId: string;\r\n documentId: string;\r\n currency: string;\r\n amount: number;\r\n amountMoney: {\r\n amount: string;\r\n currency: string;\r\n };\r\n date: string;\r\n clientId: string;\r\n status: string;\r\n orderNumber: number;\r\n };\r\n timeZone: string;\r\n crmUrl: string;\r\n returnableContainerQuantity: number;\r\n legalPersonId: string;\r\n paymentMethodId: string;\r\n context: {\r\n routeUrl: string;\r\n items: {\r\n quantity: number;\r\n price: number;\r\n text: string;\r\n }[];\r\n discount: null;\r\n };\r\n partnerId: string;\r\n uuid: string;\r\n };\r\n};\r\n\r\nexport type TPayHistoryOrder = {\r\n orderDetails: {\r\n id: number;\r\n payment: {\r\n orderNumber: number;\r\n clientId: string;\r\n };\r\n address: {\r\n name: string;\r\n };\r\n client: {\r\n uuid: string;\r\n };\r\n uuid: string;\r\n total: number;\r\n context: {};\r\n paymentMethodId: string;\r\n currency: string;\r\n };\r\n};\r\n\r\nexport type TAssignPromocodeResponse = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n cart: string;\r\n createdAt: string;\r\n errorMessage: string;\r\n id: string;\r\n promotionCode: string;\r\n valid: boolean;\r\n};\r\n\r\nexport type TCancelOrderReasons = {\r\n id: number;\r\n sequence: number;\r\n name: string;\r\n visible: number;\r\n};\r\n\r\ntype OrderActionsType = {\r\n assignNote: (value: string) => TAction>;\r\n assignPromocode: (promocode: string) => TAction>;\r\n setPromocodeStatus: (status: TPromocodeStatus) => TSetPromocodeStatus;\r\n setPromocodeError: (error: string | null) => TSetPromocodeError;\r\n completeOrder: (data: TFormOrder) => TAction>;\r\n sendOnlinePayment: (data: TOrderResponse | TPayHistoryOrder) => TAction>;\r\n cancelOrder: (\r\n id: string,\r\n reasonId: number | null,\r\n note: string | null,\r\n ) => TAction>;\r\n fetchCancelOrderReasons: () => TAction>;\r\n setReadyField: (fieldName: CheckoutFields, value: boolean) => TAction>;\r\n setDefaultField: (fieldName: CheckoutFields, value: any) => TAction>;\r\n setCancelOrderReasons: (reasons: TCancelOrderReasons[]) => TSetCancelOrderReasons;\r\n setOrderModal: (data: OrderModal | null) => TSetOrderModal;\r\n setOrderErrorMessage: (error: string) => TSetOrderErrorMessage;\r\n setNetworkStatus: (\r\n networkItem: OrderNetworkItems,\r\n status: NetworkStatus,\r\n ) => TAction>;\r\n clearOrder: () => TAction>;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const OrderActions: OrderActionsType = {\r\n assignNote(value) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n cart,\r\n note: value ? value : null,\r\n };\r\n\r\n httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignNote, data)\r\n .then(() => {\r\n dispatch(this.setReadyField(CheckoutFields.note, true));\r\n })\r\n .catch(() => {\r\n dispatch(this.setReadyField(CheckoutFields.note, false));\r\n });\r\n }\r\n };\r\n },\r\n assignPromocode(value) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n cart,\r\n promotionCode: value,\r\n };\r\n dispatch(this.setNetworkStatus('promocode', NetworkStatus.loading));\r\n\r\n return httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignPromocode, data)\r\n .then(({ data }) => {\r\n batch(() => {\r\n if (value !== '') {\r\n const status = data.valid\r\n ? PromocodeStatus.Valid\r\n : PromocodeStatus.Invalid;\r\n dispatch(this.setPromocodeStatus(status));\r\n if (status === PromocodeStatus.Invalid) {\r\n dispatch(this.setPromocodeError(data.errorMessage));\r\n }\r\n } else {\r\n dispatch(this.setPromocodeStatus(null));\r\n dispatch(this.setPromocodeError(null));\r\n }\r\n });\r\n })\r\n .catch(e => errorHandler(e, t(tMap.assignPromocode)))\r\n .finally(() => {\r\n dispatch(this.setNetworkStatus('promocode', NetworkStatus.ready));\r\n });\r\n }\r\n };\r\n },\r\n setPromocodeStatus(status) {\r\n return {\r\n type: Types.SET_PROMOCODE_STATUS,\r\n payload: status,\r\n };\r\n },\r\n setPromocodeError(error) {\r\n return {\r\n type: Types.SET_PROMOCODE_ERROR,\r\n payload: error,\r\n };\r\n },\r\n sendOnlinePayment(order) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().company;\r\n const { data: userData } = getState().user;\r\n if (userData && info) {\r\n const partnerId = info.partnerId;\r\n const data = {\r\n partnerId,\r\n username: userData.email || userData.username,\r\n firstName: userData.username || userData.phone_number,\r\n phone: userData.phone_number,\r\n };\r\n\r\n await httpClientServices\r\n .getClient('partner')\r\n .post(services.partner.getPartnerToken, data)\r\n .then(({ data }) => {\r\n const requestData = {\r\n documentId: order.orderDetails.uuid,\r\n orderNumber: order.orderDetails.payment.orderNumber,\r\n clientId:\r\n order.orderDetails.payment.clientId ||\r\n order.orderDetails.client.uuid,\r\n clientEmail: userData.email,\r\n amount: order.orderDetails.total,\r\n context: order.orderDetails.context,\r\n returnUrl: `${window.location.origin}/?success=true&order_id=${order.orderDetails.id}`,\r\n clientPhone: userData.phone_number,\r\n paymentMethod: order.orderDetails.paymentMethodId,\r\n clientAddress: order.orderDetails.address.name,\r\n currency: order.orderDetails.currency,\r\n autoRedirect: false,\r\n };\r\n httpClientServices\r\n .getClient('payment')\r\n .post(services.payment.paymentRequest, requestData, {\r\n headers: {\r\n Authorization: `Bearer ${data.token}`,\r\n 'device-info': JSON.stringify({\r\n uniqueDeviceId: localStorage.getItem('device-id'),\r\n }),\r\n },\r\n })\r\n .then(({ data }) => {\r\n dispatch(CartActions.clearCart());\r\n if (data.paymentUrl) {\r\n dispatch(PaymentActions.setPaymentUrl(data.paymentUrl));\r\n } else {\r\n dispatch(\r\n this.setOrderModal({\r\n show: true,\r\n isSuccess: false,\r\n orderId: data.orderDetails.id,\r\n shippingDate: dayjs(data.orderDetails.shippingDate)\r\n .tz(data.orderDetails.timeZone)\r\n .format('YYYY-MM-DD HH:mm:ss'),\r\n shippingDateTo: dayjs(data.orderDetails.shippingDateTo)\r\n .tz(data.orderDetails.timeZone)\r\n .format('YYYY-MM-DD HH:mm:ss'),\r\n }),\r\n );\r\n }\r\n })\r\n .catch(e => {\r\n message.error(e.response?.data['hydra:description']);\r\n });\r\n });\r\n }\r\n };\r\n },\r\n completeOrder(formData) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const onlineCodes = [PaymentCodes.sbp, PaymentCodes.online];\r\n const isReadyFields = getState().order.isReadyFields;\r\n const { info } = getState().cart;\r\n const { isUsingBonusPoints } = getState().bonusPoints;\r\n const cart = info?.cart;\r\n const canComplete = Object.values(isReadyFields).every(field => field === true);\r\n if (canComplete && cart) {\r\n const data = {\r\n cart,\r\n };\r\n if (isUsingBonusPoints) {\r\n await dispatch(BonusPointsActions.assignBonusPointsToCart());\r\n }\r\n\r\n return httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.complete, data)\r\n .then(({ data }) => {\r\n const { payments } = getState().order;\r\n\r\n batch(() => {\r\n dispatch(CartActions.clearCart());\r\n dispatch(this.clearOrder());\r\n dispatch(CompanyActions.fetchCompanyInfo());\r\n });\r\n\r\n const payment = payments.find(\r\n payment => formData.payment === payment['@id'],\r\n );\r\n if (payment?.setup.code && onlineCodes.includes(payment.setup.code)) {\r\n return dispatch(this.sendOnlinePayment(data));\r\n }\r\n\r\n dispatch(\r\n this.setOrderModal({\r\n show: true,\r\n isSuccess: true,\r\n orderId: data.orderDetails.id,\r\n shippingDate: dayjs(data.orderDetails.shippingDate)\r\n .tz(data.orderDetails.timeZone)\r\n .format('YYYY-MM-DD HH:mm:ss'),\r\n shippingDateTo: dayjs(data.orderDetails.shippingDateTo)\r\n .tz(data.orderDetails.timeZone)\r\n .format('YYYY-MM-DD HH:mm:ss'),\r\n }),\r\n );\r\n })\r\n .catch(e => {\r\n const errorStr = e.response.data['hydra:description'];\r\n\r\n if (JSONHelper.isJsonInString(errorStr)) {\r\n const json = JSONHelper.getJsonFromString(errorStr);\r\n\r\n if (json) {\r\n const firstKey = Object.keys(json)[0];\r\n\r\n dispatch(this.setOrderErrorMessage(json[firstKey]));\r\n throw Error(e);\r\n }\r\n }\r\n\r\n dispatch(this.setOrderErrorMessage(errorStr));\r\n throw Error(e); // catch it in CreateOrderForm.tsx\r\n });\r\n }\r\n };\r\n },\r\n clearOrder() {\r\n return async (dispatch, getState) => {\r\n const { defaultFields, isReadyFields } = getState().order;\r\n\r\n batch(() => {\r\n Object.keys(isReadyFields).forEach(key => {\r\n if ((key as CheckoutFields) !== CheckoutFields.note) {\r\n dispatch(this.setReadyField(key as CheckoutFields, false));\r\n }\r\n });\r\n Object.keys(defaultFields).forEach(key => {\r\n dispatch(this.setDefaultField(key as CheckoutFields, null));\r\n });\r\n });\r\n };\r\n },\r\n cancelOrder(id, reasonId, note) {\r\n return async (dispatch, _, { httpClientServices, services }) => {\r\n const externalOrder = `/order/external_orders/${id}`;\r\n let data;\r\n if (reasonId) {\r\n data = {\r\n externalOrder,\r\n reasonId,\r\n };\r\n } else {\r\n data = {\r\n externalOrder,\r\n note,\r\n };\r\n }\r\n\r\n httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.clientCancelOrder, data)\r\n .then(() => dispatch(HistoriesAction.clearHistories()))\r\n .then(() => dispatch(HistoriesAction.fetchHistories()))\r\n .catch(e => errorHandler(e, 'error'));\r\n };\r\n },\r\n fetchCancelOrderReasons() {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n httpClientServices\r\n .getClient()\r\n .get(api.cancelReason)\r\n .then(({ data }) => dispatch(this.setCancelOrderReasons(data.data)))\r\n .catch(e => errorHandler(e, 'error'));\r\n };\r\n },\r\n setNetworkStatus(networkItem, status) {\r\n return async (dispatch, getState) => {\r\n const networkItems = getState().order.networkItems;\r\n dispatch({\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: { ...networkItems, [networkItem]: status },\r\n });\r\n };\r\n },\r\n setCancelOrderReasons(reasons) {\r\n return {\r\n type: Types.SET_CANCEL_ORDER_REASONS,\r\n payload: reasons,\r\n };\r\n },\r\n setReadyField(fieldName, value) {\r\n return async (dispatch, getState) => {\r\n const isReadyFields = getState().order.isReadyFields;\r\n dispatch({\r\n type: Types.SET_READY_FIELD,\r\n payload: { ...isReadyFields, [fieldName]: value },\r\n });\r\n };\r\n },\r\n setOrderModal(data) {\r\n return {\r\n type: Types.SET_ORDER_MODAL,\r\n payload: data,\r\n };\r\n },\r\n setDefaultField(fieldName, value) {\r\n return async (dispatch, getState) => {\r\n const defaultFields = getState().order.defaultFields;\r\n dispatch({\r\n type: Types.SET_DEFAULT_FIELD,\r\n payload: { ...defaultFields, [fieldName]: value },\r\n });\r\n };\r\n },\r\n setOrderErrorMessage(error) {\r\n return {\r\n type: Types.SET_ORDER_ERROR_MESSAGE,\r\n payload: error,\r\n };\r\n },\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { LoaderContext } from './LoaderContext';\r\n\r\nfunction makeid() {\r\n var text = '';\r\n var possible = 'abcdefghijklmnopqrstuvwxyz';\r\n\r\n for (var i = 0; i < 8; i++)\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n\r\n return text;\r\n}\r\n\r\nconst Loader: React.FC<{ loading?: boolean }> = ({ loading }) => {\r\n const [loaderId] = React.useState(makeid());\r\n const loader = React.useContext(LoaderContext);\r\n\r\n React.useEffect(() => {\r\n loader.setLoaderState(loaderId, !!loading);\r\n return () => {\r\n loader.setLoaderState(loaderId, false);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [loading, loaderId]);\r\n\r\n return null;\r\n};\r\n\r\nexport default Loader;\r\n","import React, { FC } from 'react';\r\n\r\nimport { Spin } from 'antd';\r\n\r\nimport { LoaderContext } from './LoaderContext';\r\n\r\ntype ChildrenWithState = (args: { loading: boolean }) => React.ReactNode;\r\n\r\ntype LoaderContainerProps = {\r\n children: React.ReactNode | ChildrenWithState;\r\n height?: number;\r\n tip?: string;\r\n};\r\n\r\nconst LoaderContainer: FC = ({ children, height, tip }) => {\r\n const [loading, setState] = React.useState>({});\r\n\r\n const setLoaderState = () => {\r\n let states: Record = {};\r\n\r\n return (id: string, state: boolean) => {\r\n states = {\r\n ...states,\r\n [id]: state,\r\n };\r\n\r\n setState(states);\r\n };\r\n };\r\n\r\n const showLoader = !!Object.values(loading).find(item => !!item);\r\n\r\n return (\r\n \r\n \r\n {\r\n //@ts-ignore\r\n typeof children === 'function' && children({ loading: showLoader })\r\n }\r\n {typeof children !== 'function' && children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoaderContainer;\r\n","export enum PaymentCodes {\r\n cash = '1',\r\n contract = '2',\r\n card = '3',\r\n apple = '6',\r\n sbp = '8',\r\n online = '10',\r\n qr = '11',\r\n google = '12',\r\n bonus = '15',\r\n}\r\n","import { message } from 'antd';\r\n\r\nimport { TUserData } from './user';\r\nimport TokenHelper from '../../utils/token';\r\nimport { TAction } from '../store';\r\n\r\ntype TEnrichToken = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n id: number;\r\n clientId: string | null;\r\n token: string;\r\n};\r\n\r\ntype ClientTypes = {\r\n clientEnrichToken: () => TAction>;\r\n};\r\n\r\nexport const ClientActions: ClientTypes = {\r\n clientEnrichToken() {\r\n return async (_, getState, { httpClientServices, services }) => {\r\n const { data } = getState().user;\r\n const { selectedAddress } = getState().addresses;\r\n const { info } = getState().company;\r\n\r\n const isAuth = data !== null && TokenHelper.isAnon();\r\n\r\n if (isAuth && selectedAddress && info) {\r\n const { uuid, phone, username, email } = data as TUserData;\r\n const body = {\r\n externalUserId: uuid,\r\n externalLocationId: selectedAddress.external_id ?? null,\r\n username: email,\r\n phone: `${info.phone_code}${phone}`,\r\n firstName: username,\r\n };\r\n\r\n return httpClientServices\r\n .getClient('client')\r\n .post('/client/enrich_token_requests', body)\r\n .then(({ data }) => {\r\n return TokenHelper.setTokens({ token: data.token });\r\n })\r\n .catch(e => {\r\n if (e.response && e.response.status !== 404) {\r\n message.error(e.message);\r\n }\r\n TokenHelper.cleanTokens();\r\n });\r\n }\r\n };\r\n },\r\n};\r\n","import Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { ClientActions } from './client';\r\nimport { OrderActions } from './order';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { PaymentCodes } from '../../utils/enums/PaymentCodes';\r\nimport { CheckoutFields } from '../reducers/order';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_PAYMENTS: 'ORDER@SET:PAYMENTS',\r\n SET_SELECTED_PAYMENT: 'ORDER@SET:SELECTED:PAYMENT',\r\n SET_PAYMENT_URL: 'ORDER@SET:PAYMENT:URL',\r\n};\r\n\r\nexport type TSetPayments = {\r\n type: typeof Types.SET_PAYMENTS;\r\n payload: TPayment[];\r\n};\r\n\r\nexport type TSetPaymentUrl = {\r\n type: typeof Types.SET_PAYMENT_URL;\r\n payload: string | null;\r\n};\r\n\r\nexport type TSetSelectedPayment = {\r\n type: typeof Types.SET_SELECTED_PAYMENT;\r\n payload: TPayment;\r\n};\r\n\r\nexport type TPaymentActions = TSetPayments;\r\n\r\ntype PaymentActionsType = {\r\n fetchPayments: () => TAction>;\r\n fetchAnonPayments: () => TAction>;\r\n assignPayment: (payment: TPayment) => TAction>;\r\n setPayments: (payment: TPayment[]) => TSetPayments;\r\n setSelectedPayment: (payment: TPayment) => TSetSelectedPayment;\r\n setPaymentUrl: (payment: string | null) => TSetPaymentUrl;\r\n};\r\n\r\nexport type TPayment = {\r\n '@id': string;\r\n '@type': string;\r\n gatewayName: string;\r\n enabled: boolean;\r\n notifyUrl: string | null;\r\n comment: string | null;\r\n position: number;\r\n description: string;\r\n setup: {\r\n '@id': string;\r\n '@type': string;\r\n name: string;\r\n code: PaymentCodes;\r\n description: string;\r\n legacy: boolean;\r\n };\r\n};\r\n\r\nexport type TPaymentAssign = {\r\n '@id': number;\r\n '@type': number;\r\n description: number;\r\n monolithType: number;\r\n paymentMethod: number;\r\n};\r\n\r\nconst paymentCancelToken = Axios.CancelToken.source();\r\n\r\nexport const PaymentActions: PaymentActionsType = {\r\n fetchPayments() {\r\n return async (dispatch, _, { services, httpClientServices }) => {\r\n dispatch(OrderActions.setNetworkStatus('payments', NetworkStatus.loading));\r\n\r\n await dispatch(ClientActions.clientEnrichToken());\r\n\r\n return httpClientServices\r\n .getClient('payment')\r\n .get(services.payment.getPaymentMethods, {\r\n cancelToken: paymentCancelToken.token,\r\n })\r\n .then(({ data }) => {\r\n batch(() => {\r\n dispatch(OrderActions.setNetworkStatus('payments', NetworkStatus.ready));\r\n dispatch(this.setPayments(data['hydra:member']));\r\n });\r\n })\r\n .catch(error => {\r\n dispatch(OrderActions.setNetworkStatus('payments', NetworkStatus.ready));\r\n\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n throw error;\r\n });\r\n };\r\n },\r\n fetchAnonPayments() {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n dispatch(OrderActions.setNetworkStatus('payments', NetworkStatus.loading));\r\n const { selectedAddress } = getState().addresses;\r\n\r\n const legalPersonId = selectedAddress?.legal_person_id;\r\n\r\n if (legalPersonId) {\r\n const url = `/payment/legal_people/${legalPersonId}/payment_methods`;\r\n\r\n return httpClientServices\r\n .getClient('payment')\r\n .get(url, {\r\n cancelToken: paymentCancelToken.token,\r\n })\r\n .then(({ data }) => {\r\n batch(() => {\r\n dispatch(\r\n OrderActions.setNetworkStatus('payments', NetworkStatus.ready),\r\n );\r\n dispatch(this.setPayments(data['hydra:member']));\r\n });\r\n })\r\n .catch(error => {\r\n dispatch(OrderActions.setNetworkStatus('payments', NetworkStatus.ready));\r\n\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n throw error;\r\n });\r\n }\r\n };\r\n },\r\n assignPayment(payment) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n\r\n if (cart) {\r\n const data = {\r\n cart,\r\n monolithType: +payment.setup.code,\r\n paymentMethod: payment['@id'],\r\n description: payment.description,\r\n };\r\n\r\n httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignPayment, data)\r\n .then(() => {\r\n batch(() => {\r\n dispatch(OrderActions.setDefaultField(CheckoutFields.payment, data));\r\n dispatch(OrderActions.setReadyField(CheckoutFields.payment, true));\r\n });\r\n })\r\n .catch(() => {\r\n dispatch(OrderActions.setReadyField(CheckoutFields.payment, false));\r\n });\r\n }\r\n };\r\n },\r\n setPayments(payment) {\r\n return {\r\n type: Types.SET_PAYMENTS,\r\n payload: payment,\r\n };\r\n },\r\n setSelectedPayment(payment) {\r\n return {\r\n type: Types.SET_SELECTED_PAYMENT,\r\n payload: payment,\r\n };\r\n },\r\n setPaymentUrl(data) {\r\n return {\r\n type: Types.SET_PAYMENT_URL,\r\n payload: data,\r\n };\r\n },\r\n};\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { AddressesActions } from './addresses';\r\nimport { CartActions } from './cart';\r\nimport { PartnerActions } from './partner';\r\nimport { parseError } from '../../aqua-delivery-client-graphql/utils';\r\n\r\nimport { getAppConfig } from '../../utils/appConfig';\r\n\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { refreshToken } from '../../utils/httpClient';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_USER: 'USER@SET:USER',\r\n SET_NETWORK_STATUS: 'USER@SET:NETWORK:STATUS',\r\n};\r\n\r\nexport type TSetUserAction = {\r\n type: typeof Types.SET_USER;\r\n payload: any;\r\n};\r\n\r\nexport type TSetNetworkStatusAction = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TUser = TSetUserAction | TSetNetworkStatusAction;\r\n\r\ntype TRegUser = {\r\n email: string | null;\r\n phoneNumber: string | null;\r\n firstName: string;\r\n};\r\n\r\nexport type TUpdateUserData = {\r\n username: string;\r\n phoneNumber?: string;\r\n email: string;\r\n};\r\n\r\ntype UserType = {\r\n fetchUser: () => TAction>;\r\n fetchProfile: () => TAction>;\r\n register: (values: TRegUser) => TAction>;\r\n logoutUser: () => TAction>;\r\n deleteAccount: () => TAction>;\r\n assignUser: (phone: string, fio: string) => TAction>;\r\n setUser: (data: TUserData | TUserAnonData | null) => TSetUserAction;\r\n setNetworkStatus: (status: NetworkStatus) => TSetNetworkStatusAction;\r\n update: (data: TUpdateUserData) => TAction>;\r\n};\r\n\r\nexport type TUserAnonData = {\r\n uuid?: string;\r\n email: string | null;\r\n username: string;\r\n phone_number: string;\r\n};\r\n\r\nexport type TUserData = {\r\n id: number;\r\n external_id: string;\r\n uuid: string;\r\n username: string;\r\n comment: string | null;\r\n email: string;\r\n status: number;\r\n created_at: string;\r\n updated_at: string;\r\n phone_number: string;\r\n phone: string;\r\n raw_phone: string | null;\r\n contract_number: number;\r\n type: number;\r\n legal_address: string | null;\r\n user_source: string;\r\n date_last_use_mobile_app: string;\r\n notify_make_order_date: string;\r\n invite_code: string;\r\n loyalty_system: number;\r\n city_id: number;\r\n do_not_call: number;\r\n after_purchase_registration_date: string | null;\r\n password_reset_date_for_aggregator: string | null;\r\n last_phone_call_date: string | null;\r\n chat_settings: string;\r\n address: string;\r\n coins: number;\r\n show_order_statuses: boolean;\r\n about_invitation_process_url: string;\r\n invite_code_qr_uri: string;\r\n text_for_invite_code: string;\r\n roles: {\r\n guest: {\r\n type: number;\r\n name: string;\r\n description: string | null;\r\n ruleName: string | null;\r\n data: string | null;\r\n createdAt: string | null;\r\n updatedAt: string | null;\r\n };\r\n customer: {\r\n type: string;\r\n name: string;\r\n description: string;\r\n ruleName: null;\r\n data: null;\r\n createdAt: null;\r\n updatedAt: null;\r\n };\r\n };\r\n share_app_uri: string;\r\n show_do_not_call_check_mark: boolean;\r\n need_to_reset_password: boolean;\r\n mercure_jwt: string;\r\n mercure_topic: string;\r\n};\r\n\r\nconst userCancelToken = Axios.CancelToken.source();\r\n\r\nconst applicationId = getAppConfig().applicationId;\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n\r\n if (error.response && error.response.status !== 404) {\r\n const parseMessage = parseError(error);\r\n const errorMessage = parseMessage ?? defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nexport const UserActions: UserType = {\r\n fetchUser() {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n\r\n return httpClientServices\r\n .getClient()\r\n .post(\r\n api.updateUserDataByJWTToken,\r\n {},\r\n {\r\n headers: {\r\n ordersource: 'site',\r\n },\r\n cancelToken: userCancelToken.token,\r\n },\r\n )\r\n .then(({ data }) => {\r\n if (data.success) {\r\n return batch(async () => {\r\n await dispatch(this.fetchProfile()).then(() => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n });\r\n await dispatch(AddressesActions.fetchAddresses());\r\n if (localStorage.getItem('anonUser')) {\r\n localStorage.removeItem('anonUser');\r\n }\r\n });\r\n } else {\r\n dispatch(this.logoutUser());\r\n message.error(data.message || 'Failed to fetch user');\r\n }\r\n })\r\n .catch(e => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n errorHandler(e, 'Failed to fetch user');\r\n });\r\n };\r\n },\r\n fetchProfile() {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n httpClientServices\r\n .getClient()\r\n .get(api.getProfile)\r\n .then(({ data }) => {\r\n dispatch(this.setUser(data));\r\n })\r\n .catch(e => {\r\n throw errorHandler(e, 'Failed to fetch profile') as any;\r\n });\r\n };\r\n },\r\n assignUser(phone, fio) {\r\n return async (_, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n cart,\r\n phoneNumber: phone,\r\n name: fio,\r\n };\r\n\r\n httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignUser, data)\r\n .catch(e => errorHandler(e, 'Failed to assign user'));\r\n }\r\n };\r\n },\r\n register(values) {\r\n return async (dispatch, _, { httpClientServices, services }) => {\r\n return httpClientServices\r\n .getClient('auth')\r\n .post(services.auth.completeRegistration, values, {\r\n headers: { Application: applicationId },\r\n })\r\n .then(async () => {\r\n return refreshToken().then(async () => {\r\n return dispatch(PartnerActions.partnerEnrichToken()).then(async () => {\r\n return dispatch(this.fetchUser()).then(() => {\r\n if (localStorage.getItem('anonUser')) {\r\n localStorage.removeItem('anonUser');\r\n }\r\n });\r\n });\r\n });\r\n })\r\n .catch(e => {\r\n throw errorHandler(e, 'Failed to register') as any;\r\n });\r\n };\r\n },\r\n update(data) {\r\n return async (_, __, { httpClientServices }) => {\r\n const url = 'v1/auth/update';\r\n\r\n return httpClientServices\r\n .getClient()\r\n .post(url, data)\r\n .then(({ data }) => {\r\n if (data?.success === false) {\r\n for (const field in data.errors) {\r\n data.errors[field].forEach((error: string) => {\r\n message.error(error);\r\n });\r\n }\r\n }\r\n });\r\n };\r\n },\r\n logoutUser() {\r\n return async dispatch => {\r\n batch(() => {\r\n dispatch(this.setUser(null));\r\n dispatch(CartActions.clearCart());\r\n dispatch(AddressesActions.clearAddresses());\r\n });\r\n localStorage.removeItem('token');\r\n localStorage.removeItem('refreshToken');\r\n localStorage.removeItem('selectedAddressId');\r\n localStorage.removeItem('device-id');\r\n };\r\n },\r\n deleteAccount() {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n const response = await httpClientServices\r\n .getClient()\r\n .delete(api.deleteAccount)\r\n .catch(e => {\r\n throw errorHandler(e, 'Failed to delete account') as any;\r\n });\r\n\r\n if (response.status === 200 && response.data.success) {\r\n batch(() => {\r\n localStorage.removeItem('token');\r\n localStorage.removeItem('refreshToken');\r\n localStorage.removeItem('selectedAddressId');\r\n dispatch(CartActions.clearCart());\r\n dispatch(AddressesActions.clearAddresses());\r\n window.location.reload();\r\n });\r\n }\r\n };\r\n },\r\n setUser(data) {\r\n return {\r\n type: Types.SET_USER,\r\n payload: data,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","import React from 'react';\r\n\r\nimport { Empty } from 'antd';\r\n\r\nimport View from './View';\r\nimport { t } from '../i18n';\r\n\r\nconst EmptyPanel: React.FC<{ containerStyle?: React.CSSProperties }> = ({ containerStyle }) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default EmptyPanel;","import { useMemo, useCallback } from 'react';\r\n\r\nconst useDocumentLanguage = () => {\r\n const htmlElement = useMemo(() => document.querySelector('html'), []);\r\n\r\n const updateDocumentLocale = useCallback(\r\n (locale: string) => {\r\n if (htmlElement) htmlElement.lang = locale;\r\n },\r\n [htmlElement],\r\n );\r\n\r\n return {\r\n updateDocumentLocale,\r\n };\r\n};\r\n\r\nexport default useDocumentLanguage;\r\n","import { createContext } from 'react';\r\n\r\nimport { Alpha2Code } from 'i18n-iso-countries';\r\nimport Currency from '../CurrencyHelper';\r\n\r\nexport type Currency = 'RUB' | 'USD' | 'EUR';\r\n\r\nexport type LocalizationContextValues = {\r\n countries: {\r\n [key in Alpha2Code]?: {\r\n currency: Currency;\r\n };\r\n };\r\n defaultCurrency: Currency;\r\n};\r\n\r\nconst Localization = createContext({\r\n countries: {},\r\n defaultCurrency: 'USD',\r\n});\r\n\r\nexport default Localization;\r\n","import { LocalizationContextValues } from './Localization';\r\n\r\nconst localizationConfig: LocalizationContextValues = {\r\n countries: {\r\n AZ: {\r\n currency: 'RUB',\r\n },\r\n AM: {\r\n currency: 'RUB',\r\n },\r\n BY: {\r\n currency: 'RUB',\r\n },\r\n KZ: {\r\n currency: 'RUB',\r\n },\r\n KG: {\r\n currency: 'RUB',\r\n },\r\n MD: {\r\n currency: 'RUB',\r\n },\r\n RU: {\r\n currency: 'RUB',\r\n },\r\n TJ: {\r\n currency: 'RUB',\r\n },\r\n UZ: {\r\n currency: 'RUB',\r\n },\r\n BE: {\r\n currency: 'EUR',\r\n },\r\n GR: {\r\n currency: 'EUR',\r\n },\r\n LT: {\r\n currency: 'EUR',\r\n },\r\n PT: {\r\n currency: 'EUR',\r\n },\r\n ES: {\r\n currency: 'EUR',\r\n },\r\n LU: {\r\n currency: 'EUR',\r\n },\r\n FR: {\r\n currency: 'EUR',\r\n },\r\n SI: {\r\n currency: 'EUR',\r\n },\r\n DK: {\r\n currency: 'EUR',\r\n },\r\n MT: {\r\n currency: 'EUR',\r\n },\r\n SK: {\r\n currency: 'EUR',\r\n },\r\n DE: {\r\n currency: 'EUR',\r\n },\r\n IT: {\r\n currency: 'EUR',\r\n },\r\n NL: {\r\n currency: 'EUR',\r\n },\r\n FI: {\r\n currency: 'EUR',\r\n },\r\n EE: {\r\n currency: 'EUR',\r\n },\r\n CY: {\r\n currency: 'EUR',\r\n },\r\n AT: {\r\n currency: 'EUR',\r\n },\r\n IE: {\r\n currency: 'EUR',\r\n },\r\n LV: {\r\n currency: 'EUR',\r\n },\r\n },\r\n defaultCurrency: 'USD',\r\n};\r\n\r\nexport default localizationConfig;\r\n","import React from 'react';\r\n\r\nimport { Helmet, HelmetProvider } from 'react-helmet-async';\r\n\r\nimport { getAppConfig } from '../../utils/appConfig';\r\n\r\nconst Seo: React.FC = ({ children }) => {\r\n const { metaTags } = getAppConfig();\r\n const localUrl = 'https://' + localStorage.getItem('serverUrl');\r\n\r\n return (\r\n \r\n {metaTags && (\r\n \r\n {metaTags.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default Seo;\r\n","import React from 'react';\r\n\r\nimport { YMInitializer } from 'react-yandex-metrika';\r\n\r\nimport { getAppConfig } from '../../utils/appConfig';\r\n\r\nconst YandexMetrika: React.FC = ({ children }) => {\r\n const { yandexMetrikaId } = getAppConfig();\r\n\r\n return (\r\n <>\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default YandexMetrika;\r\n","import axios, { AxiosInstance, AxiosError, AxiosResponse } from 'axios';\r\n\r\nimport AuthService from './AuthService';\r\nimport I18n from './i18n';\r\n\r\nexport type Source = 'admin' | 'partner_cabinet';\r\n\r\ntype AuthorizeApiOptions = {\r\n headerKey?: string;\r\n prefix?: string;\r\n bearer?: boolean;\r\n};\r\n\r\nexport type TFetch = {\r\n fetch: AxiosInstance;\r\n authorizeApi: (token?: string) => void;\r\n setBaseUrl: (baseURL: string) => void;\r\n logout: (opt?: AuthorizeApiOptions) => void;\r\n setLocale: (locale: string | null) => void;\r\n enrichToken: () => Promise | void>;\r\n};\r\n\r\ntype ApiConfig = {\r\n response?: AxiosResponse;\r\n defaultGetParams?: { [x: string]: string | number };\r\n enrichTokenUrl?: string;\r\n};\r\n\r\nconst config: { source?: Source; version?: string } = {};\r\n\r\nexport const setConfig = (source?: Source, version?: string) => {\r\n config.source = source;\r\n config.version = version;\r\n};\r\n\r\nconst APIs: { [x: string]: { fetch: AxiosInstance } } = {};\r\n\r\nexport const authorizeApi = (name: string) => (token?: string) => {\r\n setHeaders(name)(AuthService.signHeaders({}, token));\r\n};\r\n\r\nconst setHeaders = (name: string) => (headers: Record) => {\r\n APIs[name].fetch.defaults.headers.common = {\r\n ...APIs[name].fetch.defaults.headers.common,\r\n ...headers,\r\n };\r\n};\r\n\r\nconst setBaseUrl = (name: string) => (baseURL: string) => {\r\n APIs[name].fetch.defaults.baseURL = baseURL;\r\n};\r\n\r\nconst logout = (name: string) => () => {\r\n setHeaders(name)({ [AuthService.authHeaderKey]: null });\r\n};\r\n\r\nasync function repeatRequest(name: string, response: AxiosResponse) {\r\n return await APIs[name]\r\n .fetch({\r\n url: response.config.url,\r\n data: response.config.data,\r\n method: response.config.method,\r\n })\r\n .then(result => {\r\n return Promise.resolve(result);\r\n })\r\n .catch(e => {\r\n return Promise.reject(e);\r\n });\r\n}\r\n\r\nasync function enrichToken(name: string, { enrichTokenUrl, response = undefined }: ApiConfig = {}) {\r\n return AuthService.enrichToken(enrichTokenUrl!)\r\n .then(async token => {\r\n authorizeApi(name)(token);\r\n\r\n if (response) {\r\n return await repeatRequest(name, response);\r\n } else {\r\n return Promise.resolve();\r\n }\r\n })\r\n .catch(error => {\r\n return Promise.reject(error);\r\n });\r\n}\r\n\r\nconst refreshToken = async (name: string, response: AxiosResponse) => {\r\n return AuthService.refreshToken()\r\n .then(async token => {\r\n authorizeApi(name)(token);\r\n\r\n return await APIs[name]\r\n .fetch({\r\n url: response.config.url,\r\n data: response.config.data,\r\n method: response.config.method,\r\n })\r\n .then(result => {\r\n return Promise.resolve(result);\r\n })\r\n .catch(() => {\r\n AuthService.logout();\r\n return Promise.reject(response);\r\n });\r\n })\r\n .catch(error => {\r\n AuthService.logout();\r\n return Promise.reject(error);\r\n });\r\n};\r\n\r\nconst isUnauthorizedOnTokenCreation = (error: AxiosError) => {\r\n return (\r\n error.response &&\r\n error.response.status === 401 &&\r\n error.config &&\r\n error.config.url &&\r\n !~error.config.url.indexOf('/token/get')\r\n );\r\n};\r\n\r\nfunction needRefresh(config: AxiosError['config'], response: AxiosResponse | undefined) {\r\n return (\r\n response &&\r\n response.status === 401 &&\r\n response.data &&\r\n config &&\r\n config.headers &&\r\n config.headers.Authorization\r\n );\r\n}\r\n\r\nfunction needEnrich(config: AxiosError['config'], response: AxiosResponse | undefined) {\r\n return (\r\n response &&\r\n response.status === 424 &&\r\n response.data &&\r\n config &&\r\n config.headers &&\r\n config.headers.Authorization\r\n );\r\n}\r\n\r\nfunction createApi(name: string, { defaultGetParams, enrichTokenUrl }: ApiConfig = {}) {\r\n const fetch = axios.create({\r\n responseType: 'json',\r\n timeout: 30000,\r\n headers: {\r\n Pragma: 'no-cache',\r\n Expires: 0,\r\n 'content-type': 'application/json',\r\n Source: config.source,\r\n 'version-app': config.version,\r\n },\r\n validateStatus: status => status < 400,\r\n });\r\n\r\n fetch.interceptors.request.use(\r\n async config => {\r\n let conf = config;\r\n\r\n if (defaultGetParams) {\r\n if (!conf.params) {\r\n conf.params = {};\r\n }\r\n conf.params = defaultGetParams;\r\n }\r\n\r\n let headers = config.headers;\r\n\r\n if (!headers.common['Accept-Language']) {\r\n headers = { ...headers, 'Accept-Language': I18n.locale };\r\n }\r\n\r\n const authorizationToken = APIs[name].fetch.defaults.headers?.common.Authorization;\r\n if (authorizationToken) {\r\n headers.common.Authorization = authorizationToken;\r\n }\r\n\r\n return {\r\n ...config,\r\n headers,\r\n };\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n fetch.interceptors.response.use(\r\n async response => response,\r\n async (error: AxiosError) => {\r\n if (needEnrich(error.config, error.response)) {\r\n return await enrichToken(name, {\r\n response: error.response,\r\n enrichTokenUrl,\r\n });\r\n }\r\n\r\n if (needRefresh(error.config, error.response)) {\r\n return await refreshToken(name, error.response!);\r\n } else if (isUnauthorizedOnTokenCreation(error)) {\r\n AuthService.logout();\r\n return Promise.reject(error);\r\n }\r\n\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n const api: TFetch = {\r\n fetch,\r\n authorizeApi: authorizeApi(name),\r\n setBaseUrl: setBaseUrl(name),\r\n logout: logout(name),\r\n setLocale: locale => setHeaders(name)({ 'Accept-Language': locale }),\r\n enrichToken: async () => enrichToken(name, { enrichTokenUrl }),\r\n };\r\n\r\n APIs[name] = api;\r\n\r\n return api;\r\n}\r\n\r\nexport default createApi;\r\n\r\nexport function getErrorMessage(e: AxiosError<{ message: string }>): string {\r\n return e.isAxiosError && e.response ? e.response.data.message : e.message;\r\n}\r\n\r\nexport function logoutAPI() {\r\n Object.keys(APIs).forEach(logout);\r\n}\r\n","import {\r\n Source,\r\n setConfig as setCustomFetchConfig,\r\n} from './aqua-delivery-web-client-ui/customFetch';\r\nimport I18n from './aqua-delivery-web-client-ui/i18n';\r\n\r\nexport type ServiceName = keyof ConfigApp['api'];\r\n\r\ntype Api = T & {\r\n domain: string;\r\n base: string;\r\n enrichToken?: string;\r\n};\r\n\r\ntype ConfigApp = {\r\n source: Source;\r\n version: string;\r\n tokenStoreKey: string;\r\n refreshTokenStoreKey: string;\r\n policylUrl: string;\r\n contractUrl: string;\r\n partnerLoginUrl: string;\r\n payPalClientId: string;\r\n knowledgeUrl: string;\r\n paymentMethodsAvailability: {\r\n isPayPalEnabled: boolean;\r\n };\r\n integrations: {\r\n amo: {\r\n redirectUri: string;\r\n secretsUri: string;\r\n logo: string;\r\n };\r\n };\r\n metrics: {\r\n ga: string;\r\n ym: number[];\r\n gtm: string;\r\n };\r\n dashboard: {\r\n phone: string;\r\n documents: { title: string; link: string }[];\r\n };\r\n contactEmail: string;\r\n isAppUpdating: boolean;\r\n invoiceClientUrl: string;\r\n api: {\r\n auth: Api<{\r\n getToken: string;\r\n refreshTokenUrl: string;\r\n resetPasswordRequest: string;\r\n confirmSms: string;\r\n }>;\r\n partner: Api<{}>;\r\n courier: Api<{}>;\r\n temporal: Api<{}>;\r\n wiki: Api<{}>;\r\n marketing: Api<{}>;\r\n sms: Api<{}>;\r\n billing: Api<{}>;\r\n pricingPlans: Api<{}>;\r\n payment: Api<{}>;\r\n deliveryPeriod: Api<{}>;\r\n invoice: Api<{}>;\r\n iot: Api<{}>;\r\n amo: Api<{}>;\r\n };\r\n};\r\n\r\nconst devAuthBaseUrlStoreKey = 'auth_service_url';\r\nconst devPartnerBaseUrlStoreKey = 'partner_service_url';\r\nconst devCourierBaseUrlStoreKey = 'courier_service_url';\r\nconst devTemporalBaseUrlStoreKey = 'temporal_service_url';\r\nconst devWikiBaseUrlStoreKey = 'wiki_service_url';\r\nconst devMarketingBaseUrlStoreKey = 'marketing_service_url';\r\nconst devSMSBaseUrlStoreKey = 'sms_service_url';\r\nconst devBillingBaseUrlStoreKey = 'billing_service_url';\r\nconst devPaymentBaseUrlStoreKey = 'payment_service_url';\r\nconst devDeliveryPeriodBaseUrlStoreKey = 'delivery_period_service_url';\r\nconst devInvoiceBaseUrlStoreKey = 'invoice_service_url';\r\nconst devIotBaseUrlStoreKey = 'iot_service_url';\r\nconst devAmoBaseUrlStoreKey = 'amo_service_url';\r\n\r\nexport const getEnvVariable = (key: string) => {\r\n // @ts-ignore\r\n const env = window.env;\r\n let values;\r\n if (env[I18n.locale]) {\r\n values = env[I18n.locale][key];\r\n } else if (env['ru'][key] !== undefined) {\r\n values = env['ru'][key];\r\n }\r\n\r\n if (values !== undefined) return values;\r\n throw Error(`Need add key ${key} into .env.local`);\r\n};\r\n\r\nconst getBaseUrl = (localStorageKey: string, envKey: string) => {\r\n const url = localStorage.getItem(localStorageKey) || getEnvVariable(envKey);\r\n return url;\r\n};\r\n\r\nlet conf: ConfigApp | undefined = undefined;\r\n\r\nexport const initConfig = () => {\r\n const baseAuthApi = getBaseUrl(devAuthBaseUrlStoreKey, 'authServiceUrl');\r\n const basePartnerApi = getBaseUrl(devPartnerBaseUrlStoreKey, 'partnerServiceUrl');\r\n const baseCourierApi = getBaseUrl(devCourierBaseUrlStoreKey, 'courierServiceUrl');\r\n const baseTemporalApi = getBaseUrl(devTemporalBaseUrlStoreKey, 'temporalServiceUrl');\r\n const baseWikiApi = getBaseUrl(devWikiBaseUrlStoreKey, 'wikiServiceUrl');\r\n const baseMarketingApi = getBaseUrl(devMarketingBaseUrlStoreKey, 'marketingServiceUrl');\r\n const baseSMSApi = getBaseUrl(devSMSBaseUrlStoreKey, 'smsServiceUrl');\r\n const baseBillingApi = getBaseUrl(devBillingBaseUrlStoreKey, 'billingServiceUrl');\r\n const basePaymentApi = getBaseUrl(devPaymentBaseUrlStoreKey, 'paymentServiceUrl');\r\n const baseDeliveryPeriodApi = getBaseUrl(\r\n devDeliveryPeriodBaseUrlStoreKey,\r\n 'deliveryPeriodServiceUrl',\r\n );\r\n const basePricingPlansApi = getBaseUrl(devPartnerBaseUrlStoreKey, 'pricingPlanServiceUrl');\r\n const baseInvoiceApi = getBaseUrl(devInvoiceBaseUrlStoreKey, 'invoiceServiceUrl');\r\n const baseIotApi = getBaseUrl(devIotBaseUrlStoreKey, 'iotServiceUrl');\r\n const baseAmoApi = getBaseUrl(devAmoBaseUrlStoreKey, 'amoServiceUrl');\r\n\r\n const invoiceClientUrl = getEnvVariable('invoiceWebclientUrl');\r\n\r\n conf = {\r\n source: 'partner_cabinet',\r\n version: '0.0.2',\r\n tokenStoreKey: 'token',\r\n refreshTokenStoreKey: 'refresh_token',\r\n policylUrl: getEnvVariable('policyUrl'),\r\n contractUrl: getEnvVariable('contractUrl'),\r\n partnerLoginUrl: getEnvVariable('partnerLoginUrl'),\r\n payPalClientId: getEnvVariable('payPalClientId'),\r\n integrations: getEnvVariable('integrations'),\r\n knowledgeUrl: getEnvVariable('knowledgeUrl'),\r\n dashboard: getEnvVariable('dashboard'),\r\n contactEmail: getEnvVariable('contactEmail'),\r\n isAppUpdating: getEnvVariable('isAppUpdating'),\r\n paymentMethodsAvailability: getEnvVariable('paymentMethodsAvailability'),\r\n invoiceClientUrl,\r\n metrics: {\r\n ga: getEnvVariable('googleAnalytics'),\r\n ym: getEnvVariable('yandexMetrika'),\r\n gtm: getEnvVariable('googleTagManager'),\r\n },\r\n api: {\r\n auth: {\r\n domain: baseAuthApi,\r\n base: `${baseAuthApi}/auth/graphql`,\r\n getToken: `${baseAuthApi}/auth/login/token/get`,\r\n refreshTokenUrl: `${baseAuthApi}/auth/login/token/refresh`,\r\n resetPasswordRequest: `${baseAuthApi}/auth/reset_password_requests`,\r\n confirmSms: `${baseAuthApi}/auth/reset_password_token_requests`,\r\n },\r\n partner: {\r\n domain: basePartnerApi,\r\n base: `${basePartnerApi}/partner/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n courier: {\r\n domain: baseCourierApi,\r\n base: `${baseCourierApi}/courier/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n temporal: {\r\n domain: baseTemporalApi,\r\n base: `${baseTemporalApi}/graphql`,\r\n },\r\n wiki: {\r\n domain: baseWikiApi,\r\n base: `${baseWikiApi}/wiki/graphql`,\r\n },\r\n marketing: {\r\n domain: baseMarketingApi,\r\n base: `${baseMarketingApi}/marketing/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n sms: {\r\n domain: baseSMSApi,\r\n base: baseSMSApi,\r\n },\r\n billing: {\r\n domain: baseBillingApi,\r\n base: `${baseBillingApi}/billing/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n pricingPlans: {\r\n domain: basePricingPlansApi,\r\n base: `${basePricingPlansApi}/pricing-plan/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n payment: {\r\n domain: basePaymentApi,\r\n base: `${basePaymentApi}/payment/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n deliveryPeriod: {\r\n domain: baseDeliveryPeriodApi,\r\n base: `${baseDeliveryPeriodApi}/delivery-period/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n invoice: {\r\n domain: baseInvoiceApi,\r\n base: `${baseInvoiceApi}/invoice/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n iot: {\r\n domain: baseIotApi,\r\n base: `${baseIotApi}/iot/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n amo: {\r\n domain: baseAmoApi,\r\n base: `${baseAmoApi}/amo/graphql`,\r\n enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\r\n },\r\n },\r\n };\r\n\r\n setCustomFetchConfig(config.source, config.version);\r\n};\r\n\r\nexport const config = {\r\n get source() {\r\n return conf!.source;\r\n },\r\n get version() {\r\n return conf!.version;\r\n },\r\n get tokenStoreKey() {\r\n return conf!.tokenStoreKey;\r\n },\r\n get refreshTokenStoreKey() {\r\n return conf!.refreshTokenStoreKey;\r\n },\r\n get api() {\r\n return conf!.api;\r\n },\r\n get policylUrl() {\r\n return conf!.policylUrl;\r\n },\r\n get contractUrl() {\r\n return conf!.contractUrl;\r\n },\r\n get partnerLoginUrl() {\r\n return conf!.partnerLoginUrl;\r\n },\r\n get metrics() {\r\n return conf!.metrics;\r\n },\r\n get dashboard() {\r\n return conf!.dashboard;\r\n },\r\n get contactEmail() {\r\n return conf!.contactEmail;\r\n },\r\n get payPalClientId() {\r\n return conf!.payPalClientId;\r\n },\r\n get paymentMethodsAvailability() {\r\n return conf!.paymentMethodsAvailability;\r\n },\r\n get integrations() {\r\n return conf!.integrations;\r\n },\r\n get isAppUpdating() {\r\n return conf!.isAppUpdating;\r\n },\r\n get knowledgeUrl() {\r\n return conf!.knowledgeUrl;\r\n },\r\n get invoiceClientUrl() {\r\n return conf!.invoiceClientUrl;\r\n },\r\n};\r\n","import React from 'react';\r\n\r\nimport en from 'antd/es/locale/en_US';\r\nimport ru from 'antd/es/locale/ru_RU';\r\nimport { Locale } from 'antd/lib/locale-provider';\r\n\r\nimport { I18nContext } from '../aqua-delivery-web-client-ui/i18n';\r\n\r\ntype AntdLocale = {\r\n antdLocale: Locale;\r\n};\r\n\r\nconst locales: Record = {\r\n ru,\r\n en,\r\n};\r\n\r\nexport default function (): AntdLocale {\r\n const { locale } = React.useContext(I18nContext);\r\n\r\n return {\r\n antdLocale: locales[locale],\r\n };\r\n}\r\n","import React from 'react';\r\n\r\nimport { lazy } from '@loadable/component';\r\nimport * as Sentry from '@sentry/react';\r\nimport { ConfigProvider as AntdConfigProvider } from 'antd';\r\nimport { createBrowserHistory } from 'history';\r\nimport TagManager from 'react-gtm-module';\r\nimport { Provider as ReduxProvider } from 'react-redux';\r\nimport { Router, Switch, Route } from 'react-router-dom';\r\nimport { useUrlSearchParams } from 'use-url-search-params';\r\nimport 'url-search-params-polyfill';\r\n\r\nimport EmptyPanel from './aqua-delivery-web-client-ui/components/EmptyPanel';\r\nimport Loader from './aqua-delivery-web-client-ui/components/loader/Loader';\r\nimport LoaderContainer from './aqua-delivery-web-client-ui/components/loader/LoaderContainer';\r\nimport SuspenseWithLoader from './aqua-delivery-web-client-ui/components/loader/SuspenseWithLoader';\r\nimport useDocumentLanguage from './aqua-delivery-web-client-ui/hooks/useDocumentLanguage';\r\nimport I18n, { I18nSetConfig, I18nContext } from './aqua-delivery-web-client-ui/i18n';\r\nimport Localization from './aqua-delivery-web-client-ui/localization/Localization';\r\nimport localizationConfig from './aqua-delivery-web-client-ui/localization/localizationConfig';\r\nimport Seo from './components/Seo/Seo';\r\nimport YandexMetrika from './components/YandexMetrika/YandexMetrika';\r\nimport { config } from './config';\r\nimport useAntdLocale from './hooks/useAntdLocale';\r\nimport translations from './translations';\r\nimport { getAppConfig } from './utils/appConfig';\r\nimport TokenHelper from './utils/token';\r\n\r\nimport 'swiper/swiper.min.css';\r\nimport 'swiper/modules/pagination/pagination.min.css';\r\nimport 'swiper/modules/free-mode/free-mode.less';\r\nimport 'swiper/modules/navigation/navigation.less';\r\n\r\nimport './aqua-delivery-web-client-ui/assets/styles/common.less';\r\n\r\nconst isSentrySendingEnabled = process.env.NODE_ENV === 'production';\r\n\r\nSentry.init({\r\n dsn: 'https://8b5ed32ed704498eacf862900f0a42eb@o567362.ingest.sentry.io/4505510672203776',\r\n maxBreadcrumbs: 200,\r\n sampleRate: 0,\r\n environment: process.env.NODE_ENV,\r\n tracesSampleRate: 1,\r\n release: process.env.REACT_APP_VERSION ?? '1.0.0',\r\n});\r\n\r\nconst history = createBrowserHistory();\r\n\r\nconst ClientAsync = lazy(() => import('./routes/'));\r\n\r\nconst TechnicalWorkPageAsync = lazy(\r\n () => import('./aqua-delivery-web-client-ui/components/static-pages/TechnicalWorkPage'),\r\n);\r\n\r\nconst Page404Async = lazy(\r\n () => import('./aqua-delivery-web-client-ui/components/static-pages/Page404'),\r\n);\r\n\r\nI18nSetConfig({ translations });\r\n\r\nTokenHelper.restoreTokens();\r\n\r\nconst App: React.FC = () => {\r\n const [locale, setLocale] = React.useState(I18n.locale);\r\n\r\n const { googleTagManager } = getAppConfig();\r\n\r\n const { antdLocale } = useAntdLocale();\r\n\r\n const [appParams] = useUrlSearchParams({}, { isAppUpdating: Boolean });\r\n\r\n const isAppUpdating = config.isAppUpdating && appParams.isAppUpdating !== false;\r\n\r\n const { updateDocumentLocale } = useDocumentLanguage();\r\n\r\n const gtmArgs = {\r\n gtmId: googleTagManager,\r\n };\r\n TagManager.initialize(gtmArgs);\r\n\r\n React.useEffect(() => {\r\n if (locale === localStorage.getItem('language')) {\r\n updateDocumentLocale(locale);\r\n } else {\r\n updateDocumentLocale(navigator.language.split('-')[0]);\r\n }\r\n }, [locale, updateDocumentLocale]);\r\n\r\n return (\r\n // Use require instead of import to initialize redux store before fetching cloud config.\r\n // Import executes modules asynchronously even before rendering App.tsx, while require executes\r\n // redux store strictly when App.tsx is being rendering.\r\n }>\r\n \r\n \r\n {\r\n I18nSetConfig({ locale });\r\n setLocale(locale);\r\n },\r\n }}\r\n >\r\n \r\n \r\n }>\r\n {isAppUpdating ? (\r\n \r\n ) : (\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n\r\nexport const AppLoader: React.FC = () => (\r\n \r\n \r\n \r\n);\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport App, { AppLoader } from './App';\r\nimport { initConfig } from './config';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { fetchAppConfig, getDomain } from './utils/appConfig';\r\nimport StorageHelper from './utils/StorageHelper';\r\n\r\nimport './index.css';\r\n\r\nexport const __DEV__ = window.location.hostname === 'localhost';\r\n\r\nconst checkIfDevEnvironmentChanged = () => {\r\n if (__DEV__) {\r\n const localUrl = localStorage.getItem('serverUrl');\r\n const serverUrl = getDomain();\r\n if (localUrl) {\r\n if (localUrl !== serverUrl) {\r\n StorageHelper.clearLocalStorageWithExceptions();\r\n localStorage.setItem('serverUrl', serverUrl);\r\n }\r\n } else {\r\n localStorage.setItem('serverUrl', serverUrl);\r\n }\r\n }\r\n};\r\n\r\nconst renderApp = async () => {\r\n await fetchAppConfig();\r\n initConfig();\r\n ReactDOM.render(, document.getElementById('root'));\r\n};\r\n\r\nconst timer: NodeJS.Timeout = setInterval(() => {\r\n ReactDOM.render(, document.getElementById('root'));\r\n //@ts-ignore\r\n if (window.env) {\r\n checkIfDevEnvironmentChanged();\r\n renderApp();\r\n clearInterval(timer);\r\n }\r\n}, 200);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","import NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TAddressesActions, Types, TAddress } from '../actions/addresses';\r\n\r\nexport declare type AddressesState = {\r\n addresses: TAddress[] | null;\r\n selectedAddress: TAddress | null;\r\n networkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: AddressesState = {\r\n addresses: null,\r\n selectedAddress: null,\r\n networkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst addresses = (state = initState, action: TAddressesActions): AddressesState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_ADDRESS:\r\n newState = { ...state, addresses: action.payload };\r\n break;\r\n case Types.SET_SELECTED_ADDRESS:\r\n newState = { ...state, selectedAddress: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n }\r\n\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default addresses;\r\n","import { GeocodingAddress, TPrediction } from '../../types';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TYaPrediction, Types } from '../actions/addressPredictions';\r\nimport { TAddressPredictionsActions } from '../actions/addressPredictions';\r\n\r\nexport declare type PredictionsState = {\r\n predictions: TPrediction[];\r\n yandexPredictions: TYaPrediction[];\r\n yandexPredictionGeocode: GeocodingAddress | null;\r\n isYaAutocompleteEnabled: boolean;\r\n networkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: PredictionsState = {\r\n predictions: [],\r\n yandexPredictions: [],\r\n yandexPredictionGeocode: null,\r\n isYaAutocompleteEnabled: true,\r\n networkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst addressPredictions = (\r\n // eslint-disable-next-line @typescript-eslint/default-param-last\r\n state = initState,\r\n action: TAddressPredictionsActions,\r\n): PredictionsState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_PREDICTIONS:\r\n newState = { ...state, predictions: action.payload };\r\n break;\r\n case Types.SET_YA_PREDICTIONS:\r\n newState = { ...state, yandexPredictions: action.payload };\r\n break;\r\n case Types.SET_YA_PREDICTION_GEOCODE:\r\n newState = { ...state, yandexPredictionGeocode: action.payload };\r\n break;\r\n case Types.SET_IS_YA_AUTOCOMPLETE_ENABLED:\r\n newState = { ...state, isYaAutocompleteEnabled: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default addressPredictions;\r\n","import { DeeplinkTypes } from '../../entities/BannersEntity';\r\nimport { TBannersDeeplinkActions, Types } from '../actions/bannersDeeplink';\r\n\r\nexport type TBannersDeeplinktState = {\r\n component: DeeplinkTypes | null;\r\n};\r\n\r\nconst initState: TBannersDeeplinktState = {\r\n component: null,\r\n};\r\n\r\nconst bannersAction = (\r\n state = initState,\r\n action: TBannersDeeplinkActions,\r\n): TBannersDeeplinktState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_COMPONENT_SHOW:\r\n newState = { ...state, component: action.payload };\r\n break;\r\n }\r\n\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default bannersAction;\r\n","import { BonusPointsAction, TBonusPointsHistoryItem, Types } from '../actions/bonusPoints';\r\n\r\nexport declare type TBonusPointsState = {\r\n history: TBonusPointsHistoryItem[] | null;\r\n aboutLoyaltySystem: string | null;\r\n isUsingBonusPoints: boolean;\r\n};\r\n\r\nconst initState: TBonusPointsState = {\r\n history: null,\r\n aboutLoyaltySystem: null,\r\n isUsingBonusPoints: false,\r\n};\r\n\r\nconst bonusPoints = (state = initState, action: BonusPointsAction): TBonusPointsState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_BONUS_POINTS_HISTORY:\r\n newState = { ...state, history: action.payload };\r\n break;\r\n case Types.SET_ABOUT_LOYALTY_SYSTEM:\r\n newState = { ...state, aboutLoyaltySystem: action.payload };\r\n break;\r\n case Types.SET_IS_USING_BONUS_POINTS:\r\n newState = { ...state, isUsingBonusPoints: action.payload };\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default bonusPoints;\r\n","import NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport {\r\n TCartActions,\r\n TCartCalculate,\r\n TCartItem,\r\n TDeletedItem,\r\n TInitCart,\r\n Types,\r\n} from '../actions/cart';\r\n\r\nexport declare type CatalogState = {\r\n info: TInitCart | null;\r\n items: Record | null;\r\n deletedItems: TDeletedItem[];\r\n calculate: TCartCalculate | null;\r\n calculateNetworkStatus: NetworkStatus;\r\n detailNetworkStatus: NetworkStatus;\r\n initCartNetworkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: CatalogState = {\r\n info: null,\r\n items: null,\r\n deletedItems: [],\r\n calculate: null,\r\n calculateNetworkStatus: NetworkStatus.pending,\r\n detailNetworkStatus: NetworkStatus.pending,\r\n initCartNetworkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst Cart = (state = initState, action: TCartActions): CatalogState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.INIT_CART:\r\n newState = { ...state, info: action.payload };\r\n break;\r\n case Types.SET_PRODUCTS:\r\n newState = { ...state, items: action.payload };\r\n break;\r\n case Types.SET_DELETED_PRODUCTS:\r\n newState = { ...state, deletedItems: action.payload };\r\n break;\r\n case Types.SET_CALCULATE_NETWORK_STATUS:\r\n newState = { ...state, calculateNetworkStatus: action.payload };\r\n break;\r\n case Types.SET_DETAIL_NETWORK_STATUS:\r\n newState = { ...state, detailNetworkStatus: action.payload };\r\n break;\r\n case Types.SET_INIT_CART_NETWORK_STATUS:\r\n newState = { ...state, initCartNetworkStatus: action.payload };\r\n break;\r\n case Types.SET_CALCULATE:\r\n newState = { ...state, calculate: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default Cart;\r\n","import { TCategory, TProduct } from '../../routes/catalog/hooks/useCatalog';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { CatalogActions, Types, TCatalog, TProductSet } from '../actions/catalog';\r\n\r\nexport declare type CatalogState = {\r\n products: Record }>;\r\n productSets: TProductSet[];\r\n categories: TCategory[];\r\n catalog: TCatalog[];\r\n activeTab: number;\r\n isTouchTab: boolean;\r\n networkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: CatalogState = {\r\n products: {},\r\n productSets: [],\r\n categories: [],\r\n catalog: [],\r\n activeTab: 0,\r\n isTouchTab: false,\r\n networkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst catalog = (state = initState, action: CatalogActions): CatalogState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_PRODUCTS:\r\n newState = { ...state, products: action.payload };\r\n break;\r\n case Types.SET_PRODUCT_SETS:\r\n newState = { ...state, productSets: action.payload };\r\n break;\r\n case Types.SET_CATEGORIES:\r\n newState = { ...state, categories: action.payload };\r\n break;\r\n case Types.SET_ACTIVE_TAB:\r\n newState = { ...state, activeTab: action.payload };\r\n break;\r\n case Types.SET_CATALOG:\r\n newState = { ...state, catalog: action.payload };\r\n break;\r\n case Types.SET_IS_TOUCH_TAB:\r\n newState = { ...state, isTouchTab: action.payload };\r\n break;\r\n\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default catalog;\r\n","import { TBanners } from '../../entities/BannersEntity';\r\nimport { TCompany } from '../../entities/CompanyEntity';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TCompanies, Types } from '../actions/company';\r\n\r\nexport declare type TCompanyState = {\r\n info: TCompany | null;\r\n logo: string | null;\r\n mockup: string | null;\r\n banners: TBanners[] | null;\r\n networkStatus: NetworkStatus;\r\n bannersNetworkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: TCompanyState = {\r\n info: null,\r\n logo: null,\r\n mockup: null,\r\n banners: null,\r\n networkStatus: NetworkStatus.pending,\r\n bannersNetworkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst company = (state = initState, action: TCompanies): TCompanyState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_COMPANY_INFO:\r\n newState = { ...state, info: action.payload };\r\n break;\r\n case Types.SET_COMPANY_LOGO:\r\n newState = { ...state, logo: action.payload };\r\n break;\r\n case Types.SET_COMPANY_MOCKUP:\r\n newState = { ...state, mockup: action.payload };\r\n break;\r\n case Types.SET_COMPANY_BANNERS:\r\n newState = { ...state, banners: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n case Types.SET_BANNERS_NETWORK_STATUS:\r\n newState = { ...state, bannersNetworkStatus: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default company;\r\n","import NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { THistory, Types, THistoriesActions, TPagination } from '../actions/history';\r\n\r\nexport declare type HistoryState = {\r\n items: null | Record;\r\n pagination: TPagination | null;\r\n networkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: HistoryState = {\r\n items: null,\r\n pagination: null,\r\n networkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst histories = (state = initState, action: THistoriesActions): HistoryState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_HISTORIES:\r\n newState = { ...state, items: action.payload };\r\n break;\r\n case Types.SET_PAGINATION:\r\n newState = { ...state, pagination: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default histories;\r\n","import { TLayoutActions, LayoutActionTypes } from '../actions/layout';\r\n\r\nexport type TLayoutState = {\r\n header: { hidden: boolean };\r\n footer: { hidden: boolean };\r\n body: { noScroll: boolean };\r\n};\r\n\r\nconst initState: TLayoutState = {\r\n header: { hidden: false },\r\n footer: { hidden: false },\r\n body: { noScroll: false },\r\n};\r\n\r\nconst layout = (state = initState, action: TLayoutActions): TLayoutState => {\r\n switch (action.type) {\r\n case LayoutActionTypes.LAYOUT_SET_HEADER_HIDDEN:\r\n return { ...state, header: { hidden: action.payload.hidden } };\r\n case LayoutActionTypes.LAYOUT_SET_FOOTER_HIDDEN:\r\n return { ...state, footer: { hidden: action.payload.hidden } };\r\n case LayoutActionTypes.LAYOUT_SET_BODY_NO_SCROLL:\r\n return { ...state, body: { noScroll: action.payload.noScroll } };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default layout;\r\n","import { TReturnedBottles, Types } from '../actions/returnedBottles';\r\n\r\nexport declare type ReturnedBottles = {\r\n quantity: number;\r\n isUserTriggeredContainerBlock: boolean;\r\n isUserTriggeredReturnedBottles: boolean;\r\n helpModalContent: string | null;\r\n};\r\n\r\nconst initState: ReturnedBottles = {\r\n quantity: 0,\r\n isUserTriggeredContainerBlock: false,\r\n isUserTriggeredReturnedBottles: false,\r\n helpModalContent: null,\r\n};\r\n\r\nconst returnedBottles = (state = initState, action: TReturnedBottles): ReturnedBottles => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_BOTTLE_QUANTITY:\r\n newState = { ...state, quantity: action.payload };\r\n break;\r\n case Types.SET_IS_USER_TRIGGERED_CONTAINER_BLOCK:\r\n newState = { ...state, isUserTriggeredContainerBlock: action.payload };\r\n break;\r\n case Types.SET_IS_USER_TRIGGERED_RETURNED_BOTTLES:\r\n newState = { ...state, isUserTriggeredReturnedBottles: action.payload };\r\n break;\r\n case Types.SET_HELP_MODAL_CONTENT:\r\n newState = { ...state, helpModalContent: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default returnedBottles;\r\n","import NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TUser, Types, TUserData, TUserAnonData } from '../actions/user';\r\n\r\nexport declare type UserState = {\r\n data: null | TUserAnonData | TUserData;\r\n networkStatus: NetworkStatus;\r\n};\r\n\r\nconst initState: UserState = {\r\n data: null,\r\n networkStatus: NetworkStatus.pending,\r\n};\r\n\r\nconst user = (state = initState, action: TUser): UserState => {\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_USER:\r\n newState = { ...state, data: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkStatus: action.payload };\r\n break;\r\n }\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default user;\r\n","import { combineReducers } from 'redux';\r\n\r\nimport addresses from './addresses';\r\nimport addressPredictions from './addressPredictions';\r\nimport bannersDeeplink from './bannersDeeplink';\r\nimport bonusPoints from './bonusPoints';\r\nimport cart from './cart';\r\nimport catalog from './catalog';\r\nimport company from './company';\r\nimport history from './history';\r\nimport layout from './layout';\r\nimport order from './order';\r\nimport returnedBottles from './returnedBottles';\r\nimport user from './user';\r\n\r\nconst rootReducer = combineReducers({\r\n catalog,\r\n cart,\r\n returnedBottles,\r\n company,\r\n user,\r\n addresses,\r\n order,\r\n history,\r\n layout,\r\n bannersDeeplink,\r\n addressPredictions,\r\n bonusPoints,\r\n});\r\n\r\nexport default rootReducer;\r\n\r\nexport type AppStateType = ReturnType;\r\n","import { createStore, compose, applyMiddleware } from 'redux';\r\nimport thunk, { ThunkAction } from 'redux-thunk';\r\n\r\nimport { getAppConfig } from './../utils/appConfig';\r\nimport rootReducer, { AppStateType } from './reducers';\r\nimport { API, Services } from '../entities/AppConfigEntity';\r\nimport { httpClientServices } from '../utils/httpClient';\r\n\r\ndeclare global {\r\n interface Window {\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\r\n }\r\n}\r\n\r\nconst { api, services } = getAppConfig();\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nexport type ThunkExtra = {\r\n api: API;\r\n httpClientServices: typeof httpClientServices;\r\n services: Services;\r\n};\r\n\r\nexport declare type TAction = ThunkAction;\r\n\r\nexport const middleware = [\r\n thunk.withExtraArgument({\r\n api,\r\n httpClientServices,\r\n services,\r\n }),\r\n];\r\n\r\nconst store = createStore(rootReducer, composeEnhancers(applyMiddleware(...middleware)));\r\n\r\nexport default store;\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { CartActions } from './cart';\r\nimport { OrderActions } from './order';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { CheckoutFields } from '../reducers/order';\r\nimport { TAction } from '../store';\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\nimport { translateMap } from '../../translations';\r\n\r\nexport const Types = {\r\n SET_INTERVALS: 'ORDER@SET:INTERVALS',\r\n};\r\n\r\nexport type TSetIntervals = {\r\n type: typeof Types.SET_INTERVALS;\r\n payload: TPeriod[];\r\n};\r\n\r\nexport type TIntervalActions = TSetIntervals;\r\n\r\ntype IntervalActionsType = {\r\n fetchIntervals: () => TAction>;\r\n assignInterval: (intervalId: string, date: string) => TAction>;\r\n setIntervals: (intervals: TPeriod[]) => TSetIntervals;\r\n};\r\n\r\nexport type TInterval = {\r\n day_of_week: number;\r\n default: number;\r\n district_id: number;\r\n express_interval: string;\r\n id: number;\r\n is_express: number;\r\n label: string;\r\n minutes_for_disable: number;\r\n price: string;\r\n shift_closing_to_end: number;\r\n time_end: string;\r\n time_start: string;\r\n};\r\n\r\nexport type TPeriod = {\r\n date: string;\r\n label: string;\r\n intervals: TInterval[];\r\n};\r\n\r\ntype TAssign = {\r\n cart: string;\r\n date: string;\r\n periodId: string;\r\n};\r\n\r\ntype TFetchIntervalParams = {\r\n longitude: string;\r\n latitude: string;\r\n addressUuid?: string;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const IntervalActions: IntervalActionsType = {\r\n fetchIntervals() {\r\n return async (dispatch, getState, { api, httpClientServices }) => {\r\n const { selectedAddress } = getState().addresses;\r\n\r\n if (selectedAddress) {\r\n dispatch(OrderActions.setNetworkStatus('intervals', NetworkStatus.loading));\r\n const params: TFetchIntervalParams = {\r\n longitude: selectedAddress.longitude,\r\n latitude: selectedAddress.latitude,\r\n };\r\n\r\n if (selectedAddress.uuid) {\r\n params['addressUuid'] = selectedAddress.uuid;\r\n }\r\n\r\n await httpClientServices\r\n .getClient()\r\n .get<{ data: TPeriod[]; success: boolean }>(api.getIntervalsByCoords, {\r\n params,\r\n })\r\n .then(({ data }) => {\r\n if (data.success) {\r\n dispatch(this.setIntervals(data.data));\r\n } else {\r\n throw Error;\r\n }\r\n })\r\n .catch(e => errorHandler(e, 'Failed to fetch intervals'))\r\n .finally(() => {\r\n dispatch(OrderActions.setNetworkStatus('intervals', NetworkStatus.ready));\r\n });\r\n }\r\n };\r\n },\r\n assignInterval(intervalId, date) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart ?? localStorage.getItem('cartId');\r\n if (cart) {\r\n const data: TAssign = {\r\n cart,\r\n date,\r\n periodId: intervalId,\r\n };\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignInterval, data)\r\n .then(() => {\r\n batch(() => {\r\n dispatch(CartActions.calculate());\r\n dispatch(OrderActions.setReadyField(CheckoutFields.interval, true));\r\n });\r\n })\r\n .catch(e => {\r\n dispatch(OrderActions.setReadyField(CheckoutFields.interval, false));\r\n errorHandler(e, t(tMap.assignInterval));\r\n });\r\n }\r\n\r\n return;\r\n };\r\n },\r\n setIntervals(intervals) {\r\n return {\r\n type: Types.SET_INTERVALS,\r\n payload: intervals,\r\n };\r\n },\r\n};\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport type ViewProps = React.PropsWithChildren>\r\n\r\nconst View: React.FC = React.forwardRef(({ children, center, inline, className, id, wrap, ...other }, ref) => {\r\n const centerStyles = center ? {\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n } : {}\r\n\r\n const inlineStyles = inline ? { display: \"flex-inline\" } : {}\r\n\r\n const flexWrap = wrap ? { flexWrap: 'wrap' } as React.CSSProperties : {};\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n});\r\n\r\nexport default View","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { AddressesActions, TAddressAssign } from './addresses';\r\nimport { TCatalogProduct } from './catalog';\r\nimport { OrderActions } from './order';\r\nimport { TPaymentAssign } from './payment';\r\nimport { ReturnedBottles } from './returnedBottles';\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\nimport { TCompany } from '../../entities/CompanyEntity';\r\nimport { translateMap } from '../../translations';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport URLHelper from '../../utils/URLHelper';\r\nimport { CheckoutFields } from '../reducers/order';\r\nimport { TAction } from '../store';\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const Types = {\r\n INIT_CART: 'CART@INIT:CART',\r\n SET_PRODUCTS: 'CART@SET:PRODUCTS',\r\n SET_PRODUCT_SETS: 'CART@SET:PRODUCT:SETS',\r\n SET_DELETED_PRODUCTS: 'CART@SET:DELETED:PRODUCTS',\r\n SET_CALCULATE: 'CART@SET:CALCULATE',\r\n SET_CALCULATE_NETWORK_STATUS: 'CART@SET:CALCULATE:NETWORK:STATUS',\r\n SET_DETAIL_NETWORK_STATUS: 'CART@SET:DETAIL:NETWORK:STATUS',\r\n SET_INIT_CART_NETWORK_STATUS: 'CART@SET:INIT:CART:NETWORK:STATUS',\r\n};\r\n\r\nexport type TInitCart = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n partner?: string;\r\n cart: string;\r\n id?: string;\r\n createdAt?: string;\r\n cartId?: string;\r\n};\r\n\r\nexport type TNoteAssign = {\r\n '@id': string;\r\n '@type': string;\r\n note: string;\r\n};\r\n\r\nexport type TDeletedItem = {\r\n id: number;\r\n quantity: number;\r\n isProductSet: boolean;\r\n};\r\n\r\nexport type TItemAssign = {\r\n '@id': string;\r\n '@type': string;\r\n product: {\r\n '@id': string;\r\n '@type': string;\r\n externalId: number;\r\n name: string;\r\n } | null;\r\n productSet: {\r\n '@id': string;\r\n '@type': string;\r\n externalId: number;\r\n name: string;\r\n } | null;\r\n quantity: number;\r\n fromRecommended: boolean;\r\n type: string;\r\n};\r\n\r\nexport type TDetailsCart = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n address: TAddressAssign & {\r\n '@id': string;\r\n '@type': string;\r\n };\r\n deliveryPeriod: null;\r\n payment: TPaymentAssign | null;\r\n user: null;\r\n returnableContainer: {\r\n '@id': string;\r\n '@type': string;\r\n quantity: number;\r\n };\r\n note: TNoteAssign | null;\r\n callRestriction: null;\r\n loyaltyPoints: null;\r\n promotionCode: null;\r\n items: TItemAssign[];\r\n};\r\n\r\nexport type TCalculateProduct = {\r\n '@id': string;\r\n '@type': string;\r\n externalId: number;\r\n name: string;\r\n};\r\n\r\nexport type TCartCalculate = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n items: {\r\n '@type': string;\r\n '@id': string;\r\n id: string;\r\n price: {\r\n amount: string;\r\n currency: string;\r\n };\r\n quantity: number;\r\n sum: {\r\n amount: string;\r\n currency: string;\r\n };\r\n cashback: {\r\n amount: string;\r\n currency: string;\r\n };\r\n cashbackSum: {\r\n amount: string;\r\n currency: string;\r\n };\r\n type: string;\r\n product?: TCalculateProduct;\r\n productSet?: Omit;\r\n }[];\r\n cartSum: {\r\n amount: string;\r\n currency: string;\r\n };\r\n deliveryCost: {\r\n amount: string;\r\n currency: string;\r\n };\r\n sum: {\r\n amount: string;\r\n currency: string;\r\n };\r\n maxCashbackPoints: {\r\n amount: string;\r\n currency: string;\r\n };\r\n cashbackSum: {\r\n amount: string;\r\n currency: string;\r\n };\r\n total: {\r\n amount: string;\r\n currency: string;\r\n };\r\n requiredProducts: {\r\n '@type': string;\r\n '@id': string;\r\n externalProductId: number;\r\n quantity: number;\r\n name: string;\r\n reason: string;\r\n }[];\r\n insufficientReturnableContainer?: number;\r\n returnableContainer?: number;\r\n};\r\n\r\nexport type AuthenticateType = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n authenticatedCart: string;\r\n cart: string;\r\n id: string;\r\n createdAt: string;\r\n};\r\n\r\nexport type TCartItem = {\r\n productId: number;\r\n quantity: number;\r\n cartItem?: string;\r\n '@context'?: string;\r\n '@id'?: string;\r\n '@type'?: string;\r\n cart?: string;\r\n createdAt?: string;\r\n id?: string;\r\n type?: string;\r\n isRequired?: boolean;\r\n tooltipText?: string;\r\n};\r\n\r\nexport type TInitCartAction = {\r\n type: typeof Types.INIT_CART;\r\n payload: TInitCart | null;\r\n};\r\n\r\nexport type TSetCartItemsAction = {\r\n type: typeof Types.SET_PRODUCTS;\r\n payload: Record | null;\r\n};\r\n\r\nexport type TSetCartItemSetsAction = {\r\n type: typeof Types.SET_PRODUCT_SETS;\r\n payload: Record | null;\r\n};\r\n\r\nexport type TSetDeletedCartItemsAction = {\r\n type: typeof Types.SET_DELETED_PRODUCTS;\r\n payload: TDeletedItem[];\r\n};\r\n\r\nexport type TSetCalculate = {\r\n type: typeof Types.SET_CALCULATE;\r\n payload: TCartCalculate | null;\r\n};\r\n\r\nexport type TSetCalculateNetworkStatus = {\r\n type: typeof Types.SET_CALCULATE_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TSetDetailNetworkStatus = {\r\n type: typeof Types.SET_DETAIL_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TSetInitCartNetworkStatus = {\r\n type: typeof Types.SET_INIT_CART_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport enum ContainersToReturn {\r\n noBottles = 0,\r\n haveBottles = 1,\r\n}\r\n\r\nexport type TCartActions =\r\n | TInitCartAction\r\n | TSetCartItemsAction\r\n | TSetDeletedCartItemsAction\r\n | TSetCalculate\r\n | TSetDetailNetworkStatus\r\n | TSetInitCartNetworkStatus\r\n | TSetCalculateNetworkStatus;\r\n\r\ntype CartActionsType = {\r\n restoreCart: () => TAction>;\r\n restoreProducts: (\r\n products: { productId: number; quantity: number }[],\r\n ) => TAction>;\r\n initCart: (defaultCity?: TCompany['defaultCity']) => TAction>;\r\n addProductToCart: (\r\n quantity: number,\r\n productId: number,\r\n productName: string,\r\n type?: string,\r\n isRequired?: boolean,\r\n tooltipText?: string,\r\n ) => TAction>;\r\n addProductSetToCart: (\r\n quantity: number,\r\n productSetId: number,\r\n productName: string,\r\n ) => TAction>;\r\n reduceProduct: (quantity: number, productId: number) => TAction>;\r\n reduceProductSet: (quantity: number, productSetId: number) => TAction>;\r\n removeProduct: (productId: number) => TAction>;\r\n removeCartProduct: (\r\n productId: number,\r\n quantity: number,\r\n isProductSet: boolean,\r\n ) => TAction>;\r\n restoreCartProduct: (\r\n quantity: number,\r\n productId: number,\r\n productName: string,\r\n type?: string,\r\n ) => TAction>;\r\n restoreCartProductSet: (\r\n quantity: number,\r\n productId: number,\r\n productName: string,\r\n ) => TAction>;\r\n calculate: (haveContainersToReturn?: ContainersToReturn) => TAction>;\r\n clearCart: () => TAction>;\r\n authenticate: () => TAction>;\r\n setInfoCart: (payload: TInitCart | null) => TInitCartAction;\r\n setCartItems: (payload: Record | null) => TSetCartItemsAction;\r\n setCartItemsSets: (payload: Record | null) => TSetCartItemSetsAction;\r\n setDeletedCartItems: (payload: TDeletedItem[]) => TSetDeletedCartItemsAction;\r\n setCalculate: (payload: TCartCalculate | null) => TSetCartItemsAction;\r\n setCalculateNetworkStatus: (status: NetworkStatus) => TSetCalculateNetworkStatus;\r\n setDetailNetworkStatus: (status: NetworkStatus) => TSetDetailNetworkStatus;\r\n setInitCartNetworkStatus: (status: NetworkStatus) => TSetInitCartNetworkStatus;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nexport const CartActions: CartActionsType = {\r\n initCart() {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const cart = getState().cart;\r\n const { addresses, selectedAddress } = getState().addresses;\r\n const { data: userData } = getState().user;\r\n if (!userData) {\r\n localStorage.setItem('isAnonymousCart', 'true');\r\n }\r\n if (\r\n (!localStorage.getItem('cartId') || cart.info === null) &&\r\n getState().cart.initCartNetworkStatus !== NetworkStatus.loading\r\n ) {\r\n try {\r\n dispatch(this.setInitCartNetworkStatus(NetworkStatus.loading));\r\n const { data } = await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.initCart, {});\r\n localStorage.setItem('cartId', data.cart);\r\n dispatch(this.setInfoCart(data));\r\n if (addresses && addresses.length !== 0) {\r\n dispatch(AddressesActions.assignAddress(selectedAddress || addresses[0]));\r\n }\r\n } catch (e) {\r\n errorHandler(e, 'Failed to init cart');\r\n }\r\n dispatch(this.setInitCartNetworkStatus(NetworkStatus.ready));\r\n }\r\n };\r\n },\r\n restoreCart() {\r\n return async (dispatch, _, { services, httpClientServices }) => {\r\n const cartId = localStorage.getItem('cartId');\r\n if (cartId) {\r\n dispatch(this.setDetailNetworkStatus(NetworkStatus.loading));\r\n httpClientServices\r\n .getClient('cart')\r\n .get(\r\n URLHelper.buildUrl(services.cart.restore, {\r\n cartId,\r\n }),\r\n )\r\n .then(({ data }) => {\r\n const products = data.items.map(item => ({\r\n productId: item.product?.externalId || item.productSet?.externalId,\r\n quantity: item.quantity,\r\n cartItem: item['@id'],\r\n }));\r\n batch(() => {\r\n dispatch(\r\n this.setInfoCart({\r\n '@context': data['@context'],\r\n '@id': data['@id'],\r\n '@type': data['@type'],\r\n cart: cartId,\r\n }),\r\n );\r\n if (products) {\r\n //@ts-ignore\r\n dispatch(this.restoreProducts(products));\r\n dispatch(this.calculate());\r\n dispatch(\r\n ReturnedBottles.setQuantity(\r\n data.returnableContainer?.quantity ?? 0,\r\n ),\r\n );\r\n dispatch(\r\n OrderActions.setDefaultField(\r\n CheckoutFields.address,\r\n data.address,\r\n ),\r\n );\r\n dispatch(\r\n OrderActions.setDefaultField(\r\n CheckoutFields.payment,\r\n data.payment,\r\n ),\r\n );\r\n dispatch(\r\n OrderActions.setDefaultField(CheckoutFields.note, data.note),\r\n );\r\n }\r\n });\r\n })\r\n .catch(e => {\r\n errorHandler(e, 'Failed to restore cart');\r\n localStorage.removeItem('cartId');\r\n });\r\n }\r\n };\r\n },\r\n restoreProducts(products) {\r\n return async (dispatch, getState) => {\r\n const { catalog, productSets } = getState().catalog;\r\n const items = catalog.map(item => item.products).flat();\r\n const cartItems: Record = {};\r\n const requiredProducts: Record = JSON.parse(\r\n localStorage.getItem('requiredProducts') ?? '{}',\r\n );\r\n const requiredProductsIds = Object.keys(requiredProducts);\r\n products.forEach(product => {\r\n const item =\r\n items.find(item => item.id === product.productId) ??\r\n productSets.find(item => item.id === product.productId);\r\n const productStrId = `${product.productId}`;\r\n if (item) {\r\n const cartItem = {\r\n ...product,\r\n //@ts-ignore\r\n type: item.type,\r\n isRequired: requiredProductsIds.includes(productStrId),\r\n tooltipText: requiredProducts[productStrId],\r\n };\r\n cartItems[product.productId] = cartItem;\r\n }\r\n });\r\n batch(() => {\r\n if (Object.keys(cartItems).length > 0) {\r\n dispatch(this.setCartItems(cartItems));\r\n }\r\n dispatch(this.setDetailNetworkStatus(NetworkStatus.ready));\r\n });\r\n };\r\n },\r\n authenticate() {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const { selectedAddress } = getState().addresses;\r\n const isAnonymousCart = localStorage.getItem('isAnonymousCart');\r\n const cartId = localStorage.getItem('cartId');\r\n\r\n if (info && cartId && isAnonymousCart && isAnonymousCart === 'true') {\r\n let data;\r\n\r\n localStorage.setItem('isAnonymousCart', 'false');\r\n\r\n const anonymousSelectedAddresses = localStorage.getItem(\r\n 'anonymousSelectedAddresses',\r\n );\r\n\r\n if (selectedAddress && !anonymousSelectedAddresses) {\r\n data = {\r\n cart: info.cart,\r\n addressId: selectedAddress.external_id,\r\n };\r\n }\r\n\r\n if (data === undefined) {\r\n data = {\r\n cart: info.cart,\r\n };\r\n }\r\n\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.authenticate, data)\r\n .then(({ data }) => {\r\n const newCartId = data.authenticatedCart;\r\n info.cart = newCartId;\r\n localStorage.setItem('cartId', newCartId);\r\n localStorage.removeItem('isAnonymousCart');\r\n dispatch(this.setInfoCart(info));\r\n })\r\n .catch(e => {\r\n localStorage.setItem('isAnonymousCart', 'true');\r\n errorHandler(e, 'Failed to authenticate cart');\r\n });\r\n }\r\n };\r\n },\r\n addProductToCart(quantity, productId, productName, type, isRequired = false, tooltipText) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info, deletedItems } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n quantity,\r\n productId,\r\n productName,\r\n cart,\r\n };\r\n\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.addProduct, data)\r\n .then(({ data }) => {\r\n const { items } = getState().cart;\r\n if (!type) {\r\n const { catalog } = getState().catalog;\r\n const product = catalog\r\n .reduce(\r\n (acc: TCatalogProduct[], current) =>\r\n acc.concat(current.products),\r\n [],\r\n )\r\n .find(product => product.id === productId);\r\n\r\n type = product?.type;\r\n }\r\n\r\n return batch(async () => {\r\n if (deletedItems.length !== 0) {\r\n const filtered = deletedItems.filter(\r\n item => item.id !== productId && item.isProductSet !== false,\r\n );\r\n dispatch(this.setDeletedCartItems(filtered));\r\n }\r\n const product = {\r\n productId: data.productId,\r\n quantity: data.quantity,\r\n cartItem: data.cartItem,\r\n type,\r\n isRequired,\r\n tooltipText,\r\n };\r\n if (items) {\r\n items[data.productId] = product;\r\n await dispatch(this.setCartItems({ ...items }));\r\n } else {\r\n await dispatch(\r\n this.setCartItems({\r\n [data.productId]: product,\r\n }),\r\n );\r\n }\r\n await dispatch(this.calculate());\r\n });\r\n })\r\n .catch(e => errorHandler(e, 'Failed to add product to cart'));\r\n }\r\n };\r\n },\r\n addProductSetToCart(quantity, productSetId, productName) {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n const { info, items, deletedItems } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n quantity,\r\n productSetId,\r\n productName,\r\n cart,\r\n };\r\n await httpClientServices\r\n .getClient('cart')\r\n .post('/order/add_cart_item_product_set_events', data)\r\n .then(({ data }) => {\r\n return batch(async () => {\r\n if (deletedItems.length !== 0) {\r\n const filtered = deletedItems.filter(\r\n item => item.id !== productSetId && item.isProductSet !== true,\r\n );\r\n dispatch(this.setDeletedCartItems(filtered));\r\n }\r\n const product = {\r\n productId: data.productSetId,\r\n quantity: data.quantity,\r\n cartItem: data.cartItem,\r\n };\r\n if (items) {\r\n items[data.productSetId] = product;\r\n dispatch(this.setCartItems({ ...items }));\r\n } else {\r\n dispatch(\r\n this.setCartItems({\r\n [data.productSetId]: product,\r\n }),\r\n );\r\n }\r\n await dispatch(this.calculate());\r\n });\r\n })\r\n .catch(e => errorHandler(e, t(tMap.addProductSet)));\r\n }\r\n };\r\n },\r\n reduceProduct(quantity, productId) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info, items } = getState().cart;\r\n const cart = info?.cart;\r\n\r\n if (cart && items && items[productId]) {\r\n const data = {\r\n quantity,\r\n productId,\r\n cart,\r\n };\r\n\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.reduceProduct, data)\r\n .then(({ data }) => {\r\n const { items } = getState().cart;\r\n if (items) {\r\n items[data.productId].quantity = data.quantity;\r\n\r\n return batch(async () => {\r\n await dispatch(this.setCartItems({ ...items }));\r\n await dispatch(this.calculate());\r\n });\r\n }\r\n })\r\n .catch(e => errorHandler(e, 'Failed to reduce product'));\r\n }\r\n };\r\n },\r\n reduceProductSet(quantity, productSetId) {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n const { info, items } = getState().cart;\r\n const cart = info?.cart;\r\n const data = {\r\n productSetId,\r\n quantity,\r\n cart,\r\n };\r\n if (cart && items && items[productSetId]) {\r\n await httpClientServices\r\n .getClient('cart')\r\n .post('/order/reduce_cart_item_product_set_events', data)\r\n .then(({ data }) => {\r\n const { items } = getState().cart;\r\n if (items) {\r\n items[data.productSetId].quantity = data.quantity;\r\n\r\n return batch(async () => {\r\n await dispatch(this.setCartItems({ ...items }));\r\n await dispatch(this.calculate());\r\n });\r\n }\r\n })\r\n .catch(e => errorHandler(e, t(tMap.reduceProductSet)));\r\n }\r\n };\r\n },\r\n removeProduct(productId) {\r\n return async (dispatch, getState, { services, httpClientServices }) => {\r\n const { info, items } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart && items) {\r\n const product = items[productId];\r\n let cartItem;\r\n if (product.cartItem) {\r\n cartItem = product.cartItem;\r\n } else if (getState().cart.calculate?.items) {\r\n const calculateProduct = getState().cart.calculate?.items.find(\r\n product =>\r\n product.product?.externalId === productId ||\r\n product.productSet?.externalId === productId,\r\n );\r\n cartItem = calculateProduct?.id;\r\n }\r\n\r\n const data = {\r\n cart: cart,\r\n cartItem,\r\n };\r\n\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.removeProduct, data)\r\n .then(() => {\r\n delete items[productId];\r\n const isEmptyCart = Object.keys(items).length === 0;\r\n return batch(() => {\r\n if (!isEmptyCart) {\r\n dispatch(this.setCartItems({ ...items }));\r\n dispatch(this.calculate());\r\n } else {\r\n dispatch(this.clearCart());\r\n }\r\n });\r\n })\r\n .catch(e => errorHandler(e, 'Failed to remove product'));\r\n } else {\r\n dispatch(this.clearCart());\r\n }\r\n };\r\n },\r\n removeCartProduct(productId, quantity, isProductSet) {\r\n return async (dispatch, getState) => {\r\n const { items, deletedItems } = getState().cart;\r\n if (items) {\r\n deletedItems.push({\r\n id: productId,\r\n isProductSet,\r\n quantity,\r\n });\r\n await dispatch(this.removeProduct(productId)).then(() => {\r\n dispatch(this.setDeletedCartItems(deletedItems));\r\n });\r\n }\r\n };\r\n },\r\n restoreCartProduct(id, quantity, name, type) {\r\n return async (dispatch, getState) => {\r\n const { info } = getState().cart;\r\n if (info) {\r\n dispatch(this.addProductToCart(id, quantity, name, type));\r\n } else {\r\n dispatch(this.initCart()).then(() =>\r\n dispatch(this.addProductToCart(id, quantity, name, type)),\r\n );\r\n }\r\n };\r\n },\r\n restoreCartProductSet(id, quantity, name) {\r\n return async (dispatch, getState) => {\r\n const { info } = getState().cart;\r\n if (info) {\r\n dispatch(this.addProductSetToCart(id, quantity, name));\r\n } else {\r\n dispatch(this.initCart()).then(() =>\r\n dispatch(this.addProductSetToCart(id, quantity, name)),\r\n );\r\n }\r\n };\r\n },\r\n calculate(haveContainersToReturn = ContainersToReturn.haveBottles) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info, items } = getState().cart;\r\n if (items && Object.keys(items).length === 0) {\r\n this.setCartItems(null);\r\n }\r\n const cart = info?.cart;\r\n if (cart && items) {\r\n const data = {\r\n cart,\r\n haveContainersToReturn: !!haveContainersToReturn,\r\n };\r\n dispatch(this.setCalculateNetworkStatus(NetworkStatus.loading));\r\n\r\n return httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.calculate, data)\r\n .then(({ data }) => {\r\n return batch(async () => {\r\n if (\r\n data.returnableContainer !== undefined &&\r\n data.insufficientReturnableContainer &&\r\n data.insufficientReturnableContainer > 0\r\n ) {\r\n dispatch(\r\n ReturnedBottles.addReturnedBottle(\r\n data.insufficientReturnableContainer,\r\n ),\r\n );\r\n }\r\n if (data.requiredProducts.length > 0) {\r\n data.requiredProducts.forEach(product =>\r\n dispatch(\r\n CartActions.addProductToCart(\r\n product.quantity,\r\n product.externalProductId,\r\n product.name,\r\n undefined,\r\n true,\r\n product.reason,\r\n ),\r\n ),\r\n );\r\n\r\n localStorage.setItem(\r\n 'requiredProducts',\r\n JSON.stringify(\r\n Object.fromEntries(\r\n data.requiredProducts.map(product => [\r\n product.externalProductId,\r\n product.reason,\r\n ]),\r\n ),\r\n ),\r\n );\r\n }\r\n dispatch(\r\n ReturnedBottles.setQuantity(\r\n data.returnableContainer ??\r\n data.insufficientReturnableContainer ??\r\n 0,\r\n ),\r\n );\r\n dispatch(this.setCalculateNetworkStatus(NetworkStatus.ready));\r\n dispatch(this.setCalculate(data));\r\n });\r\n })\r\n .catch(e => {\r\n if (e.response.status === 410) {\r\n dispatch(this.clearCart());\r\n }\r\n });\r\n }\r\n };\r\n },\r\n clearCart() {\r\n return async dispatch => {\r\n batch(() => {\r\n localStorage.removeItem('cartId');\r\n localStorage.removeItem('isAnonymousCart');\r\n dispatch(this.setCalculate(null));\r\n dispatch(this.setCartItems(null));\r\n dispatch(this.setDeletedCartItems([]));\r\n dispatch(this.setInfoCart(null));\r\n dispatch(ReturnedBottles.clearBottles());\r\n });\r\n };\r\n },\r\n setCartItems(payload) {\r\n return {\r\n type: Types.SET_PRODUCTS,\r\n payload,\r\n };\r\n },\r\n setCartItemsSets(payload) {\r\n return {\r\n type: Types.SET_PRODUCT_SETS,\r\n payload,\r\n };\r\n },\r\n setDeletedCartItems(payload) {\r\n return {\r\n type: Types.SET_DELETED_PRODUCTS,\r\n payload,\r\n };\r\n },\r\n setCalculate(payload) {\r\n return {\r\n type: Types.SET_CALCULATE,\r\n payload,\r\n };\r\n },\r\n setInfoCart(payload) {\r\n return {\r\n type: Types.INIT_CART,\r\n payload,\r\n };\r\n },\r\n setCalculateNetworkStatus(status) {\r\n return {\r\n type: Types.SET_CALCULATE_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n setDetailNetworkStatus(status) {\r\n return {\r\n type: Types.SET_DETAIL_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n setInitCartNetworkStatus(status) {\r\n return {\r\n type: Types.SET_INIT_CART_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","import { DeeplinkTypes } from '../../entities/BannersEntity';\r\n\r\nexport const Types = {\r\n SET_COMPONENT_SHOW: 'BANNERS@SET:COMPONENT:SHOW',\r\n};\r\n\r\ntype TBannersDeeplinkType = {\r\n setComponentShow: (name: DeeplinkTypes | null) => TComponentAction;\r\n};\r\n\r\nexport type TComponentAction = {\r\n type: typeof Types.SET_COMPONENT_SHOW;\r\n payload: DeeplinkTypes | null;\r\n};\r\n\r\nexport type TBannersDeeplinkActions = TComponentAction;\r\n\r\nexport const BannersDeeplinkActions: TBannersDeeplinkType = {\r\n setComponentShow(name) {\r\n return {\r\n type: Types.SET_COMPONENT_SHOW,\r\n payload: name,\r\n };\r\n },\r\n};\r\n","export default {\r\n copyButton: {\r\n copy: 'Скопировать',\r\n },\r\n fileField: {\r\n label: 'Нажмите или перетащите файл в область, чтобы загрузить файл',\r\n multipleLabel: 'Нажмите или перетащите файлы в область, чтобы загрузить файлы',\r\n multipleFilesLabel: 'Вы можете выбрать как один, так и несколько файлов',\r\n },\r\n imageField: {\r\n label: 'Нажмите или перетащите изображение в область, чтобы загрузить',\r\n preview: 'Просмотр',\r\n delete: 'Удалить',\r\n error: 'Файл не является изображением',\r\n },\r\n autoCompleteField: {\r\n placeholder: 'Введите местоположение',\r\n },\r\n daysField: {\r\n save: 'Сохранить',\r\n weekdays: 'Будни',\r\n weekends: 'Выходные',\r\n },\r\n selectorLang: {\r\n label: 'Язык',\r\n },\r\n cloudPaymentsButton: {\r\n label: 'Банковская карта',\r\n },\r\n noData: 'Нет данных',\r\n countryPicker: {\r\n placeholder: {\r\n loading: 'Загрузка...',\r\n selectCountry: 'Выберите вашу страну',\r\n },\r\n },\r\n checkboxSelector: {\r\n checkAll: 'Выбрать все',\r\n ok: 'Ок',\r\n },\r\n technicalWorkPage: {\r\n title: 'Ведутся технические работы',\r\n subtitle: 'Зайдите через полчасика, мы все починим и наладим',\r\n },\r\n};\r\n","export default {\r\n copyButton: {\r\n copy: 'Copy',\r\n },\r\n fileField: {\r\n label: 'Click or drag file to the area to upload file',\r\n multipleLabel: 'Click or drag files to the area to upload files',\r\n multipleFilesLabel: 'You can choose one or more files',\r\n },\r\n imageField: {\r\n label: 'Click or drag an image to the area to upload',\r\n preview: 'Preview',\r\n delete: 'Delete',\r\n error: 'File is not an image',\r\n },\r\n autoCompleteField: {\r\n placeholder: 'Enter your location',\r\n },\r\n daysField: {\r\n save: 'Save',\r\n weekdays: 'Weekdays',\r\n weekends: 'Weekends',\r\n },\r\n selectorLang: {\r\n label: 'Language',\r\n },\r\n cloudPaymentsButton: {\r\n label: 'Bank card',\r\n },\r\n noData: 'No data',\r\n countryPicker: {\r\n placeholder: {\r\n loading: 'Loading...',\r\n selectCountry: 'Select your country',\r\n },\r\n },\r\n checkboxSelector: {\r\n checkAll: 'Check all',\r\n ok: 'Ok',\r\n },\r\n technicalWorkPage: {\r\n title: 'Technical work is underway',\r\n subtitle: 'Come back in half an hour, we\\'ll do all we need',\r\n },\r\n};\r\n","import { createTranslationMap } from '../../i18n';\r\n\r\nimport ru from './ru';\r\nimport en from './en';\r\n\r\nexport const translationMap: { ui: typeof ru } = createTranslationMap({ ui: ru });\r\n\r\nexport { ru, en };","import React from 'react';\r\n\r\nimport { Spin } from 'antd';\r\nimport { SpinProps } from 'antd/lib/spin';\r\n\r\nconst AbsoluteFilledLoader: React.FC = ({ children, style, ...other }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default AbsoluteFilledLoader;\r\n","import React, { FC, Suspense, SuspenseProps } from 'react';\r\n\r\nimport AbsoluteFilledLoader from '../AbsoluteFilledLoader';\r\n\r\nconst SuspenseWithLoader: FC> = ({ children, ...other }) => {\r\n return (\r\n } {...other}>\r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default SuspenseWithLoader;\r\n","import { TransactionState, Debit, TResponseExtensons } from \"./types\";\r\nimport { ErrorResponse } from \"apollo-link-error\";\r\nimport { AxiosError } from \"axios\";\r\nimport { ApolloError } from \"apollo-boost\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\n\r\nexport const collectionFragment = (fragmentName: string, extantion: string = ''): string => {\r\n return `\r\n totalCount,\r\n edges{\r\n cursor,\r\n node{\r\n ...${fragmentName}${extantion && ','}\r\n ${extantion}\r\n }\r\n }\r\n pageInfo{\r\n endCursor,\r\n hasNextPage\r\n }\r\n `\r\n};\r\n\r\nexport const collectionFields = (fields: string): string => {\r\n return `\r\n totalCount,\r\n edges{\r\n cursor,\r\n node{\r\n ${fields}\r\n }\r\n }\r\n pageInfo{\r\n endCursor,\r\n hasNextPage\r\n }\r\n `\r\n};\r\n\r\nexport const parseUuid = (id: string) => {\r\n return id.split(\"/\").reverse()[0]\r\n}\r\n\r\n\r\nexport interface ConverDateOptions {\r\n timeFormat?: string\r\n}\r\n\r\nexport function convertDateToServerFormat(date: Date | Dayjs, { timeFormat }: ConverDateOptions = {}) {\r\n return dayjs(date).format(`YYYY-MM-DD${timeFormat ? ` ${timeFormat}` : ''}`)\r\n}\r\n\r\n\r\nexport function prefixSum(state: TransactionState) {\r\n if (state === Debit.confirmed) return '+';\r\n return '–';\r\n}\r\n\r\nexport function withCurrency(sum: number, currency: string) {\r\n return new Intl.NumberFormat('ru', { style: 'currency', currency }).format(sum)\r\n}\r\n\r\nexport function getMonthlyPayment(amount: number, months: number) {\r\n return Math.floor(amount / months * 100) / 100;\r\n}\r\n\r\nexport function currency(currency: string) {\r\n //@ts-ignore\r\n const type = new Intl.NumberFormat('ru', { style: 'currency', currency }).formatToParts().find((item) => item.type === \"currency\");\r\n return type ? type.value : currency\r\n}\r\n\r\nexport function lcFirst(str: string) {\r\n if (!str || str.length === 0) return str\r\n return str[0].toLowerCase() + str.slice(1)\r\n}\r\n\r\n\r\nexport function validationErrors(e: ErrorResponse): Record | undefined {\r\n if(!e) return undefined;\r\n\r\n if (e.response && e.response.data && e.response.data.violations) {\r\n const result: Record = {}\r\n e.response.data.violations.forEach((violation: any)=>{\r\n result[violation.propertyPath] = violation.message\r\n })\r\n return result\r\n }\r\n\r\n\r\n if (!e.graphQLErrors) return undefined;\r\n if (!e.graphQLErrors.length) return undefined;\r\n if (!e.graphQLErrors[0].extensions) return undefined;\r\n\r\n const extensions: TResponseExtensons = e.graphQLErrors[0].extensions as any;\r\n\r\n if(!extensions.violations) return undefined;\r\n const result: Record = {}\r\n extensions.violations.forEach(violation=>{\r\n result[violation.path] = violation.message\r\n })\r\n return result\r\n}\r\n\r\n\r\nexport function parseError(e: AxiosError | ApolloError | string): string | undefined {\r\n if(!e) return undefined;\r\n if(typeof e === 'string' ) return e;\r\n //@ts-ignore\r\n if(e.isAxiosError){\r\n const axiosError = e as AxiosError\r\n if (!axiosError.response) return e.message;\r\n if (!axiosError.response.data) return e.message;\r\n if (!!axiosError.response.data.message) return axiosError.response.data.message;\r\n if (!!axiosError.response.data.errors && axiosError.response.data.errors.length ) return axiosError.response.data.errors[0].message;\r\n if (!axiosError.response.data[\"hydra:description\"]) return e.message;\r\n return axiosError.response.data[\"hydra:description\"]\r\n }\r\n\r\n const apolloError = e as ApolloError;\r\n\r\n if (apolloError.graphQLErrors) {\r\n //@ts-ignore\r\n return `${apolloError.graphQLErrors[0].message}. ${apolloError.graphQLErrors[0].debugMessage || \"\"}`\r\n }\r\n\r\n if (apolloError.networkError) {\r\n return `${apolloError.networkError.message}. ${apolloError.networkError.name || \"\"}`\r\n }\r\n\r\n return e.message\r\n \r\n}\r\n\r\nexport const formatWithSign = (temperature: number) => {\r\n return (temperature < 0 ? \"\" : \"+\") + temperature;\r\n}\r\n\r\nexport const roundNumber = (number: number, precision: number = 2) => {\r\n const precisionPow = Math.pow(10, precision);\r\n\r\n return Math.floor(number * precisionPow) / precisionPow;\r\n}\r\n\r\nexport const composeQueries = (\r\n queries: Record,\r\n queryGenerator: (variables: V) => string\r\n): string[] =>\r\n Object.entries(queries).map(([name, variables]) => {\r\n return `${name}: ${queryGenerator(variables)}`;\r\n });","import NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TAddressAssign } from '../actions/addresses';\r\nimport { TNoteAssign } from '../actions/cart';\r\nimport { TPeriod } from '../actions/intervals';\r\nimport { Types, TOrderActions, OrderModal, TCancelOrderReasons } from '../actions/order';\r\nimport { TPayment, TPaymentAssign } from '../actions/payment';\r\n\r\nexport enum CheckoutFields {\r\n address = 'AddressField',\r\n interval = 'IntervalField',\r\n payment = 'PaymentField',\r\n note = 'NoteField',\r\n}\r\n\r\nexport declare type OrderState = {\r\n intervals: TPeriod[];\r\n payments: TPayment[];\r\n selectedPayment: TPayment | null;\r\n paymentUrl: string | null;\r\n isReadyFields: {\r\n [CheckoutFields.address]: boolean;\r\n [CheckoutFields.interval]: boolean;\r\n [CheckoutFields.payment]: boolean;\r\n };\r\n defaultFields: {\r\n [CheckoutFields.address]: TAddressAssign | null;\r\n [CheckoutFields.note]: TNoteAssign | null;\r\n [CheckoutFields.payment]: TPaymentAssign | null;\r\n };\r\n networkItems: Record;\r\n promocodeStatus: TPromocodeStatus;\r\n promocodeError: string | null;\r\n orderModal: OrderModal | null;\r\n cancelOrderReasons: TCancelOrderReasons[];\r\n orderErrorMessage: string | null;\r\n};\r\n\r\nexport enum PromocodeStatus {\r\n Valid = 'valid',\r\n Invalid = 'invalid',\r\n}\r\n\r\nexport type TPromocodeStatus = PromocodeStatus | null;\r\n\r\nexport type OrderNetworkItems = 'intervals' | 'payments' | 'promocode';\r\n\r\nconst initState: OrderState = {\r\n intervals: [],\r\n payments: [],\r\n selectedPayment: null,\r\n paymentUrl: null,\r\n isReadyFields: {\r\n AddressField: false,\r\n IntervalField: false,\r\n PaymentField: false,\r\n },\r\n defaultFields: {\r\n AddressField: null,\r\n PaymentField: null,\r\n NoteField: null,\r\n },\r\n networkItems: {\r\n intervals: NetworkStatus.pending,\r\n payments: NetworkStatus.pending,\r\n promocode: NetworkStatus.pending,\r\n },\r\n orderModal: null,\r\n promocodeStatus: null,\r\n promocodeError: null,\r\n cancelOrderReasons: [],\r\n orderErrorMessage: null,\r\n};\r\n\r\nconst Order = (state = initState, action: TOrderActions): OrderState => {\r\n // @ts-ignore\r\n window.isReadyFields = state.isReadyFields;\r\n let newState;\r\n switch (action.type) {\r\n case Types.SET_INTERVALS:\r\n newState = { ...state, intervals: action.payload };\r\n break;\r\n case Types.SET_PAYMENTS:\r\n newState = { ...state, payments: action.payload };\r\n break;\r\n case Types.SET_SELECTED_PAYMENT:\r\n newState = { ...state, selectedPayment: action.payload };\r\n break;\r\n case Types.SET_PAYMENT_URL:\r\n newState = { ...state, paymentUrl: action.payload };\r\n break;\r\n case Types.SET_NETWORK_STATUS:\r\n newState = { ...state, networkItems: action.payload };\r\n break;\r\n case Types.SET_READY_FIELD:\r\n newState = { ...state, isReadyFields: action.payload };\r\n break;\r\n case Types.SET_DEFAULT_FIELD:\r\n newState = { ...state, defaultFields: action.payload };\r\n break;\r\n case Types.SET_PROMOCODE_STATUS:\r\n newState = { ...state, promocodeStatus: action.payload };\r\n break;\r\n case Types.SET_PROMOCODE_ERROR:\r\n newState = { ...state, promocodeError: action.payload };\r\n break;\r\n case Types.SET_ORDER_MODAL:\r\n newState = { ...state, orderModal: action.payload };\r\n break;\r\n case Types.SET_CANCEL_ORDER_REASONS:\r\n newState = { ...state, cancelOrderReasons: action.payload };\r\n break;\r\n case Types.SET_ORDER_ERROR_MESSAGE:\r\n newState = { ...state, orderErrorMessage: action.payload };\r\n }\r\n\r\n return (newState as any) || state;\r\n};\r\n\r\nexport default Order;\r\n","import { message } from 'antd';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\nimport { __DEV__ } from '..';\r\nimport { AppConfig } from '../entities/AppConfigEntity';\r\n\r\nexport const getDomain = () => {\r\n const removeSpaces = (str?: string) => str?.replace(/\\s+/g, '');\r\n\r\n if (__DEV__) {\r\n switch (removeSpaces(process.env.REACT_APP_ENV)) {\r\n case 'demo':\r\n return 'client.appsol.ru';\r\n default:\r\n return 'client.dev.appsol.ru';\r\n }\r\n } else return window.location.hostname;\r\n};\r\n\r\nexport const fetchAppConfig = async () => {\r\n const fetch = () => {\r\n const origin = 'https://functions.yandexcloud.net';\r\n const path = 'd4eat880usspg104l6lj';\r\n\r\n const url = new URL(path + '?', origin).toString();\r\n\r\n const searchParams = new URLSearchParams({\r\n domain: getDomain(),\r\n version: '1.0.0',\r\n }).toString();\r\n\r\n const config: AxiosRequestConfig = { timeout: 30000 };\r\n\r\n return axios.get(url + searchParams, config);\r\n };\r\n\r\n try {\r\n const response = await fetch();\r\n\r\n localStorage.setItem('config', JSON.stringify(response.data));\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n const errorMessage = e.message || 'Failed to fetch cloud config';\r\n message.error(errorMessage);\r\n }\r\n }\r\n};\r\n\r\nexport const getAppConfig: () => AppConfig = () => {\r\n return JSON.parse(localStorage.getItem('config') || 'null');\r\n};\r\n","enum NetworkStatus {\r\n loading,\r\n refetch,\r\n loadMore,\r\n ready,\r\n pending,\r\n}\r\n\r\nexport default NetworkStatus;\r\n","import { Dayjs } from 'dayjs';\r\nimport { FieldRenderProps } from 'react-final-form';\r\n\r\nexport type TFetchResult = {\r\n data: {\r\n [P in keyof T]: T[P];\r\n } &\r\n FetchErrors;\r\n message?: string;\r\n success: boolean;\r\n errorType?: 'requestError' | 'validationError' | 'ValidationError';\r\n errors?: { [fieldName: string]: string[] };\r\n};\r\n\r\ntype FetchErrors = {\r\n errors?: { [x: string]: string[] };\r\n timestamp?: number;\r\n};\r\n\r\nexport type GeocodingAddress = {\r\n address: {\r\n house_number?: string;\r\n road?: string;\r\n city?: string;\r\n country?: string;\r\n hamlet?: string;\r\n town?: string;\r\n village?: string;\r\n municipality?: string;\r\n suburb?: string;\r\n neighborhood?: string;\r\n county?: string;\r\n };\r\n lat: number;\r\n lon: number;\r\n place_id?: number;\r\n};\r\n\r\nexport declare type TCoordinates = {\r\n longitude: number;\r\n latitude: number;\r\n};\r\n\r\nexport type TPredictionRequest = 'geocode' | 'city';\r\n\r\nexport type TTypePrediction =\r\n | 'country'\r\n | 'state'\r\n | 'county'\r\n | 'city'\r\n | 'district'\r\n | 'house'\r\n | 'street'\r\n | 'locality';\r\n\r\nexport type TPrediction = {\r\n place_id: string;\r\n description: string;\r\n country?: string | null;\r\n countrycode?: string | null;\r\n state?: string | null;\r\n county?: string | null;\r\n city?: string | null;\r\n district?: string | null;\r\n housenumber?: string | null;\r\n structured_formatting: {\r\n main_text: string;\r\n secondary_text: string;\r\n };\r\n street?: string | null;\r\n coordinates: TCoordinates;\r\n types: TTypePrediction[];\r\n};\r\n\r\nexport type TPredictionResult = {\r\n predictions: TPrediction[];\r\n status: 'OK' | 'ERROR';\r\n};\r\n\r\nexport type TFieldRenderProps = FieldRenderProps;\r\n\r\nexport type Period = {\r\n from: Dayjs;\r\n to: Dayjs;\r\n};\r\n\r\nexport enum NamedPeriod {\r\n Days = 'days',\r\n Weeks = 'weeks',\r\n Months = 'months',\r\n}\r\n\r\nexport type TokenPayload = {\r\n iat: number;\r\n roles: UserRoles[];\r\n username: string;\r\n exp: number;\r\n temp: boolean;\r\n uuid: string;\r\n first_name: string | null;\r\n middle_name: string | null;\r\n family_name: string | null;\r\n partner_id?: string;\r\n legal_person_id?: string;\r\n};\r\n\r\nexport enum UserRoles {\r\n RoleUser = 'ROLE_USER',\r\n RoleAdmin = 'ROLE_ADMIN',\r\n RoleClient = 'ROLE_CLIENT',\r\n AnonymousAggregatorClient = 'ANONYMOUS_AGGREGATOR_CLIENT',\r\n RoleAggregatorUser = 'ROLE_AGGREGATOR_USER',\r\n RoleOwner = 'ROLE_OWNER',\r\n RoleAnonymousPartnerClient = 'ROLE_ANONYMOUS_PARTNER_CLIENT',\r\n RoleClientApp = 'ROLE_CLIENT_APP',\r\n}\r\n","import JwtDecode from 'jwt-decode';\r\n\r\nimport { TokenPayload, UserRoles } from '../types';\r\n\r\nenum Tokens {\r\n token = 'token',\r\n refresh = 'refreshToken',\r\n}\r\nclass TokenHelper {\r\n private static instance: TokenHelper;\r\n\r\n private token: string | null = null;\r\n\r\n private refreshToken: string | null = null;\r\n\r\n constructor() {\r\n if (typeof TokenHelper.instance === 'object') {\r\n return TokenHelper.instance;\r\n }\r\n\r\n this.restoreTokens();\r\n TokenHelper.instance = this;\r\n return this;\r\n }\r\n\r\n public restoreTokens() {\r\n this.token = localStorage.getItem(Tokens.token);\r\n this.refreshToken = localStorage.getItem(Tokens.refresh);\r\n }\r\n\r\n public isAnon() {\r\n const token = this.getToken();\r\n\r\n return !!token && !this.isAnonToken(this.decodeToken(token).roles);\r\n }\r\n\r\n public isAnonToken(roles: UserRoles[]) {\r\n const anonTypes = [UserRoles.AnonymousAggregatorClient, UserRoles.RoleClientApp];\r\n\r\n return anonTypes.some(type => roles.includes(type));\r\n }\r\n\r\n public decodeToken(token: string): TokenPayload {\r\n return JwtDecode(token);\r\n }\r\n\r\n public hasPartner() {\r\n const token = this.getToken();\r\n if (token) {\r\n return !!this.decodeToken(token).partner_id;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getToken() {\r\n return this.token;\r\n }\r\n\r\n public getRefreshToken() {\r\n return this.refreshToken;\r\n }\r\n\r\n public needRefresh() {\r\n const token = this.getToken();\r\n if (token) {\r\n const exp = this.decodeToken(token).exp;\r\n if (exp - +new Date() > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n setTokens(tokensObj: { token: string; refresh?: string }) {\r\n this.token = tokensObj.token;\r\n if (tokensObj.refresh) {\r\n this.refreshToken = tokensObj.refresh;\r\n }\r\n this.saveTokens(tokensObj);\r\n }\r\n\r\n private saveTokens(tokensObj: { token: string; refresh?: string }) {\r\n localStorage.setItem(Tokens.token, tokensObj.token);\r\n if (tokensObj.refresh) {\r\n localStorage.setItem(Tokens.refresh, tokensObj.refresh);\r\n }\r\n }\r\n\r\n public cleanTokens() {\r\n this.token = null;\r\n this.refreshToken = null;\r\n localStorage.removeItem(Tokens.token);\r\n localStorage.removeItem(Tokens.refresh);\r\n }\r\n}\r\n\r\nconst tokenHelper = new TokenHelper();\r\n\r\nexport default tokenHelper;\r\n","import banners from './banners';\r\nimport cart from './cart';\r\nimport cartDrawer from './cartDrawer';\r\nimport cartModal from './cartModal';\r\nimport catalog from './catalog';\r\nimport catalogBottomSection from './catalogBottomSection';\r\nimport cookieNotification from './cookieNotification';\r\nimport downloadAppRedirect from './downloadAppRedirect';\r\nimport errors from './errors';\r\nimport layout from './layout';\r\nimport login from './login';\r\nimport notifications from './notifications';\r\nimport ordersHistory from './ordersHistory';\r\nimport pointsModal from './pointsModal';\r\nimport product from './product';\r\nimport profile from './profile';\r\nimport staticPages from './staticPages';\r\n\r\nconst index = {\r\n cookieNotification,\r\n downloadAppRedirect,\r\n cart,\r\n cartDrawer,\r\n cartModal,\r\n catalog,\r\n catalogBottomSection,\r\n errors,\r\n layout,\r\n login,\r\n notifications,\r\n ordersHistory,\r\n pointsModal,\r\n product,\r\n profile,\r\n staticPages,\r\n banners,\r\n};\r\n\r\nexport default index;\r\n","const cookieNotification = {\r\n message: 'This site uses cookies',\r\n description: 'More',\r\n button: 'Ok',\r\n};\r\n\r\nexport default cookieNotification;\r\n","const downloadAppRedirect = {\r\n title: 'Redirecting to app download...',\r\n backBtn: 'Back to catalog',\r\n};\r\n\r\nexport default downloadAppRedirect;\r\n","const cart = {\r\n product: {\r\n title: 'Cart',\r\n relatedTitle: 'With this product usually take',\r\n cartEmpty: 'Cart is empty :(',\r\n backToCatalog: 'Back to shopping',\r\n next: 'Next',\r\n autoProduct: 'Added automatically',\r\n returnedBottles: {\r\n title: 'Returned bottles',\r\n buttons: {\r\n addBottles: 'Add bottles',\r\n skipBottles: 'Continue without bottles',\r\n },\r\n },\r\n deletedProduct: 'Product is deleted',\r\n restoreProductBtn: 'Restore',\r\n },\r\n order: {\r\n title: 'Delivery',\r\n payment: 'Online Payment',\r\n addAddress: {\r\n title: 'Delivery address',\r\n subtitle: 'So that the courier can find you',\r\n btnOpen: 'Add address',\r\n loading: 'Loading addresses',\r\n back: 'Back',\r\n noFoundAdress: 'Did not find the right address',\r\n manuallyLocation:\r\n 'Specify the exact place on the map where you want to deliver the order',\r\n mainLocation: 'Locality: ',\r\n secondaryLocation: 'Street / District: ',\r\n coordinates: 'Coordinates: ',\r\n btnConfirm: 'Confirm',\r\n btnNext: 'Next',\r\n fullAddress: 'Enter full address',\r\n street: 'Street',\r\n house: 'House',\r\n entrance: 'Entrance',\r\n floor: 'Floor',\r\n room: 'Room',\r\n name: 'Name, such as Home or Office',\r\n noRoomNumber: 'No room number',\r\n comment: 'Comment',\r\n errorLocationSearch: 'Sorry, your address was not found',\r\n placeholder: 'Enter the city, street and house',\r\n notFound: 'Nothing found',\r\n },\r\n addressField: {\r\n title: 'Delivery address',\r\n noAddresses: 'No addresses',\r\n addAddress: 'Select address',\r\n changeAddress: 'Change address',\r\n city: '',\r\n street: '',\r\n house: 'hse.',\r\n entrance: 'ent.',\r\n floor: 'fl.',\r\n room: 'rm.',\r\n },\r\n deliveryTime: {\r\n title: 'Delivery time',\r\n loading: 'Loading Intervals',\r\n noTimeForAdress: 'There is no time available for the specified address',\r\n },\r\n bonusField: {\r\n title: 'Bonus points',\r\n useBonuses: 'Use points',\r\n notSufficientBonuses: 'Not enough points to pay for an order',\r\n firstOrder: 'Place an order to start accumulating points.',\r\n payExtra: 'It will be necessary to pay extra {{value}}',\r\n more: 'Read more',\r\n },\r\n phoneNumber: 'Phone number',\r\n enterPhoneNumber: 'Enter phone number',\r\n notValidPhoneNumber: 'Enter a valid phone number',\r\n orderCost: 'Order cost',\r\n orderSum: 'Order total: ',\r\n deliveryCost: 'Delivery: ',\r\n paymentMethod: 'Payment method',\r\n paymentLoading: 'Loading payment methods',\r\n errorPaymentLoading: 'Error getting types of payment',\r\n promocodeTitle: 'Enter the promocode',\r\n apply: 'Apply',\r\n promocode: 'Promocode',\r\n comment: 'Comment to order',\r\n pc: ' pc.',\r\n addressNotSelected: 'Delivery address not specified',\r\n },\r\n footer: {\r\n returnedBottles: 'Bottles for return',\r\n helpMessageOk: 'Ok, I understand',\r\n infoMessage: 'The number of bottles for return cannot be more than bottles with water',\r\n sum: 'Total: ',\r\n bonuses: ' bonuses',\r\n shortBonuses: ' b',\r\n delivery: 'Delivery: ',\r\n сheckout: 'Checkout',\r\n total: 'To pay: ',\r\n },\r\n};\r\n\r\nexport default cart;\r\n","const cartDrawer = {\r\n cart: {\r\n title: 'Cart',\r\n relatedTitle: 'With this product usually take',\r\n empty: 'Cart is empty :(',\r\n backButton: 'Back',\r\n },\r\n auth: {\r\n title: 'Authorization',\r\n description: 'Login or register to place orders, receive bonuses and more',\r\n btnAuth: 'Login / Registration',\r\n btnAnon: 'Order without registration',\r\n },\r\n login: {\r\n title: 'Login / Registration',\r\n },\r\n anon: {\r\n title: 'Enter your number',\r\n description:\r\n 'it is necessary for operator to confirm the order, and for courier to contact you in case of need',\r\n btnSend: 'Send',\r\n orAuth: {\r\n or: 'or',\r\n auth: 'Sign up',\r\n description: 'to see you orders history, earn points and repeat orders in a few clicks',\r\n },\r\n },\r\n back: 'Back',\r\n};\r\n\r\nexport default cartDrawer;\r\n","const cartModal = {\r\n title: {\r\n success: 'Order is processed',\r\n noSuccess: 'Order not placed!',\r\n },\r\n subTitle: {\r\n success: 'Expect delivery at the specified time',\r\n noSuccess: 'Repeat order or choose another payment method',\r\n },\r\n btnClose: 'OK',\r\n};\r\n\r\nexport default cartModal;\r\n","const catalog = {\r\n addressSelector: {\r\n title: 'My addresses',\r\n addAddress: '+ Add address',\r\n },\r\n enterAddressPanel: {\r\n title: 'Enter your address to display actual products and prices',\r\n buttonMap: 'Show map',\r\n buttonNotFoundAddress: \"Can't find address\",\r\n addAddress: '+ Add address',\r\n inputPlaceholder: 'Enter the city, street and house',\r\n },\r\n confirmDeleteAddress: 'Are you sure you want to delete the address?',\r\n confirmClearCart:\r\n 'Are you sure you want to delete selected address? Your current cart will be emptied.',\r\n};\r\n\r\nexport default catalog;\r\n","const catalogBottomSection = {\r\n aboutCompany: {\r\n title: 'About company',\r\n },\r\n deliveryPayment: {\r\n title: 'Delivery & payment',\r\n shippingTime: 'Delivery hours:',\r\n titlePaymentMethods: 'Payment methods:',\r\n paymentMethods: {\r\n softInvoice: 'Soft Invoice',\r\n sberbankRecurring: 'Sberbank recurring',\r\n yandexKassa: 'Yandex Kassa',\r\n yooMoneyRecurring: 'Yoomoney recurring',\r\n offlineAcquiring: 'Bank card',\r\n cash: 'Cash',\r\n googlePay: 'Google Pay',\r\n applePay: 'Apple Pay ',\r\n sberbank: 'Sberbank',\r\n loyalty: 'Pay with points',\r\n contract: 'Under contract',\r\n eximbank: 'Eximbank',\r\n sberbankOnlineByPhone: 'SberPay',\r\n sberbankOnlineByQr: 'SberPay (QR code)',\r\n liqpay: 'Liqpay',\r\n tinkoff: 'Tinkoff',\r\n sberbanksbp: 'Faster Payments System (SBP)',\r\n contractForLegalPerson: 'Payment by invoice for legal entities',\r\n },\r\n },\r\n downloadAppModal: {\r\n title: 'Download app',\r\n text: 'Download the app and place your orders conveniently!',\r\n textMobile: 'Download the app and place orders conveniently',\r\n img: 'Mobile app',\r\n },\r\n};\r\n\r\nexport default catalogBottomSection;\r\n","const errors = {\r\n accessError: 'Access error. Please sign in again',\r\n addReturnedBottle: 'Failed to add returned bottle',\r\n reduceReturnedBottle: 'Failed to reduce returned bottle',\r\n addressExists: 'Error. This address already exists',\r\n assignInterval: 'Failed to assign selected interval',\r\n assignAddress: 'Failed to assign selected address',\r\n assignPromocode: 'Failed to assign promocode',\r\n fetchProductSets: 'Failed to fetch product sets',\r\n reduceProductSet: 'Failed to reduce product set quantity in cart',\r\n addProductSet: 'Failed to add product set to cart',\r\n changeProductQuantity: 'Failed to change product quantity in cart',\r\n changeProductSetQuantity: 'Failed to change product set quantity in cart',\r\n createAddress: 'Failed to create address',\r\n createAnonAddress: 'Failed to create anonymous address',\r\n};\r\n\r\nexport default errors;\r\n","const layout = {\r\n header: {\r\n company: 'Company',\r\n user: 'User',\r\n subtitle: 'Delivery in',\r\n buttonBack: 'Back',\r\n buttonCheckout: 'Checkout',\r\n },\r\n mobileMenu: {\r\n company: 'Company settings',\r\n user: 'My profile',\r\n },\r\n footer: {\r\n contractOffer: 'User agreement',\r\n privacyPolicy: 'Privacy policy',\r\n partnerWebsite: 'App Solution partner website',\r\n },\r\n buttons: {\r\n logout: 'Sign out',\r\n },\r\n};\r\n\r\nexport default layout;\r\n","const login = {\r\n title: 'Login / Registration',\r\n titleBonus: 'Login to make orders and receive bonuses',\r\n content: {\r\n phoneNumber: {\r\n article: 'Login or register to place orders, receive bonuses and more',\r\n termsOfUse: {\r\n text: 'By entering your phone number at the entrance, you accept',\r\n link: 'terms of use',\r\n },\r\n },\r\n smsCode: {\r\n smsText: 'Enter the SMS code received on the specified number',\r\n phoneCallText: 'Enter the last {{codeLength}} digits of the caller number',\r\n emailText: 'Enter the code received on the specified address',\r\n codeDidNotCome: 'Have not received the code?',\r\n resendCode: 'Send it again',\r\n timeLeft: 'after {{value}} sec',\r\n },\r\n email: {\r\n text: 'Enter your email address',\r\n termsOfUse: {\r\n text: 'By entering your email at the entrance, you accept',\r\n link: 'terms of use',\r\n },\r\n },\r\n },\r\n form: {\r\n fields: {\r\n username: {\r\n placeholder: 'example@mail.com',\r\n label: 'E-mail',\r\n validations: {\r\n require: 'this field is required',\r\n email: 'You specified an invalid email address',\r\n },\r\n },\r\n password: {\r\n label: 'Password',\r\n validations: {\r\n require: 'this field is required',\r\n },\r\n },\r\n rememberMe: {\r\n label: 'Remember me',\r\n },\r\n phoneNumber: {\r\n label: 'Phone',\r\n validations: {\r\n phone: 'You specified an invalid phone number',\r\n require: 'This field is required',\r\n },\r\n },\r\n email: {\r\n label: 'email',\r\n },\r\n firstName: {\r\n label: 'First and last name',\r\n },\r\n },\r\n },\r\n links: {\r\n registration: 'Registration',\r\n recoveryPassword: 'I forgot my password :(',\r\n },\r\n profileButton: 'My profile',\r\n loginButton: 'Login / Registration',\r\n logoutButton: 'Logout',\r\n submitButton: {\r\n next: 'Next',\r\n confirm: 'Confirm',\r\n },\r\n error: {\r\n phoneNumber: 'Phone error',\r\n code: 'Invalid confirmation code, try again or request a new one',\r\n },\r\n};\r\n\r\nexport default login;\r\n","const notifications = {\r\n addToDesktop: {\r\n description: 'Add our icon to your desktop: click «Share» and select «Add to Home Screen»',\r\n button: 'OK',\r\n },\r\n};\r\n\r\nexport default notifications;\r\n","const ordersHistory = {\r\n title: 'Order history',\r\n btn: {\r\n more: 'More',\r\n repeat: 'Repeat',\r\n toCatalog: 'To catalog',\r\n pay: 'Pay',\r\n },\r\n error: 'Unfortunately, this order cannot be repeated',\r\n noOrders: 'You have not made any orders yet :(',\r\n cancelOrder: {\r\n title: 'Cancel order',\r\n details: {\r\n orderNumber: 'Order number',\r\n shippingAddress: 'Shipping address',\r\n shippingDate: 'Date and time of delivery',\r\n },\r\n leaveComment: 'Leave your comment',\r\n selectReasonAndNote: 'Select cancel reason or leave a comment',\r\n btn: {\r\n back: 'Back',\r\n cancel: 'Cancel order',\r\n },\r\n },\r\n orderStatus: {\r\n new: 'New',\r\n completed: 'Completed',\r\n approved: 'Approved',\r\n cancelled: 'Cancelled',\r\n inProcess: 'In process',\r\n undelivered: 'Undelivered',\r\n requiresConfirmation: 'On confirmation',\r\n },\r\n};\r\n\r\nexport default ordersHistory;\r\n","const pointsModal = {\r\n title: 'Bonus points',\r\n rulesTitle: 'Terms of use',\r\n historyTitle: 'Accrual history',\r\n login: 'Login or register to earn points',\r\n btnAuth: 'Вход / Регистрация',\r\n marketing: {\r\n title: '1 point = 1 ruble',\r\n subtitle: 'How to get bonuses?',\r\n text:\r\n 'Next to the price of each item is the number of points you will receive when you purchase that item. Bonuses are awarded after the successful delivery of the order (for canceled orders and for orders fully or partially paid with points, bonuses are not awarded). How to spend bonuses? Pay for purchases with points when placing an order through the application.',\r\n },\r\n download: {\r\n start: 'Download the app',\r\n end: 'to use bonuses for payment',\r\n },\r\n btnDownload: 'Download app',\r\n};\r\n\r\nexport default pointsModal;\r\n","const product = {\r\n title: '',\r\n count: 'Quantity',\r\n totalPay: ' Total priсe: ',\r\n addButton: ' Add',\r\n addedButton: 'Added',\r\n price: 'Price: ',\r\n promotion: 'The price can decrease if the number of items is more than 1',\r\n maxCountMessage: 'The maximum quantity of the current product has been reached',\r\n ct: 'pc.',\r\n};\r\n\r\nexport default product;\r\n","const profile = {\r\n title: 'My profile',\r\n myAddress: 'My addresses',\r\n historyOrders: 'Order history',\r\n messages: 'Support Chat',\r\n bonuses: 'Your points',\r\n share: 'Share link',\r\n delivery: 'Shipping and payment',\r\n aboutCompany: 'About company',\r\n downloadApp: 'Download app',\r\n signOut: 'Sign out',\r\n btnLogoutOk: 'Yes, log out',\r\n deleteAccount: 'Delete account',\r\n modalDeleteAccount: {\r\n title: 'Delete account?',\r\n btnDelete: 'Yes',\r\n btnClose: 'No',\r\n },\r\n messageSignOut:\r\n 'When you exit the profile, all products will be removed from the basket. Sign out of profile?',\r\n userPlaceholder: 'User name',\r\n emailPlaceholder: 'email',\r\n copy: 'Link copied',\r\n history: {\r\n repeat: 'Repeat order',\r\n more: 'More',\r\n order: 'Order №',\r\n cancel: 'Cancel order',\r\n amount: 'Amount: ',\r\n deliveryAmount: 'Delivery: ',\r\n quantity: 'Quantity: ',\r\n },\r\n};\r\n\r\nexport default profile;\r\n","const staticPages = {\r\n comingSoon: 'The page is still in development',\r\n};\r\n\r\nexport default staticPages;\r\n","const banners = {\r\n type: {\r\n clickBanner: 'Click banner',\r\n infoBanner: 'Info banner',\r\n storyBanner: 'Story',\r\n productSetBanner: 'Product set',\r\n },\r\n preview: 'Preview',\r\n makeOrder: 'Make order',\r\n};\r\n\r\nexport default banners;\r\n","import banners from './banners';\r\nimport cart from './cart';\r\nimport cartDrawer from './cartDrawer';\r\nimport cartModal from './cartModal';\r\nimport catalog from './catalog';\r\nimport catalogBottomSection from './catalogBottomSection';\r\nimport cookieNotification from './cookieNotification';\r\nimport downloadAppRedirect from './downloadAppRedirect';\r\nimport errors from './errors';\r\nimport layout from './layout';\r\nimport login from './login';\r\nimport notifications from './notifications';\r\nimport ordersHistory from './ordersHistory';\r\nimport pointsModal from './pointsModal';\r\nimport product from './product';\r\nimport profile from './profile';\r\nimport staticPages from './staticPages';\r\n\r\nconst index = {\r\n cookieNotification,\r\n downloadAppRedirect,\r\n cart,\r\n cartDrawer,\r\n cartModal,\r\n catalog,\r\n catalogBottomSection,\r\n errors,\r\n layout,\r\n login,\r\n notifications,\r\n ordersHistory,\r\n pointsModal,\r\n product,\r\n profile,\r\n staticPages,\r\n banners,\r\n};\r\n\r\nexport default index;\r\n","const cookieNotification = {\r\n message: 'На этом сайте используются cookies',\r\n description: 'Подробнее',\r\n button: 'Хорошо',\r\n};\r\n\r\nexport default cookieNotification;\r\n","const downloadAppRedirect = {\r\n title: 'Переход на скачивание приложения...',\r\n backBtn: 'Вернуться в каталог',\r\n};\r\n\r\nexport default downloadAppRedirect;\r\n","const cart = {\r\n product: {\r\n title: 'Корзина',\r\n relatedTitle: 'С этим товаром обычно берут',\r\n cartEmpty: 'В корзине пусто :(',\r\n backToCatalog: 'К покупкам',\r\n next: 'Далее',\r\n autoProduct: 'Добавлено автоматически',\r\n returnedBottles: {\r\n title: 'Возвратная тара',\r\n buttons: {\r\n addBottles: 'Добавить тару',\r\n skipBottles: 'Продолжить без тары',\r\n },\r\n },\r\n deletedProduct: 'Товар удален',\r\n restoreProductBtn: 'Восстановить',\r\n },\r\n order: {\r\n title: 'Доставка',\r\n payment: 'Онлайн-оплата',\r\n addAddress: {\r\n title: 'Укажите адрес доставки',\r\n subtitle: 'Чтобы курьер смог вас найти',\r\n btnOpen: 'Добавить адрес',\r\n loading: 'Загрузка адресов',\r\n back: 'Назад',\r\n noFoundAdress: 'Не нашел нужный адрес',\r\n manuallyLocation: 'Укажите точное место на карте, куда нужно доставить заказ',\r\n mainLocation: 'Населенный пункт: ',\r\n secondaryLocation: 'Улица / район: ',\r\n coordinates: 'Координаты: ',\r\n btnConfirm: 'Подтвердить',\r\n btnNext: 'Далее',\r\n fullAddress: 'Указать полный адрес',\r\n street: 'Улица',\r\n house: 'Дом',\r\n entrance: 'Подъезд',\r\n floor: 'Этаж',\r\n room: 'Кв / Офис',\r\n name: 'Название, например Дом или Офис',\r\n noRoomNumber: 'Без номера квартиры',\r\n comment: 'Комментарий',\r\n errorLocationSearch: 'К сожалению, ваш адрес не найден',\r\n placeholder: 'Введите город, улицу и дом',\r\n notFound: 'Ничего не найдено',\r\n },\r\n addressField: {\r\n title: 'Адрес доставки',\r\n noAddresses: 'Нет адресов',\r\n addAddress: 'Указать адрес',\r\n changeAddress: 'Указать другой адрес',\r\n city: '',\r\n street: '',\r\n house: 'д.',\r\n entrance: 'п.',\r\n floor: 'эт.',\r\n room: 'кв.',\r\n },\r\n deliveryTime: {\r\n title: 'Время доставки',\r\n loading: 'Загрузка интервалов',\r\n noTimeForAdress: 'Нет доступного времени для указанного адреса',\r\n },\r\n bonusField: {\r\n title: 'Бонусные баллы',\r\n useBonuses: 'Использовать баллы',\r\n notSufficientBonuses: 'Недостаточно баллов для оплаты заказа',\r\n firstOrder: 'Сделайте заказ чтобы начать копить баллы.',\r\n payExtra: 'Нужно будет доплатить: {{value}}',\r\n more: 'Подробнее',\r\n },\r\n phoneNumber: 'Номер телефона',\r\n enterPhoneNumber: 'Укажите номер телефона',\r\n notValidPhoneNumber: 'Укажите корректный номер телефона',\r\n orderCost: 'Заказ и стоимость',\r\n orderSum: 'Сумма заказа: ',\r\n deliveryCost: 'Доставка: ',\r\n paymentMethod: 'Способ оплаты',\r\n paymentLoading: 'Загрузка cпособов оплаты',\r\n errorPaymentLoading: 'Ошибка получения типов оплаты',\r\n promocodeTitle: 'Введите промокод',\r\n promocode: 'Промокод',\r\n apply: 'Применить',\r\n comment: 'Комментарий к заказу',\r\n pc: ' шт.',\r\n addressNotSelected: 'Адрес доставки не выбран',\r\n },\r\n footer: {\r\n returnedBottles: 'Бутылей к возврату',\r\n helpMessageOk: 'Ок, понятно',\r\n infoMessage: 'Возвратной тары не может быть больше, чем бутылей с водой',\r\n sum: 'Сумма заказа: ',\r\n bonuses: ' баллов',\r\n shortBonuses: ' б',\r\n delivery: 'Доставка: ',\r\n сheckout: 'Оформить заказ',\r\n total: 'К оплате: ',\r\n },\r\n};\r\n\r\nexport default cart;\r\n","const cartDrawer = {\r\n cart: {\r\n title: 'Корзина',\r\n relatedTitle: 'С этим товаром обычно берут',\r\n empty: 'В корзине пусто :(',\r\n backButton: 'Назад',\r\n },\r\n auth: {\r\n title: 'Авторизация',\r\n description:\r\n 'Войдите или зарегистрируйтесь, чтобы делать заказы, получать бонусы и многое другое',\r\n btnAuth: 'Вход / Регистрация',\r\n btnAnon: 'Заказ без регистрации',\r\n },\r\n login: {\r\n title: 'Вход / Регистрация',\r\n },\r\n anon: {\r\n title: 'Укажите номер',\r\n description:\r\n 'чтобы оператор смог подтвердить заказ, а курьер связаться с вами в случае необходимости',\r\n btnSend: 'Отправить',\r\n orAuth: {\r\n or: 'или',\r\n auth: 'Авторизуйтесь',\r\n description:\r\n 'чтобы видеть историю покупок, копить баллы, и повторять заказы в несколько кликов',\r\n },\r\n },\r\n back: 'Назад',\r\n};\r\n\r\nexport default cartDrawer;\r\n","const cartModal = {\r\n title: {\r\n success: 'Заказ оформлен',\r\n noSuccess: 'Заказ не оформлен!',\r\n },\r\n subTitle: {\r\n success: 'Ожидайте доставку в указанное время',\r\n noSuccess: 'Повторите заказ или укажите другой способ оплаты',\r\n },\r\n btnClose: 'Понятно',\r\n};\r\n\r\nexport default cartModal;\r\n","const catalog = {\r\n addressSelector: {\r\n title: 'Мои адреса',\r\n addAddress: '+ Добавить адрес',\r\n },\r\n enterAddressPanel: {\r\n title: 'Укажите адрес для актуальных товаров и цен',\r\n buttonMap: 'Показать на карте',\r\n buttonNotFoundAddress: 'Не нашёл адрес',\r\n addAddress: '+ Добавить адрес',\r\n inputPlaceholder: 'Введите город, улицу и дом',\r\n },\r\n confirmDeleteAddress: 'Вы действительно хотите удалить адрес?',\r\n confirmClearCart:\r\n 'Вы действительно хотите удалить выбранный адрес? Товары из корзины будут удалены.',\r\n};\r\n\r\nexport default catalog;\r\n","const catalogBottomSection = {\r\n aboutCompany: {\r\n title: 'О компании',\r\n },\r\n deliveryPayment: {\r\n title: 'Доставка и оплата',\r\n shippingTime: 'Режим работы доставки:',\r\n titlePaymentMethods: 'Способы оплаты:',\r\n paymentMethods: {\r\n softInvoice: 'Мягкая накладная',\r\n sberbankRecurring: 'Автоплатеж Сбербанк',\r\n yandexKassa: 'Яндекс Касса',\r\n yooMoneyRecurring: 'Автоплатеж ЮМани',\r\n offlineAcquiring: 'Банковский картой',\r\n cash: 'Наличными',\r\n googlePay: 'Google Pay',\r\n applePay: 'Apple Pay ',\r\n sberbank: 'Сбербанк',\r\n loyalty: 'Оплата баллами',\r\n contract: 'По договору',\r\n eximbank: 'Эксимбанк',\r\n sberbankOnlineByPhone: 'СберPay',\r\n sberbankOnlineByQr: 'СберPay (QR код)',\r\n liqpay: 'Liqpay',\r\n tinkoff: 'Тинькофф',\r\n sberbanksbp: 'Система быстрых платежей (СБП)',\r\n contractForLegalPerson: 'Оплата по счету для юр. лиц',\r\n },\r\n },\r\n downloadAppModal: {\r\n title: 'Скачать приложение',\r\n text: 'Скачай приложение и делай заказы удобно!',\r\n textMobile: 'Скачайте приложение и делайте заказы удобно',\r\n img: 'Мобильное приложение',\r\n },\r\n};\r\n\r\nexport default catalogBottomSection;\r\n","const errors = {\r\n accessError: 'Ошибка доступа. Пожалуйста, выполните вход заново',\r\n addReturnedBottle: 'Ошибка при добавлении возвратной тары',\r\n reduceReturnedBottle: 'Ошибка при удалении возвратной тары',\r\n addressExists: 'Ошибка добавления. Этот адрес уже существует',\r\n assignInterval: 'Не удалось назначить выбранный интервал',\r\n assignAddress: 'Не удалось назначить выбранный адрес',\r\n assignPromocode: 'Не удалось применить промокод',\r\n fetchProductSets: 'Ошибка при получении наборов товаров',\r\n reduceProductSet: 'Ошибка при уменьшении количества наборов товаров в корзине',\r\n addProductSet: 'Ошибка при добавлении набора товаров в корзину',\r\n changeProductQuantity: 'Ошибка при изменении количества товара в корзине',\r\n changeProductSetQuantity: 'Ошибка при изменении количества наборов товаров в корзине',\r\n createAddress: 'Ошибка при создании адреса',\r\n createAnonAddress: 'Ошибка при создании анонимного адреса',\r\n};\r\n\r\nexport default errors;\r\n","const layout = {\r\n header: {\r\n company: 'Компания',\r\n user: 'Пользователь',\r\n subtitle: 'Доставка в городе',\r\n buttonBack: 'Назад',\r\n buttonCheckout: 'Оформить заказ',\r\n },\r\n mobileMenu: {\r\n company: 'Настройки компании',\r\n user: 'Мой профиль',\r\n },\r\n footer: {\r\n contractOffer: 'Договор оферты',\r\n privacyPolicy: 'Политика конфиденциальности',\r\n partnerWebsite: 'Сайт партнера App Solution',\r\n },\r\n buttons: {\r\n logout: 'Выйти',\r\n },\r\n};\r\n\r\nexport default layout;\r\n","const login = {\r\n title: 'Вход / Регистрация',\r\n titleBonus: 'Авторизуйтесь, чтобы делать заказы и получать бонусы',\r\n content: {\r\n phoneNumber: {\r\n article:\r\n 'Войдите или зарегистрируйтесь, чтобы делать заказы, получать бонусы и многое другое',\r\n termsOfUse: {\r\n text: 'Указывая при входе свой номер телефона, вы принимаете',\r\n link: 'пользовательское соглашение',\r\n },\r\n },\r\n smsCode: {\r\n smsText: 'Введите SMS-код, полученный на указанный номер',\r\n phoneCallText: 'Введите последние {{codeLength}} цифры звонившего номера',\r\n emailText: 'Введите код, полученный на указанный адрес',\r\n codeDidNotCome: 'Код не пришел?',\r\n resendCode: 'Отправить повторно',\r\n timeLeft: 'через {{value}} сек',\r\n },\r\n emailCode: {\r\n text: 'Введите код, полученный на указанную почту',\r\n codeDidNotCome: 'Код не пришел? Отправить повторно через {{value}} сек',\r\n },\r\n email: {\r\n text: 'Введите email',\r\n termsOfUse: {\r\n text: 'Указывая при входе свою почту, вы принимаете',\r\n link: 'пользовательское соглашение',\r\n },\r\n },\r\n },\r\n form: {\r\n fields: {\r\n username: {\r\n placeholder: 'example@mail.com',\r\n label: 'E-mail',\r\n validations: {\r\n require: 'Поле обязательно для заполнения',\r\n email: 'Вы указали невалидный E-mail',\r\n },\r\n },\r\n password: {\r\n label: 'Пароль',\r\n validations: {\r\n require: 'Поле обязательно для заполнения',\r\n },\r\n },\r\n rememberMe: {\r\n label: 'Запомнить меня',\r\n },\r\n phoneNumber: {\r\n label: 'Телефон',\r\n validations: {\r\n phone: 'Вы указали невалидный номер телефона',\r\n require: 'Поле обязательно для заполнения',\r\n },\r\n },\r\n email: {\r\n label: 'email',\r\n },\r\n firstName: {\r\n label: 'Имя и фамилия',\r\n },\r\n },\r\n },\r\n links: {\r\n registration: 'Регистрация',\r\n recoveryPassword: 'Я забыл пароль :(',\r\n },\r\n profileButton: 'Кабинет',\r\n loginButton: 'Вход / Регистрация',\r\n logoutButton: 'Выход',\r\n submitButton: {\r\n next: 'Далее',\r\n confirm: 'Подтвердить',\r\n },\r\n error: {\r\n phoneNumber: 'Ошибка номера телефона',\r\n code: 'Неверный код подтверждения, попробуйте снова или запросите новый',\r\n },\r\n};\r\n\r\nexport default login;\r\n","const notifications = {\r\n addToDesktop: {\r\n description:\r\n 'Добавьте нашу иконку на рабочий стол: нажмите «Поделиться» и выберите «На экран «Домой»',\r\n button: 'Понятно',\r\n },\r\n};\r\n\r\nexport default notifications;\r\n","const ordersHistory = {\r\n title: 'История заказов',\r\n btn: {\r\n more: 'Подробнее',\r\n repeat: 'Повторить',\r\n toCatalog: 'В каталог',\r\n pay: 'Оплатить',\r\n },\r\n error: 'К сожалению, данный заказ повторить невозможно',\r\n noOrders: 'Вы еще не сделали ни одного заказа :(',\r\n cancelOrder: {\r\n title: 'Отмена заказа',\r\n details: {\r\n orderNumber: 'Заказ №',\r\n shippingAddress: 'Адрес доставки',\r\n shippingDate: 'Дата и время доставки',\r\n },\r\n leaveComment: 'Оставить свой комментарий',\r\n selectReasonAndNote: 'Выберите причину отмены заказа или оставьте комментарий',\r\n btn: {\r\n back: 'Назад',\r\n cancel: 'Отменить заказ',\r\n },\r\n },\r\n orderStatus: {\r\n new: 'Новый',\r\n completed: 'Завершён',\r\n approved: 'Подтверждён',\r\n cancelled: 'Отменён',\r\n inProcess: 'В обработке',\r\n undelivered: 'Не доставлен',\r\n requiresConfirmation: 'На подтверждении',\r\n },\r\n};\r\n\r\nexport default ordersHistory;\r\n","const pointsModal = {\r\n title: 'Бонусные баллы',\r\n rulesTitle: 'Правила использования',\r\n historyTitle: 'История начислений',\r\n login: 'Войдите или зарегистрируйтесь, чтобы получать баллы',\r\n btnAuth: 'Вход / Регистрация',\r\n marketing: {\r\n title: '1 балл = 1 рубль',\r\n subtitle: 'Как получить бонусы?',\r\n text:\r\n 'Рядом с ценой каждого товара указано количество баллов, которое вы получите при покупке этого товара. Бонусы начисляются после успешной доставки заказа (за отменённые заказы и за заказы, полностью или частично оплаченные баллами, бонусы не начисляются). Как потратить бонусы? Оплачивайте покупки баллами при оформлении заказа через приложение.',\r\n },\r\n download: {\r\n start: 'Скачайте приложение',\r\n end: 'чтобы использовать бонусы для оплаты',\r\n },\r\n btnDownload: 'Скачать приложение',\r\n};\r\n\r\nexport default pointsModal;\r\n","const product = {\r\n title: '',\r\n count: 'Количество',\r\n totalPay: ' Итого к оплате: ',\r\n addButton: ' Добавить',\r\n addedButton: 'Добавлено',\r\n price: 'Цена: ',\r\n promotion: 'Цена может снижаться, если количество товаров будет больше 1',\r\n maxCountMessage: 'Достигнуто максимальное количество текущего товара',\r\n ct: 'шт.',\r\n};\r\n\r\nexport default product;\r\n","const profile = {\r\n title: 'Кабинет',\r\n myAddress: 'Мои адреса',\r\n historyOrders: 'История заказов',\r\n messages: 'Чат с поддержкой',\r\n bonuses: 'Ваши баллы',\r\n share: 'Поделиться ссылкой',\r\n delivery: 'Доставка и оплата',\r\n aboutCompany: 'О компании',\r\n downloadApp: 'Скачать приложение',\r\n signOut: 'Выйти из профиля',\r\n btnLogoutOk: 'Да, выйти',\r\n deleteAccount: 'Удалить аккаунт',\r\n modalDeleteAccount: {\r\n title: 'Удалить аккаунт?',\r\n btnDelete: 'Да',\r\n btnClose: 'Нет',\r\n },\r\n messageSignOut: 'При выходе из профиля все товары удалятся из корзины. Выйти из профиля?',\r\n userPlaceholder: 'Имя пользователя',\r\n emailPlaceholder: 'email',\r\n copy: 'Ссылка скопирована',\r\n history: {\r\n repeat: 'Повторить заказ',\r\n more: 'Подробнее',\r\n order: 'Заказ №',\r\n cancel: 'Отменить заказ',\r\n amount: 'Стоимость: ',\r\n deliveryAmount: 'Доставка: ',\r\n quantity: 'Количество: ',\r\n },\r\n};\r\n\r\nexport default profile;\r\n","const staticPages = {\r\n comingSoon: 'Страница еще в разработке',\r\n};\r\n\r\nexport default staticPages;\r\n","const banners = {\r\n type: {\r\n clickBanner: 'Рекламный баннер',\r\n infoBanner: 'Инфо баннер',\r\n storyBanner: 'История',\r\n productSetBanner: 'Набор продуктов',\r\n },\r\n preview: 'Превью',\r\n makeOrder: 'Оформить заказ',\r\n};\r\n\r\nexport default banners;\r\n","import banners from './banners';\r\nimport cart from './cart';\r\nimport cartDrawer from './cartDrawer';\r\nimport cartModal from './cartModal';\r\nimport catalog from './catalog';\r\nimport catalogBottomSection from './catalogBottomSection';\r\nimport cookieNotification from './cookieNotification';\r\nimport downloadAppRedirect from './downloadAppRedirect';\r\nimport errors from './errors';\r\nimport layout from './layout';\r\nimport login from './login';\r\nimport notifications from './notifications';\r\nimport ordersHistory from './ordersHistory';\r\nimport pointsModal from './pointsModal';\r\nimport product from './product';\r\nimport profile from './profile';\r\nimport staticPages from './staticPages';\r\n\r\nconst index = {\r\n cookieNotification,\r\n downloadAppRedirect,\r\n cart,\r\n cartDrawer,\r\n cartModal,\r\n catalog,\r\n catalogBottomSection,\r\n errors,\r\n layout,\r\n login,\r\n notifications,\r\n ordersHistory,\r\n pointsModal,\r\n product,\r\n profile,\r\n staticPages,\r\n banners,\r\n};\r\n\r\nexport default index;\r\n","const cookieNotification = {\r\n message: 'Bu sitede çerezler kullanılıyor',\r\n description: 'devamı',\r\n button: 'İyi',\r\n};\r\n\r\nexport default cookieNotification;\r\n","const downloadAppRedirect = {\r\n title: 'Uygulamayı indirmeye devam edin...',\r\n backBtn: 'Dizine geri dön',\r\n};\r\n\r\nexport default downloadAppRedirect;\r\n","const cart = {\r\n product: {\r\n title: 'sepet',\r\n relatedTitle: 'bu ürün ile genellikle almak',\r\n cartEmpty: 'Sepette boş :(',\r\n backToCatalog: 'Alışverişe doğru',\r\n next: 'Sonraki',\r\n autoProduct: 'Otomatik olarak eklendi',\r\n returnedBottles: {\r\n title: 'Dönüş kabı',\r\n buttons: {\r\n addBottles: 'Ambalaj ekle',\r\n skipBottles: 'Ambalaj olmadan devam',\r\n },\r\n },\r\n deletedProduct: 'öğe kaldırıldı',\r\n restoreProductBtn: 'Geri Yükle',\r\n },\r\n order: {\r\n title: 'teslim',\r\n payment: 'Çevrimiçi ödeme',\r\n addAddress: {\r\n title: 'Teslimat adresi',\r\n subtitle: 'Böylece kurye sizi bulabilir',\r\n btnOpen: 'Adres Ekle',\r\n loading: 'Adreslerin yüklenmesi',\r\n back: 'geri',\r\n noFoundAdress: 'Doğru adresi bulamadım',\r\n manuallyLocation: 'Siparişi teslim etmek istediğiniz haritadaki tam yeri belirtin',\r\n mainLocation: 'yerellik: ',\r\n secondaryLocation: 'Sokak: ',\r\n coordinates: 'koordinatlar: ',\r\n btnConfirm: 'adresi Sil',\r\n btnNext: 'Sonraki',\r\n fullAddress: 'Tam adresi belirtin',\r\n street: 'Sokak',\r\n house: 'ev',\r\n entrance: 'giriş',\r\n floor: 'kat',\r\n room: 'Daire/Ofis',\r\n name: 'yer adı',\r\n noRoomNumber: 'Daire numarası olmadan',\r\n comment: 'yorum',\r\n errorLocationSearch: 'Maalesef adresiniz bulunamadı',\r\n placeholder: 'Şehri, sokağı ve evi girin',\r\n notFound: 'Hiçbir şey bulunamadı',\r\n },\r\n addressField: {\r\n title: 'teslimat adresi',\r\n noAddresses: 'adres yok',\r\n addAddress: 'adresi seçin',\r\n changeAddress: 'adresi değiştir',\r\n city: 'G.',\r\n street: '',\r\n house: '',\r\n entrance: 'giriş.',\r\n floor: 'kat.',\r\n room: 'daire',\r\n },\r\n deliveryTime: {\r\n title: 'teslim süresi',\r\n loading: 'Aralıkların yüklenmesi',\r\n noTimeForAdress: 'Belirtilen adres için kullanılabilir zaman yok',\r\n addressNotSelected: 'Teslimat adresi seçilmedi',\r\n },\r\n bonusField: {\r\n title: 'Bonus puanları',\r\n useBonuses: 'Puanları kullan',\r\n notSufficientBonuses: 'Sipariş için ödemek için yeterli puan yok',\r\n firstOrder: 'Bonus puan biriktirmeye başlamak için sipariş verin.',\r\n payExtra: 'Ekstra ödemek gerekecek {{value}}',\r\n more: 'Etraflıca',\r\n },\r\n phoneNumber: 'Telefon numarası',\r\n enterPhoneNumber: 'Lütfen telefon numarasını belirtin',\r\n notValidPhoneNumber: 'Lütfen doğru telefon numarasını belirtin',\r\n orderCost: 'Sipariş ve maliyet',\r\n orderSum: 'Sipariş miktarı: ',\r\n deliveryCost: 'Teslim: ',\r\n paymentMethod: 'ödeme yöntemi',\r\n paymentLoading: 'Ödeme yöntemlerini yükleme',\r\n errorPaymentLoading: 'Ödeme türü alma hatası',\r\n promocodeTitle: 'Promosyon kodunu girin',\r\n apply: 'uygulamak',\r\n promocode: 'promosyon kodu',\r\n comment: 'Sipariş üzerine yorum',\r\n pc: ' adet',\r\n },\r\n footer: {\r\n returnedBottles: 'şişe değişimi',\r\n helpMessageOk: 'Tamam, anladım',\r\n infoMessage: 'Geri dönüş kabı bir su şişesinden daha büyük olamaz',\r\n sum: 'toplam: ',\r\n bonuses: ' puan',\r\n shortBonuses: ' b.',\r\n delivery: 'teslimat: ',\r\n сheckout: 'sipariş ver',\r\n total: 'ödenecek: ',\r\n },\r\n};\r\n\r\nexport default cart;\r\n","const cartDrawer = {\r\n cart: {\r\n title: 'sepet',\r\n relatedTitle: 'bu ürün ile genellikle almak',\r\n empty: 'Sepette boş :(',\r\n backButton: 'geri',\r\n },\r\n auth: {\r\n title: 'Yetkilendirme',\r\n description:\r\n 'Rezervasyon yapmak, ikramiye almak ve daha fazlasını yapmak için giriş yapın veya kaydolun',\r\n btnAuth: 'Giriş / Kayıt',\r\n btnAnon: 'Kayıt olmadan sipariş verin',\r\n },\r\n login: {\r\n title: 'Giriş / Kayıt',\r\n },\r\n anon: {\r\n title: 'Lütfen numarayı belirtin',\r\n description:\r\n 'Operatörün siparişi onaylayabilmesi ve gerekirse kuryenin sizinle iletişime geçebilmesi için',\r\n btnSend: 'Gönder',\r\n orAuth: {\r\n or: 'veya',\r\n auth: 'Giriş yap',\r\n description:\r\n 'satın alma geçmişini görmek, puan toplamak ve siparişleri birkaç tıklamayla tekrarlamak için',\r\n },\r\n },\r\n back: 'geri',\r\n};\r\n\r\nexport default cartDrawer;\r\n","const cartModal = {\r\n title: {\r\n success: 'Sipariş verildi',\r\n noSuccess: 'Sipariş verilmedi!',\r\n },\r\n subTitle: {\r\n success: 'Belirtilen zamanda teslimatı bekliyoruz',\r\n noSuccess: 'Siparişi tekrarlayın veya başka bir ödeme yöntemi belirtin',\r\n },\r\n btnClose: 'Anlaşılır',\r\n};\r\n\r\nexport default cartModal;\r\n","const catalog = {\r\n addressSelector: {\r\n title: 'Adreslerim',\r\n addAddress: '+ Adres Ekle',\r\n },\r\n enterAddressPanel: {\r\n title: 'İlgili ürünler ve fiyatlar için adresi belirtin',\r\n buttonMap: 'Haritada göster',\r\n buttonNotFoundAddress: 'Adresi bulamadım',\r\n addAddress: '+ Adres Ekle',\r\n inputPlaceholder: 'Şehri, sokağı ve evi girin',\r\n },\r\n confirmDeleteAddress: 'Adresi gerçekten silmek istiyor musunuz?',\r\n confirmClearCart:\r\n 'Gerçekten seçilen adresi silmek istiyor musunuz? Sepetteki ürünler silinecektir.',\r\n};\r\n\r\nexport default catalog;\r\n","const catalogBottomSection = {\r\n aboutCompany: {\r\n title: 'şirket hakkında',\r\n },\r\n deliveryPayment: {\r\n title: 'Teslimat ve ödeme',\r\n shippingTime: 'Teslimat çalışma şekli:',\r\n titlePaymentMethods: 'Ödeme yöntemleri:',\r\n paymentMethods: {\r\n softInvoice: 'Yumuşak fatura',\r\n sberbankRecurring: \"Sberbank'ın tekrarı\",\r\n yandexKassa: 'Yandex Kassa',\r\n yooMoneyRecurring: 'Yoomoney tekrar ediyor',\r\n offlineAcquiring: 'Banka kartı ile',\r\n cash: 'Mevcutlarla',\r\n googlePay: 'Google Pay',\r\n applePay: 'Apple Pay ',\r\n sberbank: 'Sberbank',\r\n loyalty: 'Puanlarla ödeme',\r\n contract: 'sözleşmeye göre ödeme',\r\n eximbank: 'Eximbank',\r\n sberbankOnlineByPhone: 'SberPay',\r\n sberbankOnlineByQr: 'SberPay (QR code)',\r\n liqpay: 'Liqpay',\r\n tinkoff: 'Tinkoff',\r\n sberbanksbp: 'Faster Payments System (SBP)',\r\n contractForLegalPerson: 'tüzel kişiler için hesapla ödeme',\r\n },\r\n },\r\n downloadAppModal: {\r\n title: 'Uygulamayı indirin',\r\n text: 'Uygulamayı indirin ve siparişleri rahatça yapın!',\r\n textMobile: 'Uygulamayı indirin ve siparişleri rahatça yapın',\r\n img: 'Mobil uygulama',\r\n },\r\n};\r\n\r\nexport default catalogBottomSection;\r\n","const errors = {\r\n accessError: 'uygulamanın kameraya erişmesi gerekiyor',\r\n addReturnedBottle: 'İade ambalajı eklenirken hata oluştu',\r\n reduceReturnedBottle: 'İade edilen ambalaj eklenirken hata oluştu',\r\n addressExists: 'Ekleme hatası. Bu adres zaten var',\r\n assignInterval: 'Seçilen aralık atanamadı',\r\n assignAddress: 'Seçilen adres atanamadı',\r\n assignPromocode: 'Promosyon kodu uygulanamadı',\r\n fetchProductSets: 'Ürün setleri alınırken hata oluştu',\r\n reduceProductSet: 'Sepetteki ürün setlerinin sayısını azaltırken hata oluştu',\r\n addProductSet: 'Sepete bir dizi ürün eklerken hata oluştu',\r\n changeProductQuantity: 'Sepetteki ürün miktarını değiştirirken hata oluştu',\r\n changeProductSetQuantity: 'Sepetteki ürün setlerinin sayısını değiştirirken hata oluştu',\r\n createAddress: 'Adres oluşturulamadı',\r\n createAnonAddress: 'Anonim adres oluşturulamadı',\r\n};\r\n\r\nexport default errors;\r\n","const layout = {\r\n header: {\r\n company: 'Şirket',\r\n user: 'Kullanıcı',\r\n subtitle: 'Şehirde teslimat',\r\n buttonBack: 'geri',\r\n buttonCheckout: 'sipariş ver',\r\n },\r\n mobileMenu: {\r\n company: 'Şirket Ayarları',\r\n user: 'profil',\r\n },\r\n footer: {\r\n contractOffer: 'Teklif sözleşmesi',\r\n privacyPolicy: 'Gizlilik Politikası',\r\n partnerWebsite: 'İş Ortağı Sitesi App Solution',\r\n },\r\n buttons: {\r\n logout: 'Çıkmak',\r\n },\r\n};\r\n\r\nexport default layout;\r\n","const login = {\r\n title: 'Giriş / Kayıt',\r\n titleBonus: 'Sipariş vermek ve ikramiye almak için giriş yapın',\r\n content: {\r\n phoneNumber: {\r\n article:\r\n 'Rezervasyon yapmak, ikramiye almak ve daha fazlasını yapmak için giriş yapın veya kaydolun',\r\n termsOfUse: {\r\n text: 'Telefon numaranızı girerken belirttiğinizde kabul edersiniz',\r\n link: 'kullanıcı sözleşmesi',\r\n },\r\n },\r\n smsCode: {\r\n smsText: 'Belirtilen numaraya alınan SMS kodunu girin',\r\n phoneCallText: 'Arayan numaranın son {{codeLength}} hanesini girin',\r\n emailText: 'Belirtilen adrese alınan kodu girin',\r\n codeDidNotCome: 'Kod gelmedi mi?',\r\n resendCode: 'Tekrar gönder',\r\n timeLeft: '{{value}} saniye sonra',\r\n },\r\n emailCode: {\r\n text: 'E-postayı girin',\r\n codeDidNotCome: 'Kod gelmedi mi? {{value}} saniye sonra tekrar gönder',\r\n },\r\n email: {\r\n text: 'E-postayı girin',\r\n termsOfUse: {\r\n text: 'E-postanızı girerken belirttiğinizde kabul edersiniz',\r\n link: 'kullanıcı sözleşmesi',\r\n },\r\n },\r\n },\r\n form: {\r\n fields: {\r\n username: {\r\n placeholder: 'example@mail.com',\r\n label: 'E-mail',\r\n validations: {\r\n require: 'alan doldurmak için gerekli',\r\n email: 'Sıradan olmayan bir E-posta yazdınız',\r\n },\r\n },\r\n password: {\r\n label: 'şifre',\r\n validations: {\r\n require: 'alan doldurmak için gerekli',\r\n },\r\n },\r\n rememberMe: {\r\n label: 'Beni hatırla',\r\n },\r\n phoneNumber: {\r\n label: 'Telefon',\r\n validations: {\r\n phone: 'Önemli olmayan bir telefon numarası verdiniz mi',\r\n require: 'alan doldurmak için gerekli',\r\n },\r\n },\r\n email: {\r\n label: 'email',\r\n },\r\n firstName: {\r\n label: 'Ad ve soyad',\r\n },\r\n },\r\n },\r\n links: {\r\n registration: 'kayıt',\r\n recoveryPassword: 'Şifreyi unuttum :(',\r\n },\r\n profileButton: 'Kabine',\r\n loginButton: 'Giriş / Kayıt',\r\n logoutButton: 'Çıkmak',\r\n submitButton: {\r\n next: 'sonraki',\r\n confirm: 'Onayla',\r\n },\r\n error: {\r\n phoneNumber: 'telefon numarası hatası',\r\n code: 'Yanlış doğrulama kodu, tekrar deneyin veya yeni bir tane isteyin',\r\n },\r\n};\r\n\r\nexport default login;\r\n","const notifications = {\r\n addToDesktop: {\r\n description: \"Simgemizi masaüstünüze ekleyin: Paylaş'a tıklayın ve Ana Ekrana Git'i seçin\",\r\n button: 'Anlaşılır',\r\n },\r\n};\r\n\r\nexport default notifications;\r\n","const ordersHistory = {\r\n title: 'sipariş geçmişi',\r\n btn: {\r\n more: 'devamı',\r\n repeat: 'Tekrarla',\r\n toCatalog: 'Kataloğa',\r\n pay: 'Öde',\r\n },\r\n error: 'Maalesef bu siparişi tekrarlamak mümkün değildir',\r\n noOrders: 'Henüz tek bir sipariş vermediniz :(',\r\n cancelOrder: {\r\n title: 'siparişi iptal et',\r\n details: {\r\n orderNumber: 'Sipariş No.',\r\n shippingAddress: 'Teslimat adresi',\r\n shippingDate: 'Teslim tarihi ve saati',\r\n },\r\n leaveComment: 'Yorumunuzu bırakın',\r\n selectReasonAndNote: 'Lütfen bir iptal nedeni seçin veya bir yorum bırakınn',\r\n btn: {\r\n back: 'geri',\r\n cancel: 'siparişi iptal et',\r\n },\r\n },\r\n orderStatus: {\r\n new: 'Yeni',\r\n completed: 'Tamamlanıyordu',\r\n approved: 'Doğrulanıyordu',\r\n cancelled: 'Iptal edildi',\r\n inProcess: 'İşlenmede',\r\n undelivered: 'Teslim edilmedi',\r\n requiresConfirmation: 'Onay üzerine',\r\n },\r\n};\r\n\r\nexport default ordersHistory;\r\n","const pointsModal = {\r\n title: 'Bonuslar',\r\n rulesTitle: 'Kullanım kuralları',\r\n historyTitle: 'Tahakkuk tarihi',\r\n login: 'Puan almak için giriş yapın veya kayıt olun',\r\n btnAuth: 'Giriş / Kayıt',\r\n marketing: {\r\n title: '1 puan = 1 lira',\r\n subtitle: 'ikramiye nasıl alınır?',\r\n text:\r\n 'Her bir ürünün fiyatının yanında, bu ürünü satın aldığınızda alacağınız puan sayısı belirtilir. Bonuslar, siparişin başarılı bir şekilde teslim edilmesinden sonra verilir (iptal edilen siparişler ve puanların tamamı veya bir kısmı için ödenen siparişler için ikramiye alınmaz). Bonusları nasıl harcayabilirim? Uygulama aracılığıyla sipariş verirken satın alımlarınızı puanlarla ödeyin.',\r\n },\r\n download: {\r\n start: 'Uygulamayı indirin',\r\n end: 'ödeme yapmak için bonusları kullanmak için',\r\n },\r\n btnDownload: 'Uygulamayı indirin',\r\n};\r\n\r\nexport default pointsModal;\r\n","const product = {\r\n title: '',\r\n count: 'Miktar',\r\n totalPay: ' ödenecek: ',\r\n addButton: ' Eklemek',\r\n addedButton: 'Katma',\r\n price: 'Fiyat: ',\r\n promotion: \"Malların miktarı 1'den büyükse fiyat düşebilir\",\r\n maxCountMessage: 'Mevcut malların maksimum miktarına ulaşıldı',\r\n ct: 'adet',\r\n};\r\n\r\nexport default product;\r\n","const profile = {\r\n title: 'Kabine',\r\n myAddress: 'Adreslerim',\r\n historyOrders: 'sipariş geçmişi',\r\n messages: 'destekle sohbet et',\r\n bonuses: 'Bonuslarınız',\r\n share: 'bağlantıyı paylaş',\r\n delivery: 'Teslimat ve ödeme',\r\n aboutCompany: 'şirket hakkında',\r\n downloadApp: 'Uygulamayı indirin',\r\n signOut: 'Profilden çık',\r\n btnLogoutOk: 'Evet, dışarı çık',\r\n deleteAccount: 'Hesabı sil',\r\n modalDeleteAccount: {\r\n title: 'Hesabı sil?',\r\n btnDelete: 'Evet',\r\n btnClose: 'Hayir',\r\n },\r\n messageSignOut: 'Profilden çıktığınızda tüm ürünler sepetten silinir. Profilden çıkmak mı?',\r\n userPlaceholder: 'Kullanıcı adı',\r\n emailPlaceholder: 'email',\r\n copy: 'Bağlantı kopyalandı',\r\n history: {\r\n repeat: 'Siparişi tekrarla',\r\n more: 'devamı',\r\n order: 'Sipariş No.',\r\n cancel: 'siparişi iptal et',\r\n amount: 'Maliyet: ',\r\n deliveryAmount: 'teslimat: ',\r\n quantity: 'Sayı: ',\r\n },\r\n};\r\n\r\nexport default profile;\r\n","const staticPages = {\r\n comingSoon: 'Sayfa hala geliştirilme aşamasındadır',\r\n};\r\n\r\nexport default staticPages;\r\n","const banners = {\r\n type: {\r\n clickBanner: 'Reklam afişi',\r\n infoBanner: 'Bilgi başlığı',\r\n storyBanner: 'Hikaye',\r\n productSetBanner: 'Yemek seti',\r\n },\r\n preview: 'Ön izleme',\r\n makeOrder: 'Donatmak',\r\n};\r\n\r\nexport default banners;\r\n","import en from './en';\r\nimport ru from './ru';\r\nimport tr from './tr';\r\nimport { createTranslationMap } from '../aqua-delivery-web-client-ui/i18n';\r\n\r\nexport const translateMap: typeof ru = createTranslationMap(ru);\r\n\r\nconst langs = {\r\n ru,\r\n en,\r\n tr,\r\n};\r\n\r\nexport default langs;\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\n\r\nimport { batch } from 'react-redux';\r\n\r\nimport { TFetchResult } from './../../types';\r\nimport { CartActions } from './cart';\r\nimport { OrderActions } from './order';\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\n\r\nimport { translateMap } from '../../translations';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport TokenHelper from '../../utils/token';\r\nimport { CheckoutFields } from '../reducers/order';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_ADDRESS: 'ADDRESSES@SET:ADDRESSES',\r\n SET_SELECTED_ADDRESS: 'ADDRESSES@SET:SELECTED:ADDRESS',\r\n SET_NETWORK_STATUS: 'ADDRESSES@SET:NETWORK:STATUS',\r\n};\r\n\r\nexport type TSetAddresses = {\r\n type: typeof Types.SET_ADDRESS;\r\n payload: TAddress[];\r\n};\r\n\r\nexport type TSetSelectedAddress = {\r\n type: typeof Types.SET_ADDRESS;\r\n payload: any;\r\n};\r\n\r\nexport type TSetNetworkStatus = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TAddressesActions = TSetAddresses;\r\n\r\nexport type TAddress = {\r\n building: string;\r\n city: string;\r\n city_id: number;\r\n comment: string | null;\r\n coordinates: {\r\n latitude: string;\r\n longitude: string;\r\n };\r\n district: string | null;\r\n district_id: number;\r\n entrance: string;\r\n external_id: string | null;\r\n floor: string;\r\n house: string;\r\n housing: string;\r\n id: number | null;\r\n latitude: string;\r\n longitude: string;\r\n loyalty_system: number | boolean;\r\n name: string | null;\r\n note?: string | null;\r\n room: string | null;\r\n street: string;\r\n user_id: number | null;\r\n uuid: string;\r\n valid_for_delivery: boolean;\r\n legal_person_id: string;\r\n};\r\n\r\ntype TAddressResponse = {\r\n data: TAddress[];\r\n};\r\n\r\nexport type TAddressAssign = {\r\n cart: string;\r\n latitude: number;\r\n longitude: number;\r\n addressId?: string | null;\r\n name?: string;\r\n city?: string;\r\n street?: string;\r\n building?: string;\r\n room?: string;\r\n note?: string;\r\n};\r\n\r\nexport type TAddressCreate = {\r\n district?: string | null;\r\n house: string;\r\n name?: string | null;\r\n street: string;\r\n room?: string | null;\r\n housing?: string | null;\r\n building?: string | null;\r\n entrance?: string | null;\r\n floor?: string | null;\r\n comment?: string | null;\r\n latitude: string;\r\n longitude: string;\r\n place_id?: number;\r\n};\r\n\r\nexport type TAddressAdditionalInfo = {\r\n entrance?: string | null;\r\n floor?: string | null;\r\n room?: string | null;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\ntype AddressesActionsType = {\r\n fetchAddresses: () => TAction>;\r\n restoreAddresses: () => TAction>;\r\n clearAddresses: () => TAction>;\r\n createAddress: (address: TAddressCreate) => TAction>;\r\n createAnonymousAddress: (address: TAddressCreate) => TAction>;\r\n selectAddress: (address: TAddress | null) => TAction>;\r\n addAnonymousAddressAfterLogin: () => TAction>;\r\n assignAddress: (address: TAddress) => TAction>;\r\n addAddress: (addresses: TAddress) => TAction>;\r\n deleteAddress: (addressId: number) => TAction>;\r\n deleteAnonymousAddress: (addressUUID: string) => TAction>;\r\n restoreSelectedAddress: () => TAction>;\r\n addAdditionalAddressInfo: (data: TAddressAdditionalInfo, id: number) => TAction>;\r\n setAddresses: (addresses: TAddress[]) => TSetAddresses;\r\n setSelectedAddress: (address: TAddress | null) => TSetSelectedAddress;\r\n setNetworkStatus: (status: NetworkStatus) => TSetNetworkStatus;\r\n};\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const AddressesActions: AddressesActionsType = {\r\n fetchAddresses() {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n const sort = '-created_at';\r\n const searchParams = '?' + new URLSearchParams({ sort }).toString();\r\n\r\n const anonymousAddresses = localStorage.getItem('anonymousAddresses');\r\n if (anonymousAddresses) {\r\n dispatch(this.clearAddresses());\r\n }\r\n\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n await httpClientServices\r\n .getClient()\r\n .get(api.getAddresses + searchParams)\r\n .then(({ data }) => {\r\n batch(() => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n if (data.data.length > 0) {\r\n batch(() => {\r\n dispatch(this.setAddresses(data.data));\r\n dispatch(this.restoreSelectedAddress());\r\n });\r\n }\r\n });\r\n })\r\n .catch(e => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n errorHandler(e, 'Failed to fetch addresses');\r\n });\r\n\r\n if (anonymousAddresses) {\r\n await dispatch(this.addAnonymousAddressAfterLogin());\r\n }\r\n };\r\n },\r\n restoreAddresses() {\r\n return async dispatch => {\r\n const existedAddresses = localStorage.getItem('anonymousAddresses');\r\n\r\n const anonymousAddresses: TAddress[] = existedAddresses\r\n ? JSON.parse(existedAddresses)\r\n : [];\r\n\r\n batch(() => {\r\n dispatch(this.setAddresses(anonymousAddresses));\r\n if (anonymousAddresses.length) {\r\n dispatch(this.selectAddress(anonymousAddresses[0]));\r\n }\r\n });\r\n };\r\n },\r\n clearAddresses() {\r\n return async dispatch => {\r\n batch(() => {\r\n dispatch(this.setSelectedAddress(null));\r\n dispatch(this.setAddresses([]));\r\n });\r\n };\r\n },\r\n deleteAnonymousAddress(addressUUID) {\r\n return async (dispatch, _) => {\r\n const existedAddresses = localStorage.getItem('anonymousAddresses');\r\n const anonymousAddresses: TAddress[] | null = existedAddresses\r\n ? JSON.parse(existedAddresses)\r\n : null;\r\n\r\n const existedSelectedAddress = localStorage.getItem('anonymousSelectedAddresses');\r\n const anonymousSelectedAddresses: TAddress | null = existedSelectedAddress\r\n ? JSON.parse(existedSelectedAddress)\r\n : null;\r\n\r\n const addresses =\r\n anonymousAddresses &&\r\n anonymousAddresses.filter(item => {\r\n return item.uuid !== addressUUID;\r\n });\r\n\r\n let selectedAddress: TAddress | null = null;\r\n\r\n if (addresses && anonymousSelectedAddresses?.uuid === addressUUID) {\r\n selectedAddress = addresses[0];\r\n }\r\n\r\n batch(() => {\r\n if (addresses && addresses.length !== 0) {\r\n if (selectedAddress) {\r\n dispatch(this.selectAddress(selectedAddress));\r\n localStorage.setItem(\r\n 'anonymousSelectedAddresses',\r\n JSON.stringify(selectedAddress),\r\n );\r\n }\r\n dispatch(this.setAddresses(addresses));\r\n localStorage.setItem('anonymousAddresses', JSON.stringify(addresses));\r\n } else {\r\n dispatch(this.setSelectedAddress(null));\r\n dispatch(this.setAddresses([]));\r\n localStorage.removeItem('anonymousAddresses');\r\n localStorage.removeItem('anonymousSelectedAddresses');\r\n }\r\n });\r\n };\r\n },\r\n createAddress(address) {\r\n return async (dispatch, getState, { api, httpClientServices }) => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n await httpClientServices\r\n .getClient()\r\n .post(api.createAddress, address)\r\n .then(({ data }) => {\r\n if (data.success === false) {\r\n const errorMessage = data.message\r\n ? `${t(tMap.createAddress)}. ${data.message}`\r\n : t(tMap.createAddress);\r\n message.warning(errorMessage);\r\n\r\n return;\r\n }\r\n\r\n const { addresses } = getState().addresses;\r\n if (addresses) {\r\n addresses.unshift(data.data);\r\n }\r\n\r\n batch(() => {\r\n if (addresses) {\r\n dispatch(this.setAddresses(addresses));\r\n dispatch(this.selectAddress(addresses[0]));\r\n } else {\r\n dispatch(this.setAddresses([data.data]));\r\n dispatch(this.selectAddress(data.data));\r\n }\r\n });\r\n })\r\n .catch(e => errorHandler(e, t(tMap.createAddress)))\r\n .finally(() => dispatch(this.setNetworkStatus(NetworkStatus.ready)));\r\n };\r\n },\r\n createAnonymousAddress(address) {\r\n return async (dispatch, _, { api, httpClientServices }) => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n await httpClientServices\r\n .getClient()\r\n .post>(api.createAnonymousAddress, address)\r\n .then(({ data }) => {\r\n if (data.success === false) {\r\n const errorMessage = data.message\r\n ? `${t(tMap.createAnonAddress)}. ${data.message}`\r\n : t(tMap.createAnonAddress);\r\n message.warning(errorMessage);\r\n\r\n return;\r\n }\r\n\r\n const newAnonymousAddress = data.data;\r\n const existedAddresses = localStorage.getItem('anonymousAddresses');\r\n\r\n const anonymousAddresses: TAddress[] = existedAddresses\r\n ? JSON.parse(existedAddresses)\r\n : [];\r\n\r\n const isAddressExists = anonymousAddresses.find(item => {\r\n if (\r\n item.city === data.data.city &&\r\n item.district === data.data.district &&\r\n item.street === data.data.street &&\r\n item.house === data.data.house &&\r\n item.room === data.data.room &&\r\n item.entrance === data.data.entrance\r\n ) {\r\n message.warning(t(tMap.addressExists));\r\n\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n if (!isAddressExists) {\r\n anonymousAddresses.unshift(newAnonymousAddress);\r\n localStorage.setItem(\r\n 'anonymousAddresses',\r\n JSON.stringify(anonymousAddresses),\r\n );\r\n localStorage.setItem(\r\n 'anonymousSelectedAddresses',\r\n JSON.stringify(newAnonymousAddress),\r\n );\r\n\r\n batch(() => {\r\n dispatch(this.setAddresses(anonymousAddresses));\r\n dispatch(this.selectAddress(newAnonymousAddress));\r\n });\r\n }\r\n })\r\n .catch(e => errorHandler(e, t(tMap.createAnonAddress)))\r\n .finally(() => dispatch(this.setNetworkStatus(NetworkStatus.ready)));\r\n };\r\n },\r\n selectAddress(address) {\r\n return async (dispatch, getState) => {\r\n const { info } = getState().cart;\r\n const { selectedAddress } = getState().addresses;\r\n if (info?.cart && address) {\r\n dispatch(this.assignAddress(address)).then(() => {\r\n if (address.district_id !== selectedAddress?.district_id) {\r\n dispatch(CartActions.calculate());\r\n }\r\n });\r\n } else {\r\n dispatch(this.setSelectedAddress(address));\r\n }\r\n };\r\n },\r\n addAnonymousAddressAfterLogin() {\r\n return async (dispatch, getState) => {\r\n const existedAddresses = localStorage.getItem('anonymousAddresses');\r\n const anonymousAddresses: TAddress[] | null = existedAddresses\r\n ? JSON.parse(existedAddresses)\r\n : null;\r\n\r\n const existedSelectedAddress = localStorage.getItem('anonymousSelectedAddresses');\r\n const anonymousSelectedAddresses: TAddress | null = existedSelectedAddress\r\n ? JSON.parse(existedSelectedAddress)\r\n : null;\r\n\r\n if (anonymousAddresses) {\r\n localStorage.removeItem('anonymousAddresses');\r\n for (let itemAddress of anonymousAddresses) {\r\n const tempAddress: TAddressCreate = {\r\n house: itemAddress.house,\r\n street: itemAddress.street,\r\n latitude: itemAddress.latitude,\r\n longitude: itemAddress.longitude,\r\n district: itemAddress.district,\r\n name: itemAddress.name,\r\n room: itemAddress.room,\r\n housing: itemAddress.housing,\r\n building: itemAddress.building,\r\n entrance: itemAddress.entrance,\r\n floor: itemAddress.floor,\r\n comment: itemAddress.comment,\r\n };\r\n await dispatch(AddressesActions.createAddress(tempAddress));\r\n }\r\n\r\n const { addresses } = getState().addresses;\r\n\r\n if (addresses && anonymousSelectedAddresses) {\r\n const address = addresses?.find(address => {\r\n return (\r\n address.latitude === anonymousSelectedAddresses.latitude &&\r\n address.longitude === anonymousSelectedAddresses.longitude\r\n );\r\n });\r\n\r\n if (address) {\r\n await dispatch(AddressesActions.selectAddress(address));\r\n localStorage.removeItem('anonymousSelectedAddresses');\r\n }\r\n }\r\n }\r\n };\r\n },\r\n assignAddress(address) {\r\n return async (dispatch, getState, { services, httpClientServices }) => {\r\n const { info } = getState().cart;\r\n const { addresses } = getState().addresses;\r\n const cart = info?.cart;\r\n\r\n if (cart) {\r\n const isAuth = getState().user.data !== null && TokenHelper.isAnon();\r\n const data: TAddressAssign = {\r\n cart,\r\n latitude: +address.coordinates.latitude,\r\n longitude: +address.coordinates.longitude,\r\n };\r\n\r\n if (isAuth) {\r\n data['addressId'] = address.external_id;\r\n } else {\r\n data['name'] =\r\n address.name || `${address.district}, ${address.street}, ${address.house}`;\r\n data['city'] = address.city;\r\n data['street'] = address.street;\r\n data['building'] = address.building || address.house;\r\n data['room'] = address.room || '';\r\n data['note'] = address.note || '';\r\n }\r\n\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.assignAddress, data)\r\n .then(() => {\r\n const selectedAddress = addresses?.find(obj => obj.uuid === address.uuid);\r\n if (selectedAddress) {\r\n batch(() => {\r\n dispatch(OrderActions.setReadyField(CheckoutFields.address, true));\r\n dispatch(\r\n OrderActions.setDefaultField(\r\n CheckoutFields.address,\r\n selectedAddress,\r\n ),\r\n );\r\n dispatch(this.setSelectedAddress(selectedAddress));\r\n });\r\n }\r\n })\r\n .catch(e => {\r\n dispatch(OrderActions.setReadyField(CheckoutFields.address, false));\r\n errorHandler(e, t(tMap.assignAddress));\r\n });\r\n }\r\n\r\n return;\r\n };\r\n },\r\n addAddress(address) {\r\n return async (dispatch, getState) => {\r\n const { addresses } = getState().addresses;\r\n dispatch(this.setAddresses(addresses ? [...addresses, address] : [address]));\r\n };\r\n },\r\n\r\n deleteAddress(addressId) {\r\n return async (dispatch, getState, { api, httpClientServices }) => {\r\n const { addresses } = getState().addresses;\r\n await httpClientServices\r\n .getClient()\r\n .delete>(api.deleteAddress, { data: { id: addressId } })\r\n .then(() => {\r\n if (addresses?.length === 1) {\r\n dispatch(this.setAddresses([]));\r\n } else {\r\n dispatch(this.fetchAddresses());\r\n }\r\n })\r\n .catch(e => errorHandler(e, 'Failed to delete address'));\r\n };\r\n },\r\n restoreSelectedAddress() {\r\n return async (dispatch, getState) => {\r\n const addressUUID = localStorage.getItem('selectedAddressId');\r\n const { addresses } = getState().addresses;\r\n const selectedAddress = addresses?.find(address => address.uuid === addressUUID);\r\n if (selectedAddress) {\r\n dispatch(this.selectAddress(selectedAddress));\r\n } else {\r\n if (addresses) {\r\n dispatch(this.selectAddress(addresses[0]));\r\n }\r\n }\r\n };\r\n },\r\n addAdditionalAddressInfo(data, id) {\r\n return async (dispatch, _, { httpClientServices }) => {\r\n const url = `/v2/user-addresses/${id}/additional-params`;\r\n httpClientServices\r\n .getClient()\r\n .patch(url, data)\r\n .catch(e => errorHandler(e, 'Failed to add additional parameters to address'));\r\n };\r\n },\r\n setSelectedAddress(address) {\r\n if (\r\n address &&\r\n (!localStorage.getItem('selectedAddressId') ||\r\n localStorage.getItem('selectedAddressId') !== address.uuid)\r\n ) {\r\n localStorage.setItem('selectedAddressId', address.uuid);\r\n }\r\n return {\r\n type: Types.SET_SELECTED_ADDRESS,\r\n payload: address,\r\n };\r\n },\r\n setAddresses(addresses) {\r\n return {\r\n type: Types.SET_ADDRESS,\r\n payload: addresses,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\n\r\nimport { CartActions, ContainersToReturn } from './cart';\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\n\r\nimport { translateMap } from '../../translations';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_BOTTLE_QUANTITY: 'ReturnedBottles@SET:QUANTITY',\r\n SET_IS_USER_TRIGGERED_CONTAINER_BLOCK: 'ReturnedBottles@SET:IS:USER:TRIGGERED:CONTAINER:BLOCK',\r\n SET_IS_USER_TRIGGERED_RETURNED_BOTTLES:\r\n 'ReturnedBottles@SET:IS:USER:TRIGGERED:RETURNED:BOTTLES',\r\n SET_HELP_MODAL_CONTENT: 'ReturnedBottles@SET:HELP:MODAL:CONTENT',\r\n};\r\n\r\nexport type TSetQuantityAction = {\r\n type: typeof Types.SET_BOTTLE_QUANTITY;\r\n payload: number;\r\n};\r\n\r\nexport type TSetIsUserTriggeredContainerBlockAction = {\r\n type: typeof Types.SET_IS_USER_TRIGGERED_CONTAINER_BLOCK;\r\n payload: boolean;\r\n};\r\n\r\nexport type TSetIsUserTriggeredReturnedBottlesAction = {\r\n type: typeof Types.SET_IS_USER_TRIGGERED_CONTAINER_BLOCK;\r\n payload: boolean;\r\n};\r\n\r\nexport type TSetHelpModalContentAction = {\r\n type: typeof Types.SET_HELP_MODAL_CONTENT;\r\n payload: string;\r\n};\r\n\r\ntype TReturnedBottle = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n cart: string;\r\n createdAt: string;\r\n id: string;\r\n quantity: number;\r\n};\r\n\r\nexport type TReturnedBottles = TSetQuantityAction;\r\n\r\ntype ReturnedBottlesType = {\r\n addReturnedBottle: (quantity: number) => TAction>;\r\n reduceReturnedBottle: (quantity: number) => TAction>;\r\n setIsUserTriggeredContainerBlock: (\r\n IsUserTriggered: boolean,\r\n ) => TSetIsUserTriggeredContainerBlockAction;\r\n setIsUserTriggeredReturnedBottles: (\r\n IsUserTriggered: boolean,\r\n ) => TSetIsUserTriggeredReturnedBottlesAction;\r\n setQuantity: (quantity: number) => TSetQuantityAction;\r\n clearBottles: () => TAction>;\r\n fetchHelpModalContent: () => TAction>;\r\n setHelpModalContent: (Content: string) => TSetHelpModalContentAction;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const ReturnedBottles: ReturnedBottlesType = {\r\n addReturnedBottle(quantity) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart && quantity) {\r\n const data = {\r\n cart,\r\n quantity,\r\n };\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.addReturnableContainer, data)\r\n .then(({ data }) => {\r\n dispatch(CartActions.calculate(ContainersToReturn.noBottles));\r\n })\r\n .catch(e => {\r\n errorHandler(e, t(tMap.addReturnedBottle));\r\n });\r\n }\r\n };\r\n },\r\n reduceReturnedBottle(quantity) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { info } = getState().cart;\r\n const cart = info?.cart;\r\n if (cart) {\r\n const data = {\r\n cart,\r\n quantity,\r\n };\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.reduceReturnableContainer, data)\r\n .then(({ data }) => {\r\n return dispatch(CartActions.calculate(ContainersToReturn.noBottles));\r\n })\r\n .catch(e => {\r\n errorHandler(e, t(tMap.reduceReturnedBottle));\r\n });\r\n }\r\n };\r\n },\r\n fetchHelpModalContent() {\r\n return async (dispatch, getState) => {\r\n const url = getState().company.info?.about_returned_package_url;\r\n if (url) {\r\n await Axios.get(url)\r\n .then(response => {\r\n dispatch(this.setHelpModalContent(response.data));\r\n })\r\n .catch(e => {\r\n errorHandler(e, 'error');\r\n });\r\n }\r\n };\r\n },\r\n setQuantity(quantity) {\r\n return {\r\n type: Types.SET_BOTTLE_QUANTITY,\r\n payload: quantity,\r\n };\r\n },\r\n clearBottles() {\r\n return async dispatch => {\r\n dispatch(this.setQuantity(0));\r\n };\r\n },\r\n setIsUserTriggeredContainerBlock(IsUserTriggered) {\r\n return {\r\n type: Types.SET_IS_USER_TRIGGERED_CONTAINER_BLOCK,\r\n payload: IsUserTriggered,\r\n };\r\n },\r\n setIsUserTriggeredReturnedBottles(IsUserTriggered) {\r\n return {\r\n type: Types.SET_IS_USER_TRIGGERED_CONTAINER_BLOCK,\r\n payload: IsUserTriggered,\r\n };\r\n },\r\n setHelpModalContent(Content) {\r\n return {\r\n type: Types.SET_HELP_MODAL_CONTENT,\r\n payload: Content,\r\n };\r\n },\r\n};\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { TBanners } from '../../entities/BannersEntity';\r\nimport { TCompany } from '../../entities/CompanyEntity';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_COMPANY_INFO: 'COMPANY@SET:INFO',\r\n SET_COMPANY_LOGO: 'COMPANY@SET:LOGO',\r\n SET_COMPANY_MOCKUP: 'COMPANY@SET:MOCKUP',\r\n SET_COMPANY_BANNERS: 'COMPANY@SET:BANNERS',\r\n SET_NETWORK_STATUS: 'COMPANY@SET:NETWORK:STATUS',\r\n SET_BANNERS_NETWORK_STATUS: 'COMPANY@SET:BANNERS:NETWORK:STATUS',\r\n};\r\n\r\nexport type TSetCompanyInfo = {\r\n type: typeof Types.SET_COMPANY_INFO;\r\n payload: TCompany;\r\n};\r\n\r\nexport type TSetCompanyLogo = {\r\n type: typeof Types.SET_COMPANY_LOGO;\r\n payload: string;\r\n};\r\n\r\nexport type TSetCompanyMockup = {\r\n type: typeof Types.SET_COMPANY_MOCKUP;\r\n payload: string;\r\n};\r\n\r\nexport type TSetCompanyBanners = {\r\n type: typeof Types.SET_COMPANY_BANNERS;\r\n payload: TBanners[];\r\n};\r\n\r\nexport type TSetNetworkStatus = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TSetBannersNetworkStatus = {\r\n type: typeof Types.SET_BANNERS_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TCompanies = TSetCompanyInfo;\r\n\r\ntype TCompaniesType = {\r\n fetchCompanyInfo: () => TAction>;\r\n setCompanyInfo: (data: TCompany) => TSetCompanyInfo;\r\n fetchCompanyLogo: () => TAction>;\r\n setCompanyLogo: (url: string) => TSetCompanyLogo;\r\n fetchCompanyMockup: () => TAction>;\r\n setCompanyMockup: (url: string) => TSetCompanyMockup;\r\n fetchCompanyBanners: () => TAction>;\r\n setCompanyBanners: (data: TBanners[]) => TSetCompanyBanners;\r\n setNetworkStatus: (status: NetworkStatus) => TSetNetworkStatus;\r\n setBannersNetworkStatus: (status: NetworkStatus) => TSetBannersNetworkStatus;\r\n};\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nexport const CompanyActions: TCompaniesType = {\r\n fetchCompanyInfo() {\r\n return async (dispatch, _, { httpClientServices, api }) => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n await httpClientServices\r\n .getClient()\r\n .get(api.about)\r\n .then(({ data }) => {\r\n return batch(() => {\r\n localStorage.setItem('partnerId', data.partnerId);\r\n dispatch(this.setCompanyInfo(data));\r\n });\r\n })\r\n .catch(e => errorHandler(e, 'Failed to fetch company info'))\r\n .finally(() => dispatch(this.setNetworkStatus(NetworkStatus.ready)));\r\n };\r\n },\r\n fetchCompanyLogo() {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n const { info } = getState().company;\r\n const url = `/partner/partners/${info?.partnerId}/logo.json`;\r\n if (info) {\r\n httpClientServices\r\n .getClient('partner')\r\n .get(url)\r\n .then(({ data }) => dispatch(this.setCompanyLogo(data.contentUrl)))\r\n .catch(e => errorHandler(e, 'Failed to fetch company logo'));\r\n }\r\n };\r\n },\r\n fetchCompanyMockup() {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n const { info } = getState().company;\r\n const url = `/landing/partners/${info?.partnerId}/landing/application_mockup.json`;\r\n if (info) {\r\n httpClientServices\r\n .getClient('landing')\r\n .get(url)\r\n .then(({ data }) => dispatch(this.setCompanyMockup(data.contentUrl)))\r\n .catch(e => errorHandler(e, 'Failed to fetch company mockup'));\r\n }\r\n };\r\n },\r\n fetchCompanyBanners() {\r\n return async (dispatch, getState, { httpClientServices }) => {\r\n const { info } = getState().company;\r\n const { selectedAddress } = getState().addresses;\r\n\r\n const coordinates = localStorage.getItem('geolocationCoordinates')?.split(',');\r\n\r\n let params = {};\r\n if (selectedAddress) {\r\n params = {\r\n 'coordinates[longitude]': selectedAddress.coordinates.longitude,\r\n 'coordinates[latitude]': selectedAddress.coordinates.latitude,\r\n };\r\n } else if (coordinates) {\r\n params = {\r\n 'coordinates[latitude]': coordinates[0],\r\n 'coordinates[longitude]': coordinates[1],\r\n };\r\n } else if (info?.defaultCity?.center_latitude && info?.defaultCity?.center_longitude) {\r\n params = {\r\n 'coordinates[longitude]': info.defaultCity.center_longitude,\r\n 'coordinates[latitude]': info.defaultCity.center_latitude,\r\n };\r\n }\r\n\r\n if (info) {\r\n dispatch(this.setBannersNetworkStatus(NetworkStatus.loading));\r\n httpClientServices\r\n .getClient('marketing')\r\n .get('/marketing/banners', { params })\r\n .then(({ data }) => dispatch(this.setCompanyBanners(data['hydra:member'])))\r\n .catch(() => {})\r\n .finally(() => {\r\n dispatch(this.setBannersNetworkStatus(NetworkStatus.ready));\r\n });\r\n }\r\n };\r\n },\r\n setCompanyInfo(data) {\r\n return {\r\n type: Types.SET_COMPANY_INFO,\r\n payload: data,\r\n };\r\n },\r\n setCompanyLogo(url) {\r\n return {\r\n type: Types.SET_COMPANY_LOGO,\r\n payload: url,\r\n };\r\n },\r\n setCompanyMockup(url) {\r\n return {\r\n type: Types.SET_COMPANY_MOCKUP,\r\n payload: url,\r\n };\r\n },\r\n setCompanyBanners(data) {\r\n return {\r\n type: Types.SET_COMPANY_BANNERS,\r\n payload: data,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n setBannersNetworkStatus(status) {\r\n return {\r\n type: Types.SET_BANNERS_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","const padTo2Digits = (num: number) => {\r\n return `${num}`.padStart(2, '0');\r\n};\r\n\r\nexport class DateHelper {\r\n static formatDate(date: Date) {\r\n return [\r\n padTo2Digits(date.getDate()),\r\n padTo2Digits(date.getMonth() + 1),\r\n date.getFullYear(),\r\n ].join('.');\r\n }\r\n}\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { t } from '../../aqua-delivery-web-client-ui/i18n';\r\nimport { TCategory, TProduct } from '../../routes/catalog/hooks/useCatalog';\r\nimport { translateMap } from '../../translations';\r\nimport { getAppConfig } from '../../utils/appConfig';\r\nimport { DateHelper } from '../../utils/DateHelper';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport { getLocale } from '../../utils/httpClient';\r\nimport { TAction } from '../store';\r\n\r\nconst tMap = translateMap.errors;\r\n\r\nexport const Types = {\r\n SET_PRODUCTS: 'CATALOG@SET:PRODUCTS',\r\n SET_PRODUCT_SETS: 'CATALOG:SET:PRODUCT:SETS',\r\n SET_CATEGORIES: 'CATALOG@SET:CATEGORIES',\r\n SET_CATALOG: 'CATALOG@SET:CATALOG',\r\n SET_NETWORK_STATUS: 'CATALOG@SET:NETWORK:STATUS',\r\n SET_ACTIVE_TAB: 'CATALOG@SET:ACTIVE:TAB',\r\n SET_IS_TOUCH_TAB: 'CATALOG@SET:IS:TOUCH:TAB',\r\n};\r\n\r\nexport type TCatalog = {\r\n id: number;\r\n sequence: number;\r\n name: string;\r\n description: string | null;\r\n is_visible: number;\r\n is_promotion: number;\r\n updated_at: string;\r\n created_at: string;\r\n parent_id: string | null;\r\n products: TCatalogProduct[];\r\n};\r\n\r\nexport type TCatalogProduct = {\r\n id: number;\r\n sequence: number;\r\n name: string;\r\n description: string;\r\n price: number;\r\n premium_price: number;\r\n volume: string;\r\n volume_ml: number | null;\r\n count: number;\r\n is_visible: number;\r\n created_at: string;\r\n updated_at: string;\r\n category_id: number;\r\n image: string;\r\n image_thumbnail: string;\r\n images: {\r\n id: number;\r\n image: string;\r\n image_thumbnail: string;\r\n }[];\r\n related_products: {\r\n id: number;\r\n }[];\r\n type: string;\r\n cash_back_percent: string;\r\n cash_back_sum: number;\r\n min_quantity: number;\r\n max_quantity: number | null;\r\n stock: number | null;\r\n product_set_id: number | null;\r\n};\r\n\r\nexport type TProductSet = {\r\n id: number;\r\n description: string;\r\n mainImageThumbUrl: string;\r\n mainImageUrl: string;\r\n maxQuantityInOrder: number | null;\r\n minQuantityInOrder: number | null;\r\n name: string;\r\n price: number;\r\n products: any[];\r\n uuid: string;\r\n};\r\n\r\nexport type TCombinedProduct = (TCatalogProduct | TProductSet) & {\r\n mainImgUrl: string;\r\n mainImgThumbUrl: string;\r\n relatedProducts?: number[];\r\n type?: string;\r\n cashbackSum: number;\r\n minQuantity: number | null;\r\n maxQuantity: number | null;\r\n};\r\n\r\nexport type TProductsAction = {\r\n type: typeof Types.SET_PRODUCTS;\r\n payload: Record }>;\r\n};\r\n\r\nexport type TSetLoadedAction = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\ntype TCategoriesAction = {\r\n type: typeof Types.SET_CATEGORIES;\r\n payload: TCategory[];\r\n};\r\n\r\ntype TSetActiveTabAction = {\r\n type: typeof Types.SET_CATEGORIES;\r\n payload: number;\r\n};\r\n\r\ntype TSetIsTouchTab = {\r\n type: typeof Types.SET_IS_TOUCH_TAB;\r\n payload: boolean;\r\n};\r\n\r\ntype TCatalogAction = {\r\n type: typeof Types.SET_CATALOG;\r\n payload: TCatalog[];\r\n};\r\n\r\ntype TSetProductSetsAction = {\r\n type: typeof Types.SET_PRODUCT_SETS;\r\n payload: TProductSet[];\r\n};\r\n\r\nexport type CatalogActions = TProductsAction | TCategoriesAction | TCatalogAction;\r\n\r\ntype CatalogsActionsType = {\r\n fetchAllProducts: () => TAction>;\r\n fetchProductSets: () => TAction>;\r\n setCategories: (categories: TCategory[]) => TCategoriesAction;\r\n setCatalog: (catalog: TCatalog[]) => TCatalogAction;\r\n getProduct: (catalog: number) => TAction;\r\n getProductSet: (id: number) => TAction;\r\n setProductSets: (sets: TProductSet[]) => TSetProductSetsAction;\r\n setProducts: (\r\n products: Record }>,\r\n ) => TProductsAction;\r\n setNetworkStatus: (status: NetworkStatus) => TSetLoadedAction;\r\n setActiveTab: (value: number) => TSetActiveTabAction;\r\n setIsTouchTab: (value: boolean) => TSetIsTouchTab;\r\n};\r\n\r\ntype Pagination = {\r\n total_count: number;\r\n count_per_page: number;\r\n current_page_number: number;\r\n has_next_page: boolean;\r\n};\r\n\r\nconst catalogCancelToken = Axios.CancelToken.source();\r\n\r\nconst errorHandler = (error: any, defaultErrorMessage: string) => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n if (error.response && error.response.status !== 404) {\r\n const errorMessage = error?.message\r\n ? `${defaultErrorMessage}. ${error?.message}`\r\n : defaultErrorMessage;\r\n message.error(errorMessage);\r\n }\r\n};\r\n\r\nexport const CatalogsActions: CatalogsActionsType = {\r\n getProduct(id) {\r\n return (_, getState) => {\r\n const { catalog } = getState();\r\n\r\n let product: TCatalogProduct | undefined = undefined;\r\n\r\n catalog.catalog.forEach(category => {\r\n category.products.forEach((item: TCatalogProduct) => {\r\n if (item.id === id) {\r\n product = item;\r\n }\r\n });\r\n });\r\n\r\n return product;\r\n };\r\n },\r\n getProductSet(id) {\r\n return (_, getState) => {\r\n const { catalog } = getState();\r\n\r\n return catalog.productSets.find(item => item.id === id);\r\n };\r\n },\r\n fetchProductSets() {\r\n return async (dispatch, getState) => {\r\n const path = '/v1/catalog/product-sets';\r\n const url = `${getAppConfig().url}${path}`;\r\n const { addresses } = getState();\r\n const payment = getState().order.selectedPayment;\r\n const cityId = addresses.selectedAddress?.city_id;\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n\r\n return Axios.get(url, {\r\n params: {\r\n date: DateHelper.formatDate(new Date()),\r\n paymentType: payment?.['@type'] || 1,\r\n cityId: cityId,\r\n },\r\n })\r\n .then(({ data }) => {\r\n batch(() => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n dispatch(this.setProductSets(data));\r\n });\r\n })\r\n .catch(e => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n errorHandler(e, t(tMap.fetchProductSets));\r\n });\r\n };\r\n },\r\n fetchAllProducts() {\r\n return async (dispatch, getState, { api, httpClientServices }) => {\r\n const coordinates = localStorage.getItem('geolocationCoordinates')?.split(',');\r\n const { addresses } = getState();\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n const cityId = addresses.selectedAddress?.city_id;\r\n const location = cityId\r\n ? { cityId }\r\n : coordinates && { latitude: coordinates[0], longitude: coordinates[1] };\r\n return httpClientServices\r\n .getClient()\r\n .get(api.products, {\r\n params: {\r\n date: DateHelper.formatDate(new Date()),\r\n cityId,\r\n lang: getLocale(),\r\n source: 'site',\r\n ...location,\r\n },\r\n cancelToken: catalogCancelToken.token,\r\n })\r\n .then(({ data }) => {\r\n if (data.success) {\r\n batch(() => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n dispatch(this.setCatalog(data.data));\r\n dispatch(this.fetchProductSets());\r\n });\r\n }\r\n })\r\n .catch(e => {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n errorHandler(e, 'Failed to fetch all products');\r\n });\r\n };\r\n },\r\n setProducts(products) {\r\n return {\r\n type: Types.SET_PRODUCTS,\r\n payload: products,\r\n };\r\n },\r\n setCategories(categories) {\r\n return {\r\n type: Types.SET_CATEGORIES,\r\n payload: categories,\r\n };\r\n },\r\n setCatalog(catalog) {\r\n return {\r\n type: Types.SET_CATALOG,\r\n payload: catalog,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n setActiveTab(value) {\r\n return {\r\n type: Types.SET_ACTIVE_TAB,\r\n payload: value,\r\n };\r\n },\r\n setIsTouchTab(value) {\r\n return {\r\n type: Types.SET_IS_TOUCH_TAB,\r\n payload: value,\r\n };\r\n },\r\n setProductSets(sets) {\r\n return {\r\n type: Types.SET_PRODUCT_SETS,\r\n payload: sets,\r\n };\r\n },\r\n};\r\n","export default class URLHelper {\r\n static buildUrl(url: string, params: { [x: string]: string | number }) {\r\n Object.keys(params).forEach(key => {\r\n url = url.replace(new RegExp(`{${key}}`, 'g'), `${params[key]}`);\r\n });\r\n return url;\r\n }\r\n\r\n static isUrl(string: string) {\r\n const template = /(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})/gi;\r\n return template.test(string);\r\n }\r\n\r\n static getParams(url: string) {\r\n const paramString = url.split('?')[1];\r\n if (!paramString) {\r\n return {};\r\n }\r\n\r\n return paramString.split('&').reduce((acc, curr) => {\r\n const [key, value] = curr.split('=');\r\n acc[key] = value;\r\n return acc;\r\n }, {} as Record);\r\n }\r\n}\r\n","import Axios from 'axios';\r\nimport { batch } from 'react-redux';\r\n\r\nimport { CartActions, TCartItem } from './cart';\r\nimport { TProductSet } from './catalog';\r\nimport { OrderActions, TPayHistoryOrder } from './order';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport URLHelper from '../../utils/URLHelper';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n FETCH_HISTORY: 'HISTORY@FETCH:HISTORY',\r\n SET_HISTORIES: 'HISTORY@SET:HISTORIES',\r\n SET_PAGINATION: 'HISTORY@SET:PAGINATION',\r\n SET_NETWORK_STATUS: 'HISTORY@SET:NETWORK:STATUS',\r\n};\r\n\r\nexport type THistoryProduct = {\r\n id: number;\r\n productId: number;\r\n productName: string;\r\n quantity: number;\r\n productPrice: {\r\n amount: string;\r\n currency: string;\r\n };\r\n image: string;\r\n};\r\n\r\nexport type THistoryProductSet = {\r\n productSetId: number;\r\n productSetName: string;\r\n productSetPrice: {\r\n amount: string;\r\n currency: string;\r\n };\r\n products: TProductSet[];\r\n quantity: number;\r\n image: string;\r\n};\r\n\r\nexport type THistory = {\r\n id: number;\r\n uuid: string;\r\n cart: string;\r\n contractNumber: number;\r\n statusEnum: string;\r\n paymentType: string;\r\n products: THistoryProduct[];\r\n productSets: THistoryProductSet[];\r\n total: {\r\n amount: string;\r\n currency: string;\r\n };\r\n deliveryCost: {\r\n amount: string;\r\n currency: string;\r\n };\r\n paidAmount: {\r\n amount: string;\r\n currency: string;\r\n };\r\n coinsAmount: {\r\n amount: string;\r\n currency: string;\r\n };\r\n createdAt: {\r\n date: string;\r\n timezone_type: number;\r\n timezone: string;\r\n };\r\n shippingDate: {\r\n date: string;\r\n timezone_type: number;\r\n timezone: string;\r\n };\r\n shippingDateTo: {\r\n date: string;\r\n timezone_type: number;\r\n timezone: string;\r\n };\r\n completedAt: {\r\n date: string;\r\n timezone_type: number;\r\n timezone: string;\r\n };\r\n shipping: {\r\n address: string;\r\n date: string;\r\n interval: string;\r\n };\r\n paymentStatus: string;\r\n paymentUrl: null;\r\n paymentMethodId: string | null;\r\n coinCashBack: number;\r\n coinAccrued: false;\r\n clientComment: null;\r\n needToPay: boolean;\r\n context: {\r\n routeUrl: string;\r\n items: [\r\n {\r\n quantity: number;\r\n price: number;\r\n text: string;\r\n },\r\n ];\r\n discount: string;\r\n };\r\n};\r\n\r\nexport type TSetHistoryItems = {\r\n type: typeof Types.SET_HISTORIES;\r\n payload: Record | null;\r\n};\r\n\r\nexport type TSetHistoryPagination = {\r\n type: typeof Types.SET_PAGINATION;\r\n payload: TPagination | null;\r\n};\r\n\r\nexport type TSetNetworkStatus = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\nexport type TPagination = {\r\n total_count: number;\r\n count_per_page: number;\r\n current_page_number: number;\r\n has_next_page: boolean;\r\n};\r\n\r\ntype TFetchHistoryResponse = {\r\n success: boolean;\r\n pagination: TPagination;\r\n data: THistory[];\r\n};\r\nexport type THistoriesActions = TSetHistoryItems | TSetHistoryPagination;\r\n\r\ntype TReorderResponse = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n cart: string;\r\n createdAt: string;\r\n id: string;\r\n order: string;\r\n};\r\n\r\ntype TCartProducts = Record;\r\n\r\ntype HistoriesActionsType = {\r\n fetchHistories: (page?: number, count?: number) => TAction>;\r\n clearHistories: () => TAction>;\r\n addOrder: (history: THistory) => TAction>;\r\n payForOrder: (history: THistory) => TAction>;\r\n setHistories: (histories: Record | null) => TSetHistoryItems;\r\n setPagination: (pagination: TPagination) => TSetHistoryPagination;\r\n setNetworkStatus: (status: NetworkStatus) => TSetNetworkStatus;\r\n};\r\n\r\nexport const HistoriesAction: HistoriesActionsType = {\r\n fetchHistories(page, count) {\r\n return async (dispatch, getState, { httpClientServices, api }) => {\r\n if (!page) {\r\n page = 1;\r\n }\r\n const items = getState().history.items;\r\n if (items && items[page]) {\r\n return;\r\n }\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n const url = URLHelper.buildUrl(api.getHistories, {\r\n page,\r\n count: count || 10,\r\n });\r\n httpClientServices\r\n .getClient()\r\n .get(url)\r\n .then(({ data }) => {\r\n if (data.success) {\r\n const histories = getState().history.items || {};\r\n histories[page || 1] = data.data;\r\n batch(() => {\r\n dispatch(this.setHistories(histories));\r\n if (data.pagination.current_page_number === 1) {\r\n dispatch(this.setPagination(data.pagination));\r\n }\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n });\r\n }\r\n });\r\n };\r\n },\r\n clearHistories() {\r\n return async (dispatch, getState) => {\r\n const items = getState().history.items;\r\n if (items) {\r\n batch(() => {\r\n dispatch(this.setHistories(null));\r\n });\r\n }\r\n };\r\n },\r\n addOrder(history) {\r\n return async (dispatch, getState, { httpClientServices, services }) => {\r\n const { catalog, productSets } = getState().catalog;\r\n const products = catalog.map(item => item.products).flat();\r\n\r\n const data = {\r\n externalOrder: `/order/external_orders/${history.uuid}`,\r\n };\r\n const cartProducts: TCartProducts = {};\r\n history.products.forEach(hProduct => {\r\n const product = products.find(product => product.id === hProduct.productId);\r\n if (product) {\r\n cartProducts[product.id] = {\r\n productId: product.id,\r\n quantity: hProduct.quantity,\r\n };\r\n }\r\n });\r\n history.productSets.forEach(hProductSet => {\r\n const productSet = productSets.find(pSet => pSet.id === hProductSet.productSetId);\r\n if (productSet) {\r\n cartProducts[productSet.id] = {\r\n productId: productSet.id,\r\n quantity: hProductSet.quantity,\r\n };\r\n }\r\n });\r\n await httpClientServices\r\n .getClient('cart')\r\n .post(services.cart.reorder, data)\r\n .then(({ data }) => {\r\n batch(() => {\r\n dispatch(CartActions.setInfoCart(data));\r\n dispatch(CartActions.setCartItems(cartProducts));\r\n dispatch(CartActions.calculate());\r\n localStorage.setItem('cartId', data.cart);\r\n });\r\n })\r\n .catch(error => {\r\n if (Axios.isCancel(error)) {\r\n return;\r\n }\r\n throw error;\r\n });\r\n };\r\n },\r\n payForOrder(history) {\r\n return async (dispatch, getState) => {\r\n const user = getState().user.data;\r\n const payments = getState().order.payments;\r\n if (user) {\r\n const payment = payments.find(\r\n payment => payment.description === history.paymentType,\r\n );\r\n if (payment && user.uuid) {\r\n const order: TPayHistoryOrder = {\r\n orderDetails: {\r\n id: history.id,\r\n uuid: history.uuid,\r\n payment: {\r\n orderNumber: history.id,\r\n clientId: user.uuid || '',\r\n },\r\n address: {\r\n name: history.shipping.address,\r\n },\r\n client: {\r\n uuid: user.uuid,\r\n },\r\n total: Number(history.total.amount),\r\n context: history.context,\r\n paymentMethodId: history.paymentMethodId || payment['@id'],\r\n currency: history.paidAmount.currency,\r\n },\r\n };\r\n dispatch(OrderActions.sendOnlinePayment(order));\r\n }\r\n }\r\n };\r\n },\r\n setHistories(histories) {\r\n return {\r\n type: Types.SET_HISTORIES,\r\n payload: histories,\r\n };\r\n },\r\n setPagination(pagination) {\r\n return {\r\n type: Types.SET_PAGINATION,\r\n payload: pagination,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","export default {\r\n months: {\r\n one: 'месяц',\r\n few: 'месяца',\r\n many: 'месяцев',\r\n other: 'месяцев',\r\n },\r\n days: {\r\n one: 'день',\r\n few: 'дня',\r\n many: 'дней',\r\n other: 'дней',\r\n },\r\n hours: {\r\n one: 'час',\r\n few: 'часа',\r\n many: 'часов',\r\n other: 'часов',\r\n },\r\n minutes: {\r\n one: 'минута',\r\n few: 'минуты',\r\n many: 'минут',\r\n other: 'минут',\r\n },\r\n partnersDative: {\r\n one: 'партнеру',\r\n few: 'партнерам',\r\n many: 'партнерам',\r\n other: 'партнерам',\r\n },\r\n};\r\n","export default {\r\n months: {\r\n one: 'month',\r\n other: 'months',\r\n },\r\n days: {\r\n one: 'day',\r\n other: 'days',\r\n },\r\n hours: {\r\n one: 'hour',\r\n other: 'hours',\r\n },\r\n minutes: {\r\n one: 'minute',\r\n other: 'minutes',\r\n },\r\n partnersDative: {\r\n one: 'partner',\r\n other: 'partners',\r\n },\r\n};\r\n","import * as React from 'react';\r\n\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport dayjsEn from 'dayjs/locale/en';\r\nimport dayjsRu from 'dayjs/locale/ru';\r\nimport timezone from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport flatten from 'flat';\r\nimport I18n, { TranslateOptions } from 'i18n-js';\r\nimport { ru as pluralizeRu, PluralCategory } from 'make-plural';\r\n\r\nimport * as plural from './translations/plural';\r\nimport * as ui from './translations/ui';\r\n\r\nconst definedLocale = ['en', 'ru'] as const;\r\ntype DefinedLocale = typeof definedLocale[number];\r\n\r\n// User-defined type guard function\r\nconst isLocaleDefined = (locale: any): locale is DefinedLocale => definedLocale.includes(locale);\r\n\r\nexport type Day =\r\n | 'monday'\r\n | 'tuesday'\r\n | 'wednesday'\r\n | 'thursday'\r\n | 'friday'\r\n | 'saturday'\r\n | 'sunday';\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\n\r\nI18n.fallbacks = true;\r\nI18n.defaultLocale = 'en';\r\n\r\nconst createPluralization = (\r\n pluralizationFunction: (n: number | string, ord?: boolean) => PluralCategory,\r\n) => (count: number) => [pluralizationFunction(count)];\r\n\r\nI18n.pluralization['ru'] = createPluralization(pluralizeRu);\r\n\r\nconst uiTranslations: Record = ui;\r\nconst pluralTranslations: Record = plural;\r\n\r\nconst momentLocatization: Record = {\r\n ru: dayjsRu,\r\n en: dayjsEn,\r\n};\r\n\r\nconst setI18nConfig = ({\r\n translations,\r\n locale,\r\n}: {\r\n translations?: Record;\r\n locale?: string;\r\n}) => {\r\n if (translations) {\r\n Object.keys(translations).forEach(key => {\r\n if (uiTranslations[key]) {\r\n translations[key] = { ...translations[key], ui: uiTranslations[key] };\r\n }\r\n if (pluralTranslations[key]) {\r\n translations[key] = { ...translations[key], plural: pluralTranslations[key] };\r\n }\r\n });\r\n\r\n I18n.translations = translations;\r\n }\r\n\r\n if (locale) {\r\n localStorage.setItem('language', locale);\r\n I18n.locale = locale.replace(/-.+/, '');\r\n dayjs.locale(I18n.locale, momentLocatization[I18n.locale] || {});\r\n }\r\n};\r\n\r\nexport const setAppropriateLocale = (locale: string) => {\r\n const CIS = [\r\n 'az', // Azerbaijan\r\n 'be', // Belarus\r\n 'et', // Estonia\r\n 'hy', // Armenia\r\n 'ka', // Georgia\r\n 'kk', // Kazakhstan\r\n 'ky', // Kyrgyzstan\r\n 'lt', // Lithuania\r\n 'lv', // Latvia\r\n 'tg', // Tajikistan\r\n 'tk', // Turkmenistan\r\n 'uk', // Ukraine\r\n 'uz', // Uzbekistan\r\n ];\r\n\r\n if (isLocaleDefined(locale)) {\r\n return locale;\r\n } else if (CIS.includes(locale)) {\r\n return 'ru';\r\n } else {\r\n return 'en';\r\n }\r\n};\r\n\r\n// @ts-ignore\r\nconst userLocale = setAppropriateLocale((navigator.language || navigator.userLanguage) as string);\r\n\r\nif (process.env.REACT_APP_NAME === 'webclient') {\r\n const locale = localStorage.getItem('language');\r\n if (locale) setI18nConfig({ locale });\r\n} else {\r\n setI18nConfig({ locale: localStorage.getItem('language') || userLocale });\r\n}\r\n\r\nexport function t(name: string, params: TranslateOptions = {}) {\r\n return I18n.t(name, params);\r\n}\r\n\r\nexport function createTranslate(entity: string) {\r\n return function (name: string, params: TranslateOptions = {}) {\r\n return I18n.t(`${entity}.${name}`, params);\r\n };\r\n}\r\n\r\n// Upper case\r\nexport function translateUcFirst(name: string, params: TranslateOptions = {}) {\r\n return ucFirst(I18n.t(name, params));\r\n}\r\n// Lower case\r\nexport function translateLcFirst(name: string, params: TranslateOptions = {}) {\r\n return lcFirst(I18n.t(name, params));\r\n}\r\n\r\nexport function ucFirst(str: string) {\r\n if (!str || str.length === 0) return str;\r\n return str[0].toUpperCase() + str.slice(1);\r\n}\r\n\r\nexport function lcFirst(str: string) {\r\n if (!str || str.length === 0) return str;\r\n return str[0].toLowerCase() + str.slice(1);\r\n}\r\n\r\nexport function replace(text: string, replacement: { [x: string]: string | number }) {\r\n Object.keys(replacement).forEach(key => {\r\n text = text.replace(new RegExp(`{${key}}`, 'gm'), String(replacement[key]));\r\n });\r\n return text;\r\n}\r\n\r\nexport default I18n;\r\n\r\nexport const I18nSetConfig = setI18nConfig;\r\n\r\nexport function convertLocale(locale: string) {\r\n return locale.replace(/-.*/, '');\r\n}\r\n\r\nexport function createTranslationMap(translation: object) {\r\n const result = flatten(translation);\r\n\r\n Object.keys(result).forEach(key => {\r\n result[key] = key;\r\n });\r\n\r\n return flatten.unflatten(result, { object: true });\r\n}\r\n\r\nexport const I18nContext = React.createContext({\r\n locale: I18n.locale,\r\n setLocale: (locale: string) => setI18nConfig({ locale }),\r\n});\r\n\r\nexport const createDayjsWithTimezone = (\r\n date: Dayjs | Date | string | number,\r\n timezone?: number,\r\n) => {\r\n return timezone !== undefined ? dayjs(date).utcOffset(timezone) : dayjs(date);\r\n};\r\n\r\ntype LocaleConfig = {\r\n formats: Record;\r\n use12Hours: boolean;\r\n};\r\n\r\nconst localeConfig: Record = {\r\n en: {\r\n formats: {\r\n time: 'hh:mm A',\r\n },\r\n use12Hours: true,\r\n },\r\n ru: {\r\n formats: {\r\n time: 'HH:mm',\r\n },\r\n use12Hours: false,\r\n },\r\n};\r\n\r\nexport const getLocaleConfig = (locale: string) => {\r\n return localeConfig[locale];\r\n};\r\n\r\nexport const dayNumber: Record = {\r\n sunday: 0,\r\n monday: 1,\r\n tuesday: 2,\r\n wednesday: 3,\r\n thursday: 4,\r\n friday: 5,\r\n saturday: 6,\r\n};\r\n\r\nexport function getPlural(count: number, translations: string): string {\r\n return t(translations, { count });\r\n}\r\n","import { AxiosRequestConfig } from 'axios';\r\n\r\nconst getHeaderURLValue = (config: AxiosRequestConfig) => {\r\n if (config.url?.match(/^http/)) {\r\n return config?.url;\r\n }\r\n\r\n let baseURL = config?.baseURL;\r\n if (!baseURL?.endsWith('/')) {\r\n baseURL = `${baseURL}/`;\r\n }\r\n\r\n let path = config?.url;\r\n if (path?.startsWith('/')) {\r\n path = path.slice(1);\r\n }\r\n\r\n return `${baseURL}${path}`;\r\n};\r\n\r\nexport { getHeaderURLValue };\r\n","import { Mutex } from 'async-mutex';\r\nimport axios, { AxiosInstance, AxiosRequestConfig, CancelTokenSource } from 'axios';\r\nimport sha1 from 'sha1';\r\n\r\nimport { getAppConfig } from './appConfig';\r\nimport Logger from './Logger';\r\nimport StorageHelper from './StorageHelper';\r\nimport TokenHelper from './token';\r\nimport { getHeaderURLValue } from './validators/getHeaderURLValue';\r\nimport userLocale, { setAppropriateLocale } from '../aqua-delivery-web-client-ui/i18n';\r\nimport { Services } from '../entities/AppConfigEntity';\r\nimport { PartnerActions } from '../redux/actions/partner';\r\nimport store from '../redux/store';\r\n\r\nconst { url, defaultToken, services } = getAppConfig();\r\n\r\nconst mutex = new Mutex();\r\n\r\nconst requests: Record = {};\r\n\r\nconst getToken = () => {\r\n let token = null;\r\n const localToken = TokenHelper.getToken();\r\n\r\n if (defaultToken) {\r\n token = defaultToken;\r\n }\r\n\r\n if (localToken) {\r\n token = localToken;\r\n }\r\n\r\n return token ? `Bearer ${token}` : undefined;\r\n};\r\n\r\nconst cancelToken = (config: AxiosRequestConfig) => {\r\n if (config.cancelToken !== undefined) {\r\n const cancelToken = axios.CancelToken.source();\r\n config.cancelToken = cancelToken.token;\r\n const hash = sha1(config.url as any);\r\n //@ts-ignore\r\n config.hash = hash;\r\n\r\n if (requests[hash]) {\r\n requests[hash].cancelToken.cancel(config.url);\r\n }\r\n requests[hash] = {\r\n cancelToken,\r\n };\r\n }\r\n};\r\n\r\nconst enrichPartner = async () => {\r\n // @ts-ignore\r\n return store.dispatch(PartnerActions.partnerEnrichToken());\r\n};\r\n\r\ntype TRefreshResponse = {\r\n token: string;\r\n refresh_token: string;\r\n};\r\n\r\nexport const refreshToken = () => {\r\n const accessErrorHandler = () => {\r\n StorageHelper.clearLocalStorage();\r\n localStorage.setItem('accessError', 'true');\r\n window.location.reload();\r\n };\r\n\r\n const rToken = TokenHelper.getRefreshToken();\r\n\r\n if (!rToken) {\r\n accessErrorHandler();\r\n }\r\n\r\n const url = `${services.auth.domain}${services.auth.refreshTokenUrl}`;\r\n\r\n return axios\r\n .post(url, {\r\n refresh_token: rToken,\r\n })\r\n .then(({ data }) => {\r\n TokenHelper.setTokens({\r\n token: data.token,\r\n refresh: data.refresh_token,\r\n });\r\n })\r\n .catch(() => accessErrorHandler());\r\n};\r\n\r\nconst source = 'site';\r\n\r\nexport const getLocale = () => {\r\n if (userLocale.locale === localStorage.getItem('language')) {\r\n return userLocale.locale;\r\n }\r\n\r\n return setAppropriateLocale(navigator.language.split('-')[0]);\r\n};\r\n\r\ntype ClientsType = 'default' | keyof Services;\r\n\r\nconst additionalHeadersToService: Partial> = {\r\n cart: {\r\n 'X-Source': source,\r\n },\r\n};\r\n\r\nclass HttpClients {\r\n clients: Map = new Map();\r\n\r\n defaultUrl: string | undefined;\r\n\r\n async responseError(error: any) {\r\n const originRequest = error.config;\r\n\r\n if (axios.isCancel(error)) {\r\n return Promise.reject(error);\r\n }\r\n await mutex.waitForUnlock();\r\n\r\n if (error.response && error.response.status === 401) {\r\n if (!mutex.isLocked()) {\r\n const release = await mutex.acquire();\r\n return refreshToken()\r\n .then(async () => {\r\n return enrichPartner().then(() => {\r\n originRequest.headers.Authorization = getToken();\r\n\r\n return this.getClient().request(originRequest);\r\n });\r\n })\r\n .finally(() => {\r\n release();\r\n });\r\n } else {\r\n await mutex.waitForUnlock();\r\n }\r\n } else if (error.response && error.response.status === 422 && !TokenHelper.hasPartner()) {\r\n return enrichPartner().then(() => {\r\n originRequest.headers.Authorization = getToken();\r\n\r\n return this.getClient().request(originRequest);\r\n });\r\n } else {\r\n Logger.error({\r\n data: {\r\n url: getHeaderURLValue(error?.config),\r\n method: error?.config?.method.toUpperCase(),\r\n status_code: error.response?.status,\r\n dateFinish: new Date(Date.now()).toUTCString(),\r\n xz_config: error.config,\r\n x_data: JSON.stringify(error.response?.data),\r\n message: error?.message,\r\n },\r\n category: 'http-error',\r\n type: 'http',\r\n });\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n getClient(service: ClientsType = 'default'): AxiosInstance {\r\n if (this.clients.has(service)) {\r\n return this.clients.get(service)!;\r\n }\r\n\r\n const baseURL =\r\n service === 'default' ? this.defaultUrl : services[service as keyof Services].domain;\r\n\r\n if (!baseURL) {\r\n throw Error('no service domain and default url');\r\n }\r\n\r\n const additionalHeaders = additionalHeadersToService[service] ?? {};\r\n\r\n const newClient = axios.create({\r\n baseURL: baseURL,\r\n withCredentials: false,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...additionalHeaders,\r\n },\r\n });\r\n\r\n newClient.interceptors.request.use(\r\n config => {\r\n cancelToken(config);\r\n\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: getToken(),\r\n 'Accept-Language': getLocale(),\r\n };\r\n\r\n Logger.info({\r\n data: {\r\n url: getHeaderURLValue(config),\r\n method: config?.method?.toUpperCase() ?? null,\r\n dateStart: new Date(Date.now()).toUTCString(),\r\n x_data: config.data,\r\n x_json_data: JSON.stringify(config.data),\r\n token: config.headers.Authorization,\r\n },\r\n category: 'http-request',\r\n type: 'http',\r\n });\r\n\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n newClient.interceptors.response.use(\r\n config => {\r\n //@ts-ignore\r\n const hash = config.config.hash;\r\n if (requests[hash]) {\r\n delete requests[hash];\r\n }\r\n\r\n Logger.info({\r\n data: {\r\n url: getHeaderURLValue(config.config),\r\n method: config.config.method?.toUpperCase(),\r\n status_code: config.status,\r\n x_response: config.data,\r\n x_data: JSON.stringify(config),\r\n },\r\n category: 'http-response',\r\n type: 'http',\r\n });\r\n\r\n return config;\r\n },\r\n error => this.responseError(error),\r\n );\r\n\r\n this.clients.set(service, newClient);\r\n\r\n return newClient;\r\n }\r\n\r\n setDefaultUrl(url: string) {\r\n this.defaultUrl = url;\r\n }\r\n}\r\n\r\nconst httpClientServices = new HttpClients();\r\nhttpClientServices.setDefaultUrl(url);\r\n\r\nexport { httpClientServices };\r\n","import { message } from 'antd';\r\nimport Axios from 'axios';\r\n\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_BONUS_POINTS_HISTORY: 'BONUS@SET:HISTORY',\r\n SET_ABOUT_LOYALTY_SYSTEM: 'BONUS@SET:ABOUT:LOYALTY:SYSTEM',\r\n SET_IS_USING_BONUS_POINTS: 'BONUS@SET:IS:USING:POINTS',\r\n};\r\n\r\nexport type TBonusPointsHistoryItem = {\r\n id: number;\r\n user_id: number;\r\n order_id: number | null;\r\n reason_id: number;\r\n comment: string;\r\n coin: number;\r\n created_at: string;\r\n updated_at: string;\r\n created_by: any;\r\n};\r\n\r\nexport type TSetBonusPointsHistoryAction = {\r\n type: typeof Types.SET_BONUS_POINTS_HISTORY;\r\n payload: TBonusPointsHistoryItem[];\r\n};\r\n\r\nexport type TSetAboutLoyaltySystem = {\r\n type: typeof Types.SET_ABOUT_LOYALTY_SYSTEM;\r\n payload: string;\r\n};\r\n\r\nexport type TSetIsUsingBonusPoints = {\r\n type: typeof Types.SET_IS_USING_BONUS_POINTS;\r\n};\r\n\r\nexport type BonusPointsAction = TSetBonusPointsHistoryAction;\r\n\r\ntype BonusPointsActionsType = {\r\n assignBonusPointsToCart: () => TAction>;\r\n fetchBonusPointsHistory: () => TAction>;\r\n fetchAboutLoyaltySystem: () => TAction>;\r\n setBonusPointsHistory: (items: TBonusPointsHistoryItem[]) => TSetBonusPointsHistoryAction;\r\n setAboutLoyaltySystem: (text: string) => TSetAboutLoyaltySystem;\r\n setIsUsingBonusPoints: (isUsing: boolean) => TSetIsUsingBonusPoints;\r\n};\r\n\r\nexport const BonusPointsActions: BonusPointsActionsType = {\r\n assignBonusPointsToCart() {\r\n return async (_, getState, { httpClientServices }) => {\r\n const { info } = getState().cart;\r\n if (info?.cart) {\r\n httpClientServices\r\n .getClient('cart')\r\n .post('/order/assign_cart_loyalty_points_events', {\r\n cart: info.cart,\r\n paidByPoints: true,\r\n })\r\n .catch(e => message.error(e.message));\r\n }\r\n };\r\n },\r\n fetchBonusPointsHistory() {\r\n return async (dispatch, _, { httpClientServices }) => {\r\n httpClientServices\r\n .getClient()\r\n .get('/v1/loyalty-system/history')\r\n .then(({ data }) => {\r\n if (data.success) {\r\n dispatch(this.setBonusPointsHistory(data.data));\r\n } else {\r\n throw Error('Unable to fetch history');\r\n }\r\n });\r\n };\r\n },\r\n\r\n fetchAboutLoyaltySystem() {\r\n return async (dispatch, getState) => {\r\n const url = getState().company.info?.about_loyalty_system_url;\r\n if (url) {\r\n Axios.get(url).then(({ data }) => {\r\n dispatch(this.setAboutLoyaltySystem(data));\r\n });\r\n }\r\n };\r\n },\r\n\r\n setBonusPointsHistory(items) {\r\n return {\r\n type: Types.SET_BONUS_POINTS_HISTORY,\r\n payload: items,\r\n };\r\n },\r\n\r\n setAboutLoyaltySystem(text) {\r\n return {\r\n type: Types.SET_ABOUT_LOYALTY_SYSTEM,\r\n payload: text,\r\n };\r\n },\r\n setIsUsingBonusPoints(isUsing) {\r\n return {\r\n type: Types.SET_IS_USING_BONUS_POINTS,\r\n payload: isUsing,\r\n };\r\n },\r\n};\r\n","import { message } from 'antd';\r\nimport Axios, { AxiosRequestConfig } from 'axios';\r\n\r\nimport { batch } from 'react-redux';\r\n\r\nimport {\r\n GeocodingAddress,\r\n TFetchResult,\r\n TPrediction,\r\n TPredictionRequest,\r\n TPredictionResult,\r\n} from '../../types';\r\nimport { getAppConfig } from '../../utils/appConfig';\r\nimport NetworkStatus from '../../utils/enums/NetworkStatus';\r\nimport URLHelper from '../../utils/URLHelper';\r\nimport { TAction } from '../store';\r\n\r\nexport const Types = {\r\n SET_PREDICTIONS: 'PREDICTIONS@SET:PREDICTIONS',\r\n SET_NETWORK_STATUS: 'PREDICTIONS@SET:NETWORK:STATUS',\r\n SET_YA_PREDICTIONS: 'PREDICTIONS@SET:YA:PREDICTIONS',\r\n SET_YA_PREDICTION_GEOCODE: 'PREDICTIONS@SET:YA:ADDRESS:BY:COORDS',\r\n SET_IS_YA_AUTOCOMPLETE_ENABLED: 'PREDICTIONS@SET:IS:YA:AUTOCOMPLETE:ENABLED',\r\n};\r\n\r\nexport type TYaPrediction = {\r\n title: {\r\n text: string;\r\n hl: any;\r\n };\r\n subtitle: {\r\n text: string;\r\n hl: any;\r\n };\r\n};\r\n\r\ntype TSetAddressPredictions = {\r\n type: typeof Types.SET_PREDICTIONS;\r\n payload: TPrediction[];\r\n};\r\n\r\ntype TSetYaPredictions = {\r\n type: typeof Types.SET_YA_PREDICTIONS;\r\n payload: TYaPrediction[];\r\n};\r\n\r\ntype TSetNetworkStatus = {\r\n type: typeof Types.SET_NETWORK_STATUS;\r\n payload: NetworkStatus;\r\n};\r\n\r\ntype TSetYaPredictionGeocode = {\r\n type: typeof Types.SET_YA_PREDICTION_GEOCODE;\r\n payload: GeocodingAddress | null;\r\n};\r\n\r\ntype TSetIsYaAutocompleteEnabled = {\r\n type: typeof Types.SET_IS_YA_AUTOCOMPLETE_ENABLED;\r\n payload: boolean;\r\n};\r\n\r\nexport type AddressPredictionsActionsType = {\r\n getAddressPredictions: (address: string) => TAction>;\r\n getYandexAddressPredictions: (address: string) => TAction>;\r\n getYandexPredictionGeocode: (address: string) => TAction>;\r\n setYandexAddressPredictions: (yaPredictions: TYaPrediction[]) => TSetYaPredictions;\r\n setAddressPredictions: (predictions: TPrediction[]) => TSetAddressPredictions;\r\n setYandexPredictionGeocode: (address: GeocodingAddress | null) => TSetYaPredictionGeocode;\r\n setIsYaAutocompleteEnabled: (value: boolean) => TSetIsYaAutocompleteEnabled;\r\n setNetworkStatus: (status: NetworkStatus) => TSetNetworkStatus;\r\n};\r\n\r\nexport type TAddressPredictionsActions = TSetAddressPredictions;\r\n\r\nexport const AddressPredictionsActions: AddressPredictionsActionsType = {\r\n getAddressPredictions(address) {\r\n return async (dispatch, getState) => {\r\n const fetch = () => {\r\n const { center_latitude: lat, center_longitude: lon } = getState().company.info\r\n ?.defaultCity || {\r\n center_latitude: '',\r\n center_longitude: '',\r\n };\r\n const type: TPredictionRequest = 'geocode';\r\n const { url: origin } = getAppConfig();\r\n const path = 'place/autocomplete/search';\r\n\r\n const url = new URL(path + '?', origin).toString();\r\n\r\n const searchParams = new URLSearchParams({\r\n address,\r\n type,\r\n lat,\r\n lon,\r\n }).toString();\r\n\r\n const config: AxiosRequestConfig = {\r\n timeout: 30000,\r\n cancelToken: Axios.CancelToken.source().token,\r\n };\r\n return Axios.get>(url + searchParams, config);\r\n };\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n\r\n try {\r\n const response = await fetch();\r\n dispatch(this.setAddressPredictions(response.data.data.predictions));\r\n } catch (e) {\r\n if (Axios.isCancel(e)) return;\r\n else if (e instanceof Error) {\r\n message.error(e.message);\r\n }\r\n } finally {\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n }\r\n };\r\n },\r\n getYandexPredictionGeocode(address) {\r\n return async dispatch => {\r\n const apiKey = getAppConfig().yandexMapsToken;\r\n const path = URLHelper.buildUrl(\r\n '/1.x?apikey={apikey}&geocode={geocode}&format={format}',\r\n {\r\n apikey: apiKey || '',\r\n geocode: address,\r\n format: 'json',\r\n },\r\n );\r\n const url = `https://geocode-maps.yandex.ru${path}`;\r\n await Axios.get(url)\r\n .then(({ data }) => {\r\n const coords = data.response.GeoObjectCollection.featureMember[0].GeoObject.Point.pos.split(\r\n ' ',\r\n );\r\n const geo: { kind: string; name: string }[] =\r\n data.response.GeoObjectCollection.featureMember[0].GeoObject\r\n .metaDataProperty.GeocoderMetaData.Address.Components;\r\n const address: GeocodingAddress = {\r\n address: {\r\n house_number: geo.find(item => item.kind === 'house')?.name,\r\n road: geo.find(\r\n item => item.kind === 'street' || item.kind === 'district',\r\n )?.name,\r\n city: geo.find(item => item.kind === 'locality')?.name,\r\n county: geo.find(item => item.kind === 'area')?.name,\r\n },\r\n lon: parseFloat(coords[0]),\r\n lat: parseFloat(coords[1]),\r\n };\r\n dispatch(this.setYandexPredictionGeocode(address));\r\n })\r\n .catch(() => {\r\n dispatch(this.setIsYaAutocompleteEnabled(false));\r\n });\r\n };\r\n },\r\n\r\n getYandexAddressPredictions(address) {\r\n return async dispatch => {\r\n const apiKey = getAppConfig().yandexSuggestToken;\r\n const path = URLHelper.buildUrl('/v1/suggest?apikey={apikey}&text={text}', {\r\n apikey: apiKey || '',\r\n text: address,\r\n });\r\n const url = `https://suggest-maps.yandex.ru${path}`;\r\n dispatch(this.setNetworkStatus(NetworkStatus.loading));\r\n await Axios.get(url)\r\n .then(({ data }) => {\r\n const suggestions = data.results.map((item: any) => ({\r\n title: item.title,\r\n subtitle: item.subtitle,\r\n }));\r\n batch(() => {\r\n dispatch(this.setYandexAddressPredictions(suggestions));\r\n dispatch(this.setNetworkStatus(NetworkStatus.ready));\r\n });\r\n })\r\n .catch(() => {\r\n dispatch(this.setIsYaAutocompleteEnabled(false));\r\n });\r\n };\r\n },\r\n\r\n setAddressPredictions(predictions) {\r\n return {\r\n type: Types.SET_PREDICTIONS,\r\n payload: predictions,\r\n };\r\n },\r\n setYandexAddressPredictions(yaPredictions) {\r\n return {\r\n type: Types.SET_YA_PREDICTIONS,\r\n payload: yaPredictions,\r\n };\r\n },\r\n setYandexPredictionGeocode(address) {\r\n return {\r\n type: Types.SET_YA_PREDICTION_GEOCODE,\r\n payload: address,\r\n };\r\n },\r\n setIsYaAutocompleteEnabled(value) {\r\n return {\r\n type: Types.SET_IS_YA_AUTOCOMPLETE_ENABLED,\r\n payload: value,\r\n };\r\n },\r\n setNetworkStatus(status) {\r\n return {\r\n type: Types.SET_NETWORK_STATUS,\r\n payload: status,\r\n };\r\n },\r\n};\r\n","import { message } from 'antd';\r\n\r\nimport TokenHelper from '../../utils/token';\r\nimport { TAction } from '../store';\r\n\r\ntype TEnrichToken = {\r\n '@context': string;\r\n '@id': string;\r\n '@type': string;\r\n id: number;\r\n partnerId: string | null;\r\n token: string;\r\n};\r\n\r\ntype PartnerTypes = {\r\n partnerEnrichToken: () => TAction>;\r\n};\r\n\r\nexport const PartnerActions: PartnerTypes = {\r\n partnerEnrichToken() {\r\n return async (_, getState, { httpClientServices, services }) => {\r\n const { info } = getState().company;\r\n\r\n const partnerId = info?.partnerId ?? localStorage.getItem('partnerId');\r\n\r\n if (partnerId) {\r\n return httpClientServices\r\n .getClient('partner')\r\n .post(services.partner.enrichToken, { partnerId: partnerId })\r\n .then(({ data }) => {\r\n return TokenHelper.setTokens({ token: data.token });\r\n })\r\n .catch(e => {\r\n if (e.response && e.response.status !== 404) {\r\n message.error(e.message);\r\n }\r\n TokenHelper.cleanTokens();\r\n });\r\n }\r\n };\r\n },\r\n};\r\n","import * as React from \"react\";\r\n\r\nexport type LoaderContextProps = {\r\n setLoaderState: (id: string, state: boolean)=>void\r\n}\r\n\r\nexport const LoaderContext = React.createContext({\r\n setLoaderState: ()=>{}\r\n})","class StorageHelper {\r\n static defaultExceptions = [\r\n 'language',\r\n 'timestampInitialVisit',\r\n 'timestampDownloadAppModalClosed',\r\n ];\r\n\r\n static clearLocalStorage = () => {\r\n Object.keys(localStorage).forEach(key => {\r\n localStorage.removeItem(key);\r\n });\r\n };\r\n\r\n static clearLocalStorageWithExceptions = (exceptions: string[] = []) => {\r\n exceptions = [...exceptions, ...StorageHelper.defaultExceptions];\r\n Object.keys(localStorage).forEach(key => {\r\n if (!exceptions.includes(key)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport default StorageHelper;\r\n","export enum LayoutActionTypes {\r\n LAYOUT_SET_HEADER_HIDDEN = 'LAYOUT@SET:HEADER:HIDDEN',\r\n LAYOUT_SET_FOOTER_HIDDEN = 'LAYOUT@SET:FOOTER:HIDDEN',\r\n LAYOUT_SET_BODY_NO_SCROLL = 'LAYOUT@SET:BODY:NO:SCROLL,',\r\n}\r\n\r\ntype TLayoutType = {\r\n setHeaderHidden: (hidden: boolean) => TFooterActions;\r\n setFooterHidden: (hidden: boolean) => TFooterActions;\r\n setBodyNoScroll: (noScroll: boolean) => TBodyActions;\r\n};\r\n\r\ntype TBodyActions = {\r\n type: LayoutActionTypes;\r\n payload: { noScroll: boolean };\r\n};\r\n\r\ntype TFooterActions = {\r\n type: LayoutActionTypes;\r\n payload: { hidden: boolean };\r\n};\r\n\r\nexport type TLayoutActions = TBodyActions & TFooterActions;\r\n\r\nexport const LayoutActions: TLayoutType = {\r\n setHeaderHidden(hidden) {\r\n return {\r\n type: LayoutActionTypes.LAYOUT_SET_HEADER_HIDDEN,\r\n payload: { hidden },\r\n };\r\n },\r\n\r\n setFooterHidden(hidden) {\r\n return {\r\n type: LayoutActionTypes.LAYOUT_SET_FOOTER_HIDDEN,\r\n payload: { hidden },\r\n };\r\n },\r\n\r\n setBodyNoScroll(noScroll) {\r\n document.body.style.overflowY = noScroll ? 'hidden' : 'auto';\r\n\r\n return {\r\n type: LayoutActionTypes.LAYOUT_SET_BODY_NO_SCROLL,\r\n payload: { noScroll },\r\n };\r\n },\r\n};\r\n","import SentryLogger from './SentryLogger';\r\n\r\nconst Logger = new SentryLogger();\r\n\r\nexport default Logger;\r\n","import * as Sentry from '@sentry/react';\r\n\r\nexport type EventData = Record;\r\nexport type EventOptions = {\r\n category?: string;\r\n type?: string;\r\n message?: string;\r\n data?: EventData;\r\n sendEvents?: boolean;\r\n};\r\n\r\nexport interface Logger {\r\n info(data: EventOptions): void;\r\n warning(data: EventOptions): void;\r\n error(data: EventOptions): void;\r\n captureException(error?: Error): void;\r\n captureMessage(message?: string): void;\r\n}\r\n\r\ntype SentryEventData = EventOptions & Sentry.Breadcrumb;\r\n\r\nexport default class SentryLogger implements Logger {\r\n private createBreadcrumb(data: SentryEventData) {\r\n const { sendEvents, ...breadcrumb } = data;\r\n\r\n this.addBreadcrumb({ ...breadcrumb });\r\n\r\n if (sendEvents) {\r\n return this.captureMessage(breadcrumb.message);\r\n }\r\n }\r\n\r\n private addBreadcrumb(breadcrumbData: Sentry.Breadcrumb) {\r\n Sentry.addBreadcrumb(breadcrumbData);\r\n }\r\n\r\n info(data: EventOptions) {\r\n this.createBreadcrumb({\r\n type: 'info',\r\n category: 'info',\r\n ...data,\r\n level: 'info',\r\n });\r\n }\r\n\r\n warning(data: EventOptions) {\r\n this.createBreadcrumb({\r\n type: 'info',\r\n category: 'warning',\r\n ...data,\r\n level: 'warning',\r\n });\r\n }\r\n\r\n error(data: EventOptions) {\r\n this.createBreadcrumb({\r\n type: 'error',\r\n category: 'error',\r\n ...data,\r\n level: 'error',\r\n });\r\n }\r\n\r\n captureException(error: Error) {\r\n if (error) {\r\n Sentry.captureException(error);\r\n }\r\n }\r\n\r\n captureMessage(message?: string) {\r\n if (message) {\r\n Sentry.captureMessage(message);\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""}