{"version":3,"sources":["aqua-delivery-web-client-ui/components/static-pages/ErrorPage.tsx","aqua-delivery-web-client-ui/hooks/useDocumentLanguage.ts","aqua-delivery-web-client-ui/localization/localizationConfig.ts","App.tsx","serviceWorker.ts","index.tsx","routes/partner-cabinet/routes/vending/hooks/usePeriod.ts","routes/partner-cabinet/routes/vending/utils/graphUtils.ts","routes/partner-cabinet/routes/vending/components/section/Section.tsx","routes/partner-cabinet/routes/vending/components/section/SectionHeader.tsx","aqua-delivery-web-client-ui/components/EmptyPanel.tsx","routes/partner-cabinet/routes/finish-registration/components/stepperHelper/StepNameEnum.ts","routes/partner-cabinet/routes/vending/utils/vendingTelemetryUtils.ts","routes/partner-cabinet/routes/vending/queries/useGetFillingTelemetry.ts","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/FillingsGraph.tsx","routes/partner-cabinet/routes/vending/components/section/SectionBody.tsx","routes/partner-cabinet/routes/vending/components/base-graph/SliceTooltip.tsx","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/FillingsGraphTooltip.tsx","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/layers/BarLayer.tsx","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/layers/PercentLayer.tsx","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/MobileFillingsGraph.tsx","routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/Indicators.tsx","aqua-delivery-web-client-ui/Utils.ts","aqua-delivery-web-client-ui/hooks/useWindowSize.tsx","aqua-delivery-web-client-ui/hooks/useThrottle.ts","aqua-delivery-web-client-ui/customFetch.ts","routes/login/types/index.ts","routes/partner-cabinet/routes/vending/components/base-graph/BaseLineGraph.tsx","routes/partner-cabinet/routes/vending/components/base-graph/GraphLoader.tsx","aqua-delivery-client-graphql/iot/queries/useTelemetry.ts","routes/partner-cabinet/routes/vending/components/base-graph/Graph.tsx","routes/partner-cabinet/routes/vending/hooks/usePeriodGraphPoints.ts","aqua-delivery-web-client-ui/components/ui/inputs/DateRangeInput.tsx","routes/partner-cabinet/routes/vending/components/PeriodSwitcher.tsx","routes/partner-cabinet/routes/vending/components/section/PeriodSectionHeader.tsx","aqua-delivery-client-graphql/Scheme.ts","translations/ru/login.ts","translations/ru/finishRegistration.ts","translations/ru/index.ts","translations/ru/registration.ts","translations/ru/preregistration.ts","translations/ru/layout.ts","translations/ru/dashboard.ts","translations/ru/staticPages.ts","translations/ru/transactions.ts","translations/ru/partnerSettings.ts","translations/ru/recoveryPassword.ts","translations/ru/profile.ts","translations/ru/vending.ts","translations/ru/couriers.ts","translations/ru/materials.ts","translations/ru/banners.ts","translations/ru/smsReport.ts","translations/en/index.ts","translations/en/registration.ts","translations/en/preregistration.ts","translations/en/login.ts","translations/en/layout.ts","translations/en/dashboard.ts","translations/en/staticPages.ts","translations/en/transactions.ts","translations/en/partnerSettings.ts","translations/en/finishRegistration.ts","translations/en/recoveryPassword.ts","translations/en/profile.ts","translations/en/vending.ts","translations/en/couriers.ts","translations/en/materials.ts","translations/en/banners.ts","translations/en/smsReport.ts","translations/index.ts","aqua-delivery-web-client-ui/components/loader/Loader.tsx","aqua-delivery-client-graphql/iot/entities/RegistryEntity.tsx","hooks/useAntdLocale.tsx","aqua-delivery-web-client-ui/components/loader/LoaderContext.tsx","routes/partner-cabinet/routes/vending/components/base-graph/theme.ts","aqua-delivery-client-graphql/iot/queries/useGetRegistry.ts","routes/partner-cabinet/routes/vending/components/base-graph/PointTooltip.tsx","routes/partner-cabinet/routes/vending/components/graphs/TemperatureGraph.tsx","routes/partner-cabinet/routes/vending/components/graphs/VolumeGraph.tsx","routes/partner-cabinet/routes/vending/Registry.tsx","aqua-delivery-web-client-ui/components/ui/DatePicker.ts","aqua-delivery-web-client-ui/components/ui/Radio.tsx","aqua-delivery-web-client-ui/components/icon/AntSvgIcon.tsx","aqua-delivery-web-client-ui/icons.tsx","aqua-delivery-web-client-ui/components/SVG.tsx","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","aqua-delivery-web-client-ui/components/network/NetworkContext.tsx","aqua-delivery-web-client-ui/components/network/withNetworkLayer.tsx","aqua-delivery-web-client-ui/YandexAnalytics.tsx","aqua-delivery-web-client-ui/components/network/NetworkLayer.tsx","config.ts","aqua-delivery-web-client-ui/components/AbsoluteFilledLoader.tsx","aqua-delivery-web-client-ui/components/loader/LoaderContainer.tsx","aqua-delivery-web-client-ui/components/View.tsx","aqua-delivery-web-client-ui/hooks/useTranslation.ts","aqua-delivery-web-client-ui/hooks/useAntdLocale.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-client-graphql/types.ts","aqua-delivery-client-graphql/iot/entities/EventMessageEntity.tsx","aqua-delivery-web-client-ui/components/loader/SuspenseWithLoader.tsx","aqua-delivery-web-client-ui/localization/Localization.ts","hooks/useLocalTranslation.ts","aqua-delivery-web-client-ui/components/page/Title.tsx","aqua-delivery-web-client-ui/assets/svg/arrow2.svg","aqua-delivery-client-graphql/iot/entities/PostalAddressEntity.tsx","aqua-delivery-web-client-ui/components/Help.tsx","aqua-delivery-client-graphql/utils.ts","types.ts","aqua-delivery-client-graphql/iot/entities/TelemetryReportRequestEntity.tsx","aqua-delivery-web-client-ui/CurrencyHelper.ts","aqua-delivery-web-client-ui/AuthService.ts"],"names":["ErrorPage","status","title","subTitle","extra","type","onClick","window","location","replace","useDocumentLanguage","htmlElement","useMemo","document","querySelector","updateDocumentLocale","useCallback","locale","lang","localizationConfig","countries","AZ","currency","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","defaultCurrency","history","createBrowserHistory","LoginAsync","lazy","PartnerAsync","PreRegistrationAsync","RegistrationAsync","ConfirmRegistrationAsync","FinishRegistrationAsync","RecoveryPasswordAsync","TechnicalWorkPageAsync","Page404Async","I18nSetConfig","translations","ymOptions","clickmap","webvisor","ymInitializerOptions","version","App","React","useEffect","useState","I18n","setLocale","antdLocale","useAntdLocale","useUrlSearchParams","isAppUpdating","Boolean","appParams","config","authToken","AuthService","getToken","userVisitParams","UserID","decodeToken","uuid","Provider","value","YandexAnalytics","accounts","metrics","ym","visitParams","LoaderContainer","height","innerHeight","SuspenseWithLoader","fallback","Loader","loading","renderEmpty","EmptyPanel","Localization","path","component","exact","isLoggedIn","redirectComponent","regexp","from","to","find","mapItem","test","redirectRulesWhenUserLoggedIn","pathname","hostname","match","timer","receiveMessage","event","message","data","source","adminTokens","payload","addEventListener","console","log","env","initConfig","ReactDOM","render","getElementById","setInterval","referrerUrl","referrer","href","URL","searchParams","get","checkAdmin","removeEventListener","clearInterval","navigator","serviceWorker","ready","then","registration","unregister","getNamedPeriodDates","period","timezone","currDate","dayjs","set","utcOffset","undefined","clone","subtract","usePeriod","initialPeriod","setPeriod","periodDiff","diff","namedPeriod","utcPeriod","utc","isDailyPeriod","formatChartDataPeriod","convertDateToServerFormat","timeFormat","getChartDataUtcPeriod","currentFrom","currentBefore","useNamedPeriod","setStartOfDay","setEndOfDay","transformLineChartData","map","x","createdAt","toDate","y","sort","a","b","unix","transformTimelineChartData","length","series","aggregatedData","chartData","normalizedData","reduce","values","item","i","arr","nextItem","push","averageDate","normalizeTimelinePositiveNegativeTransition","positiveValues","negativeValues","filter","id","color","Section","containerStyle","className","children","flexDirection","classNames","style","SectionHeader","hideFilters","titleProps","alignItems","Title","level","condition","Sub","props","image","PRESENTED_IMAGE_SIMPLE","description","t","StepName","VendingTelemetryStatus","VendingTelemetryUtils","isCriticalLevel","criticalLevel","hasCriticalTelemetry","waterLevel","getVendingStatus","active","telemetry","Critical","Active","NonActive","FillingGraphLegends","transformData","TelemetryReportEntity","toObject","EventMessageEntity","convertToLiters","useGetFillingTelemetry","registryId","unitInterval","formattedChartDataPeriod","variables","registry","aggregationType","AggregationType","Sum","interval","composedQueries","composeQueries","total","TelemetryType","Volume","mobile","Filled","generateTelemetryReportQuery","query","gql","fragment","useQuery","fetchPolicy","pollInterval","isLoading","totalFillingsLine","mobileAppFillingsLine","SectionBody","View","LegendRow","text","serieName","backgroundColor","Text","fontWeight","marginLeft","justifySelf","SliceTooltip","FillingsGraphTooltip","useContext","RegistryContext","useLocalTranslation","vending","liters","slice","points","format","point","serieColor","key","serieId","toString","BarLayer","legends","fillingsGraph","innerWidth","serieSequence","MobileAppVolume","TotalVolume","groupedPoints","groups","groupIndex","findIndex","group","barGroupWidth","Math","max","MAX_FILLINGS_IN_DAY","barMaxWidth","barWidth","Object","entries","index","width","fill","PercentLayer","mainValue","dataWithArc","dominantBaseline","textAnchor","fontSize","MobileFillingsGraph","totalVolume","mobileVolume","roundNumber","hiddenLabel","innerRadius","enableRadialLabels","colors","sliceLabelsTextColor","sliceLabel","layers","theme","nivoTheme","Indicators","parameters","marginTop","gutter","totalFillings","precision","suffix","mobileFillings","defaultPeriod","NamedPeriod","Days","graphLayers","FillingsGraph","usePeriodGraphPoints","defaultPoints","legend","graphTitle","fillings","isMobile","useWindowSize","graphMargins","top","right","bottom","left","axisLeftProps","waterVolume","Number","isInteger","chartPeriodDates","getUnitInterval","sum","chartDataLength","minMaxValues","min","graphLegends","anchor","direction","itemHeight","itemWidth","translateY","symbolSize","symbolShape","axisBottomProps","PeriodSectionHeader","maxWidth","Graph","GraphLoader","spinning","BaseLineGraph","margin","sliceTooltip","enableCrosshair","crosshairType","enableSlices","copy","clipboard","writeText","e","ta","createElement","cssText","body","appendChild","focus","select","execCommand","remove","setNativeProps","callback","element","setNativePropsByTag","getElementsByTagName","elm","createAnimation","options","prop","transition","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","checkFilesIsImages","files","every","getTimezoneFromCoordinates","latitude","floor","date","extractNumbers","batchedUpdate","unstable_batchedUpdates","transformObjectToKeysArray","obj","order","isDateInPeriod","startDate","maxPeriod","maxPeriodUnits","abs","formatPhoneNumber","internationalFormat","parsePhoneNumber","formatInternational","split","join","ScreenSize","useThrottle","delay","cbRef","useRef","current","throttle","arg","isTablet","screenSize","sm","size","setSize","throttledListener","windowWidth","xxl","xl","lg","md","xs","useLayoutEffect","setConfig","APIs","authorizeApi","name","token","setHeaders","signHeaders","headers","fetch","defaults","common","setBaseUrl","baseURL","logout","authHeaderKey","repeatRequest","response","url","method","catch","enrichToken","enrichTokenUrl","refreshToken","isUnauthorizedOnTokenCreation","indexOf","needRefresh","Authorization","needEnrich","getErrorMessage","isAxiosError","logoutAPI","keys","forEach","createApi","defaultGetParams","axios","create","responseType","timeout","Pragma","Expires","Source","validateStatus","interceptors","request","use","conf","params","authorizationToken","api","AuthMethod","xScale","graphMargin","pointBorderColor","memo","other","axisBottomTickMobileStyle","tickPadding","tickRotation","minMax","yScale","axisBottom","orient","tickSize","axisLeft","legendOffset","legendPosition","defs","offset","axisTop","axisRight","enableGridX","pointBorderWidth","pointColor","pointSize","lineWidth","pointLabelYOffset","motionConfig","enableArea","areaOpacity","useMesh","indicator","namedPeriodIntervals","days","weeks","months","getNamedPeriodInterval","DateRangeInput","defaultStart","defaultEnd","placeholderFrom","placeholderTo","startDatePickerProps","endDatePickerProps","containerStyles","noFutureDate","strictDateMode","setStartDate","endDate","setEndDate","endOpen","setEndOpen","startDateNewValue","endDateNewValue","DatePicker","disabledDate","startValue","endValueUnixTime","startValueUnixTime","placeholder","onChange","onOpenChange","open","minWidth","flex","showToday","padding","endValue","disabled","PeriodButton","caption","Radio","Button","PeriodSwitcher","defaultValue","Group","disableSwitcher","onPeriodChange","onDatepickerChange","tz","periods","periodSwitcher","datePicker","allowClear","target","Weeks","Months","Scheme","sheme","_scheme","_fragmentTypes","filteredData","__schema","types","possibleTypes","apolloFragments","this","operationName","fullScheme","Node","getEntityType","mutationType","mutation","getMutation","inputFields","field","f","fields","kind","ofType","entityName","fieldName","help","entity","fieldScheme","inputVariables","excludeFields","extraFields","excludeItem","required","list","typeName","mutationName","returnedValues","excludePayloadFields","getInputFields","lcFirst","_interface","getPossibleTypes","prev","form","username","label","validations","require","email","password","rememberMe","phoneNumber","phone","submitButton","authMethods","Phone","Email","links","recoveryPassword","buttons","next","complete","pricingPlans","title2","subtitle","pricesTable","messages","notSelectedPricingPlan","labels","pricingPlanDuration","pricingPlanMonthlyPrice","pricingPlanPrice","launchAmount","pricingPlanActions","payment","card","bankCard","content","contract","oferta","paymentMethodsNotAvailable","callUs","validators","download","back","tooltips","payWithOnlinePayment","company","save","skip","navigation","about","contacts","dispatchers","paymmentMethods","details","assets","steps","main","brandName","directorPhoneNumber","directorEmail","companyPhoneNumber","companyEmail","pickupLocation","dispatcherPhoneNumber","dispatcherEmail","site","check","vkLink","instagramLink","misc","paymentMethods","onlinePayment","notSelected","sendEmail","sendEmail2","companyDetails","partnerFinish","discription","stepper","pricingPlan","companyInfo","tryOrderCabinet","tryMobileApp","done","equal","repeatPassword","partnerName","itn","country","contractEtching","labelStart","labelLink","labelFinish","preregistration","spam","firstName","agreement","alreadyHaveAccount","login","layout","nav","dashboard","balance","reports","documents","couriers","materials","banners","smsReport","header","user","mobileMenu","footer","contractOffer","blocks","marketerCabinet","orderCabinet","settingsCabinet","clientApp","orderSite","knowledge","welcome","subPhone","apple","google","smartLink","showPassword","hidePassword","linkCopied","goToCabinet","table","panel","state","invoice_created","invoice_paid","invoice_archived","staticPages","comingSoon","transactions","totalPay","debit","paymentMethod","deposit","deposit2","partnerSettings","intervals","deliveryTime","in","beforeEnd","beforeStart","example","deleted","dialogs","delete","ok","cancel","addDelivery","addInterval","helpers","sameDayDelivery","expressDelivery","districts","validation","finishRegistration","verificationCode","repeat","phoneStep","verificationStep","createPasswordStep","sendCode","createPassword","repeatVerification","successResetPassword","requestResetPassword","profile","tabs","companyProfile","integrations","companyName","companyLogo","companyLocations","newCity","notValid","plans","tariffDocumentName","yourPlan","changePlan","amo","amoButtonTitle","amoPopupTitle","connected","successPricingPlanUpdate","successCompanyLogoUpdate","successCompanyNameUpdate","successCompanyLocationsUpdate","successCompanyLocationCreate","successCompanyItnUpdate","meters","timezoneTitle","timezoneHelper","columns","address","temperature","lastActivity","onTheMap","temperatureGraph","waterVolumeGraph","vendingPopup","goToVendingScreen","colorLegend","addCourier","notVerified","deleteCourier","middleName","familyName","success","deleteButton","titleNoMiddleName","material","purpose","preview","newBanner","editBanner","editBannerShort","editStoryShort","displayLimits","ClickBanner","Story","InfoBanner","ProductSetBanner","deliveryAreas","position","bannerPreview","storyPreview","banner","story","storySlide","link","screenInApp","productSetNumber","buttonCaption","duration","pageMobile","linkType","targetTab","linkTypes","external","deeplink","notSpecified","appScreens","catalog","invite","chat","contact","mainProfile","myProfile","coinsHistory","enablePeriodLimit","enableOrdersLimit","showOnStart","button","addBanner","addStory","addSlideStory","deleteBanner","deleteStory","deleteSlideStory","saveChanges","deleteConfirmation","titleBanner","titleStory","titleSlideStory","functionalityNotConnected","noLonger","symbolsLeft","uploadPreview","uploadBanner","uploadStorySlide","bannerUpdated","storyUpdated","storySlideUpdated","bannerDeleted","storyDeleted","storySlideDeleted","clickBannerAdded","storyAdded","storySlideAdded","infoBannerAdded","productSetBannerAdded","sec","optional","limitQuantityOrders","activeFrom","activeTo","activeFromTo","settings","emptyDescription","cost","deliveryDate","totalCost","reportDownload","authorization","marketing","selector","prefix","datepiker","translateMap","createTranslationMap","ru","en","possible","charAt","random","makeid","loaderId","loader","LoaderContext","setLoaderState","RegistryEntity","createId","locales","I18nContext","grid","line","stroke","strokeWidth","axis","ticks","opacity","PostalAddressEntity","PointTooltip","TemperatureTooltip","formatWithSign","TemperatureGraph","Temperature","Avg","useTelemetry","temperatureLoading","getTelemetryReport","round","areaBaselineValue","tooltip","WaterVolumeTooltip","VolumeGraph","Height","waterVolumeLoading","createContext","createDayjsWithTimezone","withNetworkLayer","service","useHistory","goBack","registryData","postalAddress","pageTitle","streetAddress","addressLocality","buildPageTitle","coordinates","titleStyle","lineHeight","onBackButtonClick","strong","Help","generatePicker","dayjsGenerateConfig","AntSvgIcon","forwardRef","ref","AntdIcon","createIcon","icon","AndroidFilled","SearchOutlinedBase","AndroidFilledBase","AppleFilled","AppleFilledBase","MailOutlined","CopyOutlinedBase","MailOutlinedBase","PhoneOutlined","PhoneOutlinedBase","CheckCircleOutlined","CheckCircleOutlinedBase","ClockCircleOutlined","ClockCircleOutlinedBase","QuestionCircleFilled","QuestionCircleFilledBase","CreditCardFilled","CreditCardFilledBase","CheckOutlined","CheckOutlinedBase","PlusOutlined","CloseCircleOutlinedBase","CloseCircleFilledBase","PlusOutlinedBase","MinusOutlined","MinusOutlinedBase","DeleteOutlined","WarningTwoToneBase","SyncOutlinedBase","DeleteOutlinedBase","ExclamationCircleTwoTone","LinkOutlinedBase","UserOutlinedBase","MoreOutlinedBase","EditOutlinedBase","ExclamationCircleTwoToneBase","LoadingOutlined","InfoCircleOutlinedBase","HistoryOutlinedBase","EnvironmentOutlinedBase","LoadingOutlinedBase","DownOutlined","DownOutlinedBase","PlusCircleOutlined","PlusCircleOutlinedBase","SortDescendingOutlined","SortDescendingOutlinedBase","SortAscendingOutlined","SortAscendingOutlinedBase","PictureOutlined","CaretDownOutlinedBase","PictureOutlinedBase","VideoCameraOutlined","VideoCameraOutlinedBase","FileOutlined","FileOutlinedBase","EyeOutlined","EyeOutlinedBase","DownloadOutlined","DownloadOutlinedBase","SVG","rotate","defaultStroke","SourceComponent","transform","one","few","many","hours","minutes","partnersDative","definedLocale","extend","fallbacks","defaultLocale","pluralizationFunction","pluralization","pluralizeRu","count","uiTranslations","ui","pluralTranslations","plural","momentLocatization","dayjsRu","dayjsEn","setI18nConfig","localStorage","setItem","userLocale","includes","isLocaleDefined","language","userLanguage","process","REACT_APP_NAME","getItem","translation","flatten","unflatten","object","getPlural","NetworkContext","scheme","createAssetUrl","uri","clients","WrappedComponent","userParams","yandexMetrika","schemas","requests","NetworkLayer","enableScheme","enrichTokenOnInit","serviceUri","base","client","setClient","setScheme","setRequest","initCacheManager","configCache","dataIdFromObject","r","addTypename","cache","InMemoryCache","introspectionQuery","fragmentsTypes","fragmentTypes","fragment_matcher","IntrospectionFragmentMatcher","introspectionQueryResultData","fragmentMatcher","initApolloClient","Error","serviceScheme","apolloClient","ApolloClient","ApolloLink","onError","graphQLErrors","networkError","validationErrors","errorMessage","debugMessage","createUploadLink","buildAxiosFetch","Axios","context","serviceName","assetUrl","serviceUrl","domain","getEnvVariable","getBaseUrl","localStorageKey","envKey","baseAuthApi","basePartnerApi","baseCourierApi","baseTemporalApi","baseWikiApi","baseMarketingApi","baseSMSApi","baseBillingApi","basePaymentApi","baseDeliveryPeriodApi","basePricingPlansApi","baseInvoiceApi","baseIotApi","baseAmoApi","invoiceClientUrl","tokenStoreKey","refreshTokenStoreKey","cloudPaymentsPublicId","apiUrl","policylUrl","contractUrl","partnerLoginUrl","payPalClientId","knowledgeUrl","addressAutocomplete","contactEmail","paymentMethodsAvailability","ga","gtm","auth","refreshTokenUrl","resetPasswordRequest","confirmSms","partner","courier","temporal","wiki","sms","billing","deliveryPeriod","invoice","iot","setCustomFetchConfig","AbsoluteFilledLoader","maxHeight","display","justifyContent","tip","setState","showLoader","states","minHeight","center","inline","wrap","centerStyles","inlineStyles","flexWrap","useTranslation","paths","translate","Array","isArray","fromEntries","copyButton","fileField","multipleLabel","multipleFilesLabel","imageField","autoCompleteField","daysField","weekdays","weekends","selectorLang","cloudPaymentsButton","noData","countryPicker","selectCountry","checkboxSelector","checkAll","technicalWorkPage","translationMap","ApproveCredit","DirectCredit","Debit","SortingOrder","UserRoles","EventMessage","eventType","milliliters","root","BackButton","BackSVG","isBackButtonVisible","titleContainerStyle","ellipsis","_extends","assign","arguments","prototype","hasOwnProperty","call","apply","_ref","d","viewBox","borderRadius","collectionFragment","fragmentName","extantion","collectionFields","parseUuid","reverse","prefixSum","confirmed","withCurrency","Intl","NumberFormat","getMonthlyPayment","amount","str","toLowerCase","violations","violation","propertyPath","extensions","parseError","axiosError","errors","apolloError","number","precisionPow","pow","queries","queryGenerator","dateDiff","ceil","Currency","isRuble","currencyCode","adminToken","URLSearchParams","search","AppConfig","Cookies","getRefreshToken","checkRememberMe","redirectLoginForm","removeItem","checkRoles","roles","getUserInfo","role","temp","JSON","stringify","refresh_token","json","setAccessToken","enrichUrl","jwtDecode","remember","getUserId","userIsAdmin"],"mappings":"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","file":"static/js/main.bf2347f2.chunk.js","sourcesContent":["import * as React from \"react\";\nimport { Result, Button } from \"antd\";\n\nconst ErrorPage: React.FC = () => {\n return (\n {\n window.location.replace(\"/\");\n }}\n >На главную}\n />\n )\n}\nexport default ErrorPage","import { useMemo, useCallback } from 'react';\n\nconst useDocumentLanguage = () => {\n const htmlElement = useMemo(() => document.querySelector('html'), []);\n\n const updateDocumentLocale = useCallback(\n (locale: string) => {\n if (htmlElement) htmlElement.lang = locale;\n },\n [htmlElement],\n );\n\n return {\n updateDocumentLocale,\n };\n};\n\nexport default useDocumentLanguage;\n","import { LocalizationContextValues } from './Localization';\n\nconst localizationConfig: LocalizationContextValues = {\n countries: {\n AZ: {\n currency: 'RUB',\n },\n AM: {\n currency: 'RUB',\n },\n BY: {\n currency: 'RUB',\n },\n KZ: {\n currency: 'RUB',\n },\n KG: {\n currency: 'RUB',\n },\n MD: {\n currency: 'RUB',\n },\n RU: {\n currency: 'RUB',\n },\n TJ: {\n currency: 'RUB',\n },\n UZ: {\n currency: 'RUB',\n },\n BE: {\n currency: 'EUR',\n },\n GR: {\n currency: 'EUR',\n },\n LT: {\n currency: 'EUR',\n },\n PT: {\n currency: 'EUR',\n },\n ES: {\n currency: 'EUR',\n },\n LU: {\n currency: 'EUR',\n },\n FR: {\n currency: 'EUR',\n },\n SI: {\n currency: 'EUR',\n },\n DK: {\n currency: 'EUR',\n },\n MT: {\n currency: 'EUR',\n },\n SK: {\n currency: 'EUR',\n },\n DE: {\n currency: 'EUR',\n },\n IT: {\n currency: 'EUR',\n },\n NL: {\n currency: 'EUR',\n },\n FI: {\n currency: 'EUR',\n },\n EE: {\n currency: 'EUR',\n },\n CY: {\n currency: 'EUR',\n },\n AT: {\n currency: 'EUR',\n },\n IE: {\n currency: 'EUR',\n },\n LV: {\n currency: 'EUR',\n },\n },\n defaultCurrency: 'USD',\n};\n\nexport default localizationConfig;\n","import React from 'react';\n\nimport { Router, Switch, Route, Redirect } from 'react-router-dom';\nimport { createBrowserHistory } from 'history';\nimport { ConfigProvider } from 'antd';\nimport { useUrlSearchParams } from 'use-url-search-params';\nimport 'url-search-params-polyfill';\nimport { lazy } from '@loadable/component';\nimport * as Sentry from '@sentry/react';\n\nimport AuthService from './aqua-delivery-web-client-ui/AuthService';\nimport YandexAnalytics from './aqua-delivery-web-client-ui/YandexAnalytics';\nimport I18n, { I18nSetConfig, I18nContext } from './aqua-delivery-web-client-ui/i18n';\nimport SuspenseWithLoader from './aqua-delivery-web-client-ui/components/loader/SuspenseWithLoader';\nimport LoaderContainer from './aqua-delivery-web-client-ui/components/loader/LoaderContainer';\nimport ErrorPage from './aqua-delivery-web-client-ui/components/static-pages/ErrorPage';\nimport EmptyPanel from './aqua-delivery-web-client-ui/components/EmptyPanel';\nimport Loader from './aqua-delivery-web-client-ui/components/loader/Loader';\nimport useDocumentLanguage from './aqua-delivery-web-client-ui/hooks/useDocumentLanguage';\nimport Localization from './aqua-delivery-web-client-ui/localization/Localization';\nimport localizationConfig from './aqua-delivery-web-client-ui/localization/localizationConfig';\nimport translations from './translations';\nimport useAntdLocale from './hooks/useAntdLocale';\nimport { config } from './config';\n\nimport './aqua-delivery-web-client-ui/assets/styles/common.less';\n\nconst history = createBrowserHistory();\n\nconst LoginAsync = lazy(() => import('./routes/login'));\nconst PartnerAsync = lazy(() => import('./routes/partner-cabinet'));\nconst PreRegistrationAsync = lazy(() => import('./routes/begin-registration'));\nconst RegistrationAsync = lazy(() => import('./routes/registration'));\nconst ConfirmRegistrationAsync = lazy(() => import('./routes/confirm-registration'));\nconst FinishRegistrationAsync = lazy(() => import('./routes/registration/FinishRegistration'));\nconst RecoveryPasswordAsync = lazy(() => import('./routes/recoveryPassword/RecoveryPassword'));\nconst TechnicalWorkPageAsync = lazy(\n () => import('./aqua-delivery-web-client-ui/components/static-pages/TechnicalWorkPage'),\n);\nconst Page404Async = lazy(\n () => import('./aqua-delivery-web-client-ui/components/static-pages/Page404'),\n);\n\nI18nSetConfig({ translations });\n\nconst ymOptions = { clickmap: true, webvisor: true };\n\nconst ymInitializerOptions = { version: '2' };\n\nconst App: React.FC = () => {\n React.useEffect(() => {\n window.document.title = 'Aqua Delivery';\n }, []);\n\n const [locale, setLocale] = React.useState(I18n.locale);\n\n const { antdLocale } = useAntdLocale();\n\n const [appParams] = useUrlSearchParams({}, { isAppUpdating: Boolean });\n\n const isAppUpdating = config.isAppUpdating && appParams.isAppUpdating !== false;\n\n const { updateDocumentLocale } = useDocumentLanguage();\n\n React.useEffect(() => {\n updateDocumentLocale(locale);\n }, [locale, updateDocumentLocale]);\n\n const redirectRulesWhenUserLoggedIn = (path: string) => {\n const regexpMap: { regexp: RegExp; component: React.ReactNode }[] = [\n { regexp: /\\/login/, component: },\n { regexp: /\\/registration/, component: },\n ];\n\n const redirectComponent = regexpMap.find(mapItem => mapItem.regexp.test(path));\n\n return redirectComponent?.component;\n };\n\n const authToken = AuthService.getToken();\n\n const userVisitParams = React.useMemo(() => {\n if (!authToken) return undefined;\n\n const userInfo = AuthService.decodeToken(authToken);\n\n return {\n UserID: userInfo.uuid,\n };\n }, [authToken]);\n\n return (\n {\n I18nSetConfig({ locale });\n setLocale(locale);\n },\n }}\n >\n \n \n }>\n {isAppUpdating ? (\n \n ) : (\n }>\n \n \n \n \n \n {AuthService.isLoggedIn() &&\n redirectRulesWhenUserLoggedIn(\n history.location.pathname,\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport App from './App';\nimport { initConfig } from './config';\nimport * as serviceWorker from './serviceWorker';\n\nimport './index.css';\n\nlet timer: NodeJS.Timeout;\n\ntype TokensType = {\n token: string;\n refreshToken: string;\n};\n\ntype MessageType = {\n source: 'tokens';\n payload: TokensType;\n};\ndeclare global {\n interface Window {\n adminTokens: TokensType;\n }\n}\n\nfunction receiveMessage(event: MessageEvent) {\n const message = event.data as MessageType;\n if (message && message.source && message.source === 'tokens') {\n window.adminTokens = message.payload;\n }\n}\n\nwindow.addEventListener('message', receiveMessage, false);\n\nif (process.env.NODE_ENV === 'production') console.log = () => {};\n\nconst checkAdmin = () => {\n const referrerUrl = document.referrer || window.location.href;\n const url = new URL(referrerUrl);\n const isAdmin = url.searchParams.get('isAdmin');\n if (isAdmin) {\n return !!window.adminTokens;\n }\n\n return true;\n};\n\n//@ts-ignore\nif (window.env) {\n initConfig();\n ReactDOM.render(, document.getElementById('root'));\n} else {\n timer = setInterval(() => {\n //@ts-ignore\n if (window.env && checkAdmin()) {\n initConfig();\n if (!!window.adminTokens) {\n window.removeEventListener('message', receiveMessage);\n clearInterval(timer);\n }\n ReactDOM.render(, document.getElementById('root'));\n }\n }, 200);\n}\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { useState } from 'react';\n\nimport dayjs from 'dayjs';\n\nimport { Period, NamedPeriod } from '../../../../../types';\n\nexport type UsePeriod = DatePeriodState;\n\nexport type DatePeriodState =\n | ({\n namedPeriod: null;\n useNamedPeriod: false;\n } & Period)\n | ({\n namedPeriod: NamedPeriod;\n useNamedPeriod: true;\n } & Period);\n\nexport const getNamedPeriodDates = (period: NamedPeriod, timezone?: number) => {\n const currDate = dayjs()\n .set('seconds', 0)\n .utcOffset(timezone !== undefined ? timezone : dayjs().utcOffset());\n\n const to = currDate;\n const from = currDate.clone().subtract(1, period);\n\n return { from, to };\n};\n\nconst usePeriod = (initialPeriod: UsePeriod) => {\n const [period, setPeriod] = useState(initialPeriod);\n\n const periodDiff = period.to.diff(period.from, 'seconds');\n\n return {\n period,\n namedPeriod: period.namedPeriod,\n utcPeriod: {\n ...period,\n from: period.from.clone().utc(),\n to: period.to.clone().utc(),\n },\n setPeriod,\n isDailyPeriod: periodDiff <= 60 * 60 * 24,\n };\n};\n\nexport default usePeriod;\n","import dayjs from 'dayjs';\n\nimport { convertDateToServerFormat } from '../../../../../aqua-delivery-client-graphql/utils';\nimport { DatePeriodState, getNamedPeriodDates } from '../hooks/usePeriod';\nimport { setEndOfDay, setStartOfDay } from '../../../../../aqua-delivery-web-client-ui/Utils';\nimport { Period } from '../../../../../types';\n\nexport type LineChartData = { value: number | null; createdAt: string };\n\nexport const formatChartDataPeriod = (period: Period) => {\n const { from, to } = period;\n\n const defaultTimeFormatPattern = 'HH:mm';\n\n return {\n from: convertDateToServerFormat(from, { timeFormat: defaultTimeFormatPattern }),\n to: convertDateToServerFormat(to, { timeFormat: defaultTimeFormatPattern }),\n };\n};\n\nexport const getChartDataUtcPeriod = (utcPeriod: DatePeriodState, timezone: number = 0) => {\n const { from: currentFrom, to: currentBefore, namedPeriod, useNamedPeriod } = utcPeriod;\n\n const { from, to } =\n useNamedPeriod && namedPeriod !== null\n ? getNamedPeriodDates(namedPeriod, 0)\n : {\n from: setStartOfDay(currentFrom).utcOffset(-timezone),\n to: setEndOfDay(currentBefore).utcOffset(-timezone),\n };\n\n return { from, to };\n};\n\nconst isNumbersHasDifferentSign = (a: number, b: number) => {\n return (a > 0 && b < 0) || (a < 0 && b > 0);\n};\n\nexport const normalizeTimelinePositiveNegativeTransition = (\n data: { x: Date; y: number | null }[],\n) => {\n return data.reduce((values, item, i, arr) => {\n const nextItem = arr[i + 1];\n\n values.push(item);\n\n if (\n nextItem !== undefined &&\n item.y !== null &&\n nextItem.y !== null &&\n isNumbersHasDifferentSign(item.y, nextItem.y)\n ) {\n const averageDate = dayjs(nextItem.x)\n .subtract(dayjs(nextItem.x).diff(dayjs(item.x)) / 2, 'milliseconds')\n .toDate();\n\n values.push({ x: averageDate, y: 0 });\n }\n\n return values;\n }, []);\n};\n\nexport const transformLineChartData = (data: T[]) => {\n return data\n .map(event => {\n return {\n x: dayjs(event.createdAt).toDate(),\n y: event.value,\n };\n })\n .sort((a, b) => dayjs(a.x).unix() - dayjs(b.x).unix());\n};\n\nexport const transformTimelineChartData = (data: T[] | undefined) => {\n if (!data || data.length === 0) return { series: [], aggregatedData: [] };\n\n const chartData = transformLineChartData(data);\n\n const normalizedData = normalizeTimelinePositiveNegativeTransition(chartData);\n\n const series = [];\n\n const positiveValues = normalizedData.map(item => ({\n ...item,\n y: item.y !== null && item.y >= 0 ? item.y : null,\n }));\n\n const negativeValues = normalizedData.map(item => ({\n ...item,\n y: item.y !== null && item.y <= 0 ? item.y : null,\n }));\n\n if (positiveValues.filter(item => item.y !== null).length > 0) {\n series.push({\n id: 'positive',\n color: '#4671FF',\n data: positiveValues,\n });\n }\n\n if (negativeValues.filter(item => item.y !== null).length > 0) {\n series.push({\n id: 'negative',\n color: '#FF1C1C',\n data: negativeValues,\n });\n }\n\n return {\n series,\n aggregatedData: chartData,\n };\n};\n","import React, { FC } from 'react';\n\nimport classNames from 'classnames';\n\nimport View from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\ntype SectionProps = {\n containerStyle?: React.CSSProperties;\n className?: string;\n}\n\nconst Section: React.FC = ({ containerStyle, className, children }) => {\n return (\n \n {children}\n \n )\n}\n\nexport default Section;","import React, { FC } from 'react';\n\nimport { Typography } from 'antd';\nimport { When } from 'react-if';\nimport { TypographyProps } from 'antd/lib/typography/Typography';\n\nimport View from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\nexport type SectionHeaderProps = {\n title: string,\n containerStyle?: React.CSSProperties,\n titleProps?: TypographyProps,\n hideFilters?: boolean,\n}\n\nconst SectionSubHeader: FC = ({ title, ...props }) => {\n return (\n \n {title}\n \n );\n}\n\nconst SectionHeader: React.FC & { Sub: typeof SectionSubHeader } = ({ title, children, containerStyle, hideFilters, titleProps }) => {\n return (\n \n {title}\n \n \n {children}\n \n \n \n )\n}\n\nSectionHeader.Sub = SectionSubHeader;\n\nexport default SectionHeader;","import React from 'react';\n\nimport { Empty } from 'antd';\n\nimport View from './View';\nimport { t } from '../i18n';\n\nconst EmptyPanel: React.FC<{ containerStyle?: React.CSSProperties }> = ({ containerStyle }) => {\n return (\n \n \n \n )\n}\n\nexport default EmptyPanel;","export enum StepName {\n companyInfo = \"companyInfo\",\n pricingPlan = \"pricingPlan\",\n payment = \"payment\"\n}","type VendingTelemetry = {\n waterLevel: null\n | {\n value: number | null,\n criticalLevel: number,\n },\n}\n\nexport enum VendingTelemetryStatus {\n NonActive = 'non-active',\n Active = 'active',\n Critical = 'critical',\n}\n\nconst VendingTelemetryUtils = {\n isCriticalLevel: (value: number, criticalLevel: number) => value < criticalLevel,\n hasCriticalTelemetry: ({ waterLevel }: VendingTelemetry) => {\n return waterLevel && waterLevel.value !== null\n ? VendingTelemetryUtils.isCriticalLevel(waterLevel.value, waterLevel.criticalLevel)\n : false;\n },\n getVendingStatus: (active: boolean, telemetry: VendingTelemetry): VendingTelemetryStatus => {\n if (!active) return VendingTelemetryStatus.NonActive;\n if (VendingTelemetryUtils.hasCriticalTelemetry(telemetry)) return VendingTelemetryStatus.Critical;\n\n return VendingTelemetryStatus.Active;\n },\n}\n\nexport default VendingTelemetryUtils;","import { useMemo } from \"react\";\n\nimport { gql } from \"apollo-boost\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\nimport EventMessageEntity from \"../../../../../aqua-delivery-client-graphql/iot/entities/EventMessageEntity\";\nimport TelemetryReportEntity, { TelemetryType, AggregationType, TelemetryReport } from \"../../../../../aqua-delivery-client-graphql/iot/entities/TelemetryReportRequestEntity\";\nimport { TelemetryVariables, generateTelemetryReportQuery } from \"../../../../../aqua-delivery-client-graphql/iot/queries/useTelemetry\";\nimport { composeQueries } from \"../../../../../aqua-delivery-client-graphql/utils\";\n\nimport { transformLineChartData } from \"../utils/graphUtils\";\n\nconst transformData = (data: Pick | undefined) => transformLineChartData(\n TelemetryReportEntity\n .toObject(data?.values)\n .map(event => ({ ...event, value: event.value && EventMessageEntity.convertToLiters(event.value) }))\n)\n\ntype UseGetTelemetryProps = {\n registryId: string;\n unitInterval: number;\n formattedChartDataPeriod: {\n from: string;\n to: string;\n };\n};\n\ntype ComposedReportResult = {\n total: TelemetryReport,\n mobile: TelemetryReport,\n}\n\nconst useGetFillingTelemetry = (props: UseGetTelemetryProps) => {\n const { registryId, unitInterval, formattedChartDataPeriod } = props;\n\n const variables = {\n registry: registryId,\n aggregationType: AggregationType.Sum,\n interval: unitInterval,\n ...formattedChartDataPeriod,\n }\n\n const composedQueries = composeQueries(\n {\n total: { ...variables, type: TelemetryType.Volume },\n mobile: { ...variables, type: TelemetryType.Filled },\n },\n generateTelemetryReportQuery,\n );\n\n const query = gql`\n {\n ${composedQueries}\n }\n\n ${TelemetryReportEntity.fragment}\n `;\n\n const { data, loading: isLoading } = useQuery(\n query,\n {\n variables,\n fetchPolicy: 'network-only',\n pollInterval: 60 * 2000,\n }\n );\n\n const totalFillingsLine = useMemo(\n () => transformData(data?.total),\n [data],\n );\n\n const mobileAppFillingsLine = useMemo(\n () => transformData(data?.mobile),\n [data],\n );\n\n return {\n isLoading,\n totalFillingsLine,\n mobileAppFillingsLine,\n }\n}\n\nexport default useGetFillingTelemetry;","import React, { useContext, useMemo } from 'react';\n\nimport { DatumValue } from '@nivo/core';\nimport { Layer } from '@nivo/line';\nimport { LegendProps } from '@nivo/legends';\n\nimport EmptyPanel from '../../../../../../../aqua-delivery-web-client-ui/components/EmptyPanel';\nimport useLocalTranslation from '../../../../../../../hooks/useLocalTranslation';\nimport TelemetryReportEntity from '../../../../../../../aqua-delivery-client-graphql/iot/entities/TelemetryReportRequestEntity';\nimport useWindowSize from '../../../../../../../aqua-delivery-web-client-ui/hooks/useWindowSize';\nimport BaseLineGraph from '../../base-graph/BaseLineGraph';\nimport Section from '../../section/Section';\nimport { formatChartDataPeriod, getChartDataUtcPeriod } from '../../../utils/graphUtils';\nimport GraphLoader from '../../base-graph/GraphLoader';\nimport usePeriod, { getNamedPeriodDates } from '../../../hooks/usePeriod';\nimport useGetFillingTelemetry from '../../../queries/useGetFillingTelemetry';\nimport { RegistryContext } from '../../../Registry';\nimport PeriodSectionHeader from '../../section/PeriodSectionHeader';\nimport Graph from '../../base-graph/Graph';\nimport SectionBody from '../../section/SectionBody';\nimport SectionHeader from '../../section/SectionHeader';\nimport FillingsGraphTooltip from './FillingsGraphTooltip';\nimport BarLayer from './layers/BarLayer';\nimport { NamedPeriod } from '../../../../../../../types';\nimport usePeriodGraphPoints from '../../../hooks/usePeriodGraphPoints';\nimport Indicators from './Indicators';\n\ntype FillingsGraphProps = {\n registryId: string;\n};\n\nexport enum FillingGraphLegends {\n MobileAppVolume = 'mobileAppVolume',\n TotalVolume = 'totalVolume',\n}\n\nexport const MAX_FILLINGS_IN_DAY = 60;\n\nconst defaultPeriod = NamedPeriod.Days;\n\nconst graphLayers: Layer[] = [\n 'grid',\n 'axes',\n 'mesh',\n BarLayer,\n 'crosshair',\n 'markers',\n 'legends',\n 'slices',\n];\n\nconst colors = ['#1CBF2F', '#4671FF'];\n\nconst FillingsGraph: React.FC = ({ registryId }) => {\n const { dayjs, timezone } = useContext(RegistryContext);\n\n const { period, utcPeriod, setPeriod, namedPeriod, isDailyPeriod } = usePeriod({\n namedPeriod: defaultPeriod,\n useNamedPeriod: true,\n ...getNamedPeriodDates(defaultPeriod, timezone),\n });\n\n const { points } = usePeriodGraphPoints({\n defaultPoints: MAX_FILLINGS_IN_DAY,\n namedPeriod,\n period,\n });\n\n const [legend, graphTitle] = useLocalTranslation(\n t => t.vending.fillingsGraph,\n t => [t.legend, t.title],\n );\n\n const [title] = useLocalTranslation(\n t => t.vending,\n t => [t.fillings.title],\n );\n\n const legends = useLocalTranslation(\n t => t.vending.fillingsGraph.legends,\n t => t,\n );\n\n const { isMobile } = useWindowSize();\n\n const graphMargins = useMemo(\n () => ({\n top: 20,\n right: 10,\n bottom: isMobile ? 80 : 60,\n left: 70,\n }),\n [isMobile],\n );\n\n const axisLeftProps = useMemo(\n () => ({\n legend,\n format: (waterVolume: DatumValue) =>\n Number.isInteger(Number(waterVolume)) ? Number(waterVolume) : '',\n }),\n [legend],\n );\n\n const chartPeriodDates = getChartDataUtcPeriod(utcPeriod, timezone);\n const unitInterval = TelemetryReportEntity.getUnitInterval(chartPeriodDates, points);\n const formattedChartDataPeriod = formatChartDataPeriod(chartPeriodDates);\n\n const { isLoading, totalFillingsLine, mobileAppFillingsLine } = useGetFillingTelemetry({\n registryId,\n unitInterval,\n formattedChartDataPeriod,\n });\n\n const chartData = useMemo(() => {\n return [\n { id: legends[FillingGraphLegends.MobileAppVolume], data: mobileAppFillingsLine },\n { id: legends[FillingGraphLegends.TotalVolume], data: totalFillingsLine },\n ];\n }, [totalFillingsLine, mobileAppFillingsLine, legends]);\n\n const totalVolume = useMemo(\n () => totalFillingsLine.reduce((sum, item) => sum + (item.y || 0), 0),\n [totalFillingsLine],\n );\n const mobileVolume = useMemo(\n () => mobileAppFillingsLine.reduce((sum, item) => sum + (item.y || 0), 0),\n [mobileAppFillingsLine],\n );\n\n const chartDataLength = Math.max(\n totalFillingsLine.filter(item => item.y !== null).length,\n mobileAppFillingsLine.filter(item => item.y !== null).length,\n );\n\n const minMaxValues = useMemo(() => {\n if (totalFillingsLine.length === 0) return {};\n\n const values = totalFillingsLine\n .map(item => item.y)\n .filter(item => item !== null) as number[];\n\n const min = 0;\n const max = Math.max(...values) + 0.5;\n\n return { min, max };\n }, [totalFillingsLine]);\n\n const graphLegends: LegendProps[] = useMemo(\n () => [\n {\n anchor: 'bottom-left',\n direction: 'row',\n itemHeight: 20,\n itemWidth: 120,\n translateY: isMobile ? 70 : 50,\n symbolSize: 12,\n symbolShape: 'circle',\n },\n ],\n [isMobile],\n );\n\n const axisBottomProps = useMemo(\n () => ({\n format: (value: DatumValue) => dayjs(value).format(isDailyPeriod ? 'HH:mm' : 'DD.MM'),\n }),\n [dayjs, isDailyPeriod],\n );\n\n return (\n
\n \n \n
\n \n \n {chartDataLength ? (\n <>\n \n \n \n ) : (\n \n )}\n \n
\n\n \n
\n
\n );\n};\n\nexport default FillingsGraph;\n","import React from 'react';\n\nimport View from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\ntype SectionBodyProps = {\n containerStyle?: React.CSSProperties,\n className?: string,\n}\n\nconst SectionBody: React.FC = ({ children, containerStyle, className }) => {\n return (\n \n {children}\n \n )\n}\n\nexport default SectionBody;","import React from 'react';\n\nimport classNames from 'classnames';\nimport { Typography } from 'antd';\n\nimport View from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\ntype LegendRowProps = {\n color: string,\n text: string,\n serieName: string,\n}\n\nexport const LegendRow: React.FC = ({ color, text, serieName }) => {\n return (\n <>\n \n {serieName}\n {text}\n \n );\n}\n\nconst SliceTooltip: React.FC<{ title: string }> = ({ children, title }) => (\n \n {title}\n \n {children}\n \n \n);\n\nexport default SliceTooltip;","import React, { useContext } from \"react\";\n\nimport { SliceTooltipProps } from \"@nivo/line\";\n\nimport { RegistryContext } from \"../../../Registry\";\nimport useLocalTranslation from \"../../../../../../../hooks/useLocalTranslation\";\nimport SliceTooltip, { LegendRow } from \"../../base-graph/SliceTooltip\";\n\nconst FillingsGraphTooltip = (props: SliceTooltipProps) => {\n const { dayjs } = useContext(RegistryContext);\n\n const [liters] = useLocalTranslation(\n (t) => t.vending,\n t => [t.liters],\n );\n\n const title = dayjs(props.slice.points[0].data.x).format('DD.MM.YYYY, HH:mm');\n\n return (\n \n {\n props.slice.points.map(point => {\n const color = point.serieColor;\n const text = `${point.data.y} ${liters}`;\n\n return (\n \n )\n })\n }\n \n );\n}\n\nexport default FillingsGraphTooltip;","import React, { useMemo } from 'react';\n\nimport { CustomLayer, Point } from '@nivo/line';\n\nimport useLocalTranslation from '../../../../../../../../hooks/useLocalTranslation';\n\nimport { FillingGraphLegends, MAX_FILLINGS_IN_DAY } from '../FillingsGraph';\n\nconst BarLayer: CustomLayer = props => {\n const legends = useLocalTranslation(\n t => t.vending.fillingsGraph.legends,\n t => t,\n );\n\n const { points, innerWidth, innerHeight } = props;\n\n const serieSequence = [\n legends[FillingGraphLegends.MobileAppVolume],\n legends[FillingGraphLegends.TotalVolume],\n ];\n\n const groupedPoints = useMemo(\n () =>\n points.reduce>((groups, point) => {\n const groupIndex = serieSequence.findIndex(group => group === point.serieId);\n\n if (!groups[point.x]) {\n groups[point.x] = [];\n }\n\n groups[point.x][groupIndex] = point;\n\n return groups;\n }, {}),\n [points, serieSequence],\n );\n\n const barCount = 2;\n\n const barGroupWidth = Math.max(2, innerWidth / MAX_FILLINGS_IN_DAY) * 0.9;\n\n const barMaxWidth = barGroupWidth / barCount;\n const barWidth = barMaxWidth;\n\n return Object.entries(groupedPoints).map(([x, points]) => {\n return points.map((point, index) => {\n return (\n \n );\n });\n });\n};\n\nexport default BarLayer;\n","import React from \"react\";\n\nimport { PieLayer } from \"@nivo/pie\";\n\nimport { PieDatum } from \"../MobileFillingsGraph\";\n\nconst PercentLayer: PieLayer = (props) => {\n const mainValue = props.dataWithArc.find(item => item.data.mainValue);\n\n return (\n \n {(mainValue?.data.value || 0) + '%'}\n \n )\n}\n\nexport default PercentLayer;","import React, { FC } from \"react\";\n\nimport { ResponsivePie } from \"@nivo/pie\";\n\nimport { roundNumber } from \"../../../../../../../aqua-delivery-client-graphql/utils\";\nimport View from \"../../../../../../../aqua-delivery-web-client-ui/components/View\";\n\nimport nivoTheme from \"../../base-graph/theme\";\nimport PercentLayer from \"./layers/PercentLayer\";\n\nexport type PieDatum = {\n id: string;\n value: number;\n hiddenLabel?: boolean;\n mainValue?: boolean;\n}\n\nexport type MobileFillingsGraphProps = {\n totalVolume: number;\n mobileVolume: number;\n}\n\nconst MobileFillingsGraph: FC = ({ totalVolume, mobileVolume }) => {\n return (\n \n \n data={[\n {\n id: \"mobile\",\n value: totalVolume ? roundNumber(mobileVolume / totalVolume * 100, 1) : 0,\n hiddenLabel: true,\n mainValue: true,\n },\n {\n id: \"total\",\n value: totalVolume ? roundNumber((totalVolume - mobileVolume) / totalVolume * 100, 1) : 100,\n hiddenLabel: true,\n }\n ]}\n innerRadius={0.7}\n enableRadialLabels={false}\n colors={['#1CBF2F', '#EFEFEF']}\n sliceLabelsTextColor={{ from: 'labelColor' }}\n sliceLabel={item => item.data.hiddenLabel ? '' : `${item.value}%`}\n layers={[\n 'slices',\n 'radialLabels',\n 'sliceLabels',\n 'legends',\n PercentLayer,\n ]}\n theme={nivoTheme}\n />\n \n )\n}\n\nexport default MobileFillingsGraph;","import React, { FC } from 'react';\n\nimport { Row, Col, Card, Statistic } from 'antd';\n\nimport Section from '../../section/Section';\nimport SectionHeader from '../../section/SectionHeader';\nimport MobileFillingsGraph from './MobileFillingsGraph';\nimport useLocalTranslation from '../../../../../../../hooks/useLocalTranslation';\n\ntype IndicatorsProps = {\n totalVolume: number;\n mobileVolume: number;\n};\n\nconst Indicators: FC = ({ totalVolume, mobileVolume }) => {\n const [liters] = useLocalTranslation(\n t => t.vending,\n t => [t.liters],\n );\n\n const parameters = useLocalTranslation(\n t => t.vending.fillingsGraph.parameters,\n t => t,\n );\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default Indicators;\n","import camelCase from 'camelcase';\nimport { Dayjs } from 'dayjs';\nimport { parsePhoneNumber } from 'libphonenumber-js';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport { MappedArrayOfObjects } from './types';\n\nexport function copy(text: string) {\n try {\n navigator.clipboard.writeText(text);\n } catch (e) {\n const ta = document.createElement('textarea');\n ta.style.cssText = 'opacity:0; position:fixed; width:1px; height:1px; top:0; left:0;';\n ta.value = text;\n document.body.appendChild(ta);\n ta.focus();\n ta.select();\n document.execCommand('copy');\n ta.remove();\n }\n}\n\nexport function ucFirst(str: string) {\n if (!str || str.length === 0) return str;\n return str[0].toUpperCase() + str.slice(1);\n}\n\nexport function lcFirst(str: string) {\n if (!str || str.length === 0) return str;\n return str[0].toLowerCase() + str.slice(1);\n}\n\nexport function parseCamelCase(value: string) {\n return camelCase(value);\n}\n\nexport function setNativeProps(id: string, callback: (element: HTMLElement) => void) {\n const element = document.getElementById(id);\n if (element) {\n callback(element);\n }\n}\n\nexport function setNativePropsByClassName(\n className: string,\n callback: (element: HTMLElement) => void,\n) {\n const element = document.getElementsByClassName(className);\n if (element) {\n for (let i = 0; i < element.length; i++) {\n const elm = element.item(i) as HTMLElement;\n elm && callback(elm);\n }\n }\n}\n\nexport function setNativePropsByTag(className: string, callback: (element: Element) => void) {\n const element = document.getElementsByTagName(className);\n if (element) {\n for (let i = 0; i < element.length; i++) {\n const elm = element.item(i);\n elm && callback(elm);\n }\n }\n}\n\nexport function createAnimation(options: { prop?: string } = {}) {\n const prop = options.prop || 'all';\n return {\n transition: `${prop} .1s ease-in-out`,\n };\n}\n\nexport function createCssAnimation(options: { prop?: string } = {}) {\n const prop = options.prop || 'all';\n return `transition: ${prop} .10s ease-in-out`;\n}\n\nexport const getBase64 = (file: any): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n};\n\n// for ant upload\nexport const checkFilesIsImages = (files: File[]) => {\n return files.every(file => !file.type || /^image\\/.*/.test(file.type));\n};\n\nexport const getTimezoneFromCoordinates = (latitude: number) => {\n const timezoneAngle = 15;\n\n return Math.floor(latitude / timezoneAngle);\n};\n\nexport const setEndOfDay = (date: Dayjs) => {\n return date.set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 999);\n};\n\nexport const setStartOfDay = (date: Dayjs) => {\n return date.set('hour', 0).set('minute', 0).set('second', 0).set('millisecond', 0);\n};\n\nexport const extractNumbers = (value: string) => value.replace(/[^\\d]/g, '');\n\nexport const batchedUpdate = unstable_batchedUpdates;\n\nexport const transformObjectToKeysArray = (\n obj: Record,\n): MappedArrayOfObjects =>\n (Object.entries(obj) as any).map((order: [string, any]) => ({ [order[0]]: order[1] }));\n\nexport const isDateInPeriod = (\n date: Dayjs,\n startDate: Dayjs,\n maxPeriod: number,\n maxPeriodUnits: Parameters[1],\n) => {\n return Math.abs(date.diff(startDate, maxPeriodUnits)) <= maxPeriod;\n};\n\nexport const formatPhoneNumber = (text: string) => {\n const internationalFormat = parsePhoneNumber(text)?.formatInternational();\n const [countryCode, areaCode, ...localNumber] = internationalFormat?.split(' ') || [];\n return countryCode + ' (' + areaCode + ') ' + localNumber.join('-');\n};\n","import { useLayoutEffect, useState } from 'react';\n\nimport useThrottle from './useThrottle';\n\nexport enum ScreenSize {\n xs = 'xs',\n sm = 'sm',\n md = 'md',\n lg = 'lg',\n xl = 'xl',\n xxl = 'xxl',\n}\n\ntype State = {\n width: number;\n height: number;\n isMobile: boolean;\n isTablet: boolean;\n screenSize: ScreenSize;\n};\n\nconst getScreenSize = (windowWidth: number): ScreenSize => {\n if (windowWidth > 1600) {\n return ScreenSize.xxl;\n }\n if (windowWidth > 1200) {\n return ScreenSize.xl;\n }\n if (windowWidth > 992) {\n return ScreenSize.lg;\n }\n if (windowWidth > 768) {\n return ScreenSize.md;\n }\n if (windowWidth > 576) {\n return ScreenSize.sm;\n }\n\n return ScreenSize.xs;\n};\n\nexport default function useWindowSize() {\n const [size, setSize] = useState({\n width: 0,\n height: 0,\n isMobile: false,\n isTablet: false,\n screenSize: ScreenSize.sm,\n });\n\n const updateSize = () => {\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n isMobile: window.innerWidth <= 768,\n isTablet: window.innerWidth <= 1050,\n screenSize: getScreenSize(window.innerWidth),\n });\n };\n\n const throttledListener = useThrottle(updateSize, 50);\n\n useLayoutEffect(() => {\n window.addEventListener('resize', throttledListener);\n throttledListener();\n\n return () => window.removeEventListener('resize', throttledListener);\n }, [throttledListener]);\n\n return size;\n}\n","import { useRef, useEffect, useCallback } from 'react';\n\nimport throttle from 'lodash.throttle';\n\nconst useThrottle = (callback: (arg?: T) => void, delay: number) => {\n const cbRef = useRef(callback);\n\n useEffect(() => {\n cbRef.current = callback;\n });\n\n return useCallback(\n throttle((arg?: T) => cbRef.current(arg), delay),\n [delay],\n );\n};\n\nexport default useThrottle;\n","import axios, { AxiosInstance, AxiosError, AxiosResponse } from 'axios';\n\nimport AuthService from './AuthService';\nimport I18n from './i18n';\n\nexport type Source = 'admin' | 'partner_cabinet';\n\ntype AuthorizeApiOptions = {\n headerKey?: string;\n prefix?: string;\n bearer?: boolean;\n};\n\nexport type TFetch = {\n fetch: AxiosInstance;\n authorizeApi: (token?: string) => void;\n setBaseUrl: (baseURL: string) => void;\n logout: (opt?: AuthorizeApiOptions) => void;\n setLocale: (locale: string | null) => void;\n enrichToken: () => Promise | void>;\n};\n\ntype ApiConfig = {\n response?: AxiosResponse;\n defaultGetParams?: { [x: string]: string | number };\n enrichTokenUrl?: string;\n};\n\nconst config: { source?: Source; version?: string } = {};\n\nexport const setConfig = (source?: Source, version?: string) => {\n config.source = source;\n config.version = version;\n};\n\nconst APIs: { [x: string]: { fetch: AxiosInstance } } = {};\n\nexport const authorizeApi = (name: string) => (token?: string) => {\n setHeaders(name)(AuthService.signHeaders({}, token));\n};\n\nconst setHeaders = (name: string) => (headers: Record) => {\n APIs[name].fetch.defaults.headers.common = {\n ...APIs[name].fetch.defaults.headers.common,\n ...headers,\n };\n};\n\nconst setBaseUrl = (name: string) => (baseURL: string) => {\n APIs[name].fetch.defaults.baseURL = baseURL;\n};\n\nconst logout = (name: string) => () => {\n setHeaders(name)({ [AuthService.authHeaderKey]: null });\n};\n\nasync function repeatRequest(name: string, response: AxiosResponse) {\n return await APIs[name]\n .fetch({\n url: response.config.url,\n data: response.config.data,\n method: response.config.method,\n })\n .then(result => {\n return Promise.resolve(result);\n })\n .catch(e => {\n return Promise.reject(e);\n });\n}\n\nasync function enrichToken(name: string, { enrichTokenUrl, response = undefined }: ApiConfig = {}) {\n return AuthService.enrichToken(enrichTokenUrl!)\n .then(async token => {\n authorizeApi(name)(token);\n\n if (response) {\n return await repeatRequest(name, response);\n } else {\n return Promise.resolve();\n }\n })\n .catch(error => {\n return Promise.reject(error);\n });\n}\n\nconst refreshToken = async (name: string, response: AxiosResponse) => {\n return AuthService.refreshToken()\n .then(async token => {\n authorizeApi(name)(token);\n\n return await APIs[name]\n .fetch({\n url: response.config.url,\n data: response.config.data,\n method: response.config.method,\n })\n .then(result => {\n return Promise.resolve(result);\n })\n .catch(() => {\n AuthService.logout();\n return Promise.reject(response);\n });\n })\n .catch(error => {\n AuthService.logout();\n return Promise.reject(error);\n });\n};\n\nconst isUnauthorizedOnTokenCreation = (error: AxiosError) => {\n return (\n error.response &&\n error.response.status === 401 &&\n error.config &&\n error.config.url &&\n !~error.config.url.indexOf('/token/get')\n );\n};\n\nfunction needRefresh(config: AxiosError['config'], response: AxiosResponse | undefined) {\n return (\n response &&\n response.status === 401 &&\n response.data &&\n config &&\n config.headers &&\n config.headers.Authorization\n );\n}\n\nfunction needEnrich(config: AxiosError['config'], response: AxiosResponse | undefined) {\n return (\n response &&\n response.status === 424 &&\n response.data &&\n config &&\n config.headers &&\n config.headers.Authorization\n );\n}\n\nfunction createApi(name: string, { defaultGetParams, enrichTokenUrl }: ApiConfig = {}) {\n const fetch = axios.create({\n responseType: 'json',\n timeout: 60000,\n headers: {\n Pragma: 'no-cache',\n Expires: 0,\n 'content-type': 'application/json',\n Source: config.source,\n 'version-app': config.version,\n },\n validateStatus: status => status < 400,\n });\n\n fetch.interceptors.request.use(\n async config => {\n let conf = config;\n\n if (defaultGetParams) {\n if (!conf.params) {\n conf.params = {};\n }\n conf.params = defaultGetParams;\n }\n\n let headers = config.headers;\n\n if (!headers.common['Accept-Language']) {\n headers = { ...headers, 'Accept-Language': I18n.locale };\n }\n\n const authorizationToken = APIs[name].fetch.defaults.headers?.common.Authorization;\n if (authorizationToken) {\n headers.common.Authorization = authorizationToken;\n }\n\n return {\n ...config,\n headers,\n };\n },\n error => {\n return Promise.reject(error);\n },\n );\n\n fetch.interceptors.response.use(\n async response => response,\n async (error: AxiosError) => {\n if (needEnrich(error.config, error.response)) {\n return await enrichToken(name, {\n response: error.response,\n enrichTokenUrl,\n });\n }\n\n if (needRefresh(error.config, error.response)) {\n return await refreshToken(name, error.response!);\n } else if (isUnauthorizedOnTokenCreation(error)) {\n AuthService.logout();\n return Promise.reject(error);\n }\n\n return Promise.reject(error);\n },\n );\n\n const api: TFetch = {\n fetch,\n authorizeApi: authorizeApi(name),\n setBaseUrl: setBaseUrl(name),\n logout: logout(name),\n setLocale: locale => setHeaders(name)({ 'Accept-Language': locale }),\n enrichToken: async () => enrichToken(name, { enrichTokenUrl }),\n };\n\n APIs[name] = api;\n\n return api;\n}\n\nexport default createApi;\n\nexport function getErrorMessage(e: AxiosError<{ message: string }>): string {\n return e.isAxiosError && e.response ? e.response.data.message : e.message;\n}\n\nexport function logoutAPI() {\n Object.keys(APIs).forEach(logout);\n}\n","export enum AuthMethod {\n Email = 'email',\n Phone = 'phone',\n}","import React, { memo, useMemo } from 'react';\n\nimport { ResponsiveLine, Serie, LineProps } from '@nivo/line';\nimport { AxisProps } from '@nivo/axes';\nimport { Scale } from '@nivo/scales';\n\nimport useWindowSize from '../../../../../../aqua-delivery-web-client-ui/hooks/useWindowSize';\n\nimport nivoTheme from './theme';\n\ntype BaseLineGraph = Partial & {\n data: Serie[];\n min?: number;\n max?: number;\n axisBottomProps?: Partial;\n axisLeftProps?: Partial;\n};\n\nconst colors = ['#4671FF', '#FF1C1C', '#1CBF2F'];\nconst xScale: Scale = { type: 'time' };\nconst graphMargin = { top: 20, right: 10, bottom: 40, left: 70 };\nconst pointBorderColor = { from: 'serieColor' };\n\nconst BaseLineGraph: React.FC = memo(\n ({ data, min, max, axisBottomProps, axisLeftProps, ...other }) => {\n const { isMobile } = useWindowSize();\n\n const axisBottomTickMobileStyle = useMemo(\n () => (isMobile ? { tickPadding: 6, tickRotation: -45 } : { tickPadding: 2 }),\n [isMobile],\n );\n\n const minMax: { min: 'auto' | number; max: 'auto' | number } = useMemo(\n () => ({\n min: min !== undefined ? min : 'auto',\n max: max !== undefined ? max : 'auto',\n }),\n [max, min],\n );\n\n const yScale: Scale = useMemo(() => ({ type: 'linear', ...minMax }), [minMax]);\n\n const axisBottom: AxisProps = useMemo(\n () => ({\n orient: 'bottom',\n tickSize: 4,\n ...axisBottomTickMobileStyle,\n ...axisBottomProps,\n }),\n [axisBottomProps, axisBottomTickMobileStyle],\n );\n\n const axisLeft: AxisProps = useMemo(\n () => ({\n orient: 'left',\n tickSize: 0,\n tickPadding: 16,\n legendOffset: -60,\n legendPosition: 'start',\n ...axisLeftProps,\n }),\n [axisLeftProps],\n );\n\n return (\n item.id === 'positive',\n id: 'positiveGradient',\n },\n {\n match: item => item.id === 'negative',\n id: 'negativeGradient',\n },\n ]}\n useMesh\n {...other}\n />\n );\n },\n);\n\nexport default BaseLineGraph;\n","import React from 'react';\n\nimport Spin, { SpinProps } from 'antd/lib/spin';\n\nimport { LoadingOutlined } from '../../../../../../aqua-delivery-web-client-ui/icons';\n\nconst GraphLoader: React.FC = props => {\n return (\n } size=\"large\" {...props} />\n );\n};\n\nexport default GraphLoader;\n","import { QueryHookOptions, useQuery } from \"@apollo/react-hooks\";\nimport { gql } from \"apollo-boost\";\n\nimport TelemetryReportEntity, { TelemetryType, AggregationType, TelemetryReport } from \"../entities/TelemetryReportRequestEntity\";\n\nexport type TelemetryVariables = {\n registry: string,\n from: string,\n to: string,\n interval: number,\n type: TelemetryType,\n aggregationType: AggregationType,\n}\n\nexport type WaterVolumeData = { id: string, value: number, createdAt: string };\n\nexport type TelemetryResult = {\n getTelemetryReport: TelemetryReport,\n}\n\nexport const generateTelemetryReportQuery = (variables: TelemetryVariables) => {\n const { registry, from, to, type, aggregationType, interval } = variables;\n\n return `\n getTelemetryReport(\n registry: \"${registry}\",\n from: \"${from}\",\n to: \"${to}\",\n type: \"${type}\",\n aggregationType: \"${aggregationType}\",\n interval: ${interval}\n ) {\n ...TelemetryReport,\n }\n `\n};\n\nexport const query = gql`\n query getTelemetryReport(\n $registry: String!,\n $from: String!,\n $to: String!,\n $type: String!,\n $aggregationType: String!,\n $interval: Int!\n ) {\n getTelemetryReport(\n registry: $registry,\n from: $from,\n to: $to,\n type: $type,\n aggregationType: $aggregationType,\n interval: $interval\n ) {\n ...TelemetryReport,\n }\n }\n\n ${TelemetryReportEntity.fragment}\n`;\n\nexport default function (options: QueryHookOptions) {\n return useQuery(query, options);\n}","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport View, { ViewProps } from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\ntype GraphProps = {\n containerStyle?: React.CSSProperties,\n} & ViewProps;\n\nconst Graph: React.FC = ({ containerStyle, children, className, ...other }) => {\n return (\n \n {children}\n \n )\n}\n\nexport default Graph;","import dayjs from 'dayjs';\n\nimport { NamedPeriod, Period } from '../../../../../types';\n\nexport type UsePeriodGraphPoints = {\n defaultPoints: number;\n namedPeriod: NamedPeriod | null | undefined;\n period: Period;\n};\n\nconst namedPeriodIntervals: Record number> = {\n days: () => 24 * 2,\n weeks: () => (7 * 24) / 3,\n months: (period: Period) => dayjs(period.to).diff(period.from, 'days'),\n};\n\nexport const getNamedPeriodInterval = (period: NamedPeriod) => {\n return namedPeriodIntervals[period];\n};\n\nconst usePeriodGraphPoints = (props: UsePeriodGraphPoints) => {\n const { defaultPoints, namedPeriod, period } = props;\n\n return {\n points: namedPeriod ? getNamedPeriodInterval(namedPeriod)(period) : defaultPoints,\n };\n};\n\nexport default usePeriodGraphPoints;\n","import React from 'react';\n\nimport { Typography } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport View from '../../View';\nimport { setEndOfDay } from '../../../Utils';\nimport DatePicker, { DatePickerProps } from '../DatePicker';\nimport useAntdLocale from '../../../hooks/useAntdLocale';\n\ntype DateRangeInputProps = {\n format: string;\n onChange: (values: DateTimePeriodValues) => void;\n defaultStart?: Dayjs | null;\n defaultEnd?: Dayjs | null;\n className?: string;\n placeholderFrom?: string;\n placeholderTo?: string;\n startDatePickerProps?: DatePickerProps;\n endDatePickerProps?: DatePickerProps;\n containerStyles?: React.CSSProperties;\n noFutureDate?: boolean;\n strictDateMode?: boolean;\n};\n\nexport type DateTimePeriodValues = [Dayjs | null, Dayjs | null];\n\nconst DateRangeInput: React.FC = props => {\n const {\n className,\n format,\n defaultStart,\n defaultEnd,\n placeholderFrom,\n placeholderTo,\n startDatePickerProps,\n endDatePickerProps,\n containerStyles,\n noFutureDate = false,\n strictDateMode = false,\n ...other\n } = props;\n\n const [startDate, setStartDate] = React.useState(\n defaultStart || startDatePickerProps?.value || null,\n );\n const [endDate, setEndDate] = React.useState(defaultEnd || endDatePickerProps?.value || null);\n const [endOpen, setEndOpen] = React.useState(false);\n\n const { antdLocale } = useAntdLocale();\n\n React.useEffect(() => {\n const startDateNewValue = startDatePickerProps?.value || null;\n const endDateNewValue = endDatePickerProps?.value || null;\n\n setStartDate(startDateNewValue);\n setEndDate(endDateNewValue);\n }, [endDatePickerProps, startDatePickerProps]);\n\n const disabledStartDate = (startValue: Dayjs | null) => {\n if (!startValue || !endDate) {\n return false;\n }\n\n const endValueUnixTime = endDate.unix();\n const startValueUnixTime = startValue.unix();\n\n return (\n startValueUnixTime > endValueUnixTime ||\n (strictDateMode && endValueUnixTime === startValueUnixTime)\n );\n };\n\n const disabledEndDate = (endValue: Dayjs | null) => {\n if (!endValue || !startDate) {\n return false;\n }\n\n const endValueUnixTime = endValue.unix();\n const startValueUnixTime = startDate.unix();\n\n return (\n endValueUnixTime < startValueUnixTime ||\n (noFutureDate && endValueUnixTime > setEndOfDay(dayjs()).unix()) ||\n (strictDateMode && endValueUnixTime === startValueUnixTime)\n );\n };\n\n const onStartChange = (value: Dayjs | null) => {\n setStartDate(value);\n //@ts-ignore\n other.onChange([value, endDate]);\n };\n\n const onEndChange = (value: Dayjs | null) => {\n setEndDate(value);\n //@ts-ignore\n other.onChange([startDate, value]);\n };\n\n const handleStartOpenChange = (open: boolean) => {\n if (!open) {\n setEndOpen(true);\n }\n };\n\n const handleEndOpenChange = (open: boolean) => {\n setEndOpen(open);\n };\n\n return (\n \n \n \n –\n \n \n \n );\n};\n\nexport default DateRangeInput;\n","import React, { CSSProperties } from 'react';\n\nimport { RadioChangeEvent } from 'antd/lib/radio';\n\nimport Radio from '../../../../../aqua-delivery-web-client-ui/components/ui/Radio';\n\nexport const PeriodButton: React.FC<{\n caption: string;\n value: string;\n onChange?: (e: RadioChangeEvent) => void;\n}> = ({ caption, value, onChange }) => {\n return (\n \n {caption}\n \n );\n};\n\ntype PeriodSwitcherProps = {\n onChange: (e: RadioChangeEvent) => void;\n defaultValue?: string;\n value: string | undefined | null;\n containerStyles?: CSSProperties;\n};\n\nconst PeriodSwitcher: React.FC = ({\n onChange,\n defaultValue,\n containerStyles,\n children,\n value,\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport default PeriodSwitcher;\n","import React, { useCallback } from 'react';\n\nimport { When } from 'react-if';\nimport { Col, Row } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport DateRangeInput, { DateTimePeriodValues } from '../../../../../../aqua-delivery-web-client-ui/components/ui/inputs/DateRangeInput';\nimport useLocalTranslation from '../../../../../../hooks/useLocalTranslation';\n\nimport PeriodSwitcher, { PeriodButton } from '../PeriodSwitcher';\nimport { DatePeriodState, getNamedPeriodDates } from '../../hooks/usePeriod';\nimport SectionHeader, { SectionHeaderProps } from './SectionHeader';\nimport { NamedPeriod } from '../../../../../../types';\n\ntype PeriodSectionHeaderProps = SectionHeaderProps & {\n setPeriod?: React.Dispatch>;\n period?: DatePeriodState;\n disableSwitcher?: boolean;\n timezone?: number;\n};\n\nconst PeriodSectionHeader: React.FC = ({\n setPeriod,\n period,\n disableSwitcher,\n timezone,\n ...other\n}) => {\n const onPeriodChange = useCallback(\n (namedPeriod: NamedPeriod) => {\n const { from, to } = getNamedPeriodDates(namedPeriod, timezone);\n\n setPeriod && setPeriod({ from, to, namedPeriod, useNamedPeriod: true });\n },\n [setPeriod, timezone],\n );\n\n const onDatepickerChange = useCallback(\n (values: [Dayjs | null, Dayjs | null]) => {\n const tz = timezone || dayjs().utcOffset();\n\n const [from, to] = values;\n\n setPeriod &&\n values[0] &&\n values[1] &&\n setPeriod({\n from: (from || dayjs()).clone().utcOffset(tz),\n to: (to || dayjs()).clone().utcOffset(tz),\n namedPeriod: null,\n useNamedPeriod: false,\n });\n },\n [setPeriod, timezone],\n );\n\n const periods = useLocalTranslation(\n t => t.vending.periodSwitcher,\n t => t,\n );\n\n const { from, to } = useLocalTranslation(\n t => t.vending.datePicker,\n t => t,\n );\n\n return (\n \n \n \n \n \n \n \n onPeriodChange(e.target.value)}\n value={period?.namedPeriod}\n >\n \n \n \n \n \n \n \n \n );\n};\n\nexport default PeriodSectionHeader;\n","import { EntityType } from './types';\nimport { gql } from 'apollo-boost';\nimport { lcFirst } from './utils';\n\nexport type TScheme = {\n __schema: {\n types: any;\n };\n};\n\nexport type GenerateMutationOptions = {\n excludeFields?: string[];\n excludePayloadFields?: string[];\n extraFields?: Record;\n};\n\nexport type MutationType = 'create' | 'update' | 'delete' | 'add';\n\nexport default class Scheme {\n static get introspectionQuery() {\n return {\n variables: {},\n operationName: 'IntrospectionQuery',\n query: `query IntrospectionQuery {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n }\n \n fragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n }\n }\n \n fragment InputValue on __InputValue {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n \n fragment TypeRef on __Type {\n kind\n name\n description\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n `,\n };\n }\n\n private _scheme: any;\n private _fragmentTypes: any;\n\n constructor(sheme: { data: TScheme } | undefined = undefined) {\n if (!sheme) return;\n if (sheme && !sheme.data) {\n //console.log(sheme);\n }\n // // here we're filtering out any type information unrelated to unions or interfaces\n const filteredData = sheme.data.__schema.types.filter(\n (type: any) => type.possibleTypes !== null,\n );\n const apolloFragments = {\n __schema: {\n types: filteredData,\n },\n };\n\n this._fragmentTypes = apolloFragments;\n this._scheme = sheme.data;\n }\n\n public get fullScheme() {\n return this._scheme;\n }\n\n public get fragmentTypes() {\n return this._fragmentTypes;\n }\n\n public getEntityType(name: string): EntityType | undefined {\n const scheme = this.fullScheme;\n const type: EntityType = scheme.__schema.types.find(\n (type: EntityType) => type.name === name,\n );\n if (!type) {\n const Node = this.getEntityType('Node');\n if (!Node || !Node.possibleTypes) return undefined;\n const type = Node.possibleTypes.find((type: EntityType) => type.name === name);\n if (type) return type;\n } else {\n return type;\n }\n }\n\n public getMutation(name: string, mutationType: MutationType = 'create') {\n return this.getEntityType(`${mutationType}${name}Input`);\n }\n\n public getPayload(name: string, mutationType: MutationType = 'create') {\n return this.getEntityType(`${mutationType}${name}Payload`);\n }\n\n public getPossibleTypes(name: string): EntityType[] | null {\n const type = this.getEntityType(name);\n //console.log(type)\n //нашли интересующий нас тип и теперь прошерстим его и для каждого интерфейса найдем мутации создания\n //это нужно чтобы найти поля, участвующие в мутации.\n\n if (!type || !type.possibleTypes) return null;\n\n type.possibleTypes.forEach(item => {\n const mutation = this.getMutation(item.name);\n if (mutation) {\n item.inputFields = mutation.inputFields.filter(field => {\n if (field.name === 'clientMutationId') {\n return false;\n }\n const f = type.fields.find(item => item.name === field.name);\n //exclude interfaces and objects field\n if (\n f &&\n (f.type.kind === 'INTERFACE' ||\n f.type.kind === 'OBJECT' ||\n (f.type.ofType &&\n (f.type.ofType.kind === 'INTERFACE' ||\n f.type.ofType.kind === 'OBJECT')))\n ) {\n return false;\n }\n return true;\n });\n }\n });\n\n return type.possibleTypes;\n }\n\n public getDescriptionField(entityName: string, fieldName: string): string {\n let help: string = '';\n const entity = this.getEntityType(entityName);\n if (entity) {\n const fieldScheme = entity.inputFields.find(field => field.name === fieldName);\n if (fieldScheme) {\n help = fieldScheme.description || '';\n }\n }\n\n return help;\n }\n\n public getInputFields(\n entityName: string,\n mutationType: MutationType,\n options: GenerateMutationOptions = {},\n ) {\n const fields = this.getMutation(entityName, mutationType)!.inputFields;\n\n let variables = '';\n let inputVariables = '';\n\n const { excludeFields, extraFields = {} } = options;\n\n fields\n .filter(field => {\n if (options.excludeFields) {\n const excluded = !!excludeFields?.find(\n excludeItem => excludeItem === field.name,\n );\n if (excluded) {\n return false;\n }\n }\n return true;\n })\n .forEach(field => {\n let required = field.type.kind === 'NON_NULL' ? '!' : '';\n const list = field.type.kind === 'LIST';\n let typeName = field.type.name\n ? field.type.name\n : field.type.ofType\n ? field.type.ofType.name\n : '';\n if (list) {\n typeName = `[${typeName}${required}]` as any;\n required = '';\n }\n variables += `$${field.name}: ${typeName}${required},`;\n inputVariables += `${field.name}:$${field.name},`;\n });\n\n Object.entries(extraFields).forEach(field => {\n variables += `$${field[0]}: ${field[1]},`;\n inputVariables += `${field[0]}: $${field[1]},`;\n });\n\n return {\n variables,\n inputVariables,\n };\n }\n\n public generateMutation(\n entity: EntityType,\n mutationType: MutationType,\n options: GenerateMutationOptions = {},\n ) {\n const mutationName = `${mutationType}${entity.name}`;\n let returnedValues = '';\n\n entity.fields\n .filter(field => {\n if (options.excludeFields) {\n const excluded = !!options.excludeFields.find(\n excludeItem => excludeItem === field.name,\n );\n if (excluded) {\n return false;\n }\n }\n return true;\n })\n .forEach(field => {\n const isObject =\n (field.type &&\n (field.type.kind === 'OBJECT' || field.type.kind === 'INTERFACE')) ||\n (field.type.ofType &&\n (field.type.ofType.kind === 'OBJECT' ||\n field.type.ofType.kind === 'INTERFACE'));\n\n if (isObject) {\n return;\n }\n if (options.excludePayloadFields) {\n const excluded = !!options.excludePayloadFields.find(\n excludeItem =>\n excludeItem === field.name ||\n (excludeItem === '*' && field.name !== 'id'),\n );\n if (!excluded) {\n returnedValues += `${field.name},`;\n }\n } else {\n returnedValues += `${field.name},`;\n }\n });\n\n const { inputVariables, variables } = this.getInputFields(\n entity.name,\n mutationType,\n options,\n );\n\n return gql`mutation ${mutationName}(${variables}){\n ${mutationName}(\n input: {\n ${inputVariables}\n }\n ){\n ${lcFirst(entity.name)}{\n ${returnedValues}\n }\n }\n }`;\n }\n\n public getInterfacesFieldsFragments(_interface: string) {\n const possibleTypes = this.getPossibleTypes(_interface);\n\n let result = '';\n if (possibleTypes) {\n possibleTypes.forEach(item => {\n const fields = item.inputFields.reduce(\n (prev, current) => (prev += `${current.name},\\n`),\n '',\n );\n if (!item.inputFields.length) return;\n result += `\n ... on ${item.name}{\n ${fields}\n }\n `;\n });\n //console.log(result)\n return result;\n }\n return result;\n }\n}\n","import { AuthMethod } from \"../../routes/login/types\";\n\nexport default {\n title: 'Авторизация',\n form: {\n fields: {\n username: {\n placeholder: \"example@mail.com\",\n label: \"E-mail\",\n validations: {\n require: \"Поле обязательно для заполнения\",\n email: \"Вы указали невалидный E-mail\"\n }\n },\n password: {\n label: \"Пароль\",\n validations: {\n require: \"Поле обязательно для заполнения\",\n }\n },\n rememberMe: {\n label: \"Запомнить меня\",\n },\n phoneNumber: {\n label: \"Номер телефона\",\n validations: {\n phone: \"Вы указали невалидный номер телефона\",\n require: \"Поле обязательно для заполнения\",\n }\n }\n },\n submitButton: \"Войти\",\n authMethods: {\n [AuthMethod.Phone]: \"По номеру телефона\",\n [AuthMethod.Email]: \"По E-mail\"\n }\n },\n links: {\n registration: 'Регистрация',\n recoveryPassword: 'Я забыл пароль :('\n }\n}","import { StepName } from \"../../routes/partner-cabinet/routes/finish-registration/components/stepperHelper/StepNameEnum\";\n\nexport default {\n buttons: {\n next: \"Далее\",\n complete: \"Завершить\"\n },\n pricingPlans: {\n title: \"Спасибо\",\n title2: \"за регистрацию!\",\n subtitle: \"Выберите тарифный план\",\n pricesTable: {\n title: 'Тарифный план — ',\n },\n messages: {\n notSelectedPricingPlan: \"Выберите тарифный план\"\n },\n labels: {\n pricingPlanDuration: 'Продолжительность',\n pricingPlanMonthlyPrice: 'Цена в месяц',\n pricingPlanPrice: 'Сумма',\n launchAmount: \"Стартовый платёж\",\n pricingPlanActions: \"Выбрать\",\n }\n },\n payment: {\n title: \"Как будете оплачивать?\",\n card: {\n bankCard: {\n title: \"Онлайн-оплата\",\n // title: \"Оплатить картой\",\n content: \"Заплатите онлайн\",\n },\n contract: {\n title: \"Реквизиты\",\n content: \"Договор\",\n }\n },\n labels: {\n oferta: \"Договор_оферты\",\n paymentMethodsNotAvailable: \"К сожалению, вам недоступен ни один из существующих способов оплаты.\",\n callUs: \"Свяжитесь с нами по телефону:\",\n },\n fields: {\n file: {\n label: \"Загрузите реквизиты\",\n validators: {\n require: \"Поле обязательно для заполнения\"\n }\n }\n },\n buttons: {\n download: \"Скачать\",\n back: \"Назад на выбор тарифа\"\n },\n tooltips: {\n payWithOnlinePayment: 'Выберите один из доступных способов оплаты',\n },\n },\n company: {\n title: \"Расскажите\",\n title2: \"о вашей компании\",\n subtitle: `Нам нужно еще немного данных\n о вас для индивидуального приложения \n и сайта продаж`,\n buttons: {\n save: \"Сохранить\",\n next: \"Далее\",\n skip: \"Пропустить\",\n back: \"Назад\"\n },\n navigation: {\n about: \"О компании\",\n contacts: \"Контакты компании\",\n dispatchers: \"Диспетчера\",\n links: \"Ссылки\",\n paymmentMethods: \"Как будут платить клиенты?\",\n details: \"Реквизиты компании\",\n assets: \"Фирменный дизайн\"\n },\n steps: {\n main: {\n title: \"Информация о компании\",\n fields: {\n brandName: {\n label: \"Название бренда\",\n validators: {\n require: \"Вы пропустили поле\"\n }\n },\n memo: {\n label: \"Этот текст будет на сайте продаж и в клиентском приложении\",\n placeholder: \"Расскажите, с какого года вы на рынке, в чём ваши преимущества, какой у вас ассортимент\",\n validators: {\n require: \"Вы пропустили поле\"\n }\n }\n }\n },\n contacts: {\n title: \"Контакты компании\",\n fields: {\n directorPhoneNumber: {\n label: \"Телефон руководителя\",\n validators: {\n require: \"Вы пропустили поле\"\n }\n },\n directorEmail: {\n label: \"E-mail руководителя\",\n validators: {\n require: \"Вы пропустили поле\",\n email: \"Похоже вы указали невалидный E-mail\"\n }\n },\n companyPhoneNumber: {\n label: \"Телефон компании\",\n validators: {\n require: \"Вы пропустили поле\"\n }\n },\n companyEmail: {\n label: \"E-mail компании\",\n validators: {\n require: \"Вы пропустили поле\",\n email: \"Похоже вы указали невалидный E-mail\"\n }\n },\n pickupLocation: {\n label: \"Адрес самовывоза\",\n }\n }\n },\n dispatchers: {\n title: \"Информация о диспетчере\",\n fields: {\n dispatcherPhoneNumber: {\n label: \"Телефон диспетчера\",\n validators: {\n require: \"Вы пропустили поле\"\n }\n },\n dispatcherEmail: {\n label: \"E-mail диспетчера\",\n validators: {\n require: \"Вы пропустили поле\",\n email: \"Похоже вы указали невалидный E-mail\"\n }\n },\n }\n },\n links: {\n title: \"Ссылки на социальные сети\",\n fields: {\n site: { label: \"Сайт\", check: \"У нас нет сайта\" },\n vkLink: { label: \"Группа Вконтакте\", check: \"У нас нет группы\" },\n instagramLink: { label: \"Инстаграм\", check: \"У нас нет Инстаграма\" },\n misc: { label: \"Другие источники\" },\n }\n },\n paymentMethods: {\n title: \"Как будут платить клиенты?\",\n fields: {\n onlinePayment: {\n notSelected: \"Не выбрано\",\n },\n other: {\n label: \"Другой вариант\"\n } \n }\n },\n assets: {\n title: \"Загрузите логотип и брендбук (если есть)\",\n labels: {\n sendEmail: \"Или отправьте данные на почту\",\n sendEmail2: \"В теме письма напишите с какого вы города и название вашей компании/бренда\"\n }\n },\n details: {\n title: \"Загрузите реквизиты вашей компании\",\n fields: {\n companyDetails: {\n validators: {\n require: 'Реквизиты компании обязательны для загрузки'\n }\n }\n }\n },\n }\n },\n partnerFinish: {\n title: 'Спасибо за регистрацию!',\n discription:\n 'В ближайшее время мы с вами свяжемся, зададим несколько уточняющих вопросов и начнем собирать Ваше приложение.'\n },\n stepper: {\n [StepName.pricingPlan]: \"Выбор тарифа\",\n [StepName.payment]: \"Оплата\",\n [StepName.companyInfo]: \"О компании\",\n }\n}","import registration from './registration';\nimport preregistration from './preregistration';\nimport login from './login';\nimport layout from './layout';\nimport dashboard from './dashboard';\nimport staticPages from './staticPages';\nimport transactions from './transactions';\nimport partnerSettings from './partnerSettings';\nimport finishRegistration from './finishRegistration';\nimport recoveryPassword from './recoveryPassword';\nimport profile from './profile';\nimport vending from './vending';\nimport couriers from './couriers';\nimport materials from './materials';\nimport banners from './banners';\nimport smsReport from './smsReport';\n\nexport default {\n registration,\n preregistration,\n login,\n layout,\n dashboard,\n staticPages,\n transactions,\n partnerSettings,\n finishRegistration,\n recoveryPassword,\n profile,\n vending,\n couriers,\n materials,\n banners,\n smsReport,\n};\n","export default {\n title: 'Кабинет партнёра',\n labels: {\n tryOrderCabinet: 'Попробуйте демо-версию системы для диспетчеров',\n tryMobileApp: 'и демо-версию клиентского приложения',\n loading: 'Дождитесь окончания загрузки',\n },\n buttons: {\n skip: 'Пропустить',\n next: 'Далее',\n done: 'Завершить',\n },\n steps: {\n password: {\n title: 'Установите пароль, чтобы пользоваться системой',\n fields: {\n password: {\n label: 'Пароль',\n placeholder: 'Постарайтесь, чтобы пароль был нетривиальным*',\n help: '* используйте буквы, цифры и знаки препинания (желательно)',\n validators: {\n require: 'Поле обязательно для заполнения',\n equal: 'Пароли должны совпадать',\n },\n },\n repeatPassword: {\n label: 'Повторите пароль',\n validators: {\n require: 'Поле обязательно для заполнения',\n equal: 'Пароли должны совпадать',\n },\n },\n },\n },\n company: {\n title: 'Нам нужно еще немного данных о вашей компании',\n fields: {\n partnerName: {\n label: 'Название компании',\n placeholder: 'ООО \"Компания\"',\n validators: {\n require: 'Поле обязательно для заполнения',\n },\n },\n location: {\n label: 'Город',\n validators: {\n require: 'Поле обязательно для заполнения',\n },\n },\n itn: {\n label: 'ИНН',\n placeholder: '1234567890',\n validators: {\n require: 'Поле обязательно для заполнения',\n },\n },\n currency: {\n label: 'Используемая валюта',\n validators: {\n require: 'Поле обязательно для заполнения',\n },\n },\n country: {\n label: 'Страна',\n validators: {\n require: 'Поле обязательно для заполнения',\n },\n },\n contractEtching: {\n labelStart: 'Я подтверждаю, что ознакомился с',\n labelLink: ' договором-оферты ',\n labelFinish: 'и принимаю его условия',\n validators: {\n require: 'Подтвердите, что согласны с договором-оферты',\n },\n },\n },\n },\n },\n};\n","\nexport default {\n title: \"Регистрация\",\n result: {\n title: \"Вы зарегистрировались в системе\",\n message: \"Мы отправили Вам письмо на почту ({{email}}), пожалуйста откройте его и следуйте инструкциям.\",\n spam: 'Пожалуйста, если вы не получили письмо в течение пяти минут, то проверьте папку \"Спам\" - возможно, оно попало туда по ошибке.'\n },\n form: {\n fields: {\n firstName: {\n placeholder: \"Ваше имя\",\n label: \"Ваше имя:\",\n validations: {\n require: \"Поле обязательно для заполнения\"\n }\n },\n email: {\n placeholder: \"E-mail\",\n label: \"E-mail:\",\n validations: {\n require: \"Поле обязательно для заполнения\",\n email: \"Вы указали невалидный E-mail\"\n }\n },\n phoneNumber: {\n placeholder: \"Телефон\",\n label: \"Телефон:\",\n validations: {\n require: \"Поле обязательно для заполнения\"\n }\n },\n agreement: {\n label: \"I agree with the privacy policy\",\n validations: {\n require: \"Your consent is required\"\n }\n },\n },\n labels: {\n agreement: \"Нажимая кнопку «Отправить» Вы соглашаетесь с\"\n },\n links: {\n agreement: \"политикой конфиденциальности\"\n },\n submitButton: \"Отправить\",\n alreadyHaveAccount: 'У меня уже есть аккаунт',\n }\n}","export default {\n nav: {\n dashboard: 'Рабочий стол',\n balance: 'Баланс',\n reports: 'Отчеты',\n documents: 'Документы',\n vending: 'Киоски',\n couriers: 'Курьеры',\n materials: 'Материалы',\n banners: 'Баннеры',\n smsReport: 'SMS-отчет',\n },\n header: {\n company: 'Компания',\n user: 'Пользователь',\n },\n mobileMenu: {\n company: 'Настройки компании',\n user: 'Мой профиль',\n },\n footer: {\n contractOffer: 'Договор оферты',\n },\n buttons: {\n logout: 'Выйти',\n },\n};\n","export default {\n blocks: {\n marketerCabinet: {\n title: 'Кабинет маркетолога',\n body: 'Посмотреть отчёты и проанализировать ситуацию',\n },\n orderCabinet: {\n title: 'Кабинет заказов',\n body: 'Посмотреть заказы и клиентов, добавлять и редактировать',\n },\n settingsCabinet: {\n title: 'Кабинет настроек',\n body: 'Внести изменения к товарам, услугам, изображениям, описаниям и ценам',\n },\n clientApp: {\n title: 'Клиентское приложение',\n //body: \"Внести изменения к товарам, услугам, изображениям, описаниям и ценамь\"\n },\n orderSite: {\n title: 'Сайт для заказов',\n //body: \"Внести изменения к товарам, услугам, изображениям, описаниям и ценамь\"\n },\n knowledge: {\n title: 'База знаний',\n body: 'Найти ответы на вопросы по работе с системой',\n },\n },\n welcome: {\n title: 'Спасибо',\n title2: 'за регистрацию!',\n subTitle: 'Мы вам скоро позвоним сами :)',\n phone: 'Либо можете связаться с нами по телефону',\n subPhone: 'для дальнейших действий',\n },\n labels: {\n login: 'Логин',\n password: 'Пароль',\n links: {\n apple: 'App Store',\n google: 'Google Play',\n smartLink: 'Умная ссылка',\n },\n },\n tooltips: {\n copy: 'Скопировать',\n showPassword: 'Показать пароль',\n hidePassword: 'Скрыть пароль',\n smartLink:\n 'Адрес специальной страницы, с которой будет происходить автоматический редирект в стор приложений',\n },\n messages: {\n login: 'Логин скопирован',\n password: 'Пароль скопирован',\n linkCopied: 'Ссылка скопирована',\n },\n buttons: {\n goToCabinet: 'Перейти',\n },\n documents: {\n title: 'Документы',\n content: {\n table: {\n label: 'Счёт за',\n date: 'Дата',\n total: 'Сумма',\n panel: {\n header: 'Другое',\n extra: 'Акты',\n content: 'Акт',\n },\n error: 'Счета не найдены',\n },\n },\n state: {\n invoice_created: 'Оплатить',\n invoice_paid: 'Оплачен',\n invoice_archived: 'В архиве',\n },\n },\n};\n","export default {\n comingSoon: 'Страница еще в разработке',\n};\n","export default {\n title: 'История баланса',\n labels: {\n balance: 'Баланс',\n totalPay: 'Сумма к оплате',\n debit: 'Пополнения',\n paymentMethod: 'Выберите способ оплаты',\n },\n buttons: {\n deposit: 'Пополнить баланс',\n deposit2: 'Пополнить',\n },\n};\n","export default {\n intervals: {\n title: 'Районы и время доставки',\n labels: {\n deliveryTime: 'Время доставки',\n in: 'За',\n beforeEnd: 'минут до конца интервала',\n beforeStart: 'Окончание приема заказов',\n example: 'Например',\n title: 'Вы почти дошли до конца :)',\n subtitle: 'Осталось заполнить информацию о доставке',\n },\n messages: {\n deleted: 'Удалён',\n },\n dialogs: {\n delete: {\n title: 'Вы уверены?',\n content: 'Действие невозможно отменить',\n ok: 'Да, удалить',\n cancel: 'Нет',\n },\n },\n buttons: {\n addDelivery: 'Добавить доставку',\n delete: 'Удалить',\n addInterval: 'Добавить интервал',\n },\n helpers: {\n sameDayDelivery: {\n title: `До какого времени должен поступить заказ, чтобы вы его смогли доставить в данный период доставки.`,\n example: `Интервал доставки с 12:00 до 14:00. Заказы для\n этого интервала вы заканчиваете обрабатывать\n в 10:00 за 2 часа до начала интервала`,\n },\n expressDelivery: {\n title: `За какое время до конца интервала доставки\n должен поступить экспресс-заказ, чтобы его\n приняли?`,\n example: `Интервал доставки с 12:00 до 14:00. Экспресс-\n заказы для этого интервала вы заканчиваете\n принимать в 13:00, то есть за 60 минут до конца\n интервала`,\n },\n },\n fields: {\n districts: {\n label: 'Районы (если есть)',\n },\n payment: {\n label: 'Онлайн оплата (Выберите банк)',\n },\n days: {\n label: 'Дни доставки',\n validation: {\n require: 'Обязательно',\n },\n },\n from: {\n label: 'Начало',\n validation: {\n require: 'Обязательно',\n },\n },\n to: {\n label: 'Конец',\n validation: {\n require: 'Обязательно',\n },\n },\n sameDayDelivery: {\n label: 'Доставка \"день в день\"',\n },\n expressDelivery: {\n label: 'Экспресс-доставка',\n },\n },\n },\n};\n","export default {\n title: 'Восстановление пароля',\n form: {\n fields: {\n phone: {\n label: 'Телефон',\n validations: {\n require: 'Поле обязательно для заполнения',\n },\n },\n verificationCode: {\n label: 'Последние {{codeLength}} цифры номера',\n validations: {\n require: 'Поле обязательно для заполнения',\n },\n },\n password: {\n label: 'Новый пароль',\n validations: {\n require: 'Поле обязательно для заполнения',\n repeat: 'Пароли должны совпадать',\n },\n },\n repeatPassword: {\n label: 'Повторите новый пароль',\n validations: {\n require: 'Поле обязательно для заполнения',\n repeat: 'Пароли должны совпадать',\n },\n },\n },\n submitButton: 'Войти',\n },\n labels: {\n phoneStep:\n 'Введите номер телефона, на него поступит входящий звонок, отвечать на него не нужно',\n verificationStep:\n 'Вам поступит входящий звонок на номер {{phoneNumber}}, введите последние {{codeLength}} цифры входящего номера',\n createPasswordStep: 'Отлично :) Теперь введите новый пароль',\n },\n buttons: {\n sendCode: 'Отправить',\n createPassword: 'Сменить пароль',\n repeatVerification: 'Я не получил код :(',\n },\n messages: {\n successResetPassword: `Пароль успешно изменён`,\n requestResetPassword: `Код повторно отправлен на номер {{phoneNumber}}`,\n },\n};\n","export default {\n title: 'Кабинет компании',\n tabs: {\n companyProfile: 'Профиль компании',\n pricingPlans: 'Тарифы',\n integrations: 'Интеграции',\n },\n companyProfile: {\n fields: {\n companyName: {\n label: 'Название компании',\n placeholder: 'Введите название компании',\n validations: {\n require: 'Поле обязательно для заполнения',\n },\n },\n companyLogo: {\n label: 'Логотип',\n validations: {\n image: 'Логотип должен быть изображением',\n },\n },\n companyLocations: {\n label: 'Города:',\n },\n newCity: {\n label: 'Добавить город',\n validations: {\n require: 'Выберите своё местоположение из списка',\n },\n },\n itn: {\n label: 'ИНН',\n placeholder: 'Введите ИНН',\n validators: {\n notValid: 'ИНН не валиден',\n },\n },\n },\n submitButton: 'Сохранить',\n },\n plans: {\n pricesTable: {\n title: 'Тарифный план — ',\n },\n fields: {\n pricingPlanDuration: 'Продолжительность',\n pricingPlanMonthlyPrice: 'Цена в месяц',\n pricingPlanPrice: 'Сумма',\n },\n tariffDocumentName: 'Тарифные планы.pdf',\n yourPlan: 'ваш тариф',\n changePlan: 'Для смены тарифного плана вы можете связаться с нами по номеру',\n },\n integrations: {\n amo: {\n title: 'AmoCRM',\n amoButtonTitle: 'Подключить amoCRM',\n amoPopupTitle: 'Предоставить доступ для интеграции',\n connected: 'Интеграция подключена',\n },\n },\n messages: {\n successPricingPlanUpdate: 'Ваш тарифный план успешно изменён',\n successCompanyLogoUpdate: 'Логотип вашей компании успешно изменён',\n successCompanyNameUpdate: 'Название вашей компании было успешно обновлено',\n successCompanyLocationsUpdate: 'Список городов был успешно изменён',\n successCompanyLocationCreate: 'Город был успешно добавлен',\n successCompanyItnUpdate: 'ИНН был успешно обновлён',\n },\n};\n","import { FillingGraphLegends } from '../../routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/FillingsGraph';\nimport { VendingTelemetryStatus } from '../../routes/partner-cabinet/routes/vending/utils/vendingTelemetryUtils';\nimport { NamedPeriod } from '../../types';\n\nexport default {\n title: 'Киоски',\n liters: 'л.',\n meters: 'м.',\n registry: {\n timezoneTitle: 'Временная зона киоска',\n timezoneHelper: 'Для отображения времени на графиках используется временная зона киоска',\n },\n table: {\n columns: {\n address: 'Адрес',\n temperature: 'Температура, ℃',\n waterLevel: 'Уровень воды, м.',\n lastActivity: 'Последняя активность',\n timezone: 'Временная зона киоска',\n },\n timezoneHelper: 'Время отображается во временной зоне киоска',\n onTheMap: 'На карте',\n },\n waterVolume: {\n title: 'Уровень воды',\n },\n temperature: {\n title: 'Температура в киоске',\n },\n fillings: {\n title: 'Наливы',\n },\n temperatureGraph: {\n title: 'Динамика температуры',\n legend: 'Температура, ℃',\n },\n waterVolumeGraph: {\n title: 'Динамика уровня воды',\n legend: 'Уровень воды, м.',\n },\n fillingsGraph: {\n title: 'Динамика наливов',\n legend: 'Объём, л.',\n legends: {\n [FillingGraphLegends.TotalVolume]: 'Общий объём',\n [FillingGraphLegends.MobileAppVolume]: 'Приложение',\n },\n parameters: {\n title: 'Показатели за период',\n totalFillings: 'Общий объём наливов',\n mobileFillings: 'Через приложение',\n },\n },\n periodSwitcher: {\n [NamedPeriod.Days]: 'День',\n [NamedPeriod.Weeks]: 'Неделя',\n [NamedPeriod.Months]: 'Месяц',\n },\n datePicker: {\n from: 'Начало периода',\n to: 'Конец периода',\n },\n vendingPopup: {\n temperature: 'Температура',\n waterLevel: 'Давление воды',\n lastActivity: 'Последняя активность',\n liters: 'л.',\n meters: 'м.',\n goToVendingScreen: 'Перейти на экран киоска',\n timezone: 'Временная зона',\n },\n colorLegend: {\n [VendingTelemetryStatus.Active]: 'Работает',\n [VendingTelemetryStatus.NonActive]: 'Не работает',\n [VendingTelemetryStatus.Critical]: 'Критическое состояние',\n title: 'Состояние киоска',\n },\n};\n","export default {\n title: 'Курьеры',\n addCourier: 'Курьер',\n table: {\n columns: {\n name: 'ФИО',\n phoneNumber: 'Мобильный номер',\n email: 'Электронная почта',\n },\n tooltips: {\n notVerified: 'Курьер еще не подтвержден системой',\n deleteCourier: 'Удалить курьера',\n },\n },\n form: {\n title: 'Новый курьер',\n fields: {\n firstName: {\n label: 'Имя',\n placeholder: 'Иван',\n },\n middleName: {\n label: 'Фамилия',\n placeholder: 'Иванов',\n },\n familyName: {\n label: 'Отчество',\n placeholder: 'Иванович',\n },\n email: {\n label: 'E-mail',\n placeholder: 'example@mail.ru',\n },\n phoneNumber: {\n label: 'Телефон',\n },\n password: {\n label: 'Пароль',\n },\n },\n require: 'Поле обязательно для заполнения',\n submitButton: 'Добавить',\n messages: {\n success: 'Курьер создан',\n },\n },\n deleteButton: {\n title: 'Вы точно хотите удалить курьера {{firstName}} {{middleName}}?',\n titleNoMiddleName: 'Вы точно хотите удалить курьера {{firstName}}?',\n content: 'Это действие невозможно отменить.',\n ok: 'Да, удалить',\n cancel: 'Нет',\n messages: {\n success: 'Курьер удален',\n },\n },\n};\n","export default {\n title: 'Материалы',\n table: {\n columns: {\n material: 'Материал',\n purpose: 'Для чего он вам нужен?',\n },\n preview: 'Просмотр',\n },\n};\n","import { appScreens } from './../../routes/partner-cabinet/routes/banners/utils';\nexport default {\n title: {\n banners: 'Баннеры',\n newBanner: 'Новый баннер',\n editBanner: 'Редактировать баннер',\n editBannerShort: 'Редактировать',\n editStoryShort: 'Редактировать',\n displayLimits: 'Ограничение на показ баннера:',\n },\n types: {\n ClickBanner: 'Рекламный баннер',\n Story: 'История',\n InfoBanner: 'Информационный баннер',\n ProductSetBanner: 'Набор продуктов ',\n },\n form: {\n label: {\n type: 'Тип баннера',\n deliveryAreas: 'Зоны доставки',\n position: 'Позиция',\n bannerPreview: 'Превью баннера',\n storyPreview: 'Превью истории',\n banner: 'Баннер',\n story: 'История',\n storySlide: 'Слайд истории',\n link: 'Ссылка',\n screenInApp: 'Страница в приложении',\n productSetNumber: 'Номер набора продуктов',\n buttonCaption: 'Текст на кнопке',\n duration: 'Длительность',\n description: 'Описание',\n pageMobile: 'Страница',\n linkType: 'Тип ссылки',\n targetTab: 'Вкладка',\n linkTypes: {\n external: 'Внешняя ссылка',\n deeplink: 'На страницу в приложении',\n notSpecified: 'Не указан тип ссылки',\n },\n appScreens: {\n catalog: 'Каталог',\n about: 'О компании',\n invite: 'Пригласить друга',\n chat: 'Чат',\n contact: 'Форма обратной связи',\n mainProfile: 'Основной экран профиля',\n myProfile: 'Экран с данными профиля',\n coinsHistory: 'История начисления баллов',\n },\n enablePeriodLimit: 'По времени:',\n enableOrdersLimit: 'По количеству заказов клиента:',\n showOnStart: 'Показывать при старте',\n },\n button: {\n addBanner: 'Добавить баннер',\n addStory: 'Добавить историю',\n addSlideStory: 'Добавить слайд',\n deleteBanner: 'Удалить баннер',\n deleteStory: 'Удалить историю',\n deleteSlideStory: 'Удалить слайд',\n saveChanges: 'Сохранить изменения',\n },\n deleteConfirmation: {\n titleBanner: 'Вы действительно ходите удалить баннер?',\n titleStory: 'Вы действительно ходите удалить историю?',\n titleSlideStory: 'Вы действительно ходите удалить слайд?',\n content: 'Отменить данное действие невозможно',\n ok: 'Да, удалить',\n cancel: 'Отмена',\n },\n error: {\n required: 'Обязательное поле',\n notSpecified: 'Не определены для партнера',\n functionalityNotConnected: 'Функционал не подключен',\n },\n help: {\n noLonger: 'Не дольше {{DELAY_MAX_VALUE}} секунд',\n symbolsLeft: 'Символов осталось',\n uploadPreview: `Загрузить изображение\\n\\nРазмер превью любой, соотношение сторон 14:15\\nНе тяжелее двух мегабайт`,\n uploadBanner: `Загрузить изображение\\n\\nРазмер баннера любой, соотношение сторон 2:1\\nНе тяжелее двух мегабайт`,\n uploadStorySlide: `Загрузить изображение\\n\\nРазмеры слайда:\\n\\nВысота: 1920 px\\nШирина: 1080 px\\n\\nНе тяжелее\\nдвух мегабайт`,\n },\n message: {\n bannerUpdated: 'Баннер обновлен',\n storyUpdated: 'История обновлена',\n storySlideUpdated: 'Слайд обновлен',\n bannerDeleted: 'Баннер удален',\n storyDeleted: 'История удалена',\n storySlideDeleted: 'Слайд удален',\n clickBannerAdded: 'Рекламный баннер добавлен',\n storyAdded: 'История добавлена',\n storySlideAdded: 'Слайд добавлен',\n infoBannerAdded: 'Информационный баннер добавлен',\n productSetBannerAdded: 'Набор продуктов добавлен',\n },\n suffix: {\n sec: 'сек.',\n optional: '(необязательно)',\n },\n },\n tooltips: {\n limitQuantityOrders:\n 'Баннер видят только клиенты, у которых менее {{limitQuantityOrders}} заказов.',\n period: {\n activeFrom: 'Баннер отображается только с {{activeFrom}}.',\n activeTo: 'Баннер отображается только до {{activeTo}}',\n activeFromTo: 'Баннер отображается только с {{activeFrom}} до {{activeTo}}',\n },\n showOnStart: 'Баннер отображается во время запуска приложения.',\n settings: 'Настройки.',\n },\n emptyDescription: 'Описание отсутствует',\n};\n","export default {\n title: 'Отчет по отправленным SMS',\n table: {\n phone: 'Номер телефона',\n message: 'Сообщение',\n cost: 'Стоимость',\n createdAt: 'Создано',\n deliveryDate: 'Доставлено',\n type: 'Тип',\n totalCost: 'Общая стоимость',\n reportDownload: 'Скачать отчет за выбранный период',\n },\n type: {\n authorization: 'Авторизация',\n marketing: 'Маркетинг',\n },\n selector: {\n prefix: 'Тип сообщения:',\n notSelected: 'не выбран',\n },\n};\n","import registration from './registration';\nimport preregistration from './preregistration';\nimport login from './login';\nimport layout from './layout';\nimport dashboard from './dashboard';\nimport staticPages from './staticPages';\nimport transactions from './transactions';\nimport partnerSettings from './partnerSettings';\nimport finishRegistration from './finishRegistration';\nimport recoveryPassword from './recoveryPassword';\nimport profile from './profile';\nimport vending from './vending';\nimport couriers from './couriers';\nimport materials from './materials';\nimport banners from './banners';\nimport smsReport from './smsReport';\n\nexport default {\n registration,\n preregistration,\n login,\n layout,\n dashboard,\n staticPages,\n transactions,\n partnerSettings,\n finishRegistration,\n recoveryPassword,\n profile,\n vending,\n couriers,\n materials,\n banners,\n smsReport,\n};\n","export default {\n title: 'Cabinet of partner',\n labels: {\n tryOrderCabinet: 'Try demo version for operators',\n tryMobileApp: 'and mobile app demo version',\n loading: 'Wait for the download to finish',\n },\n buttons: {\n skip: 'Skip',\n next: 'Next',\n done: 'Complete',\n },\n steps: {\n password: {\n title: 'Set up a password to use the system',\n fields: {\n password: {\n label: 'Password',\n placeholder: 'Try to keep the password non-trivial*',\n help: '* use letters, numbers, and punctuation marks (preferably)',\n validators: {\n require: 'Required',\n equal: 'Passwords must match',\n },\n },\n repeatPassword: {\n label: 'Repeat password',\n validators: {\n require: 'Required',\n equal: 'Passwords must match',\n },\n },\n },\n },\n company: {\n title: 'We need more information about your company',\n fields: {\n partnerName: {\n label: 'Company Name',\n placeholder: 'Company LLC',\n validators: {\n require: 'Required',\n },\n },\n location: {\n label: 'City',\n validators: {\n require: 'Required',\n },\n },\n itn: {\n label: 'INN',\n placeholder: '1234567890',\n validators: {\n require: 'Required',\n },\n },\n currency: {\n label: 'Currency',\n validators: {\n require: 'Required',\n },\n },\n country: {\n label: 'Country',\n validators: {\n require: 'Required',\n },\n },\n contractEtching: {\n labelStart: 'I confirm that I have read the',\n labelLink: ' contract-offer ',\n labelFinish: 'and accept its terms',\n validators: {\n require: 'Required',\n },\n },\n },\n },\n },\n};\n","export default {\n title: \"Registration\",\n result: {\n title: \"You have registered in the system\",\n message: \"We have sent You an email ({{email}}), please open it and follow the instructions.\",\n spam: 'Please, if you have not received email within five minutes, check the Spam folder - it may have got there by mistake.'\n },\n form: {\n fields: {\n firstName: {\n placeholder: \"Your name\",\n label: \"Your name:\",\n validations: {\n require: \"Field is required\"\n }\n },\n email: {\n placeholder: \"E-mail\",\n label: \"E-mail:\",\n validations: {\n require: \"Field is required\",\n email: \"You specified an invalid email address\"\n }\n },\n phoneNumber: {\n placeholder: \"Phone\",\n label: \"Phone:\",\n validations: {\n require: \"Field is required\"\n }\n },\n agreement: {\n label: \"I agree with the privacy policy\",\n validations: {\n require: \"Your consent is required\"\n }\n },\n },\n labels: {\n agreement: 'By Clicking «Send» You agree to'\n },\n links: {\n agreement: \"privacy policy\"\n },\n submitButton: \"Submit\",\n alreadyHaveAccount: 'I already have an account',\n }\n}","import { AuthMethod } from \"../../routes/login/types\";\n\nexport default {\n title: 'Authorization',\n form: {\n fields: {\n username: {\n placeholder: \"example@mail.com\",\n label: \"E-mail\",\n validations: {\n require: \"this field is required\",\n email: \"You specified an invalid email address\"\n }\n },\n password: {\n label: \"Password\",\n validations: {\n require: \"this field is required\",\n }\n },\n rememberMe: {\n label: \"Remember me\",\n },\n phoneNumber: {\n label: \"Phone number\",\n validations: {\n phone: \"You specified an invalid phone number\",\n require: \"This field is required\",\n }\n }\n },\n submitButton: \"log In\",\n authMethods: {\n [AuthMethod.Phone]: \"By phone number\",\n [AuthMethod.Email]: \"By E-mail\"\n },\n },\n links: {\n registration: 'Registration',\n recoveryPassword: 'I forgot my password :('\n }\n}","export default {\n nav: {\n dashboard: 'Dashboard',\n balance: 'Balance',\n reports: 'Reports',\n documents: 'Documents',\n vending: 'Vendings',\n couriers: 'Couriers',\n materials: 'Materials',\n banners: 'Banners',\n smsReport: 'SMS report',\n },\n header: {\n company: 'Company',\n user: 'User',\n },\n mobileMenu: {\n company: 'Company settings',\n user: 'My profile',\n },\n footer: {\n contractOffer: 'User agreement',\n },\n buttons: {\n logout: 'Sign out',\n },\n};\n","export default {\n blocks: {\n marketerCabinet: {\n title: 'Marketing Panel',\n body: 'View reports and analyze data',\n },\n orderCabinet: {\n title: 'Sales Panel',\n body: 'View, add and edit orders and clients',\n },\n settingsCabinet: {\n title: 'Settings Panel',\n body: 'Make changes to products, services, images, descriptions, and prices',\n },\n clientApp: {\n title: 'My Mobile App',\n //body: \"Make changes to products, services, images, descriptions, and prices\"\n },\n orderSite: {\n title: 'My Website',\n //body: \"Make changes to products, services, images, descriptions, and prices\"\n },\n knowledge: {\n title: 'Knowledge base',\n body: 'Find answers to questions about working with the system',\n },\n },\n welcome: {\n title: 'Thank you',\n title2: 'for registration!',\n subTitle: 'We will call you soon :)',\n phone: 'Or you can contact us by phone',\n subPhone: 'for further actions',\n },\n labels: {\n login: 'Login',\n password: 'Password',\n links: {\n apple: 'App Store',\n google: 'Google Play',\n smartLink: 'Smart Link',\n },\n },\n tooltips: {\n copy: 'Copy',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n smartLink:\n 'The address of a special page which redirects to the application store automatically',\n },\n messages: {\n login: 'Username copied',\n password: 'Password copied',\n linkCopied: 'Link copied',\n },\n buttons: {\n goToCabinet: 'Go',\n },\n documents: {\n title: 'Documents',\n content: {\n datepiker: {\n from: 'Beginning of period',\n to: 'End of period',\n select: 'All orders',\n },\n table: {\n label: 'Bill for',\n date: 'Date',\n total: 'Total',\n panel: {\n header: 'Other',\n extra: 'Act',\n content: 'Act',\n },\n error: 'No invoices found',\n },\n },\n state: {\n invoice_created: 'Pay',\n invoice_paid: 'Paid',\n invoice_archived: 'Archived',\n },\n },\n};\n","export default {\n comingSoon: \"The page is still in development\"\n}","export default {\n title: 'Balance history',\n labels: {\n balance: 'Balance',\n totalPay: 'Amount to be paid',\n debit: 'Debit',\n paymentMethod: 'Choose payment method',\n },\n buttons: {\n deposit: 'Add funds',\n deposit2: 'Add',\n },\n};\n","export default {\n intervals: {\n title: \"Delivery areas and schedule\",\n labels: {\n deliveryTime: \"Delivery Time\",\n in: 'For',\n beforeEnd: \"minute until the end of the interval\",\n beforeStart: \"End of order acceptance periods\",\n example: \"For Example\",\n title: \"You've almost there :)\",\n subtitle: \"Just fill out delivery information\"\n },\n messages: {\n deleted: \"Deleted\"\n },\n dialogs: {\n delete: {\n title: \"Are you sure?\",\n content: 'The action cannot be undone',\n ok: \"Yes, delete\",\n cancel: \"No\"\n }\n },\n buttons: {\n addDelivery: \"Add delivery\",\n delete: \"Delete\",\n addInterval: \"Add interval\"\n },\n helpers: {\n sameDayDelivery: {\n title: `Until when should the order arrive so that you can deliver it during this delivery period.`,\n example: `Delivery Interval from 12:00 to 14: 00. Orders for \n this interval you finish processing\n at 10:00 2 hour before the start of the interval`\n },\n expressDelivery: {\n title: `How long before the end of the delivery interval\n an Express order must be received in order for it\n accepted?`,\n example: `Delivery Interval from 12:00 to 14: 00. Express-\n orders for this interval you finish\n take at 13:00, that is, 60 minute before the end\n interval's`\n }\n },\n fields: {\n districts: {\n label: \"Districts (if any)\"\n },\n payment: {\n label: \"Online payment (Choice bank)\"\n },\n days: {\n label: \"Day of delivery\",\n validation: {\n require: \"Required\"\n }\n },\n from: {\n label: \"From\",\n validation: {\n require: \"Required\"\n }\n },\n to: {\n label: \"To\",\n validation: {\n require: \"Required\"\n }\n },\n sameDayDelivery: {\n label: 'Intraday delivery',\n },\n expressDelivery: {\n label: 'Express delivery'\n },\n }\n }\n\n}","import { StepName } from \"../../routes/partner-cabinet/routes/finish-registration/components/stepperHelper/StepNameEnum\";\n\nexport default {\n buttons: {\n next: \"Next\",\n complete: \"Complete\"\n },\n pricingPlans: {\n title: \"Thank You\",\n title2: \"for registering!\",\n subtitle: \"Choose your plan\",\n pricesTable: {\n title: 'Pricing plan — ',\n },\n messages: {\n notSelectedPricingPlan: \"Choose a pricing plan\"\n },\n labels: {\n pricingPlanDuration: 'Period',\n pricingPlanMonthlyPrice: 'Monthly payment',\n pricingPlanPrice: 'Price',\n launchAmount: \"Launch price\",\n pricingPlanActions: \"Choose\",\n }\n },\n payment: {\n title: \"Are you ready to start? Let's make a payment!\",\n card: {\n bankCard: {\n title: \"Online payment\",\n content: \"Pay online\",\n },\n contract: {\n title: \"Requisites\",\n content: \"Agreement \",\n }\n },\n labels: {\n oferta: \"Oferta Agreement\",\n paymentMethodsNotAvailable: \"Unfortunately, none of the existing payment methods are available to you.\",\n callUs: \"Contact us by phone:\",\n },\n fields: {\n file: {\n label: \"Upload the requisites\",\n validators: {\n require: \"This field is required\"\n }\n }\n },\n buttons: {\n download: \"Download\",\n back: \"Back to pricing plans\"\n },\n tooltips: {\n payWithOnlinePayment: 'Choose one of the available payment methods',\n },\n },\n company: {\n title: \"Tell us\",\n title2: \"about your company\",\n subtitle: `We need more information\n about your company for an individual app \n and sales website`,\n buttons: {\n save: \"Save\",\n next: \"Next\",\n skip: \"Skip\",\n back: \"Back\"\n },\n navigation: {\n about: \"About the company\",\n contacts: \"Company contacts\",\n dispatchers: \"Operator\",\n links: \"Links\",\n paymmentMethods: \"How will your customers pay?\",\n details: \"Company details\",\n assets: \"Brand design\",\n },\n steps: {\n main: {\n title: \"Company information\",\n fields: {\n brandName: {\n label: \"Brand Name\",\n validators: {\n require: \"please, fill it\"\n }\n },\n memo: {\n label: \"This text will be on the sales site and in the client application\",\n placeholder: \"Tell us what year you have been on the market, what are your advantages, what is your product range\",\n validators: {\n require: \"please, fill it\"\n }\n }\n }\n },\n contacts: {\n title: \"Company contacts\",\n fields: {\n directorPhoneNumber: {\n label: \"Manager's Phone number\",\n validators: {\n require: \"please, fill it\"\n }\n },\n directorEmail: {\n label: \"Manager's E-mail\",\n validators: {\n require: \"please, fill it\",\n email: \"It looks Like you entered an invalid email address\"\n }\n },\n companyPhoneNumber: {\n label: \"Company Phone\",\n validators: {\n require: \"please, fill it\"\n }\n },\n companyEmail: {\n label: \"Company's E-mail\",\n validators: {\n require: \"please, fill it\",\n email: \"It looks Like you entered an invalid email address\"\n }\n },\n pickupLocation: {\n label: \"Pickup address\",\n }\n }\n },\n dispatchers: {\n title: \"Operator\",\n fields: {\n dispatcherPhoneNumber: {\n label: \"Operator's Phone number\",\n validators: {\n require: \"please, fill it\"\n }\n },\n dispatcherEmail: {\n label: \"Operator's E-mail\",\n validators: {\n require: \"please, fill it\",\n email: \"It looks Like you entered an invalid email address\"\n }\n },\n }\n },\n links: {\n title: \"Links to social networks\",\n fields: {\n site: { label: \"Website\", check: \"we don't have any\" },\n vkLink: { label: \"Social Network page\", check: \"we don't have any\" },\n instagramLink: { label: \"Instagram\", check: \"we don't have Instagram\" },\n misc: { label: \"Other sources\" },\n }\n },\n paymentMethods: {\n title: \"How will your customers pay?\",\n fields: {\n onlinePayment: {\n notSelected: \"Not selected\",\n },\n other: {\n label: \"Other option\"\n }\n }\n },\n assets: {\n title: \"Upload your logo and brand book (if available)\",\n labels: {\n sendEmail: \"Or send data to email\",\n sendEmail2: \"In the subject line, write the city you are from and the name of your company / brand\"\n }\n },\n details: {\n title: \"Upload your company details\",\n fields: {\n companyDetails: {\n validators: {\n require: 'Company details are required for uploading'\n }\n }\n }\n },\n }\n },\n partnerFinish: {\n title: 'Thank you for registering!',\n discription:\n 'In the near future we will contact you, ask a few clarifying questions and start building your application.',\n },\n stepper: {\n [StepName.pricingPlan]: \"Pricing Plan\",\n [StepName.payment]: \"Payment\",\n [StepName.companyInfo]: \"About company\",\n }\n}","export default {\n title: 'Password recovery',\n form: {\n fields: {\n phone: {\n label: 'Phone',\n validations: {\n require: 'this field is required',\n },\n },\n verificationCode: {\n label: 'Last {{codeLength}} numbers',\n validations: {\n require: 'this field is required',\n },\n },\n password: {\n label: 'New password',\n validations: {\n require: 'this field is required',\n repeat: 'Passwords must match',\n },\n },\n repeatPassword: {\n label: 'Repeat the new password',\n validations: {\n require: 'this field is required',\n repeat: 'Passwords must match',\n },\n },\n },\n submitButton: 'Войти',\n },\n labels: {\n phoneStep:\n 'Enter your phone number, it will receive an incoming call, you do not need to answer',\n verificationStep:\n 'You will receive an incoming call to {{phoneNumber}}, enter the last {{codeLength}} numbers',\n createPasswordStep: 'Great :) Now enter your new password',\n },\n buttons: {\n sendCode: 'Send',\n createPassword: 'Change password',\n repeatVerification: \"I didn't get the code :(\",\n },\n messages: {\n successResetPassword: 'Password changed successfully',\n requestResetPassword: `Code re-sent to {{phoneNumber}}`,\n },\n};\n","export default {\n title: \"Company Panel\",\n tabs: {\n companyProfile: \"Company profile\",\n pricingPlans: \"Pricing plans\",\n integrations: \"Integrations\",\n },\n companyProfile: {\n fields: {\n companyName: {\n label: \"Company name\",\n placeholder: \"Type your company name\",\n validations: {\n require: \"This field is required\",\n }\n },\n companyLogo: {\n label: \"Logo\",\n validations: {\n image: \"Logo should be an image\",\n }\n },\n companyLocations: {\n label: \"Cities:\",\n },\n newCity: {\n label: \"Add city\",\n validations: {\n require: \"Choose your city from the list\",\n }\n },\n itn: {\n label: \"EIN Number\",\n placeholder: \"Type your EIN Number\",\n validators: {\n notValid: 'EIN Number is not valid',\n }\n }\n },\n submitButton: \"Save\",\n },\n plans: {\n pricesTable: {\n title: 'Pricing plan — ',\n },\n fields: {\n pricingPlanDuration: 'Period',\n pricingPlanMonthlyPrice: 'Monthly payment',\n pricingPlanPrice: 'Price',\n },\n tariffDocumentName: \"Pricing plans.pdf\",\n yourPlan: \"your pricing plan\",\n changePlan: \"To change the pricing plan, you can contact us at\",\n },\n integrations: {\n amo: {\n title: 'AmoCRM',\n amoButtonTitle: 'Connect amoCRM',\n amoPopupTitle: 'Grant access for integration',\n connected: 'Connected',\n },\n },\n messages: {\n successPricingPlanUpdate: \"Your pricing plan was successfully updated\",\n successCompanyLogoUpdate: \"Your company logo was successfully updated\",\n successCompanyNameUpdate: \"Your company name was successfully updated\",\n successCompanyLocationsUpdate: \"Cities list was successfully updated\",\n successCompanyLocationCreate: \"New city was successfully updated\",\n successCompanyItnUpdate: \"EIN Number was successfully updated\"\n }\n}","import { FillingGraphLegends } from '../../routes/partner-cabinet/routes/vending/components/graphs/FillingsGraph/FillingsGraph';\nimport { VendingTelemetryStatus } from '../../routes/partner-cabinet/routes/vending/utils/vendingTelemetryUtils';\nimport { NamedPeriod } from '../../types';\n\nexport default {\n title: 'Vendings',\n liters: 'ltr.',\n meters: 'm.',\n registry: {\n timezoneTitle: 'Vending timezone',\n timezoneHelper: 'The time zone of the vending is used to display the time on the charts',\n },\n table: {\n columns: {\n address: 'Address',\n temperature: 'Temperature, ℃',\n waterLevel: 'Water level, m.',\n lastActivity: 'Latest activity',\n timezone: 'Vending timezone',\n },\n timezoneHelper: 'Time is displayed in the vending timezone',\n onTheMap: 'On the map',\n },\n waterVolume: {\n title: 'Water level',\n },\n temperature: {\n title: 'Vending temperature',\n },\n fillings: {\n title: 'Fillings',\n },\n temperatureGraph: {\n title: 'Vending temperature dynamics',\n legend: 'Temperature, ℃',\n },\n waterVolumeGraph: {\n title: 'Water level dynamics',\n legend: 'Water level, m.',\n },\n fillingsGraph: {\n title: 'Filling dynamics',\n legend: 'Volume, ltr.',\n legends: {\n [FillingGraphLegends.TotalVolume]: 'Total volume',\n [FillingGraphLegends.MobileAppVolume]: 'Mobile app',\n },\n parameters: {\n title: 'Indicators for the period',\n totalFillings: 'Total volume of fillings',\n mobileFillings: 'Through the app',\n },\n },\n periodSwitcher: {\n [NamedPeriod.Days]: 'Day',\n [NamedPeriod.Weeks]: 'Week',\n [NamedPeriod.Months]: 'Month',\n },\n datePicker: {\n from: 'Beginning of period',\n to: 'End of period',\n },\n vendingPopup: {\n temperature: 'Temperature',\n waterLevel: 'Water level',\n lastActivity: 'Latest activity',\n liters: 'ltr.',\n meters: 'm.',\n goToVendingScreen: 'Go to the vending screen',\n timezone: 'Timezone',\n },\n colorLegend: {\n [VendingTelemetryStatus.Active]: 'Working',\n [VendingTelemetryStatus.NonActive]: 'Not working',\n [VendingTelemetryStatus.Critical]: 'Critical state',\n title: 'Vending state',\n },\n};\n","export default {\n title: 'Couriers',\n addCourier: 'Courier',\n table: {\n columns: {\n name: 'Name',\n phoneNumber: 'Phone number',\n email: 'E-mail',\n },\n tooltips: {\n notVerified: 'Courier has not yet been confirmed by the system',\n deleteCourier: 'Delete courier',\n },\n },\n form: {\n title: 'New courier',\n fields: {\n firstName: {\n label: 'First name',\n placeholder: 'John',\n },\n middleName: {\n label: 'Last name',\n placeholder: 'Smith',\n },\n familyName: {\n label: 'Middle name (optional)',\n placeholder: '',\n },\n email: {\n label: 'E-mail',\n placeholder: 'example@gmail.com',\n },\n phoneNumber: {\n label: 'Phone number',\n },\n password: {\n label: 'Password',\n },\n },\n require: 'This field is required',\n submitButton: 'Add',\n messages: {\n success: 'Courier created',\n },\n },\n deleteButton: {\n title: 'Are you sure you want to delete the courier {{firstName}} {{middleName}}?',\n titleNoMiddleName: 'Are you sure you want to delete the courier {{firstName}}?',\n content: 'This action cannot be undone.',\n ok: 'Yes, delete',\n cancel: 'No',\n messages: {\n success: 'The courier has been deleted',\n },\n },\n};\n","export default {\n title: 'Materials',\n table: {\n columns: {\n material: 'Material',\n purpose: 'How can it help you?',\n },\n preview: 'Preview',\n },\n};\n","export default {\n title: {\n banners: 'Banners',\n newBanner: 'New banner',\n editBanner: 'Edit banner',\n editBannerShort: 'Edit banner',\n editStoryShort: 'Edit story',\n displayLimits: 'Banner display limit:',\n },\n types: {\n ClickBanner: 'Advertising banner',\n Story: 'Story',\n InfoBanner: 'Information banner',\n ProductSetBanner: 'Set of products',\n },\n form: {\n label: {\n type: 'Banner type',\n deliveryAreas: 'Delivery Areas',\n position: 'Position',\n bannerPreview: 'Banner preview',\n storyPreview: 'Story preview',\n banner: 'Banner',\n story: 'Story',\n storySlide: 'Story slide',\n link: 'Link',\n screenInApp: 'Screen in the mobile app',\n productSetNumber: 'Product set number',\n buttonCaption: 'Button caption',\n duration: 'Duration',\n description: 'Description',\n pageMobile: 'Page in app',\n linkType: 'Link type',\n targetTab: 'Tab',\n linkTypes: {\n external: 'External link',\n deeplink: 'Link to a screen in the mobile app',\n notSpecified: 'Link type not specified',\n },\n appScreens: {\n catalog: 'Catalog',\n about: 'About',\n invite: 'Invite a friend',\n chat: 'Chat',\n contact: 'Contact',\n mainProfile: 'Main profile',\n myProfile: 'My profile',\n coinsHistory: 'Coins history',\n },\n enablePeriodLimit: 'By time:',\n enableOrdersLimit: 'By number of customer orders:',\n showOnStart: 'Show on start',\n },\n button: {\n addBanner: 'Add banner',\n addStory: 'Add story',\n addSlideStory: 'Add slide',\n deleteBanner: 'Delete banner',\n deleteStory: 'Delete story',\n deleteSlideStory: 'Delete slide',\n saveChanges: 'Save changes',\n },\n deleteConfirmation: {\n titleBanner: 'Are you sure you want to delete the banner?',\n titleStory: 'Are you sure you want to delete the story?',\n titleSlideStory: 'Are you sure you want to delete the slide?',\n content: 'You cannot undo this action',\n ok: 'Yes, delete',\n cancel: 'Cancel',\n },\n error: {\n required: 'Required field',\n notSpecified: 'Not specified for partner',\n functionalityNotConnected: 'The functionality is not connected',\n },\n help: {\n noLonger: 'No longer than {{DELAY_MAX_VALUE}} sec.',\n symbolsLeft: 'Symbols left',\n uploadPreview: `Upload image\\n\\nPreview size is arbitrary, aspect ratio is 14:15\\nFile size should not exceed 2 megabytes`,\n uploadBanner: `Upload image\\n\\nPreview size is arbitrary, aspect ratio is 2:1\\nFile size should not exceed 2 megabytes`,\n uploadStorySlide: `Upload image\\n\\nSlide size:\\n\\nHeight: 1920 px\\nWidth: 1080 px\\n\\nFile size\\nshould not exceed\\n2 megabytes`,\n },\n message: {\n bannerUpdated: 'The banner has been updated',\n storyUpdated: 'The story has been updated',\n storySlideUpdated: 'The slide has been updated',\n bannerDeleted: 'The banner has been deleted',\n storyDeleted: 'The story has been deleted',\n storySlideDeleted: 'The slide has been deleted',\n clickBannerAdded: 'Advertising banner has been added',\n storyAdded: 'Story has been added',\n storySlideAdded: 'Slide has been added',\n infoBannerAdded: 'Information banner has been added',\n productSetBannerAdded: 'Set of products has been added',\n },\n suffix: {\n sec: 'sec.',\n optional: '(optional)',\n },\n },\n tooltips: {\n limitQuantityOrders:\n 'The banner is only visible to customers with less than {{limitQuantityOrders}} orders.',\n period: {\n activeFrom: 'Banner is only displayed with {{activeFrom}}.',\n activeTo: 'The banner is displayed only up to {{activeTo}}',\n\n activeFromTo: 'The banner is displayed only from {{activeFrom}} to {{activeTo}}',\n },\n showOnStart: 'Banner is displayed during app launch.',\n settings: 'Settings.',\n },\n emptyDescription: 'No description',\n};\n","export default {\n title: 'SMS report',\n table: {\n phone: 'Phone number',\n message: 'Message',\n cost: 'Cost',\n createdAt: 'Ceated at',\n deliveryDate: 'Delivered in',\n type: 'Type',\n totalCost: 'Total cost',\n reportDownload: 'Download report for the selected period',\n },\n type: {\n authorization: 'Authorization',\n marketing: 'Marketing',\n },\n selector: {\n prefix: 'Message type:',\n notSelected: 'not selected',\n },\n};\n","import { createTranslationMap } from '../aqua-delivery-web-client-ui/i18n';\nimport ru from './ru';\nimport en from './en';\n\nexport const translateMap: typeof ru = createTranslationMap(ru);\n\nexport default {\n ru,\n en,\n};\n","import * as React from 'react';\n\nimport { LoaderContext } from './LoaderContext';\n\nfunction makeid() {\n var text = '';\n var possible = 'abcdefghijklmnopqrstuvwxyz';\n\n for (var i = 0; i < 8; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n\n return text;\n}\n\nconst Loader: React.FC<{ loading?: boolean }> = ({ loading }) => {\n const [loaderId] = React.useState(makeid());\n const loader = React.useContext(LoaderContext);\n\n React.useEffect(() => {\n loader.setLoaderState(loaderId, !!loading);\n return () => {\n loader.setLoaderState(loaderId, false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, loaderId]);\n\n return null;\n};\n\nexport default Loader;\n","import { gql } from \"apollo-boost\";\n\nimport { BaseEntity } from \"../../types\";\n\nexport declare type TRegistry = BaseEntity<{\n username: string;\n active: boolean;\n empty: boolean | null;\n enabled: boolean;\n}>\n\nconst fragment = gql`\n fragment Registry on Registry {\n id,\n username,\n active,\n empty,\n enabled\n }\n`;\n\nconst RegistryEntity = {\n fragment,\n createId: (id: string) => `/iot/registries/${id}`,\n};\n\nexport default RegistryEntity","import React from 'react';\n\nimport { Locale } from 'antd/lib/locale-provider';\n\nimport { I18nContext } from '../aqua-delivery-web-client-ui/i18n';\n\nimport ru from 'antd/es/locale/ru_RU';\nimport en from 'antd/es/locale/en_US';\n\ntype AntdLocale = {\n antdLocale: Locale;\n};\n\nconst locales: Record = {\n ru,\n en,\n};\n\nexport default function (): AntdLocale {\n const { locale } = React.useContext(I18nContext);\n\n return {\n antdLocale: locales[locale],\n };\n}\n","import * as React from \"react\";\n\nexport type LoaderContextProps = {\n setLoaderState: (id: string, state: boolean)=>void\n}\n\nexport const LoaderContext = React.createContext({\n setLoaderState: ()=>{}\n})","import { Theme } from '@nivo/core';\n\nconst nivoTheme: Theme = {\n fontSize: 12,\n grid: {\n line: {\n stroke: '#D9D9D9',\n strokeWidth: 1,\n },\n },\n axis: {\n ticks: {\n text: {\n color: '#404040',\n fontSize: 12,\n opacity: 0.67,\n },\n line: {\n stroke: '#E6E6E6',\n strokeWidth: 2,\n },\n },\n },\n};\n\nexport default nivoTheme;\n","import { QueryHookOptions, useQuery } from \"@apollo/react-hooks\";\nimport { gql } from \"apollo-boost\";\n\nimport RegistryEntity, { TRegistry } from \"../entities/RegistryEntity\";\nimport PostalAddressEntity, { TPostalAddress } from \"../entities/PostalAddressEntity\";\n\nexport type GetRegistryVariables = {\n id: string,\n}\n\nexport type GetRegistryResult = {\n registry: TRegistry & {\n postalAddress: TPostalAddress,\n },\n}\n\nconst query = gql`\n query getRegistry($id: ID!) {\n registry(id: $id) {\n ...Registry,\n postalAddress {\n ...PostalAddress,\n }\n }\n }\n\n ${RegistryEntity.fragment}\n ${PostalAddressEntity.fragment}\n`;\n\nexport default function (options: QueryHookOptions) {\n return useQuery(query, options);\n}","import React from 'react';\n\nimport { PointTooltipProps } from '@nivo/line';\n\nimport View from '../../../../../../aqua-delivery-web-client-ui/components/View';\n\nconst PointTooltip: React.FC = ({ children, ...other }) => (\n \n {children}\n \n);\n\nexport default PointTooltip;","import React, { useContext, useMemo } from 'react';\n\nimport { Typography } from 'antd';\nimport { PointTooltipProps } from '@nivo/line';\n\nimport EmptyPanel from '../../../../../../aqua-delivery-web-client-ui/components/EmptyPanel';\nimport { formatWithSign } from '../../../../../../aqua-delivery-client-graphql/utils';\nimport useLocalTranslation from '../../../../../../hooks/useLocalTranslation';\nimport useTelemetry from '../../../../../../aqua-delivery-client-graphql/iot/queries/useTelemetry';\nimport TelemetryReportEntity, {\n TelemetryType,\n AggregationType,\n} from '../../../../../../aqua-delivery-client-graphql/iot/entities/TelemetryReportRequestEntity';\n\nimport BaseLineGraph from '../base-graph/BaseLineGraph';\nimport Section from '../section/Section';\nimport PointTooltip from '../base-graph/PointTooltip';\nimport {\n formatChartDataPeriod,\n transformTimelineChartData,\n getChartDataUtcPeriod,\n} from '../../utils/graphUtils';\nimport GraphLoader from '../base-graph/GraphLoader';\nimport usePeriod, { getNamedPeriodDates } from '../../hooks/usePeriod';\nimport { RegistryContext } from '../../Registry';\nimport PeriodSectionHeader from '../section/PeriodSectionHeader';\nimport Graph from '../base-graph/Graph';\nimport SectionHeader from '../section/SectionHeader';\nimport { NamedPeriod } from '../../../../../../types';\nimport usePeriodGraphPoints from '../../hooks/usePeriodGraphPoints';\n\ntype TemperatureGraphProps = {\n registryId: string;\n};\n\nconst TemperatureTooltip = (props: PointTooltipProps) => {\n const { dayjs } = useContext(RegistryContext);\n\n return (\n \n <>\n {formatWithSign(Number(props.point.data.y)) + '°'}\n \n {dayjs(props.point.data.x).format('DD.MM.YY HH:mm')}\n \n \n \n );\n};\n\nconst defaultPeriod = NamedPeriod.Weeks;\n\nconst TemperatureGraph: React.FC = ({ registryId }) => {\n const { dayjs, timezone } = useContext(RegistryContext);\n\n const { period, utcPeriod, setPeriod, namedPeriod, isDailyPeriod } = usePeriod({\n namedPeriod: defaultPeriod,\n useNamedPeriod: true,\n ...getNamedPeriodDates(defaultPeriod, timezone),\n });\n\n const { points } = usePeriodGraphPoints({ defaultPoints: 60, namedPeriod, period });\n\n const { legend, title: graphTitle } = useLocalTranslation(\n t => t.vending.temperatureGraph,\n t => t,\n );\n\n const { title } = useLocalTranslation(\n t => t.vending.temperature,\n t => t,\n );\n\n const chartPeriodDates = getChartDataUtcPeriod(utcPeriod, timezone);\n const unitInterval = TelemetryReportEntity.getUnitInterval(chartPeriodDates, points);\n const formattedChartDataPeriod = formatChartDataPeriod(chartPeriodDates);\n\n const variables = {\n registry: registryId,\n type: TelemetryType.Temperature,\n aggregationType: AggregationType.Avg,\n interval: unitInterval,\n ...formattedChartDataPeriod,\n };\n\n const { data: temperature, loading: temperatureLoading } = useTelemetry({\n variables,\n fetchPolicy: 'network-only',\n pollInterval: 60 * 2000,\n });\n\n const chartData = useMemo(\n () =>\n transformTimelineChartData(\n TelemetryReportEntity.toObject(temperature?.getTelemetryReport.values).map(\n item => ({\n ...item,\n value: item.value && Math.round(item.value),\n }),\n ),\n ),\n [temperature],\n );\n\n const chartDataLength = chartData.aggregatedData.filter(item => item.y !== null).length;\n\n const minMaxValues = useMemo(() => {\n if (chartData.series.length === 0) {\n return {\n min: 0,\n max: 0,\n };\n }\n\n const verticalPadding = 1;\n\n const values = chartData.aggregatedData\n .map(item => item.y)\n .filter(item => item !== null) as number[];\n\n const min = Math.min(...values) - verticalPadding;\n const max = Math.max(...values) + verticalPadding;\n\n return { min, max };\n }, [chartData]);\n\n const areaBaselineValue = useMemo(() => {\n const { min, max } = minMaxValues;\n\n if (max < 0) return max;\n if (min > 0) return min;\n\n return 0;\n }, [minMaxValues]);\n\n return (\n
\n \n
\n \n \n \n {chartDataLength > 0 ? (\n \n Number.isInteger(Number(temperature))\n ? formatWithSign(Number(temperature))\n : '',\n }}\n axisBottomProps={{\n format: values =>\n dayjs(values).format(isDailyPeriod ? 'HH:mm' : 'DD.MM'),\n }}\n areaBaselineValue={areaBaselineValue}\n tooltip={TemperatureTooltip}\n {...minMaxValues}\n />\n ) : (\n \n )}\n \n
\n
\n );\n};\n\nexport default TemperatureGraph;\n","import React, { useMemo, useContext } from 'react';\n\nimport { PointTooltipProps } from '@nivo/line';\nimport { Typography } from 'antd';\n\nimport EmptyPanel from '../../../../../../aqua-delivery-web-client-ui/components/EmptyPanel';\nimport useLocalTranslation from '../../../../../../hooks/useLocalTranslation';\nimport useTelemetry from '../../../../../../aqua-delivery-client-graphql/iot/queries/useTelemetry';\nimport TelemetryReportEntity, {\n TelemetryType,\n AggregationType,\n} from '../../../../../../aqua-delivery-client-graphql/iot/entities/TelemetryReportRequestEntity';\nimport { roundNumber } from '../../../../../../aqua-delivery-client-graphql/utils';\n\nimport BaseLineGraph from '../base-graph/BaseLineGraph';\nimport Section from '../section/Section';\nimport PointTooltip from '../base-graph/PointTooltip';\nimport GraphLoader from '../base-graph/GraphLoader';\nimport {\n formatChartDataPeriod,\n transformTimelineChartData,\n getChartDataUtcPeriod,\n} from '../../utils/graphUtils';\nimport usePeriod, { getNamedPeriodDates } from '../../hooks/usePeriod';\nimport { RegistryContext } from '../../Registry';\nimport Graph from '../base-graph/Graph';\nimport PeriodSectionHeader from '../section/PeriodSectionHeader';\nimport SectionHeader from '../section/SectionHeader';\nimport { NamedPeriod } from '../../../../../../types';\nimport usePeriodGraphPoints from '../../hooks/usePeriodGraphPoints';\nimport { DatumValue } from '@nivo/core';\n\ntype VolumeGraphProps = {\n registryId: string;\n};\n\nconst WaterVolumeTooltip = (props: PointTooltipProps) => {\n const { dayjs } = useContext(RegistryContext);\n\n const [meters] = useLocalTranslation(\n t => t.vending,\n t => [t.meters],\n );\n\n return (\n \n <>\n {`${props.point.data.y} ${meters}`}\n \n {dayjs(props.point.data.x).format('DD.MM.YY HH:mm')}\n \n \n \n );\n};\n\nconst defaultPeriod = NamedPeriod.Weeks;\n\nconst VolumeGraph: React.FC = ({ registryId }) => {\n const { dayjs, timezone } = useContext(RegistryContext);\n\n const { period, utcPeriod, setPeriod, namedPeriod, isDailyPeriod } = usePeriod({\n namedPeriod: defaultPeriod,\n useNamedPeriod: true,\n ...getNamedPeriodDates(defaultPeriod, timezone),\n });\n\n const { points } = usePeriodGraphPoints({ defaultPoints: 60, namedPeriod, period });\n\n const { legend, title: graphTitle } = useLocalTranslation(\n t => t.vending.waterVolumeGraph,\n t => t,\n );\n\n const { title } = useLocalTranslation(\n t => t.vending.waterVolume,\n t => t,\n );\n\n const chartPeriodDates = getChartDataUtcPeriod(utcPeriod, timezone);\n const unitInterval = TelemetryReportEntity.getUnitInterval(chartPeriodDates, points);\n const formattedChartDataPeriod = formatChartDataPeriod(chartPeriodDates);\n\n const variables = {\n registry: registryId,\n type: TelemetryType.Height,\n aggregationType: AggregationType.Avg,\n interval: unitInterval,\n ...formattedChartDataPeriod,\n };\n\n const { data: waterVolume, loading: waterVolumeLoading } = useTelemetry({\n variables,\n fetchPolicy: 'network-only',\n pollInterval: 60 * 2000,\n });\n\n const chartData = useMemo(\n () =>\n transformTimelineChartData(\n TelemetryReportEntity.toObject(\n waterVolume?.getTelemetryReport.values,\n ).map(event => ({ ...event, value: event.value && roundNumber(event.value, 2) })),\n ),\n [waterVolume],\n );\n\n const chartDataLength = chartData.aggregatedData.filter(item => item.y !== null).length;\n\n const minMaxValues = useMemo(() => {\n if (chartData.series.length === 0) return {};\n\n const values = chartData.aggregatedData\n .map(item => item.y)\n .filter(item => item !== null) as number[];\n\n const min = 0;\n const max = Math.max(...values) + 1;\n\n return { min, max };\n }, [chartData]);\n\n const axisLeftProps = useMemo(\n () => ({\n legend,\n format: (waterVolume: DatumValue) =>\n Number.isInteger(Number(waterVolume)) ? Number(waterVolume) : '',\n }),\n [legend],\n );\n\n const axisBottomProps = useMemo(\n () => ({\n format: (values: DatumValue) => dayjs(values).format(isDailyPeriod ? 'HH:mm' : 'DD.MM'),\n }),\n [dayjs, isDailyPeriod],\n );\n\n return (\n
\n \n
\n \n \n \n {chartDataLength > 0 ? (\n \n ) : (\n \n )}\n \n
\n
\n );\n};\n\nexport default VolumeGraph;\n","import React, { useCallback } from 'react';\n\nimport { RouteComponentProps, useHistory } from 'react-router-dom';\nimport { Spin, ConfigProvider, Typography } from 'antd';\nimport { When } from 'react-if';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport withNetworkLayer from '../../../../aqua-delivery-web-client-ui/components/network/withNetworkLayer';\nimport RegistryEntity from '../../../../aqua-delivery-client-graphql/iot/entities/RegistryEntity';\nimport useAntdLocale from '../../../../hooks/useAntdLocale';\nimport Title from '../../../../aqua-delivery-web-client-ui/components/page/Title';\nimport { TPostalAddress } from '../../../../aqua-delivery-client-graphql/iot/entities/PostalAddressEntity';\nimport useGetRegistry from '../../../../aqua-delivery-client-graphql/iot/queries/useGetRegistry';\nimport { getTimezoneFromCoordinates } from '../../../../aqua-delivery-web-client-ui/Utils';\nimport { createDayjsWithTimezone } from '../../../../aqua-delivery-web-client-ui/i18n';\nimport { formatWithSign } from '../../../../aqua-delivery-client-graphql/utils';\nimport useLocalTranslation from '../../../../hooks/useLocalTranslation';\nimport Help from '../../../../aqua-delivery-web-client-ui/components/Help';\n\nimport TemperatureGraph from './components/graphs/TemperatureGraph';\nimport VolumeGraph from './components/graphs/VolumeGraph';\nimport FillingsGraph from './components/graphs/FillingsGraph/FillingsGraph';\n\nimport './styles/styles.less';\n\ntype RouteParams = {\n id: string;\n};\n\ntype RegistryProps = RouteComponentProps;\n\nconst buildPageTitle = (postalAddress: TPostalAddress) => {\n return postalAddress.streetAddress\n ? `${postalAddress.streetAddress} (${postalAddress.addressLocality})`\n : postalAddress.addressLocality;\n};\n\nexport const RegistryContext = React.createContext<{\n timezone: number;\n dayjs: (date: Dayjs | Date | string | number) => Dayjs;\n}>({\n timezone: 0,\n dayjs: date => createDayjsWithTimezone(date, 0),\n});\n\nconst Registry: React.FC = props => {\n const [timezoneTitle, timezoneHelper] = useLocalTranslation(\n t => t.vending.registry,\n t => [t.timezoneTitle, t.timezoneHelper],\n );\n\n const history = useHistory();\n\n const goBack = useCallback(async () => history.push('/vending'), [history]);\n\n const { antdLocale } = useAntdLocale();\n\n const registryId = RegistryEntity.createId(props.match.params.id);\n\n const { data: registryData, loading } = useGetRegistry({\n variables: { id: registryId },\n });\n\n const postalAddress = registryData?.registry.postalAddress;\n\n const pageTitle = postalAddress && buildPageTitle(postalAddress);\n\n const coordinates = registryData?.registry.postalAddress.coordinates;\n\n const timezone = coordinates\n ? getTimezoneFromCoordinates(coordinates.latitude)\n : dayjs().utcOffset();\n\n return (\n createDayjsWithTimezone(date, timezone),\n }}\n >\n \n \n \n \n\n \n {timezoneTitle}:{' '}\n UTC{formatWithSign(timezone)}\n \n \n\n \n \n \n \n \n \n \n );\n};\n\nexport default withNetworkLayer({ service: 'iot' })(Registry);\n","import { Dayjs } from 'dayjs';\nimport generatePicker, {\n PickerDateProps,\n PickerTimeProps,\n RangePickerBaseProps,\n} from 'antd/lib/date-picker/generatePicker';\nimport dayjsGenerateConfig from 'rc-picker/lib/generate/dayjs';\n\nimport 'antd/es/date-picker/style/index';\n\nexport type DatePickerProps = PickerDateProps;\nexport type TimePickerProps = PickerTimeProps;\nexport type RangePickerProps = Omit, 'picker'>;\n\nconst DatePicker = generatePicker(dayjsGenerateConfig);\n\nexport default DatePicker;\n","import * as React from \"react\";\nimport { Radio as RadioBase } from \"antd\";\nimport { RadioProps } from \"antd/lib/radio\";\nimport classNames from \"classnames\";\n\nconst Radio: React.FC & { \n Group: typeof RadioBase.Group,\n Button: typeof RadioBase.Button \n} = (props) => {\n return (\n \n \n \n )\n}\n\nRadio.Group = RadioBase.Group;\nRadio.Button = RadioBase.Button;\n\nexport default Radio;","import React, { forwardRef } from 'react';\n\nimport { default as AntdIcon, IconComponentProps } from '@ant-design/icons/es/components/AntdIcon';\n\nexport type AntSvgIconProps = Omit;\n\nconst AntSvgIcon = forwardRef(\n (props: AntSvgIconProps, ref) => {\n return ;\n },\n);\n\nexport default AntSvgIcon;\n","import React, { forwardRef } from 'react';\n\nimport { default as SearchOutlinedBase } from '@ant-design/icons-svg/es/asn/SearchOutlined';\nimport { default as CloseCircleOutlinedBase } from '@ant-design/icons-svg/es/asn/CloseCircleOutlined';\nimport { default as CloseCircleFilledBase } from '@ant-design/icons-svg/es/asn/CloseCircleFilled';\nimport { default as PlusOutlinedBase } from '@ant-design/icons-svg/es/asn/PlusOutlined';\nimport { default as MinusOutlinedBase } from '@ant-design/icons-svg/es/asn/MinusOutlined';\nimport { default as WarningTwoToneBase } from '@ant-design/icons-svg/es/asn/WarningTwoTone';\nimport { default as SyncOutlinedBase } from '@ant-design/icons-svg/es/asn/SyncOutlined';\nimport { default as DeleteOutlinedBase } from '@ant-design/icons-svg/es/asn/DeleteOutlined';\nimport { default as ExclamationCircleTwoToneBase } from '@ant-design/icons-svg/es/asn/ExclamationCircleTwoTone';\nimport { default as InfoCircleOutlinedBase } from '@ant-design/icons-svg/es/asn/InfoCircleOutlined';\nimport { default as HistoryOutlinedBase } from '@ant-design/icons-svg/es/asn/HistoryOutlined';\nimport { default as LinkOutlinedBase } from '@ant-design/icons-svg/es/asn/LinkOutlined';\nimport { default as UserOutlinedBase } from '@ant-design/icons-svg/es/asn/UserOutlined';\nimport { default as EnvironmentOutlinedBase } from '@ant-design/icons-svg/es/asn/EnvironmentOutlined';\nimport { default as LoadingOutlinedBase } from '@ant-design/icons-svg/es/asn/LoadingOutlined';\nimport { default as MoreOutlinedBase } from '@ant-design/icons-svg/es/asn/MoreOutlined';\nimport { default as EditOutlinedBase } from '@ant-design/icons-svg/es/asn/EditOutlined';\nimport { default as DownOutlinedBase } from '@ant-design/icons-svg/es/asn/DownOutlined';\nimport { default as SortDescendingOutlinedBase } from '@ant-design/icons-svg/es/asn/SortDescendingOutlined';\nimport { default as SortAscendingOutlinedBase } from '@ant-design/icons-svg/es/asn/SortAscendingOutlined';\nimport { default as CaretDownOutlinedBase } from '@ant-design/icons-svg/es/asn/CaretDownOutlined';\nimport { default as PlusCircleOutlinedBase } from '@ant-design/icons-svg/es/asn/PlusCircleOutlined';\nimport { default as CreditCardFilledBase } from '@ant-design/icons-svg/es/asn/CreditCardFilled';\nimport { default as CheckOutlinedBase } from '@ant-design/icons-svg/es/asn/CheckOutlined';\nimport { default as CopyOutlinedBase } from '@ant-design/icons-svg/es/asn/CopyOutlined';\nimport { default as AndroidFilledBase } from '@ant-design/icons-svg/es/asn/AndroidFilled';\nimport { default as AppleFilledBase } from '@ant-design/icons-svg/es/asn/AppleFilled';\nimport { default as MailOutlinedBase } from '@ant-design/icons-svg/es/asn/MailOutlined';\nimport { default as PhoneOutlinedBase } from '@ant-design/icons-svg/es/asn/PhoneOutlined';\nimport { default as ClockCircleOutlinedBase } from '@ant-design/icons-svg/es/asn/ClockCircleOutlined';\nimport { default as QuestionCircleFilledBase } from '@ant-design/icons-svg/es/asn/QuestionCircleFilled';\nimport { default as CheckCircleOutlinedBase } from '@ant-design/icons-svg/es/asn/CheckCircleOutlined';\nimport { default as PictureOutlinedBase } from '@ant-design/icons-svg/es/asn/PictureOutlined';\nimport { default as VideoCameraOutlinedBase } from '@ant-design/icons-svg/es/asn/VideoCameraOutlined';\nimport { default as FileOutlinedBase } from '@ant-design/icons-svg/es/asn/FileOutlined';\nimport { default as EyeOutlinedBase } from '@ant-design/icons-svg/es/asn/EyeOutlined';\nimport { default as DownloadOutlinedBase } from '@ant-design/icons-svg/es/asn/DownloadOutlined';\n\nimport { IconDefinition } from '@ant-design/icons-svg/es/types';\n\nimport AntSvgIcon, { AntSvgIconProps } from './components/icon/AntSvgIcon';\n\nexport type IconProps = Partial;\n\nconst createIcon = (icon: IconDefinition) =>\n forwardRef((props: IconProps, ref) => (\n \n ));\n\nconst SearchOutlined = createIcon(SearchOutlinedBase);\nconst AndroidFilled = createIcon(AndroidFilledBase);\nconst AppleFilled = createIcon(AppleFilledBase);\nconst CopyOutlined = createIcon(CopyOutlinedBase);\nconst MailOutlined = createIcon(MailOutlinedBase);\nconst PhoneOutlined = createIcon(PhoneOutlinedBase);\nconst CheckCircleOutlined = createIcon(CheckCircleOutlinedBase);\nconst ClockCircleOutlined = createIcon(ClockCircleOutlinedBase);\nconst QuestionCircleFilled = createIcon(QuestionCircleFilledBase);\nconst CreditCardFilled = createIcon(CreditCardFilledBase);\nconst CheckOutlined = createIcon(CheckOutlinedBase);\nconst CloseCircleOutlined = createIcon(CloseCircleOutlinedBase);\nconst CloseCircleFilled = createIcon(CloseCircleFilledBase);\nconst PlusOutlined = createIcon(PlusOutlinedBase);\nconst MinusOutlined = createIcon(MinusOutlinedBase);\nconst WarningTwoTone = createIcon(WarningTwoToneBase);\nconst SyncOutlined = createIcon(SyncOutlinedBase);\nconst DeleteOutlined = createIcon(DeleteOutlinedBase);\nconst LinkOutlined = createIcon(LinkOutlinedBase);\nconst UserOutlined = createIcon(UserOutlinedBase);\nconst MoreOutlined = createIcon(MoreOutlinedBase);\nconst EditOutlined = createIcon(EditOutlinedBase);\nconst ExclamationCircleTwoTone = createIcon(ExclamationCircleTwoToneBase);\nconst InfoCircleOutlined = createIcon(InfoCircleOutlinedBase);\nconst HistoryOutlined = createIcon(HistoryOutlinedBase);\nconst EnvironmentOutlined = createIcon(EnvironmentOutlinedBase);\nconst LoadingOutlined = createIcon(LoadingOutlinedBase);\nconst DownOutlined = createIcon(DownOutlinedBase);\nconst PlusCircleOutlined = createIcon(PlusCircleOutlinedBase);\nconst SortDescendingOutlined = createIcon(SortDescendingOutlinedBase);\nconst SortAscendingOutlined = createIcon(SortAscendingOutlinedBase);\nconst CaretDownOutlined = createIcon(CaretDownOutlinedBase);\nconst PictureOutlined = createIcon(PictureOutlinedBase);\nconst VideoCameraOutlined = createIcon(VideoCameraOutlinedBase);\nconst FileOutlined = createIcon(FileOutlinedBase);\nconst EyeOutlined = createIcon(EyeOutlinedBase);\nconst DownloadOutlined = createIcon(DownloadOutlinedBase);\n\nexport {\n SearchOutlined,\n CloseCircleOutlined,\n CloseCircleFilled,\n PlusOutlined,\n MinusOutlined,\n WarningTwoTone,\n SyncOutlined,\n DeleteOutlined,\n ExclamationCircleTwoTone,\n InfoCircleOutlined,\n HistoryOutlined,\n LinkOutlined,\n UserOutlined,\n EnvironmentOutlined,\n LoadingOutlined,\n MoreOutlined,\n EditOutlined,\n DownOutlined,\n SortAscendingOutlined,\n SortDescendingOutlined,\n CaretDownOutlined,\n PlusCircleOutlined,\n CreditCardFilled,\n CheckOutlined,\n CopyOutlined,\n AndroidFilled,\n AppleFilled,\n PhoneOutlined,\n MailOutlined,\n ClockCircleOutlined,\n QuestionCircleFilled,\n CheckCircleOutlined,\n PictureOutlined,\n VideoCameraOutlined,\n FileOutlined,\n EyeOutlined,\n DownloadOutlined,\n};\n","import * as React from \"react\";\n\nexport type SVGProps = Partial<{\n width: number | string,\n height: number | string,\n stroke: string,\n strokeWidth: number\n rotate: number,\n fill: string,\n style: any,\n defaultStroke?: boolean\n}> & { source: any }\n\nconst SVG: React.FC = ({ source, rotate, defaultStroke, ...props }) => {\n const SourceComponent = source\n const stroke = defaultStroke? {} : {stroke:\"#4671ff\" }\n return \n}\n\nexport default SVG","export default {\n months: {\n one: 'месяц',\n few: 'месяца',\n many: 'месяцев',\n other: 'месяцев',\n },\n days: {\n one: 'день',\n few: 'дня',\n many: 'дней',\n other: 'дней',\n },\n hours: {\n one: 'час',\n few: 'часа',\n many: 'часов',\n other: 'часов',\n },\n minutes: {\n one: 'минута',\n few: 'минуты',\n many: 'минут',\n other: 'минут',\n },\n partnersDative: {\n one: 'партнеру',\n few: 'партнерам',\n many: 'партнерам',\n other: 'партнерам',\n },\n};\n","export default {\n months: {\n one: 'month',\n other: 'months',\n },\n days: {\n one: 'day',\n other: 'days',\n },\n hours: {\n one: 'hour',\n other: 'hours',\n },\n minutes: {\n one: 'minute',\n other: 'minutes',\n },\n partnersDative: {\n one: 'partner',\n other: 'partners',\n },\n};\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 React from 'react';\n\nimport { ApolloClient, NormalizedCacheObject } from 'apollo-boost';\n\nimport Scheme from '../../../aqua-delivery-client-graphql/Scheme';\nimport { ServiceName } from '../../../config';\nimport { TFetch } from '../../customFetch';\n\nexport type NetworkContextProps = {\n request: TFetch | null;\n service: ServiceName;\n scheme: Scheme;\n createAssetUrl: (uri: string) => string;\n clients: Record>;\n};\n\nexport const NetworkContext = React.createContext({\n request: null,\n service: 'auth',\n scheme: new Scheme(),\n createAssetUrl: (uri: string) => '',\n //@ts-ignore,\n clients: {},\n});\n","import React from 'react';\n\nimport NetworkLayer, { NetworkLayerProps } from './NetworkLayer';\n\nexport default function (config: NetworkLayerProps) {\n return function (WrappedComponent: any) {\n const Wrapper: React.FC = props => {\n return (\n \n \n \n );\n };\n return Wrapper;\n };\n}\n","import React, { FC } from 'react';\n\nimport { YMInitializer } from 'react-yandex-metrika';\nimport { default as yandexMetrika } from 'react-yandex-metrika';\n\ntype YandexMetrikaMethod =\n | 'addFileExtension'\n | 'extLink'\n | 'file'\n | 'getClientID'\n | 'hit'\n | 'notBounce'\n | 'params'\n | 'reachGoal'\n | 'replacePhones'\n | 'setUserID'\n | 'userParams';\n\ntype YandexAnalyticsProps = {\n accounts: number[];\n ymInitializerOptions?: Record;\n ymOptions?: Record;\n visitParams?: Record;\n userParams?: Record;\n};\n\nconst YandexAnalytics: FC & {\n event: (method: YandexMetrikaMethod, ...params: unknown[]) => void;\n} = ({ children, accounts, ymInitializerOptions, ymOptions, visitParams, userParams }) => {\n return (\n <>\n {children}\n \n \n );\n};\n\nYandexAnalytics.event = (method, ...params) => {\n yandexMetrika(method, ...params);\n};\n\nexport default YandexAnalytics;\n","import React from 'react';\n\nimport { message } from 'antd';\nimport Axios, { AxiosRequestConfig } from 'axios';\nimport ApolloClient from 'apollo-client';\nimport { createUploadLink } from 'apollo-upload-client';\nimport { ApolloLink } from 'apollo-link';\nimport { onError } from 'apollo-link-error';\nimport {\n InMemoryCache,\n IntrospectionFragmentMatcher,\n NormalizedCacheObject,\n} from 'apollo-cache-inmemory';\nimport { ApolloProvider } from '@apollo/react-hooks';\nimport { buildAxiosFetch } from '@lifeomic/axios-fetch';\n\nimport { validationErrors } from '../../../aqua-delivery-client-graphql/utils';\nimport Scheme from '../../../aqua-delivery-client-graphql/Scheme';\nimport AuthService from '../../AuthService';\nimport { NetworkContext, NetworkContextProps } from './NetworkContext';\nimport { ServiceName, config } from '../../../config';\nimport createApi, { TFetch } from '../../customFetch';\nimport Loader from '../loader/Loader';\n\nconst clients: Record> = {};\nconst schemas: Record = {};\nconst requests: Record = {};\n\nexport type NetworkLayerProps = {\n service: ServiceName;\n loader?: () => any;\n enableScheme?: boolean;\n enrichTokenOnInit?: boolean;\n};\n\nconst createAssetUrl = (serviceName: ServiceName) => (assetUrl: string) => {\n const serviceUrl = config.api[serviceName].domain;\n\n const isAbsoluteAssetUrl = /^.+?:\\/\\//.test(assetUrl);\n\n return isAbsoluteAssetUrl ? assetUrl : `${serviceUrl}${assetUrl}`;\n};\n\nconst NetworkLayer: React.FC = ({\n children,\n service,\n loader,\n enableScheme = false,\n enrichTokenOnInit = false,\n}) => {\n const serviceUri = config.api[service].base;\n\n const [client, setClient] = React.useState | null>(\n clients[serviceUri],\n );\n const [scheme, setScheme] = React.useState(schemas[serviceUri]);\n const [request, setRequest] = React.useState(requests[serviceUri]);\n\n const initCacheManager = async (api: TFetch) => {\n const configCache: any = {\n dataIdFromObject: (r: any) => {\n return r.id;\n },\n addTypename: true,\n };\n\n if (!enableScheme || schemas[serviceUri]) {\n return {\n cache: new InMemoryCache(configCache),\n scheme: schemas[serviceUri],\n };\n }\n\n const result: any = await api.fetch({\n method: 'POST',\n data: Scheme.introspectionQuery,\n });\n\n const scheme = new Scheme(result.data);\n\n setScheme(scheme);\n\n const fragmentsTypes = scheme.fragmentTypes;\n\n const fragment_matcher = fragmentsTypes\n ? new IntrospectionFragmentMatcher({\n introspectionQueryResultData: fragmentsTypes,\n })\n : undefined;\n\n if (fragment_matcher) {\n configCache.fragmentMatcher = fragment_matcher;\n }\n\n return {\n cache: new InMemoryCache(configCache),\n scheme,\n };\n };\n\n const initApolloClient = async () => {\n if (!config.api[service]) {\n throw Error('config does not found');\n }\n\n try {\n const api = createApi(serviceUri, { enrichTokenUrl: config.api[service].enrichToken });\n\n api.setBaseUrl(serviceUri);\n\n if (AuthService.isLoggedIn()) {\n api.authorizeApi();\n\n if (enrichTokenOnInit) {\n await api.enrichToken();\n }\n }\n\n setRequest(api);\n\n const { cache, scheme: serviceScheme } = await initCacheManager(api);\n\n const apolloClient = new ApolloClient({\n link: ApolloLink.from([\n onError(({ graphQLErrors, networkError }) => {\n if (graphQLErrors && !validationErrors({ graphQLErrors } as any)) {\n const errorMessage = `${graphQLErrors[0].message}. ${\n // @ts-ignore\n graphQLErrors[0].debugMessage || ''\n }`;\n\n message.error(errorMessage);\n }\n\n if (networkError) {\n message.error(`${networkError.message}. ${networkError.name || ''}`);\n }\n }),\n createUploadLink({\n uri: serviceUri,\n // @ts-ignore\n fetch: buildAxiosFetch(api.fetch, function (config: AxiosRequestConfig) {\n config.validateStatus = Axios.defaults.validateStatus;\n return config;\n }),\n }),\n ]),\n cache,\n });\n\n // @ts-ignore\n schemas[serviceUri] = serviceScheme;\n clients[serviceUri] = apolloClient;\n\n setClient(apolloClient);\n requests[serviceUri] = api;\n } catch (e) {\n console.log(e);\n }\n };\n\n React.useEffect(() => {\n if (client && (enableScheme === false || scheme)) {\n return;\n }\n\n initApolloClient();\n }, []); /* eslint-disable-line react-hooks/exhaustive-deps */\n\n // @ts-ignore\n const context = React.useMemo(() => {\n return {\n request: request!,\n service,\n scheme,\n clients,\n createAssetUrl: createAssetUrl(service),\n };\n }, [request, service, scheme]);\n\n if (!client || (enableScheme && !scheme)) {\n if (loader) return loader();\n\n return ;\n }\n\n return (\n \n {children}\n \n );\n};\n\nexport default NetworkLayer;\n","import I18n from './aqua-delivery-web-client-ui/i18n';\r\nimport {\r\n Source,\r\n setConfig as setCustomFetchConfig,\r\n} from './aqua-delivery-web-client-ui/customFetch';\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 cloudPaymentsPublicId: string;\r\n apiUrl: string;\r\n policylUrl: string;\r\n contractUrl: string;\r\n partnerLoginUrl: string;\r\n payPalClientId: string;\r\n knowledgeUrl: string;\r\n addressAutocomplete: string;\r\n paymentMethodsAvailability: {\r\n isCloudPaymentEnabled: boolean;\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 cloudPaymentsPublicId: getEnvVariable('cloudPaymentToken'),\r\n apiUrl: getEnvVariable('apiUrl'),\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 addressAutocomplete: getEnvVariable('addressAutocomplete'),\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 enrichToken: `${basePartnerApi}/partner/enrich_token_requests`,\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 cloudPaymentsPublicId() {\r\n return conf!.cloudPaymentsPublicId;\r\n },\r\n get apiUrl() {\r\n return conf!.apiUrl;\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 get addressAutocomplete() {\r\n return conf!.addressAutocomplete;\r\n },\r\n};\r\n","import React from 'react';\n\nimport { Spin } from 'antd';\nimport { SpinProps } from 'antd/lib/spin';\n\nconst AbsoluteFilledLoader: React.FC = ({ children, style, ...other }) => {\n return (\n \n {children}\n
\n );\n};\n\nexport default AbsoluteFilledLoader;\n","import React, { FC } from 'react';\n\nimport { Spin } from 'antd';\n\nimport { LoaderContext } from './LoaderContext';\n\ntype ChildrenWithState = (args: { loading: boolean }) => React.ReactNode;\n\ntype LoaderContainerProps = {\n children: React.ReactNode | ChildrenWithState;\n height?: number;\n tip?: string;\n};\n\nconst LoaderContainer: FC = ({ children, height, tip }) => {\n const [loading, setState] = React.useState>({});\n\n const setLoaderState = () => {\n let states: Record = {};\n\n return (id: string, state: boolean) => {\n states = {\n ...states,\n [id]: state,\n };\n\n setState(states);\n };\n };\n\n const showLoader = !!Object.values(loading).find(item => !!item);\n\n return (\n \n \n {\n //@ts-ignore\n typeof children === 'function' && children({ loading: showLoader })\n }\n {typeof children !== 'function' && children}\n \n \n );\n};\n\nexport default LoaderContainer;\n","import * as React from \"react\";\nimport classNames from \"classnames\";\n\nexport type ViewProps = React.PropsWithChildren>\n\nconst View: React.FC = React.forwardRef(({ children, center, inline, className, id, wrap, ...other }, ref) => {\n const centerStyles = center ? {\n alignItems: \"center\",\n justifyContent: \"center\",\n } : {}\n\n const inlineStyles = inline ? { display: \"flex-inline\" } : {}\n\n const flexWrap = wrap ? { flexWrap: 'wrap' } as React.CSSProperties : {};\n\n return (\n \n {children}\n \n )\n});\n\nexport default View","import { TranslateOptions } from \"i18n-js\";\nimport { useMemo } from \"react\";\n\nimport { t } from \"../i18n\";\n\nexport type Pluralization = { path: string, config?: TranslateOptions };\n\nexport type Path = string | Pluralization;\n\nexport type PathsReturnType = T extends Path[] ? string[] : Record;\n\nexport type Paths = Record | Path[];\n\nconst useTranslation = >(paths: T): R => {\n const translate = (path: Path) => {\n if (typeof path === 'string') {\n return t(path);\n }\n\n return t(path.path, path.config);\n }\n\n return useMemo(() => {\n if (Array.isArray(paths)) {\n return paths.map(path => translate(path));\n }\n\n return Object.fromEntries(Object.entries(paths).map(path => [path[0], translate(path[1])]));\n }, [paths]) as R;\n}\n\nexport default useTranslation;","import React from 'react';\n\nimport { Locale } from 'antd/lib/locale-provider';\n\nimport { I18nContext } from '../i18n';\n\nimport ru from 'antd/es/locale/ru_RU';\nimport en from 'antd/es/locale/en_US';\n\ntype AntdLocale = {\n antdLocale: Locale;\n};\n\nconst locales: Record = {\n ru,\n en,\n};\n\nexport default function (): AntdLocale {\n const { locale } = React.useContext(I18nContext);\n\n return {\n antdLocale: locales[locale],\n };\n}\n","export default {\n copyButton: {\n copy: 'Скопировать',\n },\n fileField: {\n label: 'Нажмите или перетащите файл в область, чтобы загрузить файл',\n multipleLabel: 'Нажмите или перетащите файлы в область, чтобы загрузить файлы',\n multipleFilesLabel: 'Вы можете выбрать как один, так и несколько файлов',\n },\n imageField: {\n label: 'Нажмите или перетащите изображение в область, чтобы загрузить',\n preview: 'Просмотр',\n delete: 'Удалить',\n error: 'Файл не является изображением',\n },\n autoCompleteField: {\n placeholder: 'Введите местоположение',\n },\n daysField: {\n save: 'Сохранить',\n weekdays: 'Будни',\n weekends: 'Выходные',\n },\n selectorLang: {\n label: 'Язык',\n },\n cloudPaymentsButton: {\n label: 'Банковская карта',\n },\n noData: 'Нет данных',\n countryPicker: {\n placeholder: {\n loading: 'Загрузка...',\n selectCountry: 'Выберите вашу страну',\n },\n },\n checkboxSelector: {\n checkAll: 'Выбрать все',\n ok: 'Ок',\n },\n technicalWorkPage: {\n title: 'Ведутся технические работы',\n subtitle: 'Зайдите через полчасика, мы все починим и наладим',\n },\n};\n","export default {\n copyButton: {\n copy: 'Copy',\n },\n fileField: {\n label: 'Click or drag file to the area to upload file',\n multipleLabel: 'Click or drag files to the area to upload files',\n multipleFilesLabel: 'You can choose one or more files',\n },\n imageField: {\n label: 'Click or drag an image to the area to upload',\n preview: 'Preview',\n delete: 'Delete',\n error: 'File is not an image',\n },\n autoCompleteField: {\n placeholder: 'Enter your location',\n },\n daysField: {\n save: 'Save',\n weekdays: 'Weekdays',\n weekends: 'Weekends',\n },\n selectorLang: {\n label: 'Language',\n },\n cloudPaymentsButton: {\n label: 'Bank card',\n },\n noData: 'No data',\n countryPicker: {\n placeholder: {\n loading: 'Loading...',\n selectCountry: 'Select your country',\n },\n },\n checkboxSelector: {\n checkAll: 'Check all',\n ok: 'Ok',\n },\n technicalWorkPage: {\n title: 'Technical work is underway',\n subtitle: 'Come back in half an hour, we\\'ll do all we need',\n },\n};\n","import { createTranslationMap } from '../../i18n';\n\nimport ru from './ru';\nimport en from './en';\n\nexport const translationMap: { ui: typeof ru } = createTranslationMap({ ui: ru });\n\nexport { ru, en };","import { DocumentNode } from 'graphql';\n\nexport type FieldKind =\n | 'NON_NULL'\n | 'SCALAR'\n | 'OBJECT'\n | 'INPUT_OBJECT'\n | 'INTERFACE'\n | 'LIST'\n | null;\nexport type FieldName = 'ID' | 'Float' | 'Int' | 'String' | 'OBJECT' | 'Boolean' | null;\n\nexport type EntityTypeField = {\n name: string; //\"id\",\n description: string | null; //null,\n type: {\n kind: FieldKind;\n name: FieldName;\n ofType: null | {\n kind: FieldKind;\n name: FieldName;\n };\n };\n};\n\nexport declare type EntityType = {\n kind: 'INTERFACE';\n name: string;\n possibleTypes: EntityType[] | null;\n description: string;\n fields: EntityTypeField[];\n inputFields: EntityTypeField[];\n};\n\nexport declare type Collection = {\n edges: Array>;\n totalCount: number;\n pageInfo: {\n hasNextPage: boolean;\n endCursor: string;\n };\n};\n\nexport declare type Node = {\n node: T;\n cursor: string;\n __typename: string;\n};\n\nexport declare type BaseEntity = T & {\n id: string;\n __typename: string;\n};\n\nexport enum ApproveCredit {\n declined = 'approve_credit_declined',\n onHold = 'approve_credit_on_hold',\n canceled = 'approve_credit_canceled',\n confirmed = 'approve_credit_confirmed',\n}\n\nexport enum DirectCredit {\n declined = 'direct_credit_declined',\n confirmed = 'direct_credit_confirmed',\n}\n\nexport enum Debit {\n confirmed = 'debit_confirmed',\n}\n\nexport enum SortingOrder {\n Asc = 'asc',\n Desc = 'desc',\n}\n\nexport type TransactionState =\n | Debit.confirmed\n | DirectCredit.confirmed\n | DirectCredit.declined\n | ApproveCredit.declined\n | ApproveCredit.canceled\n | ApproveCredit.confirmed\n | ApproveCredit.onHold;\n\nexport type Entity = {\n fragment: DocumentNode;\n createId: (id: string) => string;\n};\n\nexport type TOrder = 'asc' | 'desc' | undefined;\nexport type OrderArray = Partial>[];\n\nexport type TResponseViolation = { path: string; message: string };\n\nexport type TResponseExtensons = {\n category: string;\n status: number;\n violations: TResponseViolation[];\n};\n\nexport type UserRole =\n | 'ROLE_USER'\n | 'ROLE_ADMIN'\n | 'ROLE_CLIENT'\n | 'ANONYMOUS_AGGREGATOR_CLIENT'\n | 'ROLE_AGGREGATOR_USER'\n | 'ROLE_OWNER'\n | 'ROLE_ANONYMOUS_PARTNER_CLIENT'\n | 'ROLE_CLIENT_APP';\n\nexport enum UserRoles {\n User = 'ROLE_USER',\n Admin = 'ROLE_ADMIN',\n Client = 'ROLE_CLIENT',\n AnonymousAggregatorClient = 'ANONYMOUS_AGGREGATOR_CLIENT',\n AggregatorUser = 'ROLE_AGGREGATOR_USER',\n Owner = 'ROLE_OWNER',\n Courier = 'ROLE_COURIER',\n AnonymousPartnerClient = 'ROLE_ANONYMOUS_PARTNER_CLIENT',\n ClientApp = 'ROLE_CLIENT_APP',\n}\n","import { gql } from \"apollo-boost\";\n\nimport { BaseEntity } from \"../../types\";\nimport { roundNumber } from \"../../utils\";\n\nexport enum EventMessage {\n AbstractEventMessage = 'AbstractEventMessage',\n TemperatureEventMessage = 'TemperatureEventMessage',\n PressureEventMessage = 'PressureEventMessage',\n VolumeEventMessage = 'VolumeEventMessage',\n FillProgressEventMessage = 'FillProgressEventMessage',\n}\n\nexport declare type TEventMessage = BaseEntity<{\n value: number,\n createdAt: string,\n}>\n\nconst fragment = (eventType: EventMessage) => gql`\n fragment ${eventType} on ${eventType} {\n id,\n value,\n createdAt,\n }\n`;\n\nconst EventMessageEntity = {\n fragment,\n convertToLiters: (milliliters: number) => roundNumber(milliliters / 1000, 3),\n};\n\nexport default EventMessageEntity;","import React, { FC, Suspense, SuspenseProps } from 'react';\n\nimport AbsoluteFilledLoader from '../AbsoluteFilledLoader';\n\nconst SuspenseWithLoader: FC> = ({ children, ...other }) => {\n return (\n } {...other}>\n {children}\n \n );\n};\n\nexport default SuspenseWithLoader;\n","import { createContext } from 'react';\n\nimport { Alpha2Code } from 'i18n-iso-countries';\nimport Currency from '../CurrencyHelper';\n\nexport type Currency = 'RUB' | 'USD' | 'EUR';\n\nexport type LocalizationContextValues = {\n countries: {\n [key in Alpha2Code]?: {\n currency: Currency;\n };\n };\n defaultCurrency: Currency;\n};\n\nconst Localization = createContext({\n countries: {},\n defaultCurrency: 'USD',\n});\n\nexport default Localization;\n","import useTranslation, {\n PathsReturnType,\n Paths,\n} from '../aqua-delivery-web-client-ui/hooks/useTranslation';\nimport { translateMap } from '../translations';\n\ntype Translation = typeof translateMap;\n\nconst useLocalTranslation = <\n T extends (args: Translation) => Record,\n TR extends ReturnType,\n P extends (translations: TR) => Paths,\n R extends PathsReturnType>\n>(\n root: T,\n paths: P,\n) => {\n return useTranslation(paths(root(translateMap))) as R;\n};\n\nexport default useLocalTranslation;\n","import React, { CSSProperties, useMemo } from 'react';\n\nimport { Typography, Space } from 'antd';\n\nimport BackSVG from '../../assets/svg/arrow2.svg';\n\nimport SVG from '../SVG';\nimport View from '../View';\nimport useWindowSize from '../../hooks/useWindowSize';\n\nimport './styles/index.less';\n\nexport type TitleProps = {\n title: string | React.ReactElement | undefined;\n onBackButtonClick?: () => Promise;\n left?: React.ReactElement;\n right?: React.ReactElement;\n titleStyle?: CSSProperties;\n containerStyle?: CSSProperties;\n};\n\nconst BackButton: React.FC<{ onClick?: () => Promise; style?: CSSProperties }> = ({\n onClick,\n style,\n}) => {\n return (\n
\n \n
\n );\n};\n\nconst Title: React.FC = ({\n title,\n onBackButtonClick,\n left,\n right,\n titleStyle,\n containerStyle,\n}) => {\n const { isMobile } = useWindowSize();\n\n const isBackButtonVisible = !!onBackButtonClick;\n\n const titleContainerStyle = useMemo(\n () => ({\n display: 'flex',\n alignItems: 'center',\n ...containerStyle,\n }),\n [containerStyle],\n );\n\n return (\n \n \n \n {isBackButtonVisible && }\n\n {title}\n \n\n {left}\n \n\n \n {right}\n \n \n );\n};\n\nexport default Title;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 739\",\n d: \"M11.968 11.345l-4.574 4.574V1.127a.627.627 0 10-1.254 0v14.791l-4.574-4.574a.627.627 0 00-.887.887l5.644 5.644a.627.627 0 00.887 0l5.644-5.644a.627.627 0 10-.887-.887z\"\n});\n\nfunction SvgArrow2(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 13.543 18.559\"\n }, props), _ref);\n}\n\nexport default SvgArrow2;","import { gql } from \"apollo-boost\";\nimport { BaseEntity } from \"../../types\";\n\nexport declare type TPostalAddress = BaseEntity<{\n addressCountry: string,\n addressLocality: string,\n addressRegion: string,\n postOfficeBoxNumber: string,\n postalCode: string,\n streetAddress: string,\n coordinates: {\n latitude: number,\n longitude: number,\n }\n}>\n\n\nconst fragment = gql`\nfragment PostalAddress on PostalAddress {\n id,\n addressCountry,\n addressLocality,\n addressRegion,\n postOfficeBoxNumber,\n postalCode\n streetAddress,\n coordinates {\n id,\n latitude,\n longitude,\n }\n}`;\n\nconst PostalAddressEntity = {\n fragment,\n createId: (id: string) => `/iot/postal_addresses/${id}`\n};\n\nexport default PostalAddressEntity","import * as React from 'react';\n\nimport { Popover, Typography } from 'antd';\n\nconst Help: React.FC<{ content: React.ReactNode }> = ({ content }) => {\n return (\n \n \n \n ?\n \n \n \n );\n};\n\nexport default Help;\n","import { TransactionState, Debit, TResponseExtensons } from \"./types\";\nimport { ErrorResponse } from \"apollo-link-error\";\nimport { AxiosError } from \"axios\";\nimport { ApolloError } from \"apollo-boost\";\nimport dayjs, { Dayjs } from \"dayjs\";\n\nexport const collectionFragment = (fragmentName: string, extantion: string = ''): string => {\n return `\n totalCount,\n edges{\n cursor,\n node{\n ...${fragmentName}${extantion && ','}\n ${extantion}\n }\n }\n pageInfo{\n endCursor,\n hasNextPage\n }\n `\n};\n\nexport const collectionFields = (fields: string): string => {\n return `\n totalCount,\n edges{\n cursor,\n node{\n ${fields}\n }\n }\n pageInfo{\n endCursor,\n hasNextPage\n }\n `\n};\n\nexport const parseUuid = (id: string) => {\n return id.split(\"/\").reverse()[0]\n}\n\n\nexport interface ConverDateOptions {\n timeFormat?: string\n}\n\nexport function convertDateToServerFormat(date: Date | Dayjs, { timeFormat }: ConverDateOptions = {}) {\n return dayjs(date).format(`YYYY-MM-DD${timeFormat ? ` ${timeFormat}` : ''}`)\n}\n\n\nexport function prefixSum(state: TransactionState) {\n if (state === Debit.confirmed) return '+';\n return '–';\n}\n\nexport function withCurrency(sum: number, currency: string) {\n return new Intl.NumberFormat('ru', { style: 'currency', currency }).format(sum)\n}\n\nexport function getMonthlyPayment(amount: number, months: number) {\n return Math.floor(amount / months * 100) / 100;\n}\n\nexport function currency(currency: string) {\n //@ts-ignore\n const type = new Intl.NumberFormat('ru', { style: 'currency', currency }).formatToParts().find((item) => item.type === \"currency\");\n return type ? type.value : currency\n}\n\nexport function lcFirst(str: string) {\n if (!str || str.length === 0) return str\n return str[0].toLowerCase() + str.slice(1)\n}\n\n\nexport function validationErrors(e: ErrorResponse): Record | undefined {\n if(!e) return undefined;\n\n if (e.response && e.response.data && e.response.data.violations) {\n const result: Record = {}\n e.response.data.violations.forEach((violation: any)=>{\n result[violation.propertyPath] = violation.message\n })\n return result\n }\n\n\n if (!e.graphQLErrors) return undefined;\n if (!e.graphQLErrors.length) return undefined;\n if (!e.graphQLErrors[0].extensions) return undefined;\n\n const extensions: TResponseExtensons = e.graphQLErrors[0].extensions as any;\n\n if(!extensions.violations) return undefined;\n const result: Record = {}\n extensions.violations.forEach(violation=>{\n result[violation.path] = violation.message\n })\n return result\n}\n\n\nexport function parseError(e: AxiosError | ApolloError | string): string | undefined {\n if(!e) return undefined;\n if(typeof e === 'string' ) return e;\n //@ts-ignore\n if(e.isAxiosError){\n const axiosError = e as AxiosError\n if (!axiosError.response) return e.message;\n if (!axiosError.response.data) return e.message;\n if (!!axiosError.response.data.message) return axiosError.response.data.message;\n if (!!axiosError.response.data.errors && axiosError.response.data.errors.length ) return axiosError.response.data.errors[0].message;\n if (!axiosError.response.data[\"hydra:description\"]) return e.message;\n return axiosError.response.data[\"hydra:description\"]\n }\n\n const apolloError = e as ApolloError;\n\n if (apolloError.graphQLErrors) {\n //@ts-ignore\n return `${apolloError.graphQLErrors[0].message}. ${apolloError.graphQLErrors[0].debugMessage || \"\"}`\n }\n\n if (apolloError.networkError) {\n return `${apolloError.networkError.message}. ${apolloError.networkError.name || \"\"}`\n }\n\n return e.message\n \n}\n\nexport const formatWithSign = (temperature: number) => {\n return (temperature < 0 ? \"\" : \"+\") + temperature;\n}\n\nexport const roundNumber = (number: number, precision: number = 2) => {\n const precisionPow = Math.pow(10, precision);\n\n return Math.floor(number * precisionPow) / precisionPow;\n}\n\nexport const composeQueries = (\n queries: Record,\n queryGenerator: (variables: V) => string\n): string[] =>\n Object.entries(queries).map(([name, variables]) => {\n return `${name}: ${queryGenerator(variables)}`;\n });","import { FieldRenderProps } from 'react-final-form';\nimport { Dayjs } from 'dayjs';\n\nexport type TFieldRenderProps = FieldRenderProps;\n\nexport type Period = {\n from: Dayjs;\n to: Dayjs;\n};\n\nexport enum NamedPeriod {\n Days = 'days',\n Weeks = 'weeks',\n Months = 'months',\n}\n","import { gql } from \"apollo-boost\";\n\nimport { BaseEntity } from \"../../types\";\nimport { Dayjs } from \"dayjs\";\n\nconst MAX_TELEMETRY_POINTS = 300;\n\nexport enum TelemetryType {\n Volume = 'TELEMETRY_VOLUME',\n Pressure = 'TELEMETRY_PRESSURE',\n Temperature = 'TELEMETRY_TEMPERATURE',\n Height = 'TELEMETRY_HEIGHT',\n Filled = 'FILLED',\n}\n\nexport enum AggregationType {\n Avg = 'AVG',\n Sum = 'SUM',\n}\n\nexport type TelemetryReportValue = [string, number | null];\n\nexport declare type TelemetryReport = BaseEntity<{\n values: TelemetryReportValue[],\n}>\n\nconst fragment = gql`\n fragment TelemetryReport on TelemetryReport {\n id,\n values,\n }\n`;\n\nconst TelemetryReportEntity = {\n fragment,\n getUnitInterval: (period: { from: Dayjs, to: Dayjs }, points: number) => {\n if (points > MAX_TELEMETRY_POINTS) throw new Error(`Max number of telemetry points is ${MAX_TELEMETRY_POINTS}`);\n\n const dateDiff = period.to.diff(period.from, 'second');\n\n return Math.ceil(dateDiff / points);\n },\n toObject: (values: TelemetryReportValue[] | undefined) => {\n return values\n ? values.map(([createdAt, value]) => ({ createdAt, value }))\n : [];\n },\n};\n\nexport default TelemetryReportEntity;","const RUBLE = 'RUB';\n\nconst Currency = {\n isRuble: (currencyCode: string | undefined) => currencyCode === RUBLE,\n}\n\nexport default Currency;","import * as Cookies from 'js-cookie';\nimport { config as AppConfig } from '../config';\nimport jwtDecode from 'jwt-decode';\nimport { logoutAPI } from './customFetch';\n\nexport interface IAuthServiceInitParams {\n logoutEvent: () => void;\n}\n\nexport type UserRole =\n | 'ROLE_USER'\n | 'ROLE_ADMIN'\n | 'ROLE_CLIENT'\n | 'ANONYMOUS_AGGREGATOR_CLIENT'\n | 'ROLE_AGGREGATOR_USER';\n\nexport type TokenPayload = {\n iat: number;\n roles: Array;\n username: string;\n exp: number;\n temp: boolean;\n uuid: string;\n first_name: string | null;\n middle_name: string | null;\n family_name: string | null;\n partner_id?: string;\n};\n\nexport interface IPermissionEntity {\n object: number;\n operation: string;\n permitted: boolean;\n}\n\nexport interface IPermissionClass {\n location: number;\n class: string;\n read: boolean;\n create: boolean;\n update: boolean;\n delete: boolean;\n __typename?: string;\n}\n\nexport declare type AuthRequest = (\n input?: Request | string,\n init?: RequestInit,\n wasRefreshed?: boolean,\n) => Promise;\n\ninterface IAuthService {\n readonly isLoggedIn: () => boolean;\n readonly signHeaders: (\n headers: Record,\n token?: string | null,\n ) => Record;\n readonly setAccessToken: (token: string, refresh_token: string, remember: boolean) => void;\n readonly logout: (redirectLoginForm?: boolean) => void;\n readonly getUserId: () => string | null;\n readonly refreshToken: () => Promise;\n readonly enrichToken: (url: string) => Promise;\n readonly decodeToken: (token: string) => TokenPayload;\n readonly authHeaderKey: string;\n readonly getUserInfo: () => TokenPayload | null;\n readonly getToken: () => string | undefined;\n readonly checkRoles: (roles: UserRole[], token?: string) => boolean;\n readonly userIsAdmin: (token?: string) => boolean;\n}\n\nconst getToken = (): string | undefined => {\n const adminToken = window?.adminTokens?.token;\n const getParams = new URLSearchParams(window.location.search);\n const token = getParams.get(`token`);\n\n return (\n adminToken ??\n (token ||\n localStorage.getItem(AppConfig.tokenStoreKey) ||\n Cookies.get(AppConfig.tokenStoreKey))\n );\n};\nconst getRefreshToken = (): string | undefined =>\n localStorage.getItem(AppConfig.refreshTokenStoreKey) ||\n Cookies.get(AppConfig.refreshTokenStoreKey);\n\nconst checkRememberMe = (): boolean => Boolean(localStorage.getItem(AppConfig.tokenStoreKey));\n\nconst isLoggedIn = (): boolean => Boolean(getToken());\n\nconst logout = (redirectLoginForm = true): void => {\n logoutAPI();\n Cookies.remove(AppConfig.tokenStoreKey);\n Cookies.remove(AppConfig.refreshTokenStoreKey);\n localStorage.removeItem(AppConfig.tokenStoreKey);\n localStorage.removeItem(AppConfig.refreshTokenStoreKey);\n if (redirectLoginForm) {\n window.location.replace('/login');\n }\n};\n\nconst userIsAdmin = (token?: string): boolean => {\n return checkRoles(['ROLE_ADMIN'], token);\n};\n\nconst checkRoles = (roles: UserRole[], token?: string): boolean => {\n let user: TokenPayload | null;\n\n if (token) {\n user = decodeToken(token);\n } else {\n user = getUserInfo();\n if (!user) throw 'user must be logged';\n }\n\n const res = roles.filter(role => ~user!.roles.indexOf(role));\n return res.length === roles.length;\n};\n\nconst signHeaders = (\n headers: Record = {},\n token?: string | null,\n): Record => {\n if (token) {\n return { ...headers, Authorization: 'Bearer ' + token };\n }\n return { ...headers, Authorization: 'Bearer ' + getToken() };\n};\n\nconst getUserId = (): string | null => {\n const token = getToken();\n if (token) {\n return AuthService.decodeToken(token).uuid;\n }\n AuthService.logout();\n return null;\n};\n\nconst getUserInfo = (): TokenPayload | null => {\n const token = getToken();\n if (token) {\n return AuthService.decodeToken(token);\n }\n AuthService.logout();\n return null;\n};\n\nconst setAccessToken = (token: string, refresh_token?: string, remember: boolean = false): void => {\n if (remember) {\n localStorage.setItem(AppConfig.tokenStoreKey, token);\n if (refresh_token) {\n localStorage.setItem(AppConfig.refreshTokenStoreKey, refresh_token);\n }\n } else {\n //TODO: add secure\n Cookies.set(AppConfig.tokenStoreKey, token);\n if (refresh_token) {\n Cookies.set(AppConfig.refreshTokenStoreKey, refresh_token);\n }\n }\n};\n\nconst refreshToken = async (): Promise => {\n const refreshToken = getRefreshToken();\n\n if (!refreshToken) throw Error('Access error');\n if (decodeToken(getToken()!).temp) {\n throw Error(\"Temp token couldn't refreshed\");\n }\n\n const request = await fetch(AppConfig.api.auth.refreshTokenUrl, {\n body: JSON.stringify({\n refresh_token: refreshToken,\n }),\n headers: { 'Content-Type': 'application/json' },\n method: 'post',\n });\n\n if (request.status === 200) {\n const response = await request.json();\n //console.log(response);\n const { token, refresh_token } = response;\n AuthService.setAccessToken(token, refresh_token, checkRememberMe());\n //console.log('token was refreshed');\n return token;\n }\n\n //console.log('refresh token error', request);\n throw Error('Access error');\n};\n\nconst enrichToken = async (enrichUrl: string, repeat?: boolean): Promise => {\n const refreshToken = getRefreshToken();\n\n //if(!refreshToken) throw Error(\"Refresh tocken is empty\");\n\n if (decodeToken(getToken()!).temp) {\n throw Error(\"Temp token couldn't enriched\");\n }\n\n const request = await fetch(enrichUrl, {\n body: JSON.stringify({}),\n headers: signHeaders({ 'Content-Type': 'application/json' }),\n method: 'post',\n });\n\n if (request.status >= 200 && request.status < 300) {\n const response = await request.json();\n //console.log(response);\n const { token } = response;\n AuthService.setAccessToken(token, refreshToken || '', checkRememberMe());\n //console.log('token was refreshed');\n return token;\n }\n\n if (request.status === 401 && !repeat) {\n await AuthService.refreshToken();\n return enrichToken(enrichUrl, true);\n } else {\n logout();\n }\n\n //console.log('refresh token error', request);\n throw Error('Enrich error');\n};\n\nconst decodeToken = (token: string): TokenPayload => {\n return jwtDecode(token);\n};\n\nconst AuthService: IAuthService = {\n isLoggedIn,\n signHeaders,\n setAccessToken,\n logout,\n getUserId,\n refreshToken,\n decodeToken,\n authHeaderKey: 'Authorization',\n getUserInfo,\n getToken,\n enrichToken,\n userIsAdmin,\n checkRoles,\n};\n\nexport default AuthService;\n"],"sourceRoot":""}