{"version":3,"sources":["assets/logos sync /^/.//лого__.*_1/.svg$","assets/logos/лого__Bishkek Petroleum_1.svg","assets/logos/лого__IRBIS_1.svg","assets/logos/лого__Partner Neft_1.svg","assets/logos/лого__Red Petroleum_1.svg","assets/logos/лого__Rusoil_1.svg","assets/logos/лого__Shell_1.svg","assets/logos/лого__АТАН_1.svg","assets/logos/лого__Аройл Газ_1.svg","assets/logos/лого__Башнефть_1.svg","assets/logos/лого__Газпром_1.svg","assets/logos/лого__Газпромнефть_1.svg","assets/logos/лого__Движение_1.svg","assets/logos/лого__ЗВЕЗДА_1.svg","assets/logos/лого__КНП_1.svg","assets/logos/лого__Калина Ойл_1.svg","assets/logos/лого__ЛУКОЙЛ_1.svg","assets/logos/лого__МПА_1.svg","assets/logos/лого__ННК_1.svg","assets/logos/лого__Нефтьмагистраль_1.svg","assets/logos/лого__ОПТИ_1.svg","assets/logos/лого__ОРТК_1.svg","assets/logos/лого__Перекресток Ойл_1.svg","assets/logos/лого__Роснефть_1.svg","assets/logos/лого__Россия нефть_1.svg","assets/logos/лого__Сургутнефт_1.svg","assets/logos/лого__ТАИФ_1.svg","assets/logos/лого__Татнефть_1.svg","assets/logos/лого__Трасса_1.svg","assets/logos sync /^/.//лого__.*_2/.svg$","assets/logos/лого__Bishkek Petroleum_2.svg","assets/logos/лого__IRBIS_2.svg","assets/logos/лого__Partner Neft_2.svg","assets/logos/лого__Red Petroleum_2.svg","assets/logos/лого__Rusoil_2.svg","assets/logos/лого__Shell_2.svg","assets/logos/лого__АТАН_2.svg","assets/logos/лого__Аройл Газ_2.svg","assets/logos/лого__Башнефть_2.svg","assets/logos/лого__Газпром_2.svg","assets/logos/лого__Газпромнефть_2.svg","assets/logos/лого__Движение_2.svg","assets/logos/лого__ЗВЕЗДА_2.svg","assets/logos/лого__КНП_2.svg","assets/logos/лого__Калина Ойл_2.svg","assets/logos/лого__ЛУКОЙЛ_2.svg","assets/logos/лого__МПА_2.svg","assets/logos/лого__ННК_2.svg","assets/logos/лого__Нефтьмагистраль_2.svg","assets/logos/лого__ОПТИ_2.svg","assets/logos/лого__ОРТК_2.svg","assets/logos/лого__Перекресток Ойл_2.svg","assets/logos/лого__Роснефть_2.svg","assets/logos/лого__Россия нефть_2.svg","assets/logos/лого__Сургутнефт_2.svg","assets/logos/лого__ТАИФ_2.svg","assets/logos/лого__Татнефть_2.svg","assets/logos/лого__Трасса_2.svg","lib/helpers/menu.ts","lib/helpers/index.ts","lib/TokenStorage/helpers.ts","lib/TokenStorage/tokenStorage.ts","lib/graphql/mutations/Logout/index.ts","lib/TokenStorage/index.ts","lib/graphql/client.ts","components/Router/SecuredRoute/index.tsx","containers/ActualPriceContainer/dataMapping.ts","layouts/MainLayout/MainMenu.tsx","components/_common/ChangeLang/index.tsx","lib/graphql/queries/UserProfile/index.ts","components/_common/AvatarDropdown/index.tsx","components/_common/AvatarDropdown/AvatarDropdown.tsx","layouts/MainLayout/MainHeader.tsx","layouts/MainLayout/MainLogo.tsx","layouts/MainLayout/index.tsx","layouts/AuthLayout/index.tsx","components/LoginComponent/LoginForm.tsx","components/LoginComponent/AuthLogo.tsx","components/LoginComponent/index.tsx","lib/graphql/mutations/CreateToken/index.ts","lib/helpers/fuelTypes.ts","lib/helpers/Storage.ts","containers/LoginContainer/index.tsx","pages/LoginPage/index.tsx","containers/ActualPriceContainer/InfoMessage.tsx","components/ActualPriceComponent/ActualPriceExtras/ColumnFilter.tsx","components/ActualPriceComponent/ActualPriceExtras/index.tsx","lib/helpers/actualPrices.ts","lib/graphql/queries/UserProfile/__generated__/userProfile.ts","components/_common/ActualPriceTable/ActualPriceCell/index.tsx","components/_common/ActualPriceTable/ActualPriceCell/ActualPriceDeltaCell.tsx","components/_common/ActualPriceTable/Tooltips/DynamicGasStationTooltip.tsx","components/_common/ActualPriceTable/Tooltips/ClosedGasStationTooltip.tsx","components/_common/StationStatusIcon/index.tsx","components/_common/ActualPriceTable/ActualPriceCell/ActualPriceBrand.tsx","lib/hooks/useGasStationColumns.tsx","lib/graphql/fragments/ActualPrices/gasStation.ts","lib/graphql/queries/GasStation/index.ts","components/_common/ActualPriceTable/ExpandedTable.tsx","components/_common/ActualPriceTable/ActualPriceNestedTable.tsx","components/ActualPriceComponent/ActualPricePicker.tsx","lib/helpers/actualPriceHistory.ts","lib/graphql/queries/StatisticReport/newStatic.ts","components/ActualPriceComponent/ActualPricePriceHistoryModal/PriceHistoryDownloadButton.tsx","components/ActualPriceComponent/ActualPricePriceHistoryModal/PriceHistoryModalTable.tsx","lib/graphql/mutations/StatisticReport/index.ts","components/ActualPriceComponent/ActualPricePriceHistoryModal/index.tsx","components/ActualPriceComponent/_extras/ActualPriceReports.tsx","components/_common/CardWrapper/index.tsx","components/_common/PageMainHeader/index.tsx","components/_common/Pagination/PaginationSize.tsx","components/ActualPriceComponent/index.tsx","components/ActualPriceComponent/_extras/ActualPriceRegionPicker.tsx","lib/graphql/queries/GasStations/GSWithoutCompetitors.ts","lib/graphql/queries/GasStations/MarketIndicators.ts","containers/ActualPriceContainer/index.tsx","pages/ActualPricePage/index.tsx","containers/SmallWholesaleContainer/dataMapping.ts","components/_common/ActualPriceTable/index.tsx","components/SmallWholesaleComponent/index.tsx","lib/graphql/queries/SmallWholesale/index.ts","components/SmallWholesaleComponent/SmallWholeSaleCompanyPicker.tsx","components/SmallWholesaleComponent/SmallWholeSaleRegionPicker.tsx","containers/SmallWholesaleContainer/index.tsx","lib/helpers/actualRegionsCount.ts","lib/hooks/useSmallWholesale.tsx","pages/SmallWholesalePage/index.tsx","lib/graphql/queries/PriceStatistic/index.ts","components/PriceStatisticComponent/PriceStatisticChart.tsx","lib/graphql/queries/GasStations/gasStations.ts","components/PriceStatisticComponent/index.tsx","components/PriceStatisticComponent/AnalyticsFilters/OwnStationFilter.tsx","components/PriceStatisticComponent/AnalyticsFilters/FuelTypesFilter.tsx","components/_common/NoContent/index.tsx","components/PriceStatisticComponent/AnalyticsFilters/GasStationsFilter.tsx","lib/graphql/queries/PriceStatistic/AnalyticsGasStations.ts","lib/graphql/queries/PriceStatistic/AnalyticsCompetitors.ts","components/PriceStatisticComponent/AnalyticsFilters/index.tsx","containers/PriceStatisticContainer/index.tsx","pages/PriceStatisticPage/index.tsx","lib/graphql/fragments/GasStation/personalGasStation.ts","lib/graphql/queries/PersonalGasStation/index.ts","components/ActualPriceComponent/_extras/ActualPriceSearch.tsx","components/_common/PersonalGasStations/GasStationTypes.tsx","components/_common/PersonalGasStations/index.tsx","components/PersonalGasStationsComponent/index.tsx","containers/PersonalGasStationsContainer/index.tsx","pages/PersonalGasStationsPage/index.tsx","containers/UserSettingsContainer/index.tsx","pages/UserSettingsPage/index.tsx","components/PriceStatisticBasisComponent/BasisStatsFilters/SellerFilter.tsx","components/PriceStatisticBasisComponent/BasisStatsFilters/TankFarmFilter.tsx","components/PriceStatisticBasisComponent/BasisStatsFilters/NomenclatureFilter.tsx","lib/graphql/queries/WholesaleStats/WholesaleStatsBasises.ts","components/PriceStatisticBasisComponent/BasisStatsFilters/index.tsx","components/PriceStatisticBasisComponent/index.tsx","lib/graphql/queries/WholesaleStats/index.ts","containers/PriceStatisticBasisContainers/index.tsx","pages/PriceStatisticBasisPage/index.tsx","lib/graphql/queries/RecommendedPrices/index.ts","lib/graphql/mutations/UpdatePricingPresets/index.ts","components/_common/ActualPriceTable/ActualPriceCell/RecommendedPriceCell.tsx","components/RecommendedPricesComponent/FilterForm/SizeOfSalesButton.tsx","components/_common/InfoIconTooltip/index.tsx","components/RecommendedPricesComponent/FilterForm/FilterFormItemLabel.tsx","lib/helpers/recommended.ts","components/RecommendedPricesComponent/FilterForm/FilterForm.tsx","components/RecommendedPricesComponent/DataRender/NoData.tsx","components/RecommendedPricesComponent/DataRender/DataLoading.tsx","components/_common/Loading/index.tsx","components/RecommendedPricesComponent/DataRender/RecommendedPriceTable.tsx","components/RecommendedPricesComponent/index.tsx","containers/RecommendedPricesContainer/index.tsx","pages/RecommendedPricesPage/RecommendedPricesPage.tsx","lib/graphql/fragments/GasStation/GasStationMapItems.ts","lib/graphql/queries/GasStations/index.ts","components/GasStationsYandexMapComponent/tooltip/MapTooltip.tsx","containers/GasStationsMapContainer/mapSettings.ts","components/GasStationsYandexMapComponent/index.tsx","components/GasStationsYandexMapComponent/dataMapping.ts","lib/hooks/useYandexMapBox.tsx","components/GasStationsYandexMapComponent/GasStationYandexMapRegionPicker.tsx","containers/GasStationsYandexMapContainer/index.tsx","pages/GasStationYandexMapPage/index.tsx","components/Router/index.tsx","locales/en/modules/index.js","locales/en/modules/recommended-prices.js","locales/ru/modules/index.js","locales/ru/modules/recommended-prices.js","lib/i18n.ts","locales/en/translation.js","locales/ru/translation.js","index.tsx","assets/logo_auth3.png","assets/logos/лого__Бензоколонка_1.svg","assets/logos/лого__Бензоколонка_2.svg","assets/main_logo.png","assets/main_logo_full2.png"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","MenuKeys","getGasStationNumber","num","matched","match","getGasStationTitle","name","gasStationNumber","parsePrice","price","currency","separator","symbol","precision","format","filterSelect","input","option","value","toLowerCase","indexOf","children","filterAnalyticsSelect","label","filterBasisSelect","jwtExp","token","jwt","jwt_decode","exp","Number","isFinite","defaultToken","accessToken","copyDefaultToken","TokenStorage","storage","tokenExpTimeout","onTokenExpiredCallback","tokenExpTimeOut","timer","console","log","init","this","getItem","setToken","window","addEventListener","event","key","updateToken","newValue","document","visibilityState","getAccessToken","checkIsTokenExpired","refreshToken","setItem","removeItem","error","startTimer","saveToStorage","setGA","decodedToken","sub","setTimeout","ReactGA","set","userId","expireDate","Date","now","clearToken","clearTimeout","bind","getTime","url","process","fetch","method","headers","body","JSON","stringify","query","then","res","json","data","tokenFromProperty","tokenFromStorage","LOGOUT","gql","client","mutate","mutation","clearStore","notification","info","message","location","pathname","createTokenService","tokenStorage","localStorage","fragmentMatcher","IntrospectionFragmentMatcher","introspectionQueryResultData","__schema","types","kind","possibleTypes","cache","InMemoryCache","errorLink","onError","networkError","errorTitle","i18next","t","statusCode","description","requestLink","setContext","_","context","authorization","ApolloClient","link","ApolloLink","from","createUploadLink","uri","SecuredRoute","Layout","path","to","currentStation","SubMenu","Menu","ACTUAL_PRICES","WHOLESALE","MainMenu","defaultKeys","useLocation","useTranslation","useState","selectedKey","setSelectedKey","actualPricesMenuItems","title","icon","TableOutlined","AreaChartOutlined","PushpinOutlined","wholesaleMenuItems","useEffect","route","find","item","menuRender","Item","wholesaleRender","theme","mode","defaultSelectedKeys","defaultOpenKeys","selectedKeys","CarOutlined","ChangeLang","i18n","locales","langMenu","className","language","onClick","changeLanguage","locale","role","aria-label","currentLanguage","langIcon","GlobalOutlined","overlay","placement","USER_PROFILE","AvatarDropdown","useQuery","loading","userProfile","size","style","marginLeft","marginRight","menuHeaderDropdown","LogoutOutlined","firstName","lastName","email","userName","UserOutlined","alt","MainHeader","classRight","collapsed","MainLogo","logoClass","fullLogoClass","src","require","Header","Content","Sider","Footer","MainLayout","setCollapsed","collapsedWidth","setCollapsedWidth","values","setDefaultOpenKeys","pathName","page","pageview","width","innerWidth","handleMenuFold","useCallback","menuFold","MenuFoldOutlined","MenuUnfoldOutlined","breakpoint","trigger","onCollapse","coll","AuthLayout","justify","align","span","xs","md","LoginForm","handleSubmit","initialValues","validationSchema","useFormik","onSubmit","formikHandleSubmit","setSubmitting","status","touched","errors","handleChange","isSubmitting","type","showIcon","onFinish","help","undefined","validateStatus","prefix","onChange","placeholder","password","Password","htmlType","disabled","block","AuthLogo","Title","Typography","Paragraph","LoginComponent","setRememberMe","level","defaultChecked","target","checked","float","href","CREATE_TOKEN","petrol","gas","diesel","allFuelTypes","defaultActualPriceHeaders","actualPriceHeaders","basisesHeaders","defaultBasisesHeaders","defaultFuelsObject","fuelTypes","reduce","accumulator","defaultValueByName","CustomStorage","parse","selectedFuels","getValue","defaultActualPricesObject","length","setValue","filter","selectedFuel","LoginContainer","rememberMe","useMutation","createToken","params","a","setStatus","variables","remember","response","setUpdatedValue","success","graphQLErrors","tMessage","String","Yup","required","LoginPage","Helmet","InfoMessage","groupId","actualPrices","result","forEach","station","index","mapGasStation","push","competitors","competitor","competitorIndex","mapCompetitorGasStation","mapFuelPrices","fuelPrices","prices","maxUpdatedAt","record","brand","internalNumber","number","own","address","dynamicPrice","dynamicPricing","region","hasIndicator","products","updatedAt","border","lastItem","mapCompetitorFuelPrices","Math","floor","random","fuel","product","dayjs","isBefore","delta","recommendedAt","recommendedPrice","changed","diff","ColumnFilter","fuelStorageName","setTableHeaders","defaultPrices","getDefaultHeaders","translateString","getTranslateString","columnMenuVisible","setColumnMenuVisible","filterItems","setFilterItems","columnsFilterMenuItems","checkboxHandle","prev","newItems","elem","includes","FilterMenu","onVisibleChange","flag","visible","arrow","ActualPriceExtras","eachRowClass","rowClass","join","ownGasStationClass","headerWidth","header","GasStationStatus","ActualPriceCell","classes","cellClasses","badge","color","concat","ActualPriceDeltaCell","formatDelta","deltaSign","sign","formattedDelta","toFixed","currentSymbol","deltaFragment","DynamicGasStationTooltip","arrowPointAtCenter","ClosedGasStationTooltip","StationStatusIcon","dynamic","closed","RECONSTRUCTION","ActualPriceBrand","truncatedAdress","setTruncatedAdress","ellipsis","onEllipsis","useGasStationColumns","onFilters","zeroHeader","sorter","renderFunction","isTankFarm","renderCell","converted","columns","useMemo","dataIndex","render","utc","unshift","fixed","ActualPricesGasStationFragment","GAS_STATION","ExpandedTable","expanded","gasStationId","tableHeaders","setOnFilters","tableData","setTableData","tableColumns","setTableColumns","useLazyQuery","getGasStation","gasStation","dataSource","showSorterTooltip","scroll","x","rowClassName","pagination","_pagination","_filters","items","field","sortDirection","Array","isArray","columnKey","toString","order","sort","b","direction","hasOwnProperty","ActualPriceNestedTable","slice","expandedRowKeys","setExpandedRowKeys","isModalVisible","setIsModalVisible","modalView","setModalView","modalTitle","setModalTitle","y","expandable","expandedRowRender","expandRowByClick","expandIcon","onExpand","sticky","footer","maskClosable","onCancel","centered","RadioButton","Radio","Button","ActualPricePicker","buttons","buttonsText","checkedTypes","text","Group","getElementById","scrollIntoView","inline","defaultValue","buttonStyle","periodDateFormat","date","NEW_STATISTIC_REPORT","PriceHistoryDownloadButton","file","setFile","fileName","setFileName","setLoading","buttonLoading","setButtonLoading","URL","createObjectURL","createElement","download","appendChild","click","remove","antIcon","LoadingOutlined","fontSize","spin","options","Authorization","responseFileName","get","split","replaceAll","blob","Blob","blobFile","category","action","catch","err","indicator","CloudDownloadOutlined","PriceHistoryModalTable","_value","createdAt","bytes","sizes","i","bytesToSize","transition","HourglassTwoTone","STATISTIC_REPORT_MUTATION_CREATE","RangePicker","DatePicker","ActualPricePriceHistoryModal","intervalRef","useRef","offset","setOffset","currentPage","setCurrentPage","dates","setDates","selectValue","setSelectValue","total","setTotal","loadData","refetch","createReport","reportLoading","showSizeChanger","current","pageSize","defaultPageSize","limit","responseList","statisticReport","list","responseData","responseTotal","some","setInterval","clearInterval","onReportCreate","layout","create","toISOString","newData","select","Option","onCalendarChange","val","disabledDate","tooLate","ActualPriceReports","CardWrapper","PageMainHeader","breadcrumbs","headerBreadcrumbs","breadcrumb","Select","Text","PaginationSize","setDefaultPageSize","setListOffset","ActualPriceComponent","FilterByRegion","paginationChange","ActualPriceRegionPicker","regions","pickedRegion","setPickedRegion","allowClear","showSearch","virtual","count","G_S_WITHOUT_COMPETITORS","MARKET_INDICATORS","ActualPriceContainer","pageTotal","setPageTotal","listOffset","actualPriceData","setActualPriceData","gasStationItems","setGasStationItems","setRegions","getIndicators","indicatorsData","slicedData","gasStations","actualPricesData","sliced","filtered","customer","tempRegions","assign","indicatorsObj","marketIndicators","obj","stationId","fuels","ActualPricePage","content","smallWholesalePrices","it","assortment","mainStation","mainStationAssortment","mapAssortment","stations","temp","assortmentKey","trader","existing","ActualPriceTable","useVT","vt","components","fieldA","fieldB","j","tempGroup","SmallWholesaleComponent","FilterByCompany","SMALL_WHOLESALE","SmallWholeSaleCompanyPicker","pickedCompany","setPickedCompany","SmallWholeSaleRegionPicker","SmallWholesaleContainer","companies","setCompanies","filteredRegions","setFilteredRegions","filteredAllData","setFilteredAllData","getUniqueTraders","Set","flatMap","filteredRegion","uniqueTradersAll","uniqueTraders","filteredByAllCompany","actualPrice","filteredEmptyBasises","basises","actualRegionsCount","renderValue","useSmallWholesaleColumns","SmallWholesalePage","PriceStatisticPage","am4core","kelly","PricingState","PricingStrategy","PriceStatisticChart","ownerStation","translateStr","secondStations","scrollBarValue","setScrollBarValue","chartRef","indicatorRef","scrollbarX","am4charts","chart","secondInput","thirdInput","firstInput","generateMessage","tooltipContainer","hide","useLayoutEffect","dateAxis","xAxes","dateFormatter","inputDateFormat","yAxes","renderer","grid","template","minGridDistance","start","end","keepSelection","legend","cursor","events","on","createChild","background","fill","fillOpacity","height","indicatorLabel","valign","dispose","series","clear","serie","dataFields","valueY","dateX","tooltipText","strokeWidth","minBulletDistance","startLocation","defaultColor","stroke","hex","bullet","bullets","circle","radius","states","properties","scale","createSeries","scrollSeriesItem","scrollbarChart","getIndex","parent","bottomAxesContainer","xl","lg","AnalyticsComponent","analytics","Filters","OwnStationFilter","setOwnerStation","optionLabelProp","filterOption","FuelTypesFilter","setFuelTypes","selectData","defaultActiveFirstOption","NoContent","image","Empty","PRESENTED_IMAGE_SIMPLE","GasStationsFilter","owner","setGasStations","noContent","notFoundContent","ANALYTICS_GAS_STATIONS","ANALYTICS_COMPETITORS","AnalyticsFilters","setOwn","firstLoad","setFirstLoad","setShowSearch","setCompetitors","getCompetitors","competitorsData","competitorsLoading","AnalyticsContainer","setAnalytics","getStatistic","getStatisticRef","debounce","gasStationIds","productCode","lines","statistic","filters","AnalyticsPage","PersonalGasStationFragment","PERSONAL_GAS_STATIONS_LIST","ActualPriceSearch","setSearchValue","GasStationTypes","tagsData","tags","colorClass","GasStationsTable","tableProps","statusWidth","fuelTypesWidth","brandHeaderSize","brandAddress","columnWidth","forProfile","PersonalGasStationsComponent","controlPanel","table","PersonalGasStationsContainer","tempGasStations","searchValue","hashObject","statuses","ACTIVE","UNDER_CONSTRUCTION","CLOSED","brandName","managementCompany","PersonalGasStationsPage","UserSettingsContainer","notifications","setNotifications","valuePropName","initialValue","checkedChildren","unCheckedChildren","UserSettingsPage","SellerFilter","basis","traders","filterSeller","setTraders","TankFarmFilter","setBasis","NomenclatureFilter","filterNomenclature","setProducts","setSelectData","Map","tempData","has","fullName","WHOLESALE_STATS_BASISES","BasisStatsFilters","filterBasis","setFilterBasis","setFilterSeller","setFilterNomenclature","dataBasis","basisLoading","assortmentDictionary","tempProducts","traderID","PriceStatisticBasisComponent","WHOLESALE_STATS","PriceStatisticBasisContainer","statsData","statsLoading","inputBasis","wholesaleStats","stat","PriceStatisticBasisPage","RECOMMENDED_PRICES","UPDATE_PRICING_PRESETS","RecommendedPriceCell","SizeOfSalesButton","clearFile","PaperClipOutlined","CloseOutlined","stopPropagation","UploadOutlined","InfoIconTooltip","InfoCircleOutlined","FilterFormItemLabel","strategyArray","FilterForm","setFieldValue","colon","labelAlign","sizeOfSales","beforeUpload","accept","itemRender","levelOfMarginality","strategy","strat","toUpperCase","priority","min","max","step","tooltipPlacement","NoData","DataLoading","InfoCircleFilled","Loading","RecommendedPriceTable","presetStatus","recommendedData","PENDING","EMPTY","RecommendedPricesComponent","about","DownloadOutlined","initFormData","rounding","RecommendedPricesContainer","setRecommendedData","pricingEnabled","setPricingEnabled","setPresetStatus","setInitialValues","sendRequest","presetLoading","shape","marginsFile","volumesFile","updatePricingPresets","state","pricingPresets","RecommendedPricesPage","GasStationMapItem","GAS_STATIONS_LIST","MapTooltip","tooltipData","setTooltipVisible","fuelPriceTitle","setClasses","setUpdatedAt","classesObj","closeButton","classNames","customPanelStyle","maxDate","isAfter","updatedAtTitle","competitorsList","Panel","itemLayout","renderItem","Meta","marginTop","position","bordered","extra","active","defaultTooltipData","fromCharCode","GasStationYandexMapComponent","points","ymaps","coordinates","longitude","latitude","zIndex","hoverColor","geometry","concurrent","mapFeaturesMapping","center","zoom","mapState","setMapState","tooltipVisible","setTooltipData","getMarkData","useYandexMapbox","selectedMark","setSelectedMark","tooltip","handleClick","toRadians","angle","PI","getDistanceBetweenCoordinates","lat1","lng1","lat2","lng2","dLat","dLng","sin","cos","atan2","sqrt","bounds","acc","mark","lat","lng","minLat","maxLat","minLng","maxLng","Infinity","latDiff","lngDiff","mapWidth","mapHeight","innerHeight","zoomX","log2","zoomY","minZoom","centerLat","centerLng","ceil","getOptimalZoom","apiKey","REACT_APP_YANDEX_API_KEY","markCompetitors","circleLayout","isCompetitor","img","getImagePath","selectedMarkStyle","templateLayoutFactory","createClass","apikey","modules","reverse","iconLayout","iconShape","GasStationYandexMapRegionPicker","GasStationsYandexMapContainer","setPoints","actualPoints","setActualPoints","MapComponentWithYMaps","withYMaps","GasStationYandexMapPage","Routers","exact","component","resources","en","translation","enModules","tabs","catalog","personalArea","titles","microMarket","photos","actualPricesDiscount","news","services","parking","restroom","atm","tireFitting","carWash","shop","service","pharmacy","cafe","fuelCard","lickard","tinkoff","bpPartner","tatneftPartner","taif","personalInfo","inn","ownerPhoneNumber","phoneNumber","management","company","managementPhoneNumber","gasStationPhoneNumber","countByManagement","all","marketing","reconstruction","underConstruction","login","pleaseAuth","loginPlaceholder","passwordPlaceholder","submitText","rememberMeText","forgotPasswordText","didNotHaveAccount","registration","requiredField","emailMinLength","notAuthorized","welcome","500","503","other","reports","regionSelect","companySelect","extras","search","pdf","excel","print","priceHistory","perPage","created","tankFarm","A0100","A0980","A098B","A0950","A095B","A0920","A092B","A0800","D0DT0","D0DTB","D0DTZ","D0DTK","G0KPG","P0SUG","D0DTL","D0DTX","D0DTE","D0DTA","PPCB2","checkDate","analyticsFuel","P0SPG","settings","column","analyticsFilters","PPCPS","DTZK5","DDEC3","DDEE3","DDE23","DDE33","DDWK2","DDWF5","DTEK5","DDTZ3","DDEF3","PPCPB","personalPrice","gasStationYandexMap","wrapperTitle","axisLeftLegend","axisBottomLegend","noInfo","myStation","ownGasStation","gasStationsSecondary","fuelTypesSecondary","wholesaleFilter","myWholesale","myWholesalePlaceholder","seller","sellerPlaceholder","fuelTypesPlaceholder","datePresets","day","week","month","quarter","year","fuelPricesDate","ownGasStations","menu","submenu","gasStationPrices","tankFarmPrices","menuItem","ActualPriceReport","SmallWholesale","Analytics","PriceStatistic","GasStationMap","PersonalGasStations","RecommendedPrices","user","headerMenu","signOut","settingsMenu","basicSettings","otherSettings","settingsItem","mail","off","btnSubmit","pages","utils","ru","ruModules","authorizationError","welcomeText","use","Backend","languageDetector","initReactI18next","fallbackLng","debug","detection","interpolation","escapeValue","extend","initialize","ReactDOM","fallback","Router"],"mappings":"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","file":"static/js/main.2f7b308c.chunk.js","sourcesContent":["var map = {\n\t\"./лого__Bishkek Petroleum_1.svg\": 2201,\n\t\"./лого__IRBIS_1.svg\": 2202,\n\t\"./лого__Partner Neft_1.svg\": 2203,\n\t\"./лого__Red Petroleum_1.svg\": 2204,\n\t\"./лого__Rusoil_1.svg\": 2205,\n\t\"./лого__Shell_1.svg\": 2206,\n\t\"./лого__АТАН_1.svg\": 2207,\n\t\"./лого__Аройл Газ_1.svg\": 2208,\n\t\"./лого__Башнефть_1.svg\": 2209,\n\t\"./лого__Бензоколонка_1.svg\": 439,\n\t\"./лого__Газпром_1.svg\": 2210,\n\t\"./лого__Газпромнефть_1.svg\": 2211,\n\t\"./лого__Движение_1.svg\": 2212,\n\t\"./лого__ЗВЕЗДА_1.svg\": 2213,\n\t\"./лого__КНП_1.svg\": 2214,\n\t\"./лого__Калина Ойл_1.svg\": 2215,\n\t\"./лого__ЛУКОЙЛ_1.svg\": 2216,\n\t\"./лого__МПА_1.svg\": 2217,\n\t\"./лого__ННК_1.svg\": 2218,\n\t\"./лого__Нефтьмагистраль_1.svg\": 2219,\n\t\"./лого__ОПТИ_1.svg\": 2220,\n\t\"./лого__ОРТК_1.svg\": 2221,\n\t\"./лого__Перекресток Ойл_1.svg\": 2222,\n\t\"./лого__Роснефть_1.svg\": 2223,\n\t\"./лого__Россия нефть_1.svg\": 2224,\n\t\"./лого__Сургутнефт_1.svg\": 2225,\n\t\"./лого__ТАИФ_1.svg\": 2226,\n\t\"./лого__Татнефть_1.svg\": 2227,\n\t\"./лого__Трасса_1.svg\": 2228\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2200;","module.exports = __webpack_public_path__ + \"static/media/лого__Bishkek Petroleum_1.7575d3ea.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__IRBIS_1.0730bf81.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Partner Neft_1.73169837.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Red Petroleum_1.3deb9fd6.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Rusoil_1.5d8adf1b.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Shell_1.3300bc57.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__АТАН_1.82961659.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Аройл Газ_1.490189de.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Башнефть_1.1ca9b555.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Газпром_1.83d5a394.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Газпромнефть_1.fc543f3e.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Движение_1.792cc73d.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ЗВЕЗДА_1.98a05e8b.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__КНП_1.e37df2c7.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Калина Ойл_1.ac7dbe77.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ЛУКОЙЛ_1.ee3ece23.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__МПА_1.787781cc.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ННК_1.6591c17d.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Нефтьмагистраль_1.b85ff176.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ОПТИ_1.063d2100.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ОРТК_1.c90f83d9.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Перекресток Ойл_1.fa44c171.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Роснефть_1.b33c401e.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Россия нефть_1.e949bd9c.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Сургутнефт_1.48b1b0ce.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ТАИФ_1.f4923dce.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Татнефть_1.f06d4dc9.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Трасса_1.718a578b.svg\";","var map = {\n\t\"./лого__Bishkek Petroleum_2.svg\": 2230,\n\t\"./лого__IRBIS_2.svg\": 2231,\n\t\"./лого__Partner Neft_2.svg\": 2232,\n\t\"./лого__Red Petroleum_2.svg\": 2233,\n\t\"./лого__Rusoil_2.svg\": 2234,\n\t\"./лого__Shell_2.svg\": 2235,\n\t\"./лого__АТАН_2.svg\": 2236,\n\t\"./лого__Аройл Газ_2.svg\": 2237,\n\t\"./лого__Башнефть_2.svg\": 2238,\n\t\"./лого__Бензоколонка_2.svg\": 440,\n\t\"./лого__Газпром_2.svg\": 2239,\n\t\"./лого__Газпромнефть_2.svg\": 2240,\n\t\"./лого__Движение_2.svg\": 2241,\n\t\"./лого__ЗВЕЗДА_2.svg\": 2242,\n\t\"./лого__КНП_2.svg\": 2243,\n\t\"./лого__Калина Ойл_2.svg\": 2244,\n\t\"./лого__ЛУКОЙЛ_2.svg\": 2245,\n\t\"./лого__МПА_2.svg\": 2246,\n\t\"./лого__ННК_2.svg\": 2247,\n\t\"./лого__Нефтьмагистраль_2.svg\": 2248,\n\t\"./лого__ОПТИ_2.svg\": 2249,\n\t\"./лого__ОРТК_2.svg\": 2250,\n\t\"./лого__Перекресток Ойл_2.svg\": 2251,\n\t\"./лого__Роснефть_2.svg\": 2252,\n\t\"./лого__Россия нефть_2.svg\": 2253,\n\t\"./лого__Сургутнефт_2.svg\": 2254,\n\t\"./лого__ТАИФ_2.svg\": 2255,\n\t\"./лого__Татнефть_2.svg\": 2256,\n\t\"./лого__Трасса_2.svg\": 2257\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2229;","module.exports = __webpack_public_path__ + \"static/media/лого__Bishkek Petroleum_2.d0741b2a.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__IRBIS_2.1b9f7a52.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Partner Neft_2.185b53c9.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Red Petroleum_2.6038586b.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Rusoil_2.68b2b878.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Shell_2.56428cd8.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__АТАН_2.ea298050.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Аройл Газ_2.d10c05be.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Башнефть_2.428e977c.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Газпром_2.1636dc9c.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Газпромнефть_2.3972c7bd.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Движение_2.d8639adb.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ЗВЕЗДА_2.ff258b92.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__КНП_2.a36d0456.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Калина Ойл_2.24f8894d.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ЛУКОЙЛ_2.8809cebd.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__МПА_2.cf7ff05b.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ННК_2.13172728.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Нефтьмагистраль_2.38359edb.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ОПТИ_2.073f074e.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ОРТК_2.d8299213.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Перекресток Ойл_2.cbd69c1b.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Роснефть_2.8df0add1.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Россия нефть_2.f24317df.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Сургутнефт_2.18b6858f.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__ТАИФ_2.eec02463.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Татнефть_2.4e017b9e.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Трасса_2.a88ba932.svg\";","export enum MenuKeys {\n ACTUAL_PRICES = \"actual-prices-key\",\n WHOLESALE = \"wholesale-key\"\n}\n","import currency from \"currency.js\";\nimport {FilterFunc} from \"rc-select/lib/interface/generator\";\nimport {OptionGroupData} from \"rc-select/lib/interface\";\n\ninterface FilterFuncProps {\n value: string;\n children: string\n}\ninterface FilterSelectProps {\n value: string;\n label: string\n}\n\nexport const getGasStationNumber = (num: string | null): string => {\n if (num === null) {\n return '';\n }\n\n const regex = /\\d+/g;\n const matched = num.match(regex);\n\n if (matched !== null) {\n return `№${matched[0]}`\n }\n\n return num;\n};\n\nexport const getGasStationTitle = (name: string, num: string | null): string => {\n const gasStationNumber = num ? `, ${num}` : \"\";\n\n return `${name}${gasStationNumber}`\n};\n\nexport const DEFAULT_PAGINATION_SIZE = 10;\n\nexport const parsePrice = (price: number): string => {\n return currency(price, {separator: \" \", symbol: \"\", precision: 0}).format();\n};\n\nexport const isEnvForDebug = (): boolean => {\n return process.env.NODE_ENV === 'development';\n};\n\nexport const filterSelect: FilterFunc = (\n input,\n option: OptionGroupData & FilterFuncProps\n) => {\n if (!option) return false;\n\n return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n || option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n};\n\n\nexport const filterAnalyticsSelect: FilterFunc = (\n input,\n option: OptionGroupData & FilterSelectProps\n) => {\n if (!option) return false;\n\n return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0\n};\n\n\nexport const filterBasisSelect: FilterFunc = (\n input,\n option: OptionGroupData & FilterFuncProps\n) => {\n if (!option) return false;\n\n return option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0\n};\n","import jwt_decode from \"jwt-decode\";\nimport {JwtToken, TokenType} from './types';\n\nexport const TOKEN_EXP_TIMEOUT = 10000;\n\nexport const jwtExp = (token?: string | null): number | null => {\n if (!(typeof token === 'string')) {\n return null;\n }\n\n try {\n const jwt: JwtToken = jwt_decode(token);\n if (jwt && jwt.exp && Number.isFinite(jwt.exp)) {\n return jwt.exp * 1000;\n }\n\n return null;\n } catch (e) {\n return null;\n }\n};\n\nexport const isExpired = (exp?: number): boolean => {\n if (!exp) {\n return false;\n }\n\n return Date.now() > exp;\n};\n\nexport const defaultToken: TokenType = {\n accessToken: null,\n};\n\nexport const copyDefaultToken = (): TokenType => {\n return { ...defaultToken}\n};\n","import jwt_decode from \"jwt-decode\";\nimport ReactGA from \"react-ga\";\n\nimport {ConstructorType, TokenType, StorageType, JwtToken} from './types';\nimport { copyDefaultToken, isExpired, jwtExp } from './helpers';\nimport {RefreshToken} from \"lib/graphql/mutations/RefreshToken/types\";\n\nconst ACCESS_TOKEN_KEY = 'token';\nconst refreshMutation = `\n mutation refreshToken {\n refreshToken\n }\n`;\n\nexport default class TokenStorage {\n storage: StorageType;\n\n tokenExpTimeOut = 0;\n\n // eslint-disable-next-line no-console\n onTokenExpiredCallback = (timer: number): void => {console.log(timer)};\n\n token: TokenType = copyDefaultToken();\n\n init = true;\n\n timer = 0;\n\n constructor({ storage, tokenExpTimeout, onTokenExpiredCallback }: ConstructorType) {\n this.storage = storage;\n this.tokenExpTimeOut = tokenExpTimeout; // random 1-2-3 min\n this.onTokenExpiredCallback = onTokenExpiredCallback;\n const accessToken = storage.getItem(ACCESS_TOKEN_KEY);\n\n if (accessToken) {\n this.setToken({ accessToken });\n } else {\n this.init = false;\n }\n\n window.addEventListener(\"storage\", (event) => {\n event.key === ACCESS_TOKEN_KEY && this.updateToken({accessToken: event.newValue});\n });\n\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === \"visible\") {\n const token = this.getAccessToken();\n const isTokenExpired = this.checkIsTokenExpired(token);\n\n isTokenExpired && this.refreshToken();\n }\n }, false)\n }\n\n saveToStorage({ accessToken }: TokenType): void {\n try {\n if (this.storage === null) {\n throw new Error('не найдено storage');\n }\n\n if (accessToken) {\n this.storage.setItem(ACCESS_TOKEN_KEY, accessToken);\n } else {\n this.storage.removeItem(ACCESS_TOKEN_KEY);\n }\n\n } catch (e) {\n console.error('Не удалось сохранить токен в storage', e); // eslint-disable-line no-console\n }\n }\n\n updateToken({ accessToken }: TokenType): void {\n this.token.accessToken = accessToken;\n this.startTimer();\n }\n\n setToken({ accessToken }: TokenType): string | null {\n if (this.checkIsTokenExpired(accessToken)) {\n return null;\n }\n\n this.token.accessToken = accessToken;\n this.init = false;\n\n // start timer\n this.startTimer();\n\n // save To Storage\n this.saveToStorage({ accessToken });\n\n // set Google Analytics user id\n this.setGA();\n\n return accessToken;\n }\n\n setGA(): void {\n if (!this.decodedToken) {\n return;\n }\n\n const {sub} = this.decodedToken;\n\n if (sub) {\n setTimeout(() => {\n ReactGA.set({\n userId: sub,\n });\n }, 0)\n }\n }\n\n checkIsTokenExpired(token: string | null): boolean {\n const expireDate = jwtExp(token);\n\n if (!expireDate) {\n this.clearToken();\n\n return true;\n }\n\n if (expireDate && isExpired(expireDate)) {\n this.refreshToken();\n\n return true;\n }\n\n return false;\n }\n\n startTimer(): void {\n if (!this.decodedToken) {\n return;\n }\n\n const { exp } = this.decodedToken;\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n this.timer = window.setTimeout(\n this.refreshToken.bind(this),\n exp * 1000 - new Date().getTime() - this.tokenExpTimeOut,\n );\n }\n\n clearToken(): void {\n this.token = copyDefaultToken();\n\n this.saveToStorage(this.token);\n this.onTokenExpiredCallback(this.timer);\n }\n\n refreshToken(): void {\n if (document.visibilityState === \"hidden\") {\n return;\n }\n\n const token = this.getAccessToken();\n const expireDate = jwtExp(token);\n const url = process.env.REACT_APP_BENZUP_GRAPH_API_URL;\n\n if (!expireDate) {\n this.clearToken();\n\n return;\n }\n\n try {\n if (!url) {\n return;\n }\n\n void fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: refreshMutation\n }),\n })\n .then(res => res.json())\n .then(res => {\n const {data} = res;\n\n if (!data) {\n return this.clearToken();\n }\n\n const {refreshToken} = data as RefreshToken;\n if (data && refreshToken) {\n this.setToken({accessToken: refreshToken})\n }\n });\n\n } catch (e) {\n throw new Error(e);\n }\n\n }\n\n getAccessToken(): string | null {\n const tokenFromProperty = this.token.accessToken;\n if (tokenFromProperty) {\n return tokenFromProperty;\n }\n\n const tokenFromStorage = this.storage.getItem(ACCESS_TOKEN_KEY);\n if (tokenFromStorage) {\n return tokenFromStorage;\n }\n\n return null;\n }\n\n get accessToken(): string | null {\n return this.token.accessToken;\n }\n\n get decodedToken(): JwtToken | null {\n const token = this.getAccessToken();\n\n if (!token) {\n return null;\n }\n\n return jwt_decode(token);\n }\n\n}\n","import gql from \"graphql-tag\";\n\nconst LOGOUT = gql`\n mutation logout {\n logout\n }\n`;\n\nexport default LOGOUT;\n","import {notification} from 'antd';\nimport ReactGA from \"react-ga\";\nimport client from \"lib/graphql/client\";\n\nimport {TOKEN_EXP_TIMEOUT} from './helpers';\nimport TokenStorage from './tokenStorage'\nimport {Logout} from \"lib/graphql/mutations/Logout/types\";\nimport LOGOUT from \"lib/graphql/mutations/Logout\";\n\nconst onTokenExpiredCallback = (timer?: number) => {\n if (timer) {\n clearTimeout(timer);\n\n ReactGA.set({\n userId: null,\n });\n\n try {\n void client.mutate({\n mutation: LOGOUT\n }).then(() => {\n void client.clearStore().then(\n () => {\n notification.info({message: 'Ваша сессия подошла к концу'});\n document.location.pathname = '/user/login';\n });\n })\n\n } catch (e) {\n throw new Error(e);\n }\n\n }\n};\n\nexport const createTokenService = (): TokenStorage => {\n window.tokenStorage = window.tokenStorage || new TokenStorage({\n storage: localStorage,\n tokenExpTimeout: TOKEN_EXP_TIMEOUT,\n onTokenExpiredCallback\n });\n\n return window.tokenStorage\n};\n\nexport default createTokenService()\n","import {ErrorResponse, onError} from \"apollo-link-error\";\nimport {InMemoryCache, IntrospectionFragmentMatcher} from \"apollo-cache-inmemory\";\n\nimport {ApolloClient} from \"apollo-client\";\nimport {ApolloLink} from \"apollo-link\";\nimport TokenStorage from '../TokenStorage';\nimport { createUploadLink } from 'apollo-upload-client'\nimport i18next from \"i18next\";\nimport { notification } from 'antd';\nimport { setContext } from \"apollo-link-context\";\n\nconst fragmentMatcher = new IntrospectionFragmentMatcher ({\n introspectionQueryResultData: {\n __schema: {\n types: [\n {\n kind: \"UNION\",\n name: \"statisticReport\",\n possibleTypes: [\n {\n name: \"PricesReport\"\n },\n {\n name: \"StatisticReport\"\n }\n ]\n\n },\n ],\n },\n },\n});\n\n\nconst cache = new InMemoryCache({fragmentMatcher});\n\nconst errorLink = onError(({ networkError }: ErrorResponse) => {\n\n const errorTitle = i18next.t('notification.error');\n\n if (networkError && 'statusCode' in networkError) {\n switch (networkError.statusCode) {\n case 401:\n case 403:\n // resetToken();\n break;\n case 500:\n notification.error({\n message: errorTitle,\n description: i18next.t('notification.networkError.500')\n });\n break;\n case 503:\n notification.error({\n message: errorTitle,\n description: i18next.t('notification.networkError.503')\n });\n break;\n default:\n notification.error({\n message: errorTitle,\n description: i18next.t('notification.networkError.other')\n });\n }\n } /* else {\n notification.error({\n message: errorTitle,\n description: i18next.t('notification.networkError.other')\n });\n } */\n});\n\nconst requestLink = setContext((_, {headers, ...context}) => {\n const { accessToken } = TokenStorage;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return {\n headers: {\n ...headers,\n ...(accessToken ? {authorization: `Bearer ${accessToken}`} : {}),\n },\n ...context,\n };\n});\n\nconst client = new ApolloClient({\n cache,\n link: ApolloLink.from([\n requestLink,\n errorLink,\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n createUploadLink({\n uri: process.env.REACT_APP_BENZUP_GRAPH_API_URL\n }),\n //createUploadLink({\n // uri: 'http://82.146.35.228/api/query'\n //}),\n ])\n\n\n});\n\nexport default client;","import React from \"react\";\nimport {Redirect, Route} from 'react-router-dom';\n\nimport TokenStorage from \"lib/TokenStorage\";\n\ninterface SecuredRouteProps {\n Layout: React.FC\n}\n\nconst SecuredRoute: React.FC = ({children, Layout}) => {\n const token = TokenStorage.getAccessToken();\n\n if (!token) {\n return \n }\n\n return (\n \n \n { children }\n \n \n );\n};\n\nexport default SecuredRoute;\n","import dayjs from \"dayjs\";\n\nimport {GasStationFuelPrice, GasStationsItem} from \"lib/graphql/queries/GasStations/gasStations\";\nimport {ActualPriceTableRow, ProductDataIndex} from \"components/ActualPriceComponent/types\";\n\nlet groupId = 100;\nlet currentStation: ActualPriceTableRow;\n\n//: (data:Array) => Array\nexport const actualPrices = (data: Array): Array => {\n const result: Array = [];\n data.forEach((station, index) => {\n currentStation = mapGasStation(station, index);\n result.push(currentStation);\n\n station.competitors && station.competitors.forEach((competitor, competitorIndex) => {\n result.push(\n mapCompetitorGasStation(\n currentStation,\n competitor,\n competitorIndex === (station.competitors.length - 1)\n )\n );\n\n });\n\n groupId += 10;\n });\n\n return result;\n};\n\nconst mapGasStation = (\n station: GasStationsItem,\n index: number,\n): ActualPriceTableRow => {\n const {prices, maxUpdatedAt} = mapFuelPrices(station.fuelPrices);\n\n const record: ActualPriceTableRow = {\n key: station.id,\n groupId,\n brand: station.name,\n internalNumber: station.number,\n own: true,\n address: station.address,\n dynamicPrice: station.dynamicPricing,\n status: station.status,\n region: station.region.id,\n hasIndicator: station.hasIndicator,\n products: {}\n };\n\n record.products = prices;\n record.updatedAt = maxUpdatedAt;\n\n\n if (index || index === 0) {\n record.border = 'top';\n }\n\n if (station.competitors && station.competitors.length === 0) {\n record.border = 'both';\n }\n\n return record;\n};\n\nconst mapCompetitorGasStation = (\n station: ActualPriceTableRow,\n competitor: GasStationsItem,\n lastItem: boolean\n): ActualPriceTableRow => {\n const {prices, maxUpdatedAt} = mapCompetitorFuelPrices(competitor.fuelPrices, station);\n\n const record: ActualPriceTableRow = {\n key: `${competitor.id}${Math.floor(Math.random() * (3000 - 50) + 50)}`,\n groupId,\n brand: competitor.name,\n internalNumber: competitor.number,\n own: false,\n address: competitor.address,\n dynamicPrice: competitor.dynamicPricing,\n status: competitor.status,\n region: competitor.region.id,\n hasIndicator: competitor.hasIndicator,\n products: {}\n };\n\n record.products = prices;\n record.updatedAt = maxUpdatedAt;\n\n if (lastItem) {\n record.border = 'bottom';\n }\n\n return record;\n};\n\nconst mapFuelPrices = (fuelPrices: Array) => {\n let maxUpdatedAt: dayjs.Dayjs | null = null;\n const prices: ProductDataIndex = {};\n\n fuelPrices.forEach((fuel) => {\n if (fuel.product.code === null) {\n return;\n }\n\n const updatedAt = dayjs(fuel.updatedAt);\n\n if (maxUpdatedAt === null || maxUpdatedAt.isBefore(updatedAt)) {\n maxUpdatedAt = updatedAt\n }\n\n prices[fuel.product.code] = {\n price: fuel.price,\n delta: fuel.delta,\n recommendedAt: fuel.recommendedAt,\n recommendedPrice: fuel.recommendedPrice,\n changed: false\n };\n\n });\n\n return {\n prices,\n maxUpdatedAt\n };\n};\n\nconst mapCompetitorFuelPrices = (fuelPrices: Array, station: ActualPriceTableRow) => {\n let maxUpdatedAt: dayjs.Dayjs | null = null;\n const prices: ProductDataIndex = {};\n\n fuelPrices.forEach((fuel) => {\n if (fuel[\"product\"].code === null) {\n return;\n }\n\n const updatedAt = dayjs(fuel.updatedAt);\n\n if (maxUpdatedAt === null || maxUpdatedAt.isBefore(updatedAt)) {\n maxUpdatedAt = updatedAt\n }\n\n prices[fuel.product.code] = {\n price: fuel.price,\n delta: fuel.delta,\n recommendedAt: fuel.recommendedAt,\n recommendedPrice: fuel.recommendedPrice,\n changed: false\n };\n\n if (station.products[fuel.product.code]) {\n prices[fuel.product.code].diff = fuel.price - currentStation.products[fuel.product.code].price;\n }\n\n });\n\n return {\n prices,\n maxUpdatedAt\n };\n};\n","import React, {ReactNode, useEffect, useState} from \"react\";\nimport {Menu} from \"antd\";\nimport {Link, useLocation} from \"react-router-dom\";\nimport {useTranslation} from \"react-i18next\";\nimport {\n TableOutlined,\n AreaChartOutlined,\n PushpinOutlined,\n CarOutlined\n} from '@ant-design/icons';\n\nimport {MenuKeys} from \"lib/helpers/menu\";\n\ninterface MenuItem {\n key: number;\n title: string;\n link: string;\n icon: ReactNode\n}\n\ninterface MainMenuProps {\n defaultKeys: Array;\n}\n\nconst { SubMenu } = Menu;\nconst {ACTUAL_PRICES, WHOLESALE} = MenuKeys;\n\nconst MainMenu: React.FC = ({defaultKeys}) => {\n const location = useLocation();\n const {t} = useTranslation();\n const [selectedKey, setSelectedKey] = useState(1);\n\n const actualPricesMenuItems: Array = [\n {\n key: 1,\n title: t('menu.menuItem.ActualPriceReport'),\n link: '/',\n icon: \n },\n {\n key: 2,\n title: t('menu.menuItem.Analytics'),\n link: '/analytics',\n icon: \n },\n {\n key: 3,\n title: t('menu.menuItem.PersonalGasStations'),\n link: '/my-stations',\n icon: \n },\n {\n key: 4,\n title: t('menu.menuItem.RecommendedPrices'),\n link: '/recommended-prices',\n icon: \n },\n {\n key: 5,\n title: t('menu.menuItem.GasStationMap'),\n link: '/map',\n icon: \n }\n ];\n\n const wholesaleMenuItems: Array = [\n {\n key: 15,\n title: t('menu.menuItem.ActualPriceReport'),\n link: '/wholesale',\n icon: \n },\n {\n key: 16,\n title: t('menu.menuItem.Analytics'),\n link: '/wholesale-analytics',\n icon: \n },\n ];\n\n useEffect(() => {\n const menus = [...actualPricesMenuItems, ...wholesaleMenuItems];\n const route = menus.find(item => item.link === location.pathname);\n\n if (route && route.key !== selectedKey) {\n setSelectedKey(route.key);\n }\n\n }, [location]);\n\n const menuRender = actualPricesMenuItems.map((item) => (\n \n {item.title}\n \n ));\n\n const wholesaleRender = wholesaleMenuItems.map((item) => (\n \n {item.title}\n \n ));\n\n return (\n \n }\n title={t(\"menu.submenu.gasStationPrices\")}\n >\n {menuRender}\n \n\n }\n title={t(\"menu.submenu.tankFarmPrices\")}\n >\n {wholesaleRender}\n \n \n )\n};\n\nexport default MainMenu;\n","import React from \"react\";\nimport {Dropdown, Menu} from \"antd\";\nimport { GlobalOutlined } from '@ant-design/icons';\nimport {useTranslation} from \"react-i18next\";\n\nimport \"./style.scss\";\n\ninterface Locale {\n code: string;\n title: string;\n icon: string;\n}\n\nconst ChangeLang: React.FC = () => {\n const { i18n } = useTranslation();\n\n // Нужно заменить тип any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const changeLanguage = ({ key }: any) => {\n void i18n.changeLanguage(key);\n };\n\n const locales: Array = [\n {\n code: 'ru',\n title: 'Русский',\n icon: '🇷🇺'\n },\n {\n code: 'en',\n title: 'English',\n icon: '🇺🇸'\n }\n ];\n\n const langMenu = (\n \n {locales.map((locale) => (\n \n \n {locale.icon}\n {' '}\n {locale.title}\n \n ))}\n \n );\n\n const currentLanguage = locales.find((item) => item.code === i18n.language);\n const langIcon = currentLanguage ? currentLanguage.icon : ;\n\n return (\n \n \n {langIcon}\n \n \n );\n};\n\nexport default ChangeLang;\n","import gql from \"graphql-tag\";\n\nconst USER_PROFILE = gql`\n query userProfile {\n userProfile {\n id\n firstName\n lastName\n email\n authority\n }\n }\n`;\n\nexport default USER_PROFILE;\n","import AvatarDropdown from \"./AvatarDropdown\";\n\nexport default AvatarDropdown;","import React from \"react\";\nimport {Avatar, Dropdown, Menu, Spin} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport {MenuInfo} from \"rc-menu/lib/interface\"\nimport { LogoutOutlined, UserOutlined, SettingOutlined } from '@ant-design/icons';\nimport { Link } from \"react-router-dom\";\n\nimport TokenStorage from 'lib/TokenStorage';\nimport USER_PROFILE from \"lib/graphql/queries/UserProfile\";\nimport {userProfile as userProfileData} from \"lib/graphql/queries/UserProfile/__generated__/userProfile\";\nimport { isEnvForDebug } from \"lib/helpers/index\";\n\nimport \"./style.scss\";\n\nconst AvatarDropdown: React.FC = () => {\n const {t} = useTranslation();\n const { data, loading } = useQuery(USER_PROFILE);\n\n if (loading || !data || !data.userProfile) {\n return (\n \n \n \n )\n }\n\n const onMenuClick = (event: MenuInfo) => {\n if (event.key == \"handleLogout\") {\n TokenStorage.clearToken()\n }\n };\n\n const menuHeaderDropdown = (\n \n \n \n {\" \"}\n {t('user.headerMenu.signOut')}\n \n {\n (isEnvForDebug()) ?\n \n \n \n {\" \"}\n {t('user.headerMenu.settings')}\n \n : null\n }\n \n );\n\n const {firstName, lastName, email} = data.userProfile;\n\n const userName = (firstName && lastName) ? `${firstName || \"\"} ${lastName || \"\"}` : email;\n\n return (\n \n \n }\n alt=\"avatar\"\n />\n {\n {userName}\n }\n \n \n );\n};\n\nexport default AvatarDropdown\n","import React from \"react\";\n\nimport ChangeLang from \"components/_common/ChangeLang\";\nimport AvatarDropdown from \"components/_common/AvatarDropdown\";\n\ninterface MainHeaderProps {\n collapsed: boolean;\n}\n\nconst MainHeader: React.FC = ({collapsed}) => {\n const classRight = collapsed ? \"right\" : \"right-no-collapsed\";\n return (\n
\n \n \n
\n )\n};\n\nexport default MainHeader;\n","import React, {Fragment} from \"react\"\n\ninterface MainLogoProps {\n collapsed: boolean;\n}\n\nconst MainLogo: React.FC = ({collapsed}) => {\n const logoClass = collapsed ? \"main-logo\" : \"main-logo__collapsed\";\n const fullLogoClass = collapsed ? \"main-logo-full__collapsed\" : \"main-logo-full\";\n\n return (\n \n {collapsed ?\n :\n \n }\n\n \n )\n};\n\nexport default MainLogo;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Layout } from \"antd\";\nimport ReactGA from \"react-ga\";\nimport { useLocation } from \"react-router-dom\";\nimport { MenuFoldOutlined, MenuUnfoldOutlined } from \"@ant-design/icons\";\n\nimport { MenuKeys } from \"lib/helpers/menu\";\nimport MainMenu from \"./MainMenu\";\nimport MainHeader from \"./MainHeader\";\nimport MainLogo from \"./MainLogo\";\n\nimport \"./style.scss\";\n\nconst { Header, Content, Sider, Footer } = Layout;\n\nconst MainLayout: React.FC = ({ children }) => {\n const location = useLocation();\n const [collapsed, setCollapsed] = useState(false);\n const [collapsedWidth, setCollapsedWidth] = useState(80);\n const [defaultOpenKeys, setDefaultOpenKeys] = useState>(\n Object.values(MenuKeys)\n );\n\n useEffect(() => {\n if (location) {\n const pathName =\n location.pathname === \"/\" ? \"/actual-prices\" : location.pathname;\n ReactGA.set({ page: pathName });\n ReactGA.pageview(pathName);\n }\n }, [location]);\n\n useEffect(() => {\n const width = window.innerWidth;\n\n if (width <= 1280) {\n setCollapsed(true);\n }\n\n if (width <= 578) {\n setCollapsedWidth(0);\n }\n\n if (width <= 1200) {\n setDefaultOpenKeys([]);\n }\n }, []);\n\n const handleMenuFold = useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed]);\n\n const menuFold = collapsed ? (\n \n ) : (\n \n );\n\n return (\n
\n \n {\n setCollapsed(coll);\n }}\n >\n
\n \n
\n\n \n \n \n
\n {menuFold}\n \n
\n\n \n {children}\n \n\n {location.pathname !== \"/map\" && (\n
\n BenzUp ©2021 Created by OMT-consult\n
\n )}\n
\n
\n
\n );\n};\n\nexport default MainLayout;\n","import React, { useEffect } from \"react\";\nimport {Col, Row} from \"antd\";\nimport ChangeLang from \"components/_common/ChangeLang\";\n\nimport \"./style.scss\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AuthLayout: React.FC = ({children}) => {\n const { i18n } = useTranslation();\n\n useEffect( () => {\n if(!i18n.language){\n void i18n.changeLanguage('ru');\n }\n }, []);\n\n return (\n
\n \n
\n \n
\n \n\n \n {children}\n \n
\n
\n )\n};\n\nexport default AuthLayout;\n","import React from 'react';\nimport { Alert, Button, Form, Input } from 'antd';\nimport {useFormik} from \"formik\";\nimport { ExclamationCircleFilled, LockOutlined, UserOutlined } from '@ant-design/icons/lib';\nimport * as Yup from \"yup\";\nimport {CreateTokenInput} from \"lib/graphql/globalTypes\";\nimport {LoginFormValues} from \"lib/types\";\nimport {useTranslation} from \"react-i18next\";\n\ninterface Props {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleSubmit: (params: CreateTokenInput, status: any) => void;\n validationSchema: Yup.ObjectSchema;\n initialValues: LoginFormValues;\n loading: boolean;\n}\n\nconst LoginForm: React.FC = ({\n handleSubmit,\n loading,\n initialValues,\n validationSchema,\n}) => {\n const {t} = useTranslation();\n\n const {\n handleSubmit: formikHandleSubmit,\n setSubmitting,\n status,\n touched,\n errors,\n values,\n handleChange,\n isSubmitting,\n } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: handleSubmit,\n });\n\n const error = status ? (\n }\n showIcon\n />\n ) : null;\n\n return (\n {\n formikHandleSubmit();\n setSubmitting(false);\n }}\n >\n \n }\n onChange={handleChange}\n placeholder={t('login.loginPlaceholder')}\n />\n \n\n \n }\n onChange={handleChange}\n placeholder={t('login.passwordPlaceholder')}\n />\n \n \n {error}\n \n \n \n { t('login.submitText') }\n \n \n \n );\n};\n\n\nexport default LoginForm;\n","import React,{Fragment} from \"react\";\n\nconst AuthLogo: React.FC = () => {\n return (\n \n \n \n );\n}\n\nexport default AuthLogo;","import React from \"react\";\nimport * as Yup from 'yup';\nimport {LoginFormValues} from \"lib/types\";\nimport {CreateTokenInput} from \"lib/graphql/globalTypes\";\nimport {Checkbox, Col, Row, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport LoginForm from \"./LoginForm\";\nimport AuthLogo from \"./AuthLogo\";\n\nimport \"./style.scss\";\n\nconst {Title, Paragraph} = Typography;\n\n// TODO: Поправить any\ninterface LoginComponentProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleSubmit: (params: CreateTokenInput, status: any) => void;\n validationSchema: Yup.ObjectSchema;\n initialValues: LoginFormValues;\n loading: boolean;\n setRememberMe: (value: (((prevState: boolean) => boolean) | boolean)) => void\n}\n\nconst LoginComponent: React.FC = ({\n handleSubmit,\n loading,\n initialValues,\n validationSchema,\n setRememberMe,\n}) => {\n const {t} = useTranslation();\n return (\n \n \n
\n \n
\n\n \n {t(\"login.pleaseAuth\")}\n \n\n \n\n
\n setRememberMe(event.target.checked)}\n >\n {t(\"login.rememberMeText\")}\n \n\n \n {t(\"login.forgotPasswordText\")}\n \n
\n\n \n {t(\"login.didNotHaveAccount\")} {' '}\n {t(\"login.registration\")} \n \n \n
\n )\n};\n\nexport default LoginComponent;\n","import gql from \"graphql-tag\";\n\nconst CREATE_TOKEN = gql`\n mutation createToken($input: CreateTokenInput!) {\n createToken(input: $input)\n }\n`;\n\nexport default CREATE_TOKEN;\n","export const petrol = ['A0100', 'A0980', 'A098B', 'A0950', 'A095B', 'A0920', 'A092B', 'A0800'];\n\nexport const gas = ['P0SUG', 'G0KPG', 'P0SPG'];\n\nexport const diesel = ['D0DT0', 'D0DTL', 'D0DTE', 'D0DTZ', 'D0DTA', 'D0DTX', 'D0DTB'];\n\nexport const dieselFull = ['D0DT0', 'D0DTL', 'D0DTB', 'D0DTZ', 'D0DTA', 'D0DTE', 'D0DTK', 'D0DTX'];\n\nexport const dateHeader = 'updatedAt';\n\nexport const allFuelTypes = [...petrol, ...diesel, ...gas, dateHeader];\n\nexport const defaultActualPriceHeaders = [\n 'A0100', 'A0980', 'A0950', 'A095B', 'A0920', 'A092B', 'A0800',\n ...diesel,\n ...gas,\n dateHeader,\n];\nexport const actualPriceHeaders = ['A0980', 'A0950', 'A095B', 'A0920', 'A092B', 'A0800', ...diesel, ...gas];\n\nexport const basisesHeaders = ['A0100', 'A0950', 'A0920', 'A0800', 'D0DTL', 'D0DTE', 'D0DTZ', 'D0DTA', 'PPCB2', 'P0SUG'];\nexport const defaultBasisesHeaders = [\n 'A0100', 'A0950', 'A0920', 'A0800', 'D0DTL', 'D0DTE', 'D0DTZ', 'D0DTA', 'P0SUG', 'PPCB2',\n dateHeader\n];\n\nexport const getDefaultHeaders = (name: string): Array => {\n switch (name) {\n case 'selectedFuels':\n return defaultActualPriceHeaders;\n case 'selectedFuelsTanks':\n return defaultBasisesHeaders;\n }\n\n return [];\n};\n\nexport const getTranslateString = (type: string): string => {\n switch (type) {\n case 'selectedFuels':\n return 'reports.actualPrice.settings.column';\n case 'selectedFuelsTanks':\n return 'reports.basises.settings.column'\n }\n\n return 'reports.actualPrice.settings.column';\n};\n\nexport const defaultFuelsObject = (fuelTypes: string[]): {[key: string]: boolean} => fuelTypes.reduce((accumulator, value) => {\n return {...accumulator, [value]: true};\n}, {});\n","import {basisesHeaders, defaultActualPriceHeaders, defaultFuelsObject} from \"./fuelTypes\";\n\nexport const SELECTED_FUELS = 'selectedFuels';\nexport const SELECTED_FUELS_TANKS = 'selectedFuelsTanks';\nconst defaultValue = '[]';\n\ntype SelectedFuelsUnion = typeof SELECTED_FUELS | typeof SELECTED_FUELS_TANKS;\n\nconst defaultValueByName = {\n [SELECTED_FUELS]: defaultActualPriceHeaders,\n [SELECTED_FUELS_TANKS]: basisesHeaders\n}\n\nexport class CustomStorage {\n static getValue(name: string): Array {\n const item = localStorage.getItem(name);\n\n if (item !== null) {\n return JSON.parse(item) as [];\n }\n\n return JSON.parse(defaultValue) as [];\n }\n\n static setValue(name: string, value: Array): void {\n localStorage.setItem(name, JSON.stringify(value));\n }\n\n static setUpdatedValue(name: SelectedFuelsUnion): void {\n const selectedFuels = this.getValue(name);\n const defaultActualPricesObject = defaultFuelsObject(defaultValueByName[name]);\n\n if (!selectedFuels.length) {\n this.setValue(name, defaultValueByName[name])\n\n return;\n }\n\n this.setValue(name, selectedFuels.filter((selectedFuel) => defaultActualPricesObject[selectedFuel]))\n }\n}\n","import React, {useState} from 'react';\nimport * as Yup from 'yup';\nimport {FormikHelpers} from \"formik\";\nimport {notification} from \"antd\";\nimport {useMutation} from '@apollo/react-hooks';\nimport {useTranslation} from \"react-i18next\";\n\nimport {\n createToken as CreateTokenMutation,\n createTokenVariables\n} from \"lib/graphql/mutations/CreateToken/__generated__/createToken\";\nimport TokenStorage from \"lib/TokenStorage\";\nimport {LoginFormValues} from \"lib/types\";\nimport LoginComponent from \"components/LoginComponent\";\nimport CREATE_TOKEN from \"lib/graphql/mutations/CreateToken\";\nimport {CustomStorage, SELECTED_FUELS, SELECTED_FUELS_TANKS} from \"lib/helpers/Storage\";\nimport {CreateTokenInput} from \"lib/graphql/globalTypes\";\n\n\nconst LoginContainer: React.FC = () => {\n const {t} = useTranslation();\n const [rememberMe, setRememberMe] = useState(true);\n const [createToken, {loading}] = useMutation(\n CREATE_TOKEN,\n );\n // TODO: нужно подобрать тим данных для функции\n\n const handleSubmit = async (params: CreateTokenInput, {setStatus}: FormikHelpers) => {\n try {\n await createToken({\n variables: {\n input: {\n email: params.email,\n password: params.password,\n remember: rememberMe\n },\n },\n }).then(\n (response) => {\n if (response && response.data) {\n const token = response.data.createToken;\n TokenStorage.setToken({accessToken: token});\n\n CustomStorage.setUpdatedValue(SELECTED_FUELS);\n CustomStorage.setUpdatedValue(SELECTED_FUELS_TANKS);\n\n notification.success({\n message: t('notification.welcome'),\n description: t('notification.welcomeText'),\n });\n document.location.pathname = '/';\n } else {\n throw new Error(t('notification.authorizationError'));\n }\n\n },\n );\n\n\n } catch (err) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const message = 'graphQLErrors' in err ? err.graphQLErrors[0].message : err.message;\n const tMessage = t(`notification.${String(message)}`);\n setStatus(tMessage);\n }\n };\n\n const initialValues: LoginFormValues = {\n email: '',\n password: '',\n };\n\n const validationSchema: Yup.ObjectSchema = Yup.object({\n email: Yup.string().required(t('login.requiredField')),\n password: Yup.string().required(t('login.requiredField')),\n });\n\n return (\n \n );\n};\n\nexport default LoginContainer;\n","import React,{Fragment} from \"react\";\nimport LoginContainer from \"containers/LoginContainer\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {Helmet} from \"react-helmet\";\n\nconst LoginPage: React.FC = () => {\n const {t} = useTranslation();\n\n return (\n \n \n {`${t(`title.pages.login`)} - BenzUp`}\n \n \n \n )\n};\n\nexport default LoginPage;\n","import React from \"react\";\nimport { Empty } from 'antd';\nimport \"./style.scss\";\n\nconst InfoMessage: React.FC = () => {\n const message = (\n
\n

Здравствуйте! В настоящее время у Вас нет активных подписок. Чтобы начать пользоваться сервисом, просим связаться с нами по телефону +7 (495) 971-23-30 или по почте\n info@omt-consult.ru\n

\n
\n );\n\n return (\n
\n \n
\n );\n}\n\nexport default InfoMessage;\n","import React, { ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { Button, Checkbox, Dropdown, Menu } from \"antd\";\nimport { FilterOutlined } from \"@ant-design/icons/lib\";\nimport { CheckboxChangeEvent } from \"antd/es/checkbox\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { CustomStorage } from \"lib/helpers/Storage\";\nimport { getDefaultHeaders, getTranslateString } from \"lib/helpers/fuelTypes\";\n\ninterface ColumnFilterProps {\n fuelStorageName: string;\n setTableHeaders: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n}\n\nconst ColumnFilter: React.FC = ({\n fuelStorageName,\n setTableHeaders,\n}) => {\n const { t } = useTranslation();\n const defaultPrices = getDefaultHeaders(fuelStorageName);\n const fuelTypes = CustomStorage.getValue(fuelStorageName);\n const translateString = getTranslateString(fuelStorageName);\n const [columnMenuVisible, setColumnMenuVisible] = useState(false);\n const [filterItems, setFilterItems] = useState>(fuelTypes);\n const columnsFilterMenuItems: Array = [];\n\n useEffect(() => {\n setTableHeaders(filterItems);\n }, [filterItems]);\n\n const checkboxHandle = useCallback(\n (item: CheckboxChangeEvent) => {\n setFilterItems((prev) => {\n const { value } = item.target;\n\n const newItems = defaultPrices.filter((elem) => {\n if (prev.includes(elem) && elem === value) {\n return false;\n }\n\n if (prev.includes(elem) && elem !== value) {\n return true;\n }\n\n if (!prev.includes(elem) && elem === value) {\n return true;\n }\n });\n\n CustomStorage.setValue(fuelStorageName, newItems);\n return newItems;\n });\n },\n [filterItems]\n );\n\n defaultPrices.forEach((type) => {\n columnsFilterMenuItems.push(\n \n \n {t(`${translateString}.${type}`)}\n \n \n );\n });\n\n const FilterMenu = {columnsFilterMenuItems};\n\n return (\n setColumnMenuVisible(flag)}\n visible={columnMenuVisible}\n overlay={FilterMenu}\n placement=\"bottomRight\"\n arrow\n >\n }\n size=\"middle\"\n className=\"prices-extras-buttons__filter\"\n />\n \n );\n};\n\nexport default ColumnFilter;\n","import React, {Fragment} from 'react';\n\nimport ColumnFilter from \"./ColumnFilter\";\n\nimport \"./actual-price-extras.scss\";\n\ninterface ActualPriceExtrasProps {\n fuelStorageName: string;\n setTableHeaders: (value: (((prevState: Array) => Array) | Array)) => void\n}\n\nconst ActualPriceExtras: React.FC = ({\n setTableHeaders,\n fuelStorageName\n}) => {\n return (\n \n\n \n\n \n );\n};\n\nexport default ActualPriceExtras;\n","import {ActualPriceTableRow} from \"components/ActualPriceComponent/types\";\nimport {diesel, gas} from \"./fuelTypes\";\n\nexport const eachRowClass = (record: ActualPriceTableRow): string => {\n const rowClass: Array = [];\n\n switch (record.border) {\n case 'bottom':\n rowClass.push('micro-market-line__bottom');\n break;\n case 'top':\n rowClass.push('micro-market-line__top');\n break;\n case 'both':\n rowClass.push('micro-market-line__top');\n rowClass.push('micro-market-line__bottom');\n }\n\n if (record.own) {\n rowClass.push('micro-market-own-station');\n } else {\n rowClass.push('micro-market-competitor')\n }\n\n return rowClass.join(' ');\n};\n\nexport const ownGasStationClass = (record: ActualPriceTableRow): string => {\n if (record.own) {\n return 'micro-market-own-station';\n }\n\n return '';\n};\n\nexport const headerWidth = (header: string): number | string => {\n const excludeArr = [...gas, ...diesel];\n if (excludeArr.includes(header) && header !== 'D0DTB') {\n return 70;\n }\n\n return 100;\n};\n\nexport function bytesToSize(bytes: number): string {\n const sizes = ['byte', 'KB', 'MB', 'GB']\n\n if (bytes === 0) return 'n/a'\n\n const i = Math.floor(Math.log(bytes) / Math.log(1024))\n\n if (i === 0) return `${bytes} ${sizes[i]}`\n\n return `${(bytes / (1024 ** i)).toFixed(2)} ${sizes[i]}`\n}\n","/* tslint:disable */\n/* eslint-disable */\n// @generated\n// This file was automatically generated and should not be edited.\n\n// ====================================================\n// GraphQL query operation: UserProfile\n// ====================================================\n\nexport interface Point {\n latitude: number;\n longitude: number;\n}\n\nexport enum GasStationStatus {\n ACTIVE = 'ACTIVE',\n RECONSTRUCTION = 'RECONSTRUCTION',\n UNDER_CONSTRUCTION = 'UNDER_CONSTRUCTION',\n CLOSED = 'CLOSED'\n}\n\nexport interface GasStation {\n id: number;\n name: string;\n number: number;\n address: string;\n status: GasStationStatus\n location: Point;\n}\n\nexport interface GasStationList {\n items: Array;\n total: number;\n}\n\nexport interface UserProfile_Customer {\n id: string;\n name: string;\n gasStations: [GasStationList];\n}\n\nexport interface userProfile_userProfile {\n __typename: 'User';\n id: string;\n firstName?: string;\n lastName?: string;\n email: string;\n authority: Array;\n customer: UserProfile_Customer;\n}\n\nexport interface userProfile {\n userProfile: userProfile_userProfile;\n}\n","import React from \"react\";\nimport {Badge} from \"antd\";\n\nimport \"./style.scss\";\n\ninterface ActualPriceCellProps {\n value: string;\n changed: boolean;\n classes?: Array\n}\n\nconst ActualPriceCell: React.FC = ({\n children,\n value,\n changed,\n classes\n}) => {\n const cellClasses = ['price-cell'];\n const badge = (\n \n );\n\n if (classes) {\n cellClasses.concat(classes);\n }\n\n return (\n
\n
\n {value}\n {changed && badge}\n
\n {children}\n
\n );\n};\n\nexport default ActualPriceCell;\n","import React from \"react\";\nimport {CaretDownFilled, CaretUpFilled} from '@ant-design/icons/lib';\nimport ActualPriceCell from \"./\";\n\nimport {parsePrice} from \"lib/helpers\";\n\nimport \"./style.scss\";\n\ninterface ActualPriceDeltaCellProps {\n delta: number\n formatDelta: boolean;\n value: string;\n changed: boolean;\n}\n\nconst ActualPriceDeltaCell: React.FC = ({\n delta,\n formatDelta,\n value,\n changed\n}) => {\n const deltaSign = Math.sign(delta);\n const cellClasses = ['price-cell-left'];\n const formattedDelta = formatDelta ? parsePrice(delta) : delta.toFixed(2);\n const currentSymbol = deltaSign > 0 ?\n : ;\n\n const deltaFragment = delta ?
\n {formattedDelta} {' '} {currentSymbol}\n
: null;\n\n return (\n \n {deltaFragment}\n \n )\n};\n\nexport default ActualPriceDeltaCell;\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport { LineChartOutlined } from \"@ant-design/icons/lib\";\n\nconst DynamicGasStationTooltip: React.FC = () => {\n const { t } = useTranslation();\n\n return (\n \n \n \n );\n};\n\nexport default DynamicGasStationTooltip;\n","import React from \"react\";\nimport { Tooltip } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport { ToolOutlined } from \"@ant-design/icons/lib\";\n\nconst ClosedGasStationTooltip: React.FC = () => {\n const { t } = useTranslation();\n\n return (\n \n \n \n );\n};\n\nexport default ClosedGasStationTooltip;\n","import React, {Fragment} from \"react\";\n\nimport {GasStationStatus} from \"lib/graphql/queries/UserProfile/__generated__/userProfile\";\nimport DynamicGasStationTooltip from \"components/_common/ActualPriceTable/Tooltips/DynamicGasStationTooltip\";\nimport ClosedGasStationTooltip from \"components/_common/ActualPriceTable/Tooltips/ClosedGasStationTooltip\";\n\ninterface Props {\n dynamicPrice: boolean;\n status?: GasStationStatus\n}\n\nconst StationStatusIcon: React.FC = ({status, dynamicPrice}) => {\n const dynamic = dynamicPrice ? : null;\n const closed = status === GasStationStatus.RECONSTRUCTION ? : null;\n\n return (\n \n {dynamic} {closed}\n \n )\n};\n\nexport default StationStatusIcon;\n","import React, {Fragment, useState} from \"react\";\nimport {Tooltip, Typography} from \"antd\";\n\nimport {getGasStationTitle} from \"lib/helpers\";\nimport {ActualPriceTableRow} from \"components/ActualPriceComponent/types\";\nimport StationStatusIcon from \"components/_common/StationStatusIcon\";\n\ninterface ActualPriceBrandProps {\n item: ActualPriceTableRow;\n value: string;\n}\n\nconst {Paragraph} = Typography;\n\nconst ActualPriceBrand: React.FC = ({item, value}) => {\n const [truncatedAdress, setTruncatedAdress] = useState(false);\n\n return (\n
\n
\n \n \n {getGasStationTitle(value, item.internalNumber)}\n \n \n
\n \n
\n
\n \n setTruncatedAdress(value)}}\n className=\"brand__address\"\n >\n {item.address}\n \n \n
\n )\n};\n\nexport default ActualPriceBrand;\n","import React, {ReactNode, useMemo} from \"react\";\nimport {Tooltip} from \"antd\";\nimport dayjs from \"dayjs\";\nimport {ColumnsType} from \"antd/lib/table\";\nimport {useTranslation} from \"react-i18next\";\nimport parse from \"html-react-parser\";\n\nimport {parsePrice} from \"lib/helpers\";\nimport {headerWidth} from \"lib/helpers/actualPrices\";\nimport {ActualPriceTableRow, ProductData} from \"components/ActualPriceComponent/types\";\nimport ActualPriceDeltaCell from \"components/_common/ActualPriceTable/ActualPriceCell/ActualPriceDeltaCell\";\nimport ActualPriceBrand from \"components/_common/ActualPriceTable/ActualPriceCell/ActualPriceBrand\";\n\ninterface Props {\n onFilters: string;\n zeroHeader: string;\n translateString: string;\n headers: Array;\n renderFunction?: (value: ProductData, header: string) => ReactNode;\n sorter?: boolean;\n}\n\ninterface GasStationColumnsHook {\n columns: ColumnsType;\n}\n\nexport function useGasStationColumns({\n headers,\n onFilters,\n translateString,\n zeroHeader,\n sorter = true,\n renderFunction\n}: Props): GasStationColumnsHook {\n const {t} = useTranslation();\n const isTankFarm = zeroHeader === 'tankFarm';\n\n const renderValue = (value: ProductData, header: string) => {\n // если filter, то рендер diff, иначе delta\n if (!value) {\n return null;\n }\n const converted = value.price ? value.price.toFixed(2) : \"\";\n const price = isTankFarm ? parsePrice(value.price) : converted;\n const delta = onFilters === header ? value.diff || 0 : value.delta;\n\n return ;\n };\n\n const renderCell = renderFunction || renderValue;\n\n const columns = useMemo(() => {\n const columns: ColumnsType = [];\n\n headers.forEach((header) => {\n switch (header) {\n case 'A0100':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.A0100`))}
),\n dataIndex: ['products', 'A0100'],\n width: 100,\n key: 'A0100',\n sorter: sorter,\n render: (value: ProductData, item) => {\n const data = value || item.products['A098B'];\n\n return renderCell(data, header);\n },\n });\n break;\n case 'D0DT0':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DT0`))}
),\n width: 70,\n dataIndex: ['products', 'D0DT0'],\n key: 'D0DT0',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTL':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTL`))}
),\n width: 70,\n dataIndex: ['products', 'D0DTL'],\n key: 'D0DTL',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTB':\n columns.push({\n align: 'left',\n title: (\n \n
{parse(t(`${translateString}.D0DTB`))}
\n
),\n width: 70,\n dataIndex: ['products', 'D0DTB'],\n key: 'D0DTB',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTE':\n columns.push({\n align: 'left',\n title: (\n \n
{parse(t(`${translateString}.D0DTE`))}
\n
),\n width: 70,\n dataIndex: ['products', 'D0DTE'],\n key: 'D0DTE',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTA':\n columns.push({\n align: 'left',\n title: (\n \n
{parse(t(`${translateString}.D0DTA`))}
\n
),\n width: 70,\n dataIndex: ['products', 'D0DTA'],\n key: 'D0DTA',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTX':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTX`))}
),\n width: 90,\n dataIndex: ['products', 'D0DTX'],\n key: 'D0DTX',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'D0DTZ':\n columns.push({\n align: 'left',\n title: (\n \n
\n {parse(t(`${translateString}.D0DTZ`))}\n
\n
),\n width: 70,\n dataIndex: ['products', 'D0DTZ'],\n key: 'D0DTZ',\n sorter: sorter,\n render: (value: ProductData) => renderCell(value, header),\n });\n break;\n case 'updatedAt':\n columns.push({\n align: 'center',\n title: (
{t(`${translateString}.checkDate`)}
),\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n className: 'actual-price__updated-at',\n sorter: sorter,\n render: (updatedAt?: dayjs.Dayjs) => (\n updatedAt ? updatedAt.utc(false).format(\"DD.MM.YYYY\") : ''\n ),\n });\n break;\n default: {\n const title = t(`${translateString}.${header}-full`, '');\n\n columns.push({\n align: 'left',\n title: (\n \n
\n {parse(t(`${translateString}.${header}`))}\n
\n
\n ),\n width: headerWidth(header),\n dataIndex: ['products', header],\n key: header,\n sorter: sorter,\n render: (value: ProductData) => {\n return renderCell(value, header);\n },\n });\n break;\n }\n }\n });\n\n columns.unshift({\n title: (
{t(`reports.actualPrice.fuel.${zeroHeader}`)}
),\n width: 200,\n dataIndex: 'brand',\n key: 'brand',\n fixed: 'left',\n render: (value: string, item) => (\n \n )\n });\n\n return columns;\n\n }, [headers, isTankFarm, headers, onFilters]);\n\n return {columns};\n}\n","import gql from \"graphql-tag\";\n\nconst ActualPricesGasStationFragment = gql`\n fragment ActualPricesGasStationFragment on GasStation {\n id\n name\n number\n address\n status\n dynamicPricing\n fuelPrices {\n price\n delta\n updatedAt\n product {\n id\n code\n name\n fullName\n }\n }\n location {\n latitude\n longitude\n }\n region {\n id\n name\n }\n hasIndicator\n }\n`;\n\nexport default ActualPricesGasStationFragment;\n","import gql from \"graphql-tag\";\nimport ActualPricesGasStationFragment from \"lib/graphql/fragments/ActualPrices/gasStation\";\n\nconst GAS_STATION = gql`\n query gasStation($id: ID!) {\n gasStation(id: $id) {\n ...ActualPricesGasStationFragment\n competitors {\n ...ActualPricesGasStationFragment\n }\n }\n }\n ${ActualPricesGasStationFragment}\n`;\n\nexport default GAS_STATION;\n","import React, {useEffect, useState} from \"react\";\nimport {useLazyQuery} from \"@apollo/react-hooks\";\nimport {Table} from \"antd\";\nimport {ColumnGroupType, ColumnType} from \"antd/lib/table\";\n\nimport {useGasStationColumns} from \"lib/hooks/useGasStationColumns\";\nimport {ownGasStationClass} from \"lib/helpers/actualPrices\";\nimport GAS_STATION from \"lib/graphql/queries/GasStation\";\nimport {GasStationProfile, GasStationVariables} from \"lib/graphql/queries/GasStation/gasStation\";\nimport {ActualPriceTableRow} from \"components/ActualPriceComponent/types\";\nimport {actualPrices} from \"containers/ActualPriceContainer/dataMapping\";\n\nimport \"./style.scss\";\n\ntype columnsType = ColumnGroupType | ColumnType;\n\ninterface ExpandedTableProps {\n gasStationId: string;\n expanded: boolean;\n tableHeaders: Array;\n}\n\nconst ExpandedTable: React.FC = ({\n expanded,\n gasStationId,\n tableHeaders,\n}) => {\n const [onFilters, setOnFilters] = useState('');\n\n const [tableData, setTableData] = useState([]);\n const [tableColumns, setTableColumns] = useState([]);\n const [getGasStation, {data, loading}] = useLazyQuery(GAS_STATION);\n\n const {columns} = useGasStationColumns({\n headers: tableHeaders,\n translateString: \"reports.actualPrice.fuel\",\n onFilters,\n zeroHeader: \"brand\",\n sorter: false\n });\n\n\n useEffect(() => {\n setTableColumns([...columns].map(\n (item) => {\n item.sorter = true;\n\n return item;\n })\n )\n\n }, [columns]);\n\n useEffect(() => {\n if (!expanded) return;\n\n getGasStation({\n variables: {\n id: gasStationId\n }\n });\n\n }, [expanded, gasStationId]);\n\n useEffect(() => {\n if (data) {\n setTableData([]);\n\n setTableData(actualPrices([data.gasStation]));\n }\n }, [data]);\n\n\n const sortPrices = (\n items: Array,\n field: string,\n sortDirection: 'descend' | 'ascend' | undefined | null,\n ): Array => {\n const compare = (a: ActualPriceTableRow, b: ActualPriceTableRow) => {\n let direction = 1;\n\n if (sortDirection === 'ascend') {\n direction = -1;\n }\n\n if (field === 'updatedAt' && a.updatedAt && b.updatedAt) {\n return a.updatedAt.diff(b.updatedAt) * direction;\n }\n\n const fieldA = a.products.hasOwnProperty(field) ? a.products[field].price : 0;\n\n const fieldB = b.products.hasOwnProperty(field) ? b.products[field].price : 0;\n\n return (fieldA - fieldB) * direction;\n };\n\n if (sortDirection === undefined && data) {\n return actualPrices([data.gasStation]);\n }\n\n return items.sort(compare);\n };\n\n return (\n {\n\n if (!Array.isArray(sorter) && sorter.columnKey !== undefined) {\n setTableData(sortPrices(tableData, sorter.columnKey.toString(), sorter.order));\n\n setOnFilters(sorter.columnKey.toString());\n if (sorter.order === undefined) {\n setOnFilters('');\n }\n\n }\n\n }}\n />\n )\n};\n\nexport default ExpandedTable\n","import React, { ReactNode, useEffect, useState } from \"react\";\nimport { Badge, Modal, Table } from \"antd\";\nimport { ColumnGroupType, ColumnType } from \"antd/lib/table\";\n\nimport ExpandedTable from \"./ExpandedTable\";\nimport { getGasStationTitle } from \"lib/helpers\";\nimport { ActualPriceTableRow } from \"components/ActualPriceComponent/types\";\n\nimport \"./style.scss\";\n\ninterface Props {\n loading: boolean;\n zeroHeader: string;\n data: Array;\n tableHeaders: Array;\n setOnFilters: (value: ((prevState: string) => string) | string) => void;\n columns: (\n | ColumnGroupType\n | ColumnType\n )[];\n}\n\nconst ActualPriceNestedTable: React.FC = ({\n loading,\n data,\n columns,\n tableHeaders,\n}) => {\n const [tableData, setTableData] = useState(\n data.slice()\n );\n const [expandedRowKeys, setExpandedRowKeys] = useState>([]);\n const [isModalVisible, setIsModalVisible] = useState(false);\n const [modalView, setModalView] = useState(null);\n const [modalTitle, setModalTitle] = useState(\"\");\n\n useEffect(() => {\n setTableData(data.slice());\n }, [data]);\n\n useEffect(() => {\n if (!isModalVisible) {\n setExpandedRowKeys([]);\n }\n }, [isModalVisible]);\n\n const scrollCoordinates = () => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 500) {\n return {\n x: 1300,\n y: 500,\n };\n }\n\n return {\n y: \"calc(100vh - 150px)\",\n };\n };\n\n const onModalClose = () => {\n setIsModalVisible(false);\n };\n\n const badge = ;\n\n return (\n <>\n undefined,\n expandedRowKeys,\n expandRowByClick: true,\n expandIcon: ({ record }) => {\n return record.hasIndicator ? badge : null;\n },\n onExpand: (expanded: boolean, record: ActualPriceTableRow) => {\n setModalTitle(`\n ${getGasStationTitle(\n record.brand,\n record.internalNumber\n )} ${record.address}\n `);\n\n setModalView(\n \n );\n\n setIsModalVisible(true);\n\n expandedRowKeys.includes(record.key)\n ? setExpandedRowKeys(\n [...expandedRowKeys].filter((item) => item !== record.key)\n )\n : setExpandedRowKeys([...expandedRowKeys, record.key]);\n },\n }}\n sticky\n />\n\n \n {modalView}\n \n \n );\n};\n\nexport default ActualPriceNestedTable;\n","import React, { Fragment, ReactNode } from \"react\";\nimport { Radio } from \"antd\";\nimport { RadioChangeEvent } from \"antd/lib/radio\";\nimport { allFuelTypes, defaultFuelsObject } from \"../../lib/helpers/fuelTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { CustomStorage, SELECTED_FUELS } from \"../../lib/helpers/Storage\";\n\nconst { Button: RadioButton } = Radio;\n\nconst ActualPricePicker: React.FC = () => {\n let key = 0;\n\n const { t } = useTranslation();\n const buttons: Array = [];\n const buttonsText = [...allFuelTypes];\n const checkedTypes = defaultFuelsObject(\n CustomStorage.getValue(SELECTED_FUELS)\n );\n\n const handleRadioGroupChange = (event: RadioChangeEvent) => {\n const header = document.getElementById(event.target.value);\n\n if (header) {\n header.scrollIntoView({\n block: \"end\",\n inline: \"end\",\n });\n }\n };\n\n buttonsText.forEach((text) => {\n buttons.push(\n \n {t(`reports.actualPrice.settings.column.${text}`)}\n \n );\n });\n\n return (\n \n \n {buttons}\n \n \n );\n};\n\nexport default ActualPricePicker;\n","import dayjs from \"dayjs\";\n\nexport const ACTUAL_PRICE_HISTORY_PAGINATION = 5;\n\nexport const periodDateFormat = (date: string): string => {\n return dayjs(date).utc(false).format(\"DD.MM.YYYY\")\n};\n\nexport const createdAtDateFormat = (date: string): string => {\n return dayjs(date).utc(false).format(\"DD.MM.YYYY HH:mm\")\n};\n","import gql from \"graphql-tag\";\n\nconst NEW_STATISTIC_REPORT = gql`\n query statisticReport($pagination: PaginationInput!) {\n statisticReport {\n list(pagination: $pagination) {\n items {\n ...on StatisticReport{\n id\n from\n to\n status\n format\n fileSize\n createdAt\n }\n ...on PricesReport {\n id\n status\n format\n fileSize\n createdAt\n }\n }\n total\n }\n }\n \n }\n\n`;\n\nexport default NEW_STATISTIC_REPORT;","import \"./styles.scss\";\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { Button } from \"antd\";\nimport { CloudDownloadOutlined } from \"@ant-design/icons\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport ReactGA from \"react-ga\";\nimport Spin from \"antd/es/spin\";\nimport TokenStorage from \"lib/TokenStorage\";\n\ninterface Props {\n id: string;\n}\n\nconst PriceHistoryDownloadButton: React.FC = ({ id }) => {\n const url = `/download/statistic-report/${id}`;\n\n const [file, setFile] = useState();\n const [fileName, setFileName] = useState(\"price-stats\");\n const [loading, setLoading] = useState(false);\n const [buttonLoading, setButtonLoading] = useState(false);\n\n useEffect(() => {\n if (!loading && file) {\n const url = window.URL.createObjectURL(file);\n const a = document.createElement(\"a\");\n\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n\n a.click();\n a.remove();\n\n setButtonLoading(false);\n setFile(undefined);\n }\n }, [loading, file]);\n\n const handleClick = () => {\n const token = TokenStorage.getAccessToken();\n\n setLoading(true);\n setButtonLoading(true);\n\n setTimeout(() => {\n setLoading(false);\n }, 1000);\n\n const options = {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${String(token)}`,\n \"Content-Type\": \"application/octet-stream\",\n },\n };\n\n fetch(url, options)\n .then((res) => {\n const responseFileName = res.headers\n .get(\"content-disposition\")\n ?.split(\"filename=\")[1]\n ?.split(\";\")[0]\n .replaceAll('\"', \"\");\n\n responseFileName && setFileName(responseFileName);\n return res.blob();\n })\n .then(\n (blob) =>\n new Blob([blob], {\n type: \"application/octet-stream;charset=utf-8\",\n })\n )\n .then((blobFile) => {\n setFile(blobFile);\n ReactGA.event({\n category: \"Price History report\",\n action: \"Download CSV-report\",\n });\n })\n .catch((err) => {\n setButtonLoading(false);\n setLoading(false);\n\n throw new Error(err);\n });\n };\n const antIcon = ;\n\n return (\n \n {loading ? : }\n \n );\n};\n\nexport default PriceHistoryDownloadButton;\n","import \"./styles.scss\";\n\nimport {\n createdAtDateFormat,\n periodDateFormat,\n} from \"lib/helpers/actualPriceHistory\";\n\nimport { ColumnsType } from \"antd/lib/table\";\nimport { HourglassTwoTone } from \"@ant-design/icons\";\nimport PriceHistoryDownloadButton from \"./PriceHistoryDownloadButton\";\nimport React from \"react\";\nimport { StatisticReport } from \"lib/graphql/queries/StatisticReport/types\";\nimport { Table } from \"antd\";\nimport { bytesToSize } from \"lib/helpers/actualPrices\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface Props {\n loading: boolean;\n tableData: StatisticReport[];\n pagination: JSX.Element;\n}\n\nconst PriceHistoryModalTable: React.FC = ({\n loading,\n tableData,\n pagination,\n}) => {\n const { t } = useTranslation();\n\n const tableColumns: ColumnsType = [\n {\n align: \"left\",\n title: t(\"reports.actualPrice.priceHistory.table.document\"),\n width: \"150\",\n key: \"document\",\n render: (_value, item: StatisticReport) => {\n if (item.status == \"PENDING\") {\n return \"\";\n }\n\n if (item.format === \"CSV\") {\n return `История цен за период с ${periodDateFormat(\n item?.from\n )} по ${periodDateFormat(item?.to)}`;\n } else {\n return `Актуальные цены на ${createdAtDateFormat(item.createdAt)}`;\n }\n },\n },\n {\n align: \"left\",\n title: t(\"reports.actualPrice.priceHistory.table.format\"),\n dataIndex: \"format\",\n width: \"20\",\n key: \"format\",\n render: (value: string) => {\n return value;\n },\n },\n {\n align: \"left\",\n title: t(\"reports.actualPrice.priceHistory.table.size\"),\n dataIndex: \"fileSize\",\n width: \"25\",\n key: \"fileSize\",\n render: (value: number, item: StatisticReport) => {\n return item.status == \"READY\" ? bytesToSize(value) : \"\";\n },\n },\n {\n align: \"left\",\n title: \"\",\n width: \"25\",\n key: \"extras\",\n render: (_value: number, item: StatisticReport) => {\n if (item.status == \"PENDING\") {\n return (\n \n \n \n );\n }\n return ;\n },\n },\n ];\n\n return (\n <>\n \n\n {pagination}\n \n );\n};\n\nexport default PriceHistoryModalTable;\n","import gql from \"graphql-tag\";\n\nconst STATISTIC_REPORT_MUTATION_CREATE = gql`\n mutation requestReport($input: StatisticReportInput!) {\n statisticReport{\n create(input: $input) {\n __typename\n ...on PricesReport{\n id\n format\n\t status\n }\n ...on StatisticReport {\n id\n format\n\t status\n }\n }\n }\n}\n`;\n\nexport default STATISTIC_REPORT_MUTATION_CREATE;\n","import \"./styles.scss\";\n\nimport { Button, DatePicker, Modal, Pagination, Select } from \"antd\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n StatisticReport,\n StatisticReportPaginationInput,\n StatisticReportQuery,\n} from \"lib/graphql/queries/StatisticReport/types\";\nimport {\n StatisticReportCreate,\n StatisticReportMutationInput,\n} from \"lib/graphql/mutations/StatisticReport/types\";\nimport { useLazyQuery, useMutation } from \"@apollo/react-hooks\";\n\nimport { ACTUAL_PRICE_HISTORY_PAGINATION } from \"lib/helpers/actualPriceHistory\";\nimport type { Moment } from \"moment\";\nimport NEW_STATISTIC_REPORT from \"../../../lib/graphql/queries/StatisticReport/newStatic\";\nimport PriceHistoryModalTable from \"./PriceHistoryModalTable\";\nimport STATISTIC_REPORT_MUTATION_CREATE from \"lib/graphql/mutations/StatisticReport\";\nimport { useTranslation } from \"react-i18next\";\n\nconst { RangePicker } = DatePicker;\n\ntype RangeValue = [Moment | null, Moment | null] | null;\n\ninterface Props {\n isModalVisible: boolean;\n setIsModalVisible: React.Dispatch>;\n data: StatisticReportQuery | undefined;\n loading: boolean;\n}\n\nconst ActualPricePriceHistoryModal: React.FC = ({\n isModalVisible,\n setIsModalVisible,\n}) => {\n const { t } = useTranslation();\n const intervalRef = useRef(null);\n const [offset, setOffset] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [dates, setDates] = useState(null);\n const [tableData, setTableData] = useState([]);\n const [selectValue, setSelectValue] = useState(0);\n const [total, setTotal] = useState(0);\n const [loadData, { loading, data, refetch }] = useLazyQuery<\n StatisticReportQuery | undefined,\n StatisticReportPaginationInput\n >(NEW_STATISTIC_REPORT);\n const [createReport, { loading: reportLoading }] = useMutation<\n StatisticReportCreate,\n StatisticReportMutationInput\n >(STATISTIC_REPORT_MUTATION_CREATE);\n const onModalClose = () => {\n setIsModalVisible(false);\n };\n\n const onPaginationChange = (page: number) => {\n setCurrentPage(page);\n setOffset(ACTUAL_PRICE_HISTORY_PAGINATION * (page - 1));\n };\n\n const pagination = (\n \n );\n useEffect(() => {\n loadData({\n variables: {\n pagination: {\n limit: ACTUAL_PRICE_HISTORY_PAGINATION,\n offset: offset,\n },\n },\n });\n }, [offset, currentPage]);\n\n useEffect(() => {\n const responseList = data?.statisticReport.list;\n const responseData = responseList?.items;\n const responseTotal = responseList?.total;\n\n responseTotal && setTotal(responseTotal);\n responseData && setTableData(responseData);\n }, [data]);\n\n useEffect(() => {\n const isAnyWithPendingStatus = tableData.some(\n (item) => item.status === \"PENDING\"\n );\n\n if (isAnyWithPendingStatus) {\n intervalRef.current = window.setInterval(() => {\n void refetch();\n }, 7000);\n } else {\n intervalRef.current && clearInterval(intervalRef.current);\n }\n return () => {\n intervalRef.current && clearInterval(intervalRef.current);\n };\n }, [tableData, loadData]);\n\n const disabledDate = (date: Moment) => {\n if (!dates) {\n return false;\n }\n\n const tooLate = dates[0] && date.diff(dates[0], \"days\") > 365;\n const tooEarly = dates[1] && dates[1].diff(date, \"days\") > 365;\n\n return !!tooEarly || !!tooLate;\n };\n\n const onReportCreate = useCallback(() => {\n if (selectValue === 0) {\n void createReport({\n variables: {\n input: {\n layout: \"ACTUAL\",\n },\n },\n }).then((response) => {\n const data = response.data?.statisticReport.create;\n data &&\n setTableData((prev) => [\n data,\n ...prev.slice(0, tableData.length - 1),\n ]);\n\n data && setTotal((prev) => prev + 1);\n });\n }\n if (selectValue === 1) {\n if (dates && dates[0] && dates[1]) {\n void createReport({\n variables: {\n input: {\n layout: \"HISTORY\",\n from: dates[0]?.toISOString(),\n to: dates[1]?.toISOString(),\n },\n },\n }).then((response) => {\n const data = response.data?.statisticReport.create;\n\n const newData = [...tableData].slice(0, tableData.length - 1);\n\n data && setTableData([data, ...newData]);\n\n data && setTotal(total + 1);\n });\n }\n }\n }, [dates, selectValue]);\n\n const handleChange = (value: number) => {\n setSelectValue(value);\n };\n\n const select = (\n \n );\n return (\n \n
\n {select}\n {!!selectValue && (\n setDates(val)}\n disabledDate={disabledDate}\n />\n )}\n \n {t(\"reports.actualPrice.priceHistory.create\")}\n \n
\n\n \n \n );\n};\n\nexport default ActualPricePriceHistoryModal;\n","import React, { Fragment, useState } from \"react\";\n\nimport { ACTUAL_PRICE_HISTORY_PAGINATION } from \"../../../lib/helpers/actualPriceHistory\";\nimport ActualPricePriceHistoryModal from \"../ActualPricePriceHistoryModal\";\nimport { Button } from \"antd\";\nimport NEW_STATISTIC_REPORT from \"../../../lib/graphql/queries/StatisticReport/newStatic\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ActualPriceReports: React.FC = () => {\n const { t } = useTranslation();\n const [isModalVisible, setIsModalVisible] = useState(false);\n const { data, loading: reportLoading } = useQuery(NEW_STATISTIC_REPORT, {\n variables: {\n pagination: {\n limit: ACTUAL_PRICE_HISTORY_PAGINATION,\n offset: 0,\n },\n },\n });\n\n const handleModal = () => {\n setIsModalVisible(true);\n };\n\n return (\n \n \n \n \n );\n};\n\nexport default ActualPriceReports;\n","import React, {ReactNode} from \"react\";\nimport { Card } from 'antd';\n\nimport \"./style.scss\";\n\ninterface CardWrapperProps {\n title?: string | ReactNode;\n}\n\nconst CardWrapper: React.FC = ({\n children,\n title\n}) => {\n return (\n \n {children}\n \n )\n};\n\nexport default CardWrapper;\n","import React from 'react';\nimport { BreadcrumbProps } from 'antd/lib/breadcrumb';\nimport { PageHeader } from 'antd';\n\nimport './index.scss';\n\ninterface HeaderProps {\n title: string;\n breadcrumbs?: BreadcrumbProps;\n footer?: React.ReactNode\n\n}\n\nconst PageMainHeader: React.FC = ({\n title,\n breadcrumbs,\n footer,\n children\n}) => {\n const headerBreadcrumbs = breadcrumbs || undefined;\n\n return (\n \n {children}\n \n );\n};\n\nexport default PageMainHeader;\n","import React from \"react\";\nimport { Select, Typography } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\n\nimport \"./style.scss\";\n\nconst { Option } = Select;\nconst { Text } = Typography;\n\nconst sizes = [10, 20, 30, 40, 50];\n\ninterface PaginationSizeProps {\n setDefaultPageSize: (\n value: ((prevState: number) => number) | number | number\n ) => void;\n setCurrentPage: (value: ((prevState: number) => number) | number) => void;\n setListOffset: (value: ((prevState: number) => number) | number) => void;\n}\n\nconst PaginationSize: React.FC = ({\n setDefaultPageSize,\n setCurrentPage,\n setListOffset,\n}) => {\n const { t } = useTranslation();\n const handleChange = (item: number) => {\n setCurrentPage(1);\n setListOffset(0);\n setDefaultPageSize(item);\n };\n\n return (\n
\n \n {t(`reports.actualPrice.extras.perPage`)}\n \n \n {sizes.map((item) => {\n return (\n \n );\n })}\n \n
\n );\n};\n\nexport default PaginationSize;\n","import \"./style.scss\";\n\nimport { ColumnGroupType, ColumnType } from \"antd/lib/table\";\nimport React, { Fragment, ReactNode, useCallback, useMemo } from \"react\";\n\nimport ActualPriceExtras from \"./ActualPriceExtras\";\nimport ActualPriceNestedTable from \"components/_common/ActualPriceTable/ActualPriceNestedTable\";\nimport ActualPricePicker from \"./ActualPricePicker\";\nimport ActualPriceReports from \"./_extras/ActualPriceReports\";\nimport { ActualPriceTableRow } from \"./types\";\nimport CardWrapper from \"components/_common/CardWrapper\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\nimport { Pagination } from \"antd\";\nimport PaginationSize from \"components/_common/Pagination/PaginationSize\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface Props {\n data: ActualPriceTableRow[];\n total: number;\n loading: boolean;\n defaultPageSize: number;\n columns: (\n | ColumnGroupType\n | ColumnType\n )[];\n FilterByRegion: ReactNode;\n tableHeaders: Array;\n listOffset: number;\n setDefaultPageSize: (value: ((prevState: number) => number) | number) => void;\n setListOffset: (value: ((prevState: number) => number) | number) => void;\n setOnFilters: (value: ((prevState: string) => string) | string) => void;\n setTableHeaders: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n currentPage: number;\n setCurrentPage: (value: ((prevState: number) => number) | number) => void;\n}\n\nconst ActualPriceComponent: React.FC = ({\n data,\n total,\n loading,\n columns,\n defaultPageSize,\n FilterByRegion,\n tableHeaders,\n setDefaultPageSize,\n setListOffset,\n setTableHeaders,\n setOnFilters,\n setCurrentPage,\n currentPage,\n}) => {\n const { t } = useTranslation();\n const title = t(\"reports.actualPrice.title\");\n\n const paginationChange = useCallback(\n (page: number) => {\n setCurrentPage(page);\n setListOffset(() => defaultPageSize * (page - 1));\n },\n [defaultPageSize, setListOffset]\n );\n\n const pagination = useMemo(() => {\n return (\n \n );\n }, [total, paginationChange, currentPage, defaultPageSize]);\n\n return (\n \n \n\n \n
\n
{FilterByRegion}
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n {pagination}\n
\n
\n
\n );\n};\n\nexport default ActualPriceComponent;\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { RegionSelect } from \"lib/graphql/queries/GasStations/gasStations\";\nimport { RegionSmallWholeSaleSelect } from \"containers/SmallWholesaleContainer\";\n\nconst { Option } = Select;\n\ninterface ActualPriceRegionPickerProps {\n pickedRegion: Array;\n regions: Array;\n setPickedRegion: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n}\n\nconst ActualPriceRegionPicker: React.FC = ({\n regions,\n pickedRegion,\n setPickedRegion,\n}) => {\n const { t } = useTranslation();\n\n return (\n setPickedRegion(val)}\n allowClear\n showSearch={false}\n virtual={false}\n >\n {regions.map((item) => (\n \n ))}\n \n );\n};\n\nexport default ActualPriceRegionPicker;\n","import gql from \"graphql-tag\";\nimport ActualPricesGasStationFragment from \"lib/graphql/fragments/ActualPrices/gasStation\";\n\nconst G_S_WITHOUT_COMPETITORS= gql`\n query userProfile {\n userProfile {\n id\n customer {\n id\n gasStations {\n items {\n ...ActualPricesGasStationFragment\n }\n total\n }\n }\n }\n }\n ${ActualPricesGasStationFragment}\n`;\n\nexport default G_S_WITHOUT_COMPETITORS;\n","import gql from \"graphql-tag\";\n\nconst MARKET_INDICATORS = gql`\n query marketIndicators($gasStations: [ID!]!) {\n marketIndicators(gasStations: $gasStations) {\n stationId\n fuels\n }\n }\n`;\n\nexport default MARKET_INDICATORS;\n","import React, { ReactNode, useEffect, useState } from \"react\";\nimport { useLazyQuery, useQuery } from \"@apollo/react-hooks\";\n\nimport InfoMessage from \"./InfoMessage\";\nimport {\n GasStationIndicators,\n GasStationsItem,\n IndicatorsProps,\n RegionSelect,\n UserProfileGasStations,\n} from \"lib/graphql/queries/GasStations/gasStations\";\nimport { actualPrices } from \"containers/ActualPriceContainer/dataMapping\";\nimport ActualPriceComponent from \"components/ActualPriceComponent\";\nimport { ActualPriceTableRow } from \"components/ActualPriceComponent/types\";\nimport ActualPriceRegionPicker from \"components/ActualPriceComponent/_extras/ActualPriceRegionPicker\";\nimport { DEFAULT_PAGINATION_SIZE } from \"lib/helpers\";\nimport { actualPriceHeaders } from \"lib/helpers/fuelTypes\";\nimport { GasStationPagination } from \"lib/graphql/globalTypes\";\nimport { useGasStationColumns } from \"lib/hooks/useGasStationColumns\";\nimport G_S_WITHOUT_COMPETITORS from \"lib/graphql/queries/GasStations/GSWithoutCompetitors\";\nimport MARKET_INDICATORS from \"lib/graphql/queries/GasStations/MarketIndicators\";\n\nconst ActualPriceContainer: React.FC = () => {\n const [pageTotal, setPageTotal] = useState(0);\n const [onFilters, setOnFilters] = useState(\"\");\n const [listOffset, setListOffset] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [actualPriceData, setActualPriceData] = useState<\n Array\n >([]);\n const [gasStationItems, setGasStationItems] = useState<\n Array\n >([]);\n const [defaultPageSize, setDefaultPageSize] = useState(\n DEFAULT_PAGINATION_SIZE\n );\n const [tableHeaders, setTableHeaders] = useState>([\n ...actualPriceHeaders,\n ]);\n const [regions, setRegions] = useState>([]);\n const [pickedRegion, setPickedRegion] = useState>([]);\n\n const { data, loading } = useQuery<\n UserProfileGasStations,\n GasStationPagination\n >(G_S_WITHOUT_COMPETITORS);\n const [getIndicators, { data: indicatorsData }] = useLazyQuery<\n GasStationIndicators,\n IndicatorsProps\n >(MARKET_INDICATORS);\n\n useEffect(() => {\n if (gasStationItems) {\n const slicedData: Array = gasStationItems.slice(\n listOffset,\n listOffset + defaultPageSize\n );\n setActualPriceData(actualPrices(slicedData));\n\n getIndicators({\n variables: {\n gasStations: slicedData.map((item) => item.id),\n },\n });\n }\n }, [listOffset, defaultPageSize, currentPage]);\n\n useEffect(() => {\n if (gasStationItems) {\n const actualPricesData = actualPrices(gasStationItems);\n\n if (!pickedRegion.length) {\n const sliced = actualPricesData.slice(\n listOffset,\n listOffset + defaultPageSize\n );\n setActualPriceData(sliced);\n\n setPageTotal(actualPricesData.length);\n\n return;\n }\n\n const filtered = actualPricesData.filter(\n (item) => item.region && pickedRegion.includes(item.region)\n );\n\n setActualPriceData(\n filtered.slice(listOffset, listOffset + defaultPageSize)\n );\n\n setPageTotal(filtered.length);\n }\n }, [pickedRegion, defaultPageSize, listOffset, pageTotal]);\n\n useEffect(() => {\n if (!loading && data && data.userProfile.customer) {\n const { gasStations } = data.userProfile.customer;\n\n const tempRegions: { [key: string]: RegionSelect } = {};\n const slicedData: Array = gasStations.items.slice(\n 0,\n listOffset\n );\n\n setGasStationItems([]);\n\n setGasStationItems(gasStations.items);\n\n setActualPriceData(actualPrices(slicedData));\n\n getIndicators({\n variables: {\n gasStations: slicedData.map((item) => item.id),\n },\n });\n\n setPageTotal(gasStations.total);\n\n gasStations.items.forEach((station) => {\n const { id } = station.region;\n\n if (tempRegions[id]) {\n tempRegions[id].count += 1;\n } else {\n tempRegions[id] = Object.assign(station.region, {\n count: 1,\n });\n }\n });\n\n setRegions(Object.values(tempRegions));\n }\n }, [loading]);\n\n useEffect(() => {\n if (indicatorsData) {\n const data = [...actualPriceData];\n\n const indicatorsObj: { [key: string]: Array } =\n indicatorsData.marketIndicators.reduce((obj, item) => {\n return {\n ...obj,\n [item.stationId]: item.fuels,\n };\n }, {});\n\n data.forEach((item) => {\n const station = indicatorsObj[item.key];\n\n if (!station) {\n return;\n }\n\n station.forEach((fuel) => {\n if (item.products[fuel]) {\n item.products[fuel].changed = true;\n }\n });\n });\n\n setActualPriceData(data);\n }\n }, [indicatorsData]);\n\n const { columns } = useGasStationColumns({\n headers: tableHeaders,\n translateString: \"reports.actualPrice.fuel\",\n onFilters,\n zeroHeader: \"brand\",\n sorter: false,\n });\n\n const FilterByRegion: ReactNode = (\n \n );\n\n if (data?.userProfile.customer === null) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default ActualPriceContainer;\n","import React,{Fragment} from \"react\";\nimport {Helmet} from \"react-helmet\";\nimport {useTranslation} from \"react-i18next\";\n\nimport ActualPriceContainer from \"containers/ActualPriceContainer\";\n\nconst ActualPricePage: React.FC = () => {\n const {t} = useTranslation();\n\n return (\n \n \n {`${t(`title.pages.actualPrices`)} - BenzUp`}\n \n \n \n \n \n )\n};\n\nexport default ActualPricePage;\n","import dayjs from \"dayjs\";\n\nimport {ActualPriceTableRow} from \"components/ActualPriceComponent/types\";\nimport {BasisAssortment, Basises} from \"lib/graphql/queries/SmallWholesale/types\";\n\nlet groupId = 500;\n\nexport const smallWholesalePrices = (data: Array): Array => {\n let result: Array = [];\n const filteredEmptyDate = data.filter(it => it.assortment.length)\n\n filteredEmptyDate.forEach((station) => {\n const mainStation: ActualPriceTableRow = {\n key: station.id,\n groupId,\n brand: station.name,\n internalNumber: '', //такого свойства просто нет\n own: true,\n address: station.address,\n products: {},\n border: \"top\",\n dynamicPrice: false,\n hasIndicator: false,\n };\n\n const mainStationAssortment = mapAssortment(station.assortment, station.id);\n\n if (!mainStationAssortment.length) {\n mainStation.border = \"both\";\n }\n\n result.push(mainStation);\n\n result = [...result, ...mainStationAssortment];\n\n groupId += 50\n } );\n\n return result;\n};\n\n\nconst mapAssortment = (stations: Array, stationId: string): Array => {\n // Вот тут держим массив всех \"отработанных\" assortimentov\n const temp: Array = [];\n\n stations.forEach((station) => {\n const assortmentKey = `${stationId}.${station.trader.id}`;\n const existing = temp.find((item) => item.key === assortmentKey);\n\n if (existing === undefined) {\n // создаем новый элемент\n const record: ActualPriceTableRow = {\n key: assortmentKey,\n groupId,\n brand: station.trader.name,\n internalNumber: '', //такого свойства просто нет\n own: false,\n address: '', //такого свойства просто нет\n updatedAt: dayjs(station.updatedAt),\n products: {},\n dynamicPrice: false,\n hasIndicator: false\n };\n\n record.products[station.product.code] = {\n price: station.price,\n delta: station.delta,\n changed: false\n };\n\n temp.push(record);\n\n } else {\n // работаем с текущим\n existing.products[station.product.code] = {\n price: station.price,\n delta: station.delta,\n changed: false\n };\n\n if (existing.updatedAt && existing.updatedAt.isBefore(station.updatedAt)) {\n existing.updatedAt = dayjs(station.updatedAt);\n }\n\n }\n });\n\n if (temp.length) {\n temp[temp.length-1].border = 'bottom';\n }\n\n return temp;\n};\n\n","import React, { useEffect, useState } from \"react\";\nimport { Table } from \"antd\";\nimport { useVT } from \"virtualizedtableforantd4\";\n\nimport { ActualPriceTableRow } from \"components/ActualPriceComponent/types\";\nimport { eachRowClass } from \"lib/helpers/actualPrices\";\nimport { ColumnGroupType, ColumnType } from \"antd/lib/table\";\n\ninterface Props {\n loading: boolean;\n zeroHeader: string;\n data: Array;\n setOnFilters: (value: ((prevState: string) => string) | string) => void;\n columns: (\n | ColumnGroupType\n | ColumnType\n )[];\n}\n\nconst ActualPriceTable: React.FC = ({\n loading,\n zeroHeader,\n data,\n columns,\n setOnFilters,\n}) => {\n const [tableData, setTableData] = useState(\n data.slice()\n );\n\n const [vt] = useVT(() => ({ scroll: { y: 600 } }), []);\n\n useEffect(() => {\n setTableData(data.slice());\n }, [data]);\n\n const scrollCoordinates = () => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 500) {\n return {\n x: 1000,\n y: 500,\n };\n }\n\n return {\n y: \"calc(100vh - 150px)\",\n };\n };\n\n const sortPrices = (\n items: Array,\n field: string,\n sortDirection: \"descend\" | \"ascend\" | undefined | null\n ): Array => {\n const compare = (a: ActualPriceTableRow, b: ActualPriceTableRow) => {\n let direction = 1;\n\n const fieldA = a.products.hasOwnProperty(field)\n ? a.products[field].price\n : 0;\n\n const fieldB = b.products.hasOwnProperty(field)\n ? b.products[field].price\n : 0;\n\n if (sortDirection === \"ascend\") {\n direction = -1;\n }\n\n return a.groupId - b.groupId || (fieldA - fieldB) * direction;\n };\n\n if (sortDirection === undefined) {\n return data.slice();\n }\n\n return items.sort(compare);\n };\n\n return (\n {\n // проверяем объект sorter и делаем сортировку\n // columnKey: \"ai98b\"\n // field: \"ai98b\"\n // order: \"descend\" | \"ascend\" | undefined\n\n let result: Array = [];\n\n if (!Array.isArray(sorter) && sorter.columnKey !== undefined) {\n result = sortPrices(\n tableData,\n sorter.columnKey.toString(),\n sorter.order\n );\n\n if (zeroHeader !== \"tankFarm\") {\n setOnFilters(sorter.columnKey.toString());\n if (sorter.order === undefined) {\n setOnFilters(\"\");\n }\n }\n\n for (let j = 0; j < result.length; j += 1) {\n result[j].border = null;\n }\n\n let tempGroup = {\n id: result[0].groupId,\n count: 0,\n };\n\n for (let i = 0; i < result.length; i += 1) {\n if (tempGroup.id !== result[i].groupId) {\n result[i - 1].border = \"bottom\";\n result[i].border = \"top\";\n\n if (tempGroup.count === 1) {\n result[i - 1].border = \"both\";\n }\n\n tempGroup = {\n id: result[i].groupId,\n count: 1,\n };\n } else {\n tempGroup.count += 1;\n }\n }\n\n result[0].border = \"top\";\n result[result.length - 1].border = \"bottom\";\n }\n\n setTableData(result);\n }}\n />\n );\n};\n\nexport default ActualPriceTable;\n","import React, { Fragment, ReactNode, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Pagination } from \"antd\";\nimport { ColumnsType } from \"antd/es/table\";\n\nimport CardWrapper from \"components/_common/CardWrapper\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\nimport { ActualPriceTableRow } from \"components/ActualPriceComponent/types\";\nimport ActualPriceExtras from \"components/ActualPriceComponent/ActualPriceExtras\";\nimport ActualPriceTable from \"components/_common/ActualPriceTable\";\nimport PaginationSize from \"components/_common/Pagination/PaginationSize\";\nimport ActualPricePicker from \"../ActualPriceComponent/ActualPricePicker\";\n\ninterface WholesaleProps {\n total: number;\n loading: boolean;\n FilterByRegion: ReactNode;\n FilterByCompany: ReactNode;\n defaultPageSize: number;\n listOffset: number;\n columns: ColumnsType;\n data: ActualPriceTableRow[];\n setDefaultPageSize: (value: ((prevState: number) => number) | number) => void;\n setListOffset: (value: ((prevState: number) => number) | number) => void;\n setOnFilters: (value: ((prevState: string) => string) | string) => void;\n setTableHeaders: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n}\n\nconst SmallWholesaleComponent: React.FC = ({\n data,\n total,\n loading,\n columns,\n listOffset,\n FilterByRegion,\n FilterByCompany,\n defaultPageSize,\n setDefaultPageSize,\n setListOffset,\n setOnFilters,\n setTableHeaders,\n}) => {\n const { t } = useTranslation();\n const title = t(\"reports.actualPrice.title\");\n const [currentPage, setCurrentPage] = useState(1);\n\n const paginationChange = (page: number) => {\n setCurrentPage(page);\n setListOffset(defaultPageSize * (page - 1));\n };\n\n useEffect(() => {\n setCurrentPage(listOffset / defaultPageSize + 1);\n }, [listOffset]);\n\n const pagination = (\n \n );\n\n return (\n \n \n\n \n
\n
\n
{FilterByRegion}
\n
{FilterByCompany}
\n
\n
\n
\n \n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n {pagination}\n
\n
\n
\n );\n};\n\nexport default SmallWholesaleComponent;\n","import gql from \"graphql-tag\";\n\nconst SMALL_WHOLESALE = gql`\n query userProfile{\n userProfile {\n id\n customer {\n id\n basises {\n items {\n id\n name\n address\n assortment {\n id\n trader {\n id\n name\n shortName\n }\n product {\n id\n code\n name\n fullName\n }\n price\n delta\n updatedAt\n }\n }\n total\n }\n }\n }\n }\n`;\n\nexport default SMALL_WHOLESALE;\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport { Organization } from \"lib/graphql/queries/SmallWholesale/types\";\n\nconst { Option } = Select;\n\ninterface ActualPriceRegionPickerProps {\n pickedCompany: Array;\n regions: Organization[];\n setPickedCompany: (value: string[] | ((prev: string[]) => string[])) => void;\n}\n\nconst SmallWholeSaleCompanyPicker: React.FC = ({\n regions,\n pickedCompany,\n setPickedCompany,\n}) => {\n const { t } = useTranslation();\n\n return (\n setPickedCompany(val)}\n allowClear\n showSearch={false}\n virtual={false}\n >\n {regions.map((item) => {\n return (\n \n );\n })}\n \n );\n};\n\nexport default SmallWholeSaleCompanyPicker;\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\nimport { RegionSmallWholeSaleSelect } from \"containers/SmallWholesaleContainer\";\n\nconst { Option } = Select;\n\ninterface ActualPriceRegionPickerProps {\n pickedRegion: Array;\n regions: Array;\n setPickedRegion: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n}\n\nconst SmallWholeSaleRegionPicker: React.FC = ({\n regions,\n pickedRegion,\n setPickedRegion,\n}) => {\n const { t } = useTranslation();\n\n return (\n setPickedRegion(val)}\n allowClear\n showSearch={false}\n virtual={false}\n >\n {regions.map((item) => (\n \n ))}\n \n );\n};\n\nexport default SmallWholeSaleRegionPicker;\n","import React, { ReactNode, useEffect, useState } from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\nimport { smallWholesalePrices } from \"./dataMapping\";\nimport SmallWholesaleComponent from \"components/SmallWholesaleComponent\";\nimport { ActualPriceTableRow } from \"components/ActualPriceComponent/types\";\nimport { DEFAULT_PAGINATION_SIZE } from \"lib/helpers\";\nimport { basisesHeaders } from \"lib/helpers/fuelTypes\";\nimport SMALL_WHOLESALE from \"lib/graphql/queries/SmallWholesale\";\nimport { UserProfileGasStations } from \"lib/graphql/queries/GasStations/gasStations\";\nimport { useSmallWholesaleColumns } from \"lib/hooks/useSmallWholesale\";\nimport {\n Basises,\n BasisListPaginationInput,\n Organization,\n} from \"lib/graphql/queries/SmallWholesale/types\";\nimport InfoMessage from \"containers/ActualPriceContainer/InfoMessage\";\nimport SmallWholeSaleCompanyPicker from \"components/SmallWholesaleComponent/SmallWholeSaleCompanyPicker\";\nimport SmallWholeSaleRegionPicker from \"components/SmallWholesaleComponent/SmallWholeSaleRegionPicker\";\nimport { actualRegionsCount } from \"lib/helpers/actualRegionsCount\";\n\nexport type RegionSmallWholeSaleSelect = Basises & {\n count: number;\n};\n\nconst SmallWholesaleContainer: React.FC = () => {\n const [onFilters, setOnFilters] = useState(\"\");\n const [pageTotal, setPageTotal] = useState(0);\n const [listOffset, setListOffset] = useState(0);\n const [defaultPageSize, setDefaultPageSize] = useState(\n DEFAULT_PAGINATION_SIZE\n );\n const [actualPriceData, setActualPriceData] = useState<\n Array\n >([]);\n\n const [gasStationItems, setGasStationItems] = useState>([]);\n const [tableHeaders, setTableHeaders] = useState>([\n ...basisesHeaders,\n ]);\n const [regions, setRegions] = useState>([]);\n const [companies, setCompanies] = useState([]);\n const [pickedRegion, setPickedRegion] = useState>([]);\n const [pickedCompany, setPickedCompany] = useState>([]);\n const [filteredRegions, setFilteredRegions] = useState>([]);\n const [filteredAllData, setFilteredAllData] = useState>([]);\n const { data, loading } = useQuery<\n UserProfileGasStations,\n BasisListPaginationInput\n >(SMALL_WHOLESALE);\n\n useEffect(() => {\n if (gasStationItems) {\n const filteredRegion = gasStationItems.filter((item) => {\n return item.address && pickedRegion.includes(item.address);\n });\n setFilteredRegions(filteredRegion);\n }\n }, [pickedRegion, defaultPageSize, pageTotal]);\n\n function getUniqueTraders(regions: Basises[]) {\n return Array.from(\n new Set(\n regions.flatMap((region) =>\n region.assortment.flatMap((assortment) => assortment.trader)\n )\n )\n );\n }\n\n useEffect(() => {\n const uniqueTradersAll = getUniqueTraders(gasStationItems);\n const uniqueTraders = getUniqueTraders(filteredRegions);\n\n if (pickedCompany.length === 0) {\n setCompanies(uniqueTradersAll);\n }\n\n if (pickedRegion.length > 0) {\n setCompanies(uniqueTraders);\n }\n }, [pageTotal, pickedRegion, pickedCompany]);\n\n useEffect(() => {\n const filteredByAllCompany = gasStationItems.filter((item) => {\n if (pickedCompany.length === 0 && pickedRegion.length === 0) {\n return true;\n }\n\n if (pickedCompany.length > 0 && pickedRegion.length > 0) {\n if (filteredRegions.includes(item)) {\n return item.assortment.some((a) =>\n pickedCompany.includes(a.trader.name)\n );\n } else return;\n }\n\n if (pickedRegion.length > 0) {\n return filteredRegions.includes(item);\n }\n\n if (pickedCompany.length > 0) {\n return item.assortment.some((a) =>\n pickedCompany.includes(a.trader.name)\n );\n }\n });\n\n setFilteredAllData(filteredByAllCompany);\n setListOffset(0);\n setPageTotal(filteredByAllCompany.length);\n }, [pickedCompany, pickedRegion, filteredRegions, gasStationItems]);\n\n useEffect(() => {\n setPickedCompany([]);\n }, [pickedRegion]);\n\n useEffect(() => {\n const actualPrice = smallWholesalePrices(\n filteredAllData.slice(listOffset, listOffset + defaultPageSize)\n ).filter((item) => {\n if (item.own) {\n return true;\n }\n if (pickedCompany.length === 0) {\n return true;\n }\n return pickedCompany.includes(item.brand);\n });\n setActualPriceData(actualPrice);\n }, [filteredAllData, listOffset]);\n\n useEffect(() => {\n if (!loading && data && data.userProfile.customer) {\n const { basises } = data?.userProfile.customer;\n const filteredEmptyBasises = basises.items.filter(it=> it.assortment.length)\n setGasStationItems(filteredEmptyBasises);\n setActualPriceData(\n smallWholesalePrices(data.userProfile.customer.basises.items)\n );\n setPageTotal(filteredEmptyBasises.length);\n setRegions(actualRegionsCount(filteredEmptyBasises));\n }\n }, [data]);\n\n const { columns } = useSmallWholesaleColumns({\n headers: tableHeaders,\n translateString: \"reports.basises.fuel\",\n onFilters,\n zeroHeader: \"tankFarm\",\n });\n\n const FilterByRegion: ReactNode = (\n \n );\n\n const FilterByCompany: ReactNode = (\n \n );\n\n if (data?.userProfile.customer === null) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default SmallWholesaleContainer;\n","import { Basises } from './../graphql/queries/SmallWholesale/types';\nimport { RegionSmallWholeSaleSelect } from \"containers/SmallWholesaleContainer\";\n\nexport const actualRegionsCount = (basises: Basises[]):RegionSmallWholeSaleSelect[] => {\n const tempRegions: { [key: string]: RegionSmallWholeSaleSelect } = {};\n\n basises?.forEach((station) => {\n const { address } = station;\n\n if (tempRegions[address]) {\n tempRegions[address].count += 1;\n } else {\n tempRegions[address] = Object.assign(station, {\n count: 1,\n });\n }\n });\n return Object.values(tempRegions)\n}\n","import React, {useMemo} from \"react\";\nimport {Tooltip} from \"antd\";\nimport dayjs from \"dayjs\";\nimport {ColumnsType} from \"antd/lib/table\";\nimport {useTranslation} from \"react-i18next\";\nimport parse from \"html-react-parser\";\n\nimport {parsePrice} from \"lib/helpers\";\nimport {headerWidth} from \"lib/helpers/actualPrices\";\nimport {ActualPriceTableRow, ProductData} from \"components/ActualPriceComponent/types\";\nimport ActualPriceDeltaCell from \"components/_common/ActualPriceTable/ActualPriceCell/ActualPriceDeltaCell\";\nimport ActualPriceBrand from \"components/_common/ActualPriceTable/ActualPriceCell/ActualPriceBrand\";\n\ninterface Props {\n onFilters: string;\n zeroHeader: string;\n translateString: string;\n headers: Array;\n}\n\ninterface SmallWholesaleColumnsHook {\n columns: ColumnsType;\n}\n\nexport function useSmallWholesaleColumns({\n headers,\n onFilters,\n translateString,\n zeroHeader,\n}: Props): SmallWholesaleColumnsHook {\n const {t} = useTranslation();\n const isTankFarm = zeroHeader === 'tankFarm';\n\n const renderValue = (value: ProductData, header: string) => {\n // если filter, то рендер diff, иначе delta\n if (!value) {\n return null;\n }\n const converted = value.price ? value.price.toFixed(2) : \"\";\n const price = isTankFarm ? parsePrice(value.price) : converted;\n const delta = onFilters === header ? value.diff || 0 : value.delta;\n\n return ;\n };\n\n const columns = useMemo(() => {\n const columns: ColumnsType = [];\n\n headers.forEach((header) => {\n switch (header) {\n case 'A0100':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.A0100`))}
),\n width: 100,\n dataIndex: ['products', 'A0100'],\n key: 'A0100',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['A098B']\n || item.products['A0980']\n || item.products['AA106'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'A0950':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.A0950`))}
),\n width: 100,\n dataIndex: ['products', 'A0950'],\n key: 'A0950',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value || item.products['AA956'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'A0920':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.A0920`))}
),\n width: 100,\n dataIndex: ['products', 'A0920'],\n key: 'A0920',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value || item.products['A092B'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'D0DTL':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTL`))}
),\n width: 100,\n dataIndex: ['products', 'D0DTL'],\n key: 'D0DTL',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['DTLK5']\n || item.products['DDEC3'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'D0DTE':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTE`))}
),\n width: 100,\n dataIndex: ['products', 'D0DTE'],\n key: 'D0DTE',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['DTEK5']\n || item.products['DDEF3']\n || item.products['DDE05']\n || item.products['DDEE3']\n || item.products['DDED3'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'D0DTZ':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTZ`))}
),\n width: 100,\n dataIndex: ['products', 'D0DTZ'],\n key: 'D0DTZ',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['DTZK5']\n || item.products['DDE23']\n || item.products['DDE13'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'D0DTA':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.D0DTA`))}
),\n width: 100,\n dataIndex: ['products', 'D0DTA'],\n key: 'D0DTA',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['DTAK5']\n || item.products['DDTZ3']\n || item.products['DDE43']\n || item.products['DDE33'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'PPCB2':\n columns.push({\n align: 'left',\n title: (
{parse(t(`${translateString}.PPCB2`))}
),\n width: 100,\n dataIndex: ['products', 'PPCB2'],\n key: 'PPCB2',\n sorter: true,\n render: (value: ProductData, item) => {\n const data = value\n || item.products['PPCPS']\n || item.products['PPCPB']\n || item.products['PPPBA']\n || item.products['PPCPC'];\n\n return renderValue(data, header);\n },\n });\n break;\n case 'updatedAt':\n columns.push({\n align: 'center',\n title: (
{t(`${translateString}.checkDate`)}
),\n width: 150,\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n sorter: true,\n render: (updatedAt?: dayjs.Dayjs) => (\n updatedAt ? updatedAt.utc(false).format(\"DD.MM.YYYY\") : ''\n ),\n });\n break;\n default: {\n const title = t(`${translateString}.${header}-full`, '');\n\n columns.push({\n align: 'left',\n title: (\n \n
\n {parse(t(`${translateString}.${header}`))}\n
\n
\n ),\n width: headerWidth(header),\n dataIndex: ['products', header],\n key: header,\n sorter: true,\n render: (value: ProductData) => {\n return renderValue(value, header);\n },\n });\n break;\n }\n }\n });\n\n columns.unshift({\n title: (
{t(`reports.actualPrice.fuel.${zeroHeader}`)}
),\n width: 200,\n dataIndex: 'brand',\n key: 'brand',\n fixed: 'left',\n render: (value: string, item) => (\n \n )\n });\n\n return columns;\n\n }, [headers, isTankFarm, headers, onFilters]);\n\n return {columns};\n}\n","import React from \"react\";\nimport SmallWholesaleContainer from \"containers/SmallWholesaleContainer\";\n\nconst SmallWholesalePage: React.FC = () => {\n return \n};\n\nexport default SmallWholesalePage;\n","import gql from \"graphql-tag\";\n\nconst PriceStatisticPage = gql`\n query statistic($input: StatisticInput!) {\n statistic(input: $input) {\n gasStation {\n id\n name\n number\n competitors {\n id\n name\n number\n }\n }\n product {\n id\n code\n name\n fullName\n }\n data {\n date\n value\n }\n }\n }\n`;\n\nexport default PriceStatisticPage;\n","import React, {useEffect, useLayoutEffect, useRef} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col } from \"antd\";\nimport * as am4core from \"@amcharts/amcharts4/core\";\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\nimport { XYChart } from \"@amcharts/amcharts4/charts\";\nimport kelly from \"@amcharts/amcharts4/themes/kelly\";\n\nimport { ChartTranslateStrings } from \"./helper\";\nimport { LineChartData, Tick } from \"lib/graphql/queries/PriceStatistic/types\";\n\nimport \"./style.scss\";\nimport {ScrollBarValue} from \"./index\";\n\nam4core.useTheme(kelly);\n\ninterface AnalyticsChartProps {\n loading: boolean;\n data: Array;\n fuelTypes: Array;\n ownerStation: string;\n secondStations?: Array;\n translateStr: ChartTranslateStrings;\n scrollBarValue: ScrollBarValue;\n setScrollBarValue: (val: Partial | ((val: Partial) => Partial)) => void;\n}\n\nconst PriceStatisticChart: React.FC = ({\n data,\n loading,\n fuelTypes,\n ownerStation,\n translateStr,\n secondStations,\n scrollBarValue,\n setScrollBarValue,\n}) => {\n const { t } = useTranslation();\n const chartRef = useRef();\n const indicatorRef = useRef();\n const scrollbarX = new am4charts.XYChartScrollbar();\n\n\n const createSeries = (chart: XYChart, name: string, data: Array) => {\n const series = chart.series.push(new am4charts.StepLineSeries());\n series.dataFields.valueY = \"value\";\n series.dataFields.dateX = \"date\";\n series.name = name;\n series.tooltipText = \"{valueY}: [b]{name}[/]\";\n series.strokeWidth = 2;\n series.minBulletDistance = 15;\n series.startLocation = 0.9;\n series.data = data;\n\n const defaultColor = am4core.color(\"#FF5733\");\n\n // Проверяем, если цвет - белый, используем альтернативный цвет\n if (\n (series.stroke as am4core.Color).hex.toLowerCase() === \"#ffffff\" ||\n (series.stroke as am4core.Color).hex.toLowerCase() === \"white\" ||\n (series.stroke as am4core.Color).hex.toLowerCase() === \"#fff\"\n ) {\n series.stroke = defaultColor;\n }\n\n const bullet = series.bullets.push(new am4charts.CircleBullet());\n bullet.circle.strokeWidth = 2;\n bullet.circle.radius = 4;\n bullet.circle.fill = am4core.color(\"#fff\");\n\n const bullethover = bullet.states.create(\"hover\");\n bullethover.properties.scale = 1.3;\n\n return series;\n };\n\n const generateMessage = () => {\n const indicator = indicatorRef.current;\n const item = indicator?.children.values[0] as am4core.Label;\n\n if (!ownerStation.length) {\n item.text = t(translateStr.firstInput);\n\n return;\n }\n\n if (secondStations && !secondStations.length && ownerStation.length) {\n item.text = t(translateStr.secondInput);\n\n return;\n }\n\n if (\n !fuelTypes.length &&\n ownerStation.length &&\n secondStations?.length\n ) {\n item.text = t(translateStr.thirdInput);\n\n return;\n }\n\n if (loading) {\n item.text = t(\"utils.loading\");\n\n return;\n }\n\n if (!data.length) {\n item.text = t(\"analytics.chart.noInfo\");\n\n return;\n }\n };\n\n useEffect(() => {\n // Тут нужно вызывать функцию generateMessage и показывать нужное сообщение.\n // Далее нужно понимать, когда нужно убирать это сообщение и окно серое это в целом\n const chart = chartRef.current;\n const indicator = indicatorRef.current;\n\n generateMessage();\n\n if (!loading && fuelTypes.length && ownerStation.length) {\n if (chart && indicator) {\n const key = chart.tooltipContainer?.children.indexOf(indicator);\n\n key && chart.tooltipContainer?.children.values[key].hide(2000);\n }\n }\n }, [loading, data, fuelTypes, ownerStation, secondStations]);\n\n useLayoutEffect(() => {\n // Create axes\n const chart = am4core.create(\"chartdiv\", am4charts.XYChart);\n let indicator: am4core.Container = new am4core.Container();\n const dateAxis = chart.xAxes.push(new am4charts.DateAxis());\n const scrollbarX = new am4charts.XYChartScrollbar();\n chart.dateFormatter.inputDateFormat = \"YYYY-M-DTH:m:sZ\";\n chart.yAxes.push(new am4charts.ValueAxis());\n console.log(dateAxis,\"1\")\n chart.scrollbarX = scrollbarX;\n dateAxis.renderer.grid.template.location = 1;\n dateAxis.renderer.minGridDistance = 50;\n scrollbarX.start = scrollBarValue.start !== null ? scrollBarValue.start : 0.9;\n scrollbarX.end = scrollBarValue.end !== null ? scrollBarValue.end : 1;\n\n dateAxis.keepSelection = true;\n chart.legend = new am4charts.Legend();\n chart.cursor = new am4charts.XYCursor();\n\n\n dateAxis.events.on(\"startchanged\", () => {\n console.log(\"Start changed:\", dateAxis.start);\n\n setScrollBarValue(prev => ({start:dateAxis.start, ...prev}))\n console.log(dateAxis)\n\n });\n\n dateAxis.events.on(\"endchanged\", () => {\n\n setScrollBarValue(prev => ({...prev ,end:dateAxis.end }))\n console.log(\"End changed:\", dateAxis.end);\n\n });\n if (chart.tooltipContainer) {\n indicator = chart.tooltipContainer.createChild(am4core.Container);\n indicator.background.fill = am4core.color(\"grey\");\n indicator.background.fillOpacity = 0.8;\n indicator.width = am4core.percent(100);\n indicator.height = am4core.percent(100);\n\n const indicatorLabel = indicator.createChild(am4core.Label);\n\n indicatorLabel.align = \"center\";\n indicatorLabel.valign = \"middle\";\n indicatorLabel.fontSize = 20;\n }\n\n indicatorRef.current = indicator;\n chartRef.current = chart;\n\n\n\n\n return () => {\n chart.dispose();\n };\n }, []);\n\n useEffect(() => {\n const chart = chartRef.current;\n\n if (chart) {\n chart.series.clear();\n\n data.forEach((item: LineChartData, i) => {\n const serie = createSeries(chart, item.id, item.data);\n scrollbarX.series.push(serie);\n\n const scrollSeriesItem = scrollbarX.scrollbarChart.series.getIndex(i);\n\n if (scrollSeriesItem) {\n scrollSeriesItem.strokeWidth = 0.5;\n }\n });\n\n chart.scrollbarX = scrollbarX;\n chart.scrollbarX.parent = chart.bottomAxesContainer;\n\n chart.events.on(\"datavalidated\", () => {\n if (scrollBarValue.start !== null) {\n //@ts-ignore\n chart.xAxes.getIndex(0).start = scrollBarValue.start;\n }\n if (scrollBarValue.end !== null) {\n //@ts-ignore\n chart.xAxes.getIndex(0).end = scrollBarValue.end;\n }\n });\n }\n }, [data]);\n\n\n return (\n \n
\n \n );\n};\n\nexport default PriceStatisticChart;\n","import {GasStationStatus, Point} from \"lib/graphql/queries/UserProfile/__generated__/userProfile\";\n\nimport {BasisList} from \"lib/graphql/queries/SmallWholesale/types\";\nimport {LngLatLike} from \"mapbox-gl\";\nimport {ReactNode} from \"react\";\n\nexport interface Region {\n id: string;\n name: string;\n country: Country;\n}\n\nexport enum PricingState {\n EMPTY = \"EMPTY\",\n PENDING = \"PENDING\",\n READY = \"READY\"\n}\n\nexport enum PricingStrategy {\n EARNING = \"EARNING\",\n MARGIN = \"MARGIN\",\n VOLUME = \"VOLUME\"\n}\n\nexport interface IndicatorsProps {\n gasStations: Array;\n}\n\nexport interface Indicator {\n stationId: string;\n fuels: Array;\n}\n\nexport interface GasStationIndicators {\n marketIndicators: Array;\n}\n\nexport type RegionSelect = Region & {count: number};\n\nexport interface Country {\n id: string;\n name: string;\n}\n\nexport interface FuelPriceProduct {\n id: string;\n code: string;\n name: string;\n fullName: string;\n title: string;\n}\n\nexport interface GasStationFuelPrice {\n price: number;\n delta: number;\n updatedAt: string;\n product: FuelPriceProduct\n recommendedPrice: number;\n recommendedAt: string;\n}\n\nexport interface GasStationManagementCompany {\n id: string;\n name: string;\n shortName: string;\n}\n\nexport interface GasStationsItem {\n __typename: \"GasStation\";\n id: string;\n name: string;\n number: string;\n address: string;\n dynamicPricing: boolean;\n status: GasStationStatus;\n location: Point;\n fuelPrices: Array;\n managementCompany: GasStationManagementCompany;\n competitors: Array;\n region: Region;\n hasIndicator: boolean;\n}\n\nexport interface GasStations {\n __typename: \"GasStationList\";\n items: Array;\n total: number;\n}\n\nexport interface PricingPresets {\n state: PricingState;\n strategy: PricingStrategy;\n priority: number;\n rounding: number[];\n}\n\nexport interface Customer {\n __typename: \"Customer\";\n gasStations: GasStations;\n basises: BasisList\n pricingEnabled: boolean;\n pricingPresets: PricingPresets;\n}\n\nexport interface User {\n __typename: \"User\"\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n authority: Array;\n customer: Customer;\n}\n\nexport interface UserProfileGasStations {\n userProfile: User\n}\n\n\nexport interface GasStationYandexMapProperties{\n region: Region,\n brand: string,\n number: string | undefined,\n address: string | undefined,\n prices: number | undefined ,\n color: string,\n hoverColor: string,\n competitors?: string[],\n zIndex:number\n}\nexport interface GasStationYandexMapGeometry{\n type: string,\n coordinates: number[]\n}\n\nexport interface GasStationYandexMapData {\n id: string,\n type: string | undefined,\n properties: GasStationYandexMapProperties,\n geometry: GasStationYandexMapGeometry\n}\n\nexport interface GasStationYandexMapCompetitors {\n id: string\n address: string,\n brand: string,\n prices: Array,\n}\n\nexport interface GasStationYandexMapFuelPrices{\n delta: number,\n price: number,\n product: GasStationYandexMapFuelPricesProduct,\n updatedAt: string,\n}\nexport interface GasStationYandexMapFuelPricesProduct{\n code: string\n fullName: string\n id: string\n name: string\n}\n\n\nexport interface GasStationYandexMapGeometry{\n type: string,\n coordinates: number[]\n}\n\nexport interface GasStationYandexMapData {\n id: string,\n type: string | undefined,\n properties: GasStationYandexMapProperties,\n geometry: GasStationYandexMapGeometry\n}\n\nexport interface ITemplateLayoutFactory {\n createClass: (template: string, options?: Record) => HTMLElement;\n}\n\n\nexport interface ICustomYMapsApi {\n templateLayoutFactory: ITemplateLayoutFactory;\n}\nexport interface IYmaps {\n ymaps: ICustomYMapsApi;\n}\n\n\nexport interface CircleLayoutProps {\n ymaps?: ICustomYMapsApi ;\n mark: GasStationYandexMapData;\n}\n\nexport interface GasStationMapProps {\n points: Array;\n FilterByRegion: ReactNode;\n ymaps?: ICustomYMapsApi;\n}\n\nexport interface FeaturesMappingResult {\n coordinates: Array;\n data: GasStationYandexMapData[];\n}\n\nexport interface GetOptimalZoomProps {\n (minLat: number, maxLat: number, minLng: number, maxLng: number): number;\n}\n\nexport interface ToRadians {\n (angle: number): number;\n}\n\nexport interface GetDistanceBetweenCoordinates {\n (lat1: number, lng1: number, lat2: number, lng2: number): number;\n}\n\nexport type ImageModule = {\n default: string;\n};","import React, {Fragment, ReactNode, useState} from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport {Row} from \"antd\";\n\nimport {ChartTranslateStrings} from \"./helper\";\nimport PriceStatisticChart from \"./PriceStatisticChart\";\nimport {LineChartData} from \"lib/graphql/queries/PriceStatistic/types\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\nimport CardWrapper from \"components/_common/CardWrapper\";\n\nimport \"./style.scss\";\n\ninterface AnalyticsComponentProps {\n loading: boolean;\n fuelTypes: Array;\n ownerStation: string;\n Filters: ReactNode;\n analytics: Array;\n}\n\nexport interface ScrollBarValue {\n start: number | null;\n end: number | null;\n}\n\nconst AnalyticsComponent: React.FC = ({\n loading,\n fuelTypes,\n analytics,\n ownerStation,\n Filters,\n}) => {\n const {t} = useTranslation();\n const title = t('analytics.title');\n const translate: ChartTranslateStrings = {\n firstInput: \"analytics.chart.wholesaleFilter.myWholesalePlaceholder\",\n secondInput: \"\",\n thirdInput: \"analytics.chart.filter.ownGasStation\"\n };\n const [scrollBarValue, setScrollBarValue] = useState({\n start: null,\n end: null,\n } as ScrollBarValue);\n\n\n\n return (\n \n \n\n \n \n {Filters}\n\n \n \n \n \n );\n};\n\nexport default AnalyticsComponent;\n","import React from \"react\";\nimport {Select, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {filterAnalyticsSelect, getGasStationTitle} from \"lib/helpers\";\nimport {GasStationsItem} from \"lib/graphql/queries/GasStations/gasStations\";\nimport StationStatusIcon from \"components/_common/StationStatusIcon\";\n\nimport \"./style.scss\";\n\nconst {Title} = Typography;\nconst {Option} = Select;\n\ninterface OwnerStationFilterProps {\n data: Array;\n loading: boolean;\n showSearch: boolean;\n ownerStation: string;\n setOwnerStation: (value: (((prevState: string) => string) | string)) => void\n}\n\nconst OwnStationFilter: React.FC = ({\n data,\n loading,\n showSearch,\n setOwnerStation,\n ownerStation\n}) => {\n const {t} = useTranslation();\n\n return (\n
\n \n {t(\"analytics.chart.filter.myStation\")}\n \n\n setOwnerStation(val.toString())}\n >\n {data.map((item) => {\n const label = getGasStationTitle(item.name, item.number);\n\n return (\n \n {label}\n \n\n {\" \"}\n ({item.address})\n \n )\n }\n )}\n \n
\n )\n};\n\nexport default OwnStationFilter;\n","import React from \"react\";\nimport {Select, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {filterSelect} from \"lib/helpers\";\nimport {actualPriceHeaders} from \"lib/helpers/fuelTypes\";\n\nconst {Title, Paragraph} = Typography;\nconst {Option} = Select;\n\ninterface FuelTypesFilterProps {\n loading: boolean;\n fuelTypes: Array;\n setFuelTypes: (value: (((prevState: Array) => Array) | Array)) => void\n}\n\nconst FuelTypesFilter: React.FC = ({\n loading,\n fuelTypes,\n setFuelTypes\n}) => {\n const {t} = useTranslation();\n const selectData = ['A0100', ...actualPriceHeaders];\n\n return (\n
\n \n {t(\"analytics.chart.filter.fuelTypes\")}\n \n\n \n {selectData.map((item) =>\n \n {t(`reports.actualPrice.analyticsFuel.${item}`)}\n \n )}\n \n\n \n {t(\"analytics.chart.filter.fuelTypesSecondary\")}\n \n
\n )\n};\n\nexport default FuelTypesFilter;\n","import React, {ReactNode} from \"react\";\nimport {Empty} from \"antd\";\n\ninterface NoContentProps {\n description?: ReactNode;\n}\n\nconst NoContent: React.FC = ({description}) => {\n return (\n \n )\n};\n\nexport default NoContent;\n","import React, {useEffect} from \"react\";\nimport {Select, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport NoContent from \"components/_common/NoContent\";\nimport StationStatusIcon from \"components/_common/StationStatusIcon\";\nimport {filterAnalyticsSelect} from \"lib/helpers\";\nimport {GasStationsItem} from \"lib/graphql/queries/GasStations/gasStations\";\n\ninterface FuelTypesFilterProps {\n owner: string;\n loading: boolean;\n showSearch: boolean;\n gasStations: Array;\n data: Array;\n setGasStations: (value: (((prevState: Array) => Array) | Array)) => void;\n}\n\nconst {Option} = Select;\nconst {Paragraph, Title} = Typography;\n\nconst GasStationsFilter: React.FC = ({\n data,\n owner,\n loading,\n showSearch,\n gasStations,\n setGasStations\n}) => {\n const {t} = useTranslation();\n const noContent = (\n {t(\"analytics.chart.noInfo\")}
}/>\n );\n\n useEffect(() => {\n setGasStations([]);\n }, [owner]);\n\n return (\n
\n \n {t(\"analytics.chart.filter.gasStations\")}\n \n\n {\n setGasStations(val)\n }}\n notFoundContent={noContent}\n showSearch={showSearch}\n filterOption={filterAnalyticsSelect}\n optionLabelProp=\"label\"\n >\n {data.map((item) => {\n const label = `${item.name} ${item.number ? `№${item.number}` : ''}`;\n\n return (\n \n {label}\n\n \n\n {\" \"}\n\n ({item.address})\n \n )\n })}\n \n\n \n {t(\"analytics.chart.filter.gasStationsSecondary\")}\n \n
\n )\n};\n\nexport default GasStationsFilter;\n","import gql from \"graphql-tag\";\n\nexport const ANALYTICS_GAS_STATIONS = gql`\n query AnalyticGasStations {\n userProfile {\n id\n customer {\n id\n name\n gasStations {\n items {\n id\n name\n number\n address\n status\n dynamicPricing\n fuelPrices {\n product {\n id\n code\n }\n }\n }\n total\n }\n }\n }\n }\n`;\n\nexport default ANALYTICS_GAS_STATIONS;\n","import gql from \"graphql-tag\";\n\nexport const ANALYTICS_COMPETITORS = gql`\n query AnalyticGasStations($id: ID!) {\n gasStation(id: $id) {\n id\n competitors {\n id\n name\n number\n address\n status\n dynamicPricing\n }\n \n }\n }\n`;\n\nexport default ANALYTICS_COMPETITORS;\n","import React, {useEffect, useState} from \"react\";\nimport {Col} from \"antd\";\nimport {useQuery, useLazyQuery} from \"@apollo/react-hooks\";\n\nimport OwnStationFilter from \"./OwnStationFilter\";\nimport FuelTypesFilter from \"./FuelTypesFilter\";\nimport GasStationsFilter from \"./GasStationsFilter\";\nimport {AnalyticsPaginationInput} from \"lib/graphql/queries/PriceStatistic/types\";\nimport ANALYTICS_GAS_STATIONS from \"lib/graphql/queries/PriceStatistic/AnalyticsGasStations\";\nimport ANALYTICS_COMPETITORS from \"lib/graphql/queries/PriceStatistic/AnalyticsCompetitors\";\nimport {GasStationsItem, UserProfileGasStations} from \"lib/graphql/queries/GasStations/gasStations\";\nimport {GasStationProfile, GasStationVariables} from \"lib/graphql/queries/GasStation/gasStation\";\n\ninterface AnalyticsFiltersProps {\n ownerStation: string;\n fuelTypes: Array\n gasStations: Array\n setOwnerStation: (value: (((prevState: string) => string) | string)) => void\n setFuelTypes: (value: (((prevState: Array) => Array) | Array)) => void\n setGasStations: (value: (((prevState: Array) => Array) | Array)) => void\n}\n\nconst AnalyticsFilters: React.FC = ({\n ownerStation,\n setOwnerStation,\n setGasStations,\n gasStations,\n setFuelTypes,\n fuelTypes\n}) => {\n const [own, setOwn] = useState>([]);\n const [firstLoad, setFirstLoad] = useState(false);\n const [showSearch, setShowSearch] = useState(true);\n const [competitors, setCompetitors] = useState>([]);\n const {data, loading} = useQuery(ANALYTICS_GAS_STATIONS);\n\n const [\n getCompetitors,\n {\n data: competitorsData,\n loading: competitorsLoading\n }\n ] = useLazyQuery(ANALYTICS_COMPETITORS);\n\n useEffect(() => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 968) {\n setShowSearch(false);\n }\n }, []);\n\n useEffect(() => {\n if (data) {\n const {items} = data.userProfile.customer.gasStations;\n\n setOwn(items);\n\n if (items.length) {\n setOwnerStation(items[0].id.toString());\n setFirstLoad(true);\n }\n\n }\n }, [data]);\n\n useEffect(() => {\n if (ownerStation.length) {\n getCompetitors({\n variables: {\n id: ownerStation\n }\n })\n }\n }, [ownerStation]);\n\n useEffect(() => {\n if (competitorsData && ownerStation.length) {\n setCompetitors(competitorsData.gasStation.competitors || [])\n }\n\n }, [competitorsData, ownerStation]);\n\n useEffect(() => {\n if (firstLoad && data) {\n const {items} = data.userProfile.customer.gasStations;\n\n setFirstLoad(false);\n\n items[0].fuelPrices.length && setFuelTypes([items[0].fuelPrices[0].product.code])\n }\n }, [firstLoad]);\n\n return (\n \n \n \n \n \n )\n};\n\nexport default AnalyticsFilters;\n","import React, {useEffect, useMemo, useRef, useState} from \"react\";\nimport debounce from \"lodash.debounce\";\nimport {useLazyQuery} from '@apollo/react-hooks';\n\nimport PriceStatisticPage from \"lib/graphql/queries/PriceStatistic\";\nimport {AnalyticsData, LineChartData, StatisticInput} from \"lib/graphql/queries/PriceStatistic/types\";\nimport AnalyticsComponent from \"components/PriceStatisticComponent\";\nimport AnalyticsFilters from \"components/PriceStatisticComponent/AnalyticsFilters\";\n\nconst AnalyticsContainer: React.FC = () => {\n const [ownerStation, setOwnerStation] = useState('');\n const [fuelTypes, setFuelTypes] = useState>([]);\n const [gasStations, setGasStations] = useState>([]);\n const [analytics, setAnalytics] = useState>([]);\n\n const [getStatistic, {data, loading}] = useLazyQuery(PriceStatisticPage);\n\n const getStatisticRef = useRef(debounce((gasStationIds, productCode) => {\n getStatistic({\n variables: {\n input: {\n gasStationId: gasStationIds,\n productCode: productCode,\n }\n }\n })\n }, 200)).current;\n\n useEffect(() => {\n if (ownerStation.length && fuelTypes.length) {\n getStatisticRef([ownerStation, ...gasStations], fuelTypes);\n }\n\n }, [ownerStation, gasStations, fuelTypes]);\n\n useEffect(() => {\n if (data) {\n const lines: Array = [];\n\n data.statistic.forEach((statistic) => {\n lines.push({\n id: `${statistic.product.name} ${statistic.gasStation.name}`,\n data: statistic.data\n })\n });\n\n setAnalytics(lines);\n }\n }, [data]);\n\n const filters = useMemo(() => {\n return \n\n }, [fuelTypes, gasStations, ownerStation]);\n\n return (\n \n )\n};\n\nexport default AnalyticsContainer;\n","import React from \"react\";\nimport AnalyticsContainer from \"containers/PriceStatisticContainer\";\n\nconst AnalyticsPage: React.FC = () => {\n return ;\n};\n\nexport default AnalyticsPage;\n","import gql from \"graphql-tag\";\n\nconst PersonalGasStationFragment = gql`\n fragment PersonalGasStationFragment on GasStation {\n id\n name\n number\n address\n status\n fuelPrices {\n product {\n id\n code\n name\n fullName\n }\n }\n location {\n latitude\n longitude\n }\n \n }\n `;\n\nexport default PersonalGasStationFragment;\n","import gql from \"graphql-tag\";\nimport PersonalGasStationFragment from 'lib/graphql/fragments/GasStation/personalGasStation';\n\nconst PERSONAL_GAS_STATIONS_LIST= gql`\n query userProfile($pagination: PaginationInput!) {\n userProfile {\n id\n customer {\n id\n gasStations(pagination: $pagination) {\n items {\n ...PersonalGasStationFragment\n }\n total\n }\n }\n }\n }\n ${PersonalGasStationFragment}\n`;\n\nexport default PERSONAL_GAS_STATIONS_LIST;\n","import React, { Fragment } from \"react\";\nimport { Input } from \"antd\";\nimport { SearchOutlined } from \"@ant-design/icons/lib\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface Props {\n setSearchValue: (value: ((prevState: string) => string) | string) => void;\n}\n\nconst ActualPriceSearch: React.FC = ({ setSearchValue }) => {\n const { t } = useTranslation();\n\n const handleInputChange = (event: React.ChangeEvent) => {\n setSearchValue(event.target.value);\n };\n\n return (\n \n }\n />\n \n );\n};\n\nexport default ActualPriceSearch;\n","import React, { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Tag } from 'antd';\nimport { GasStationType } from './types';\nimport { gas, petrol } from \"lib/helpers/fuelTypes\";\n\nimport \"./style.scss\";\n\ninterface Props {\n tagsData: Array\n}\n\n\n\nconst GasStationTypes: React.FC = ({tagsData}) => {\n const {t} = useTranslation();\n const tags: Array = [];\n let key = 550;\n\n tagsData.forEach((item) => {\n const code = item.code || 'fake';\n const classes = ['gas-station-types__item'];\n let colorClass = 'grey-tag';\n\n if (petrol.includes(t(`${code}`))) {\n colorClass = 'green-tag';\n }\n\n if (gas.includes(t(`${code}`))) {\n colorClass = 'blue-tag'\n }\n\n classes.push(colorClass);\n\n tags.push(\n \n { t(`reports.personalPrice.fuel.${item.code}`) } \n )\n key += 10;\n });\n\n return (\n
\n {tags}\n
\n )\n};\n\nexport default GasStationTypes;\n\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Table } from 'antd';\n\nimport { GasStationColumnType, GasStationsTableProps } from 'lib/types';\nimport GasStationTypes from 'components/_common/PersonalGasStations/GasStationTypes';\nimport { getGasStationNumber } from 'lib/helpers';\n\ninterface Props {\n headers: Array;\n loading: boolean;\n tableData: Array;\n tableProps?: GasStationsTableProps;\n}\n\nconst GasStationsTable: React.FC = ({\n loading,\n tableData,\n tableProps,\n}) => {\n\n const {t} = useTranslation();\n const width = window.innerWidth;\n let statusWidth: string | number = 110;\n let fuelTypesWidth: string | number = 200;\n\n const brandHeaderSize = (): number | string => {\n if (width < 500) {\n return '50vw';\n }\n\n return 120;\n };\n\n let columns: ColumnsType = [\n {\n title: t('gasStation.list.tabs.brand'),\n width: brandHeaderSize(),\n dataIndex: 'brandName',\n key: 'brandName',\n fixed: 'left',\n render: (value, item) => (\n
\n {value}{`${getGasStationNumber(item.number)}` }\n
\n
\n {item.brandAddress}\n
\n
\n ),\n },\n {\n title: t('gasStation.list.tabs.status'),\n width: statusWidth,\n dataIndex: 'status',\n key: 'status',\n },\n // TODO: Нужно как-то угадывать ширину блока fuelTypes в зависимости от количества элементов\n {\n title: t('gasStation.list.tabs.fuelTypes'),\n width: fuelTypesWidth,\n dataIndex: 'fuelTypes',\n key: 'fuelTypes',\n render: (value => ()),\n },\n ];\n\n if (tableProps) {\n\n if (tableProps.hasOwnProperty('columnWidth')) {\n const { columnWidth } = tableProps;\n\n if (columnWidth.status) {\n statusWidth = columnWidth.status;\n }\n\n if (columnWidth.fuelTypes) {\n fuelTypesWidth = columnWidth.fuelTypes;\n }\n }\n\n if (tableProps.hasOwnProperty('forProfile') && tableProps.forProfile) {\n columns = [\n {\n title: t('gasStation.list.tabs.brand'),\n width: brandHeaderSize(),\n dataIndex: 'brandName',\n key: 'brandName',\n fixed: 'left',\n render: (value, item) => (\n
\n {value}{`${getGasStationNumber(item.number)}` }\n
\n
\n {item.brandAddress}\n
\n
\n ),\n },\n {\n title: t('gasStation.list.tabs.status'),\n width: statusWidth,\n dataIndex: 'status',\n key: 'status',\n },\n {\n title: t('gasStation.list.tabs.fuelTypes'),\n width: fuelTypesWidth,\n dataIndex: 'fuelTypes',\n key: 'fuelTypes',\n render: (value => ()),\n },\n ];\n }\n }\n\n const scrollCoordinates = () => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 500) {\n return {\n x: 500,\n y: 500,\n };\n }\n\n return {\n x: 900,\n y: 500,\n };\n };\n\n return (\n \n );\n}\n\nexport default GasStationsTable;","import React, { Fragment, useMemo, useState } from \"react\";\nimport { Pagination } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { GasStationColumnType } from \"lib/types\";\nimport { gas, diesel, petrol } from \"lib/helpers/fuelTypes\";\nimport ActualPriceExtras from \"components/ActualPriceComponent/ActualPriceExtras\";\nimport ActualPriceSearch from \"components/ActualPriceComponent/_extras/ActualPriceSearch\";\nimport { DEFAULT_PAGINATION_SIZE } from \"lib/helpers\";\nimport PaginationSize from \"components/_common/Pagination/PaginationSize\";\nimport GasStationsTable from \"components/_common/PersonalGasStations\";\nimport CardWrapper from \"components/_common/CardWrapper\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\n\nimport \"./style.scss\";\n\ninterface Props {\n total: number;\n loading: boolean;\n defaultPageSize: number;\n setListOffset: (value: ((prevState: number) => number) | number) => void;\n setDefaultPageSize: (value: ((prevState: number) => number) | number) => void;\n tableData: Array;\n setSearchValue: (value: ((prevState: string) => string) | string) => void;\n currentPage: number;\n setCurrentPage: (value: ((prevState: number) => number) | number) => void;\n}\n\nconst PersonalGasStationsComponent: React.FC = ({\n loading,\n total,\n tableData,\n defaultPageSize,\n setDefaultPageSize,\n setListOffset,\n setSearchValue,\n currentPage,\n setCurrentPage,\n}) => {\n const { t } = useTranslation();\n\n // const [searchValue, setSearchValue] = useState(\"\")\n const [tableHeaders, setTableHeaders] = useState>([\n ...petrol,\n ...diesel,\n ...gas,\n ]);\n const title: string = t(\"gasStation.list.title\");\n\n const controlPanel = useMemo(\n () => (\n
\n
\n \n
\n
\n \n
\n
\n ),\n []\n );\n\n const paginationChange = (page: number) => {\n setCurrentPage(page);\n setListOffset(() => DEFAULT_PAGINATION_SIZE * (page - 1));\n };\n\n const pagination = useMemo(\n () => (\n
\n \n \n
\n ),\n [total, currentPage, defaultPageSize]\n );\n\n const table = useMemo(\n () => (\n \n ),\n [total, tableData, loading]\n );\n\n return (\n \n \n \n {controlPanel}\n\n {table}\n\n {pagination}\n \n \n );\n};\n\nexport default PersonalGasStationsComponent;\n","import React, { useState, useEffect } from \"react\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { DEFAULT_PAGINATION_SIZE } from \"lib/helpers\";\nimport { UserProfileGasStations } from \"lib/graphql/queries/PersonalGasStation/PersonalGasStations\";\nimport PERSONAL_GAS_STATIONS_LIST from \"lib/graphql/queries/PersonalGasStation\";\nimport { GasStationPagination } from \"lib/graphql/globalTypes\";\nimport { GasStationColumnType, GasStationType } from \"lib/types\";\nimport PersonalGasStationsComponent from \"components/PersonalGasStationsComponent\";\nimport { petrol, diesel, gas } from \"lib/helpers/fuelTypes\";\n\nconst PersonalGasStationsContainer: React.FC = () => {\n const { t } = useTranslation();\n const tempGasStations: Array = [];\n const [gasStations, setGasStations] = useState>(\n []\n );\n const [listOffset, setListOffset] = useState(0);\n const [pageTotal, setPageTotal] = useState(0);\n const [defaultPageSize, setDefaultPageSize] = useState(\n DEFAULT_PAGINATION_SIZE\n );\n const [currentPage, setCurrentPage] = useState(1);\n const [searchValue, setSearchValue] = useState(\"\");\n const [tableData, setTableData] = useState>([]);\n const hashObject: { [key: string]: number } = {};\n [...petrol, ...diesel, ...gas].forEach(\n (item, index) => (hashObject[item] = index + 1)\n );\n\n const { data, loading, refetch } = useQuery<\n UserProfileGasStations,\n GasStationPagination\n >(PERSONAL_GAS_STATIONS_LIST, {\n variables: {\n pagination: {\n limit: 150,\n offset: listOffset,\n },\n },\n });\n const statuses = {\n ACTIVE: t(\"gasStation.personalArea.statuses.active\"),\n RECONSTRUCTION: t(\"gasStation.personalArea.statuses.reconstruction\"),\n UNDER_CONSTRUCTION: t(\"gasStation.personalArea.statuses.underConstruction\"),\n CLOSED: t(\"gasStation.personalArea.statuses.closed\"),\n };\n\n useEffect(() => {\n void refetch();\n }, [listOffset, defaultPageSize]);\n\n useEffect(() => {\n if (!loading && data) {\n setGasStations([]);\n let key = 500;\n\n setPageTotal(data.userProfile.customer.gasStations.total);\n\n // TODO: Мне не нравится, можно будет отрефакторить\n data.userProfile.customer.gasStations.items.forEach((item) => {\n const result: { [key: number]: GasStationType } = {};\n\n item.fuelPrices.forEach((fuel) => {\n if (!fuel.product.code) {\n return;\n }\n const code = hashObject[String(fuel.product.code)];\n if (code) {\n result[code] = fuel.product;\n }\n });\n const fuelTypes = Object.values(result);\n tempGasStations.push({\n id: item.id,\n key,\n brandName: item.name,\n number: item.number,\n brandAddress: item.address,\n managementCompany: item.managementCompany?.name || \"\",\n status: item.hasOwnProperty(\"status\") ? statuses[item.status] : \"\",\n fuelTypes,\n });\n\n key += 10;\n });\n setGasStations(tempGasStations);\n }\n }, [data, listOffset, pageTotal]);\n\n useEffect(() => {\n const tableData = [...gasStations];\n if (searchValue) {\n const filtered = tableData.filter(\n (it) =>\n it?.number?.toLowerCase()?.includes(searchValue?.toLowerCase()) ||\n it?.brandAddress\n ?.toLowerCase()\n ?.includes(searchValue?.toLowerCase()) ||\n it?.brandName?.toLowerCase()?.includes(searchValue?.toLowerCase())\n );\n setTableData(filtered);\n setCurrentPage(1);\n setListOffset(0);\n }\n if (gasStations && !searchValue) {\n const slicedData: Array = gasStations.slice(\n 0,\n defaultPageSize\n );\n\n setTableData(slicedData);\n }\n }, [searchValue, listOffset, defaultPageSize, gasStations]);\n\n return (\n \n );\n};\n\nexport default PersonalGasStationsContainer;\n","import React from 'react';\nimport PersonalGasStationsContainer from 'containers/PersonalGasStationsContainer';\n\nconst PersonalGasStationsPage: React.FC = () => {\n\n return (\n \n );\n}\n\nexport default PersonalGasStationsPage;","import React, {useState} from \"react\";\nimport { Menu } from \"antd\";\nimport { Form, Input, Button, Switch } from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport \"./style.scss\";\n\nconst UserSettingsContainer: React.FC = () => {\n const {t} = useTranslation();\n const [notifications, setNotifications] = useState(false);\n\n const handleSubmit = () => {\n document.location.pathname = '/';\n };\n\n const switchChange = (checked: boolean) => {\n setNotifications(checked);\n };\n\n const menuRender = (\n \n \n {t('user.settingsMenu.basicSettings')}\n \n \n {t('user.settingsMenu.otherSettings')}\n \n \n );\n\n return (\n
\n {menuRender}\n
\n
\n

{t('user.settingsMenu.basicSettings')}

\n
{t('user.settingsItem.mail') + ':'}
\n \n \n \n
{t('user.settingsItem.notification')}
\n \n \n \n \n \n \n
\n
\n
\n );\n};\n\nexport default UserSettingsContainer;\n","import React from \"react\";\nimport UserSettingsContainer from \"containers/UserSettingsContainer\";\n\nconst UserSettingsPage: React.FC = () => {\n return \n};\n\nexport default UserSettingsPage;\n","import React, {useEffect} from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport {Select, Typography} from \"antd\";\n\nimport NoContent from \"components/_common/NoContent\";\nimport {filterBasisSelect} from \"lib/helpers\";\nimport {FilterBasis} from \"lib/graphql/queries/WholesaleStats/types\";\n\nconst {Option} = Select;\nconst {Title, Paragraph} = Typography;\n\ninterface SellerFilterProps {\n loading: boolean;\n showSearch: boolean;\n basis: string;\n traders: Array\n filterSeller: Array;\n setTraders: (value: (((prevState: Array) => Array) | Array)) => void\n}\n\nconst SellerFilter: React.FC = ({\n loading,\n showSearch,\n basis,\n traders,\n filterSeller,\n setTraders\n}) => {\n const {t} = useTranslation();\n const noContent = (\n {t(\"analytics.chart.noInfo\")}} />\n );\n\n useEffect(() => {\n setTraders([]);\n }, [basis]);\n\n return (\n
\n \n {t(\"analytics.chart.wholesaleFilter.seller\")}\n \n\n {setTraders(val)}}\n notFoundContent={noContent}\n showSearch={showSearch}\n filterOption={filterBasisSelect}\n >\n {filterSeller.map((item) =>\n \n {item.label}\n \n )}\n \n\n \n {t(\"analytics.chart.wholesaleFilter.sellerPlaceholder\")}\n \n
\n )\n};\n\nexport default SellerFilter;\n","import React from \"react\";\nimport {Select, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {filterBasisSelect} from \"lib/helpers\";\nimport {FilterBasis} from \"lib/graphql/queries/WholesaleStats/types\";\n\nconst {Title} = Typography;\nconst {Option} = Select;\n\ninterface TankFarmFilterProps {\n data: Array;\n loading: boolean;\n showSearch: boolean;\n setBasis: (value: (((prevState: string) => string) | string)) => void\n}\n\nconst TankFarmFilter: React.FC = ({\n data,\n loading,\n showSearch,\n setBasis\n}) => {\n const {t} = useTranslation();\n\n return (\n
\n \n {t(\"analytics.chart.wholesaleFilter.myWholesale\")}\n \n\n setBasis(val.toString()) }\n showSearch={showSearch}\n filterOption={filterBasisSelect}\n >\n {data.map((item) =>\n \n { item.label }\n \n )}\n \n
\n )\n};\n\nexport default TankFarmFilter;\n","import React, {useEffect, useState} from \"react\";\nimport {Select, Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {filterSelect} from \"lib/helpers\";\nimport {Product} from \"lib/graphql/queries/CustomerStations/__generated__/customerStations\";\n\nconst {Title, Paragraph} = Typography;\nconst {Option} = Select;\n\ninterface NomenclatureFilterProps {\n loading: boolean;\n products: Array;\n traders: Array;\n filterNomenclature: {[p: string]: Array};\n setProducts: (value: (((prevState: Array) => Array) | Array)) => void\n}\n\nconst NomenclatureFilter: React.FC = ({\n loading,\n products,\n traders,\n filterNomenclature,\n setProducts\n}) => {\n const {t} = useTranslation();\n const [selectData, setSelectData] = useState>([]);\n\n useEffect(() => {\n const map = new Map();\n const result: Array = [];\n let tempData: Array = [];\n\n traders.forEach((trader) => {\n tempData = tempData.concat(filterNomenclature[trader]);\n });\n\n for (const item of tempData) {\n if (!map.has(item.id)) {\n map.set(item.id, true);\n\n result.push({\n id: item.id,\n name: item.name,\n fullName: item.fullName,\n code: item.code\n });\n }\n }\n\n setSelectData(result);\n\n }, [traders]);\n\n return (\n
\n \n {t(\"analytics.chart.wholesaleFilter.fuelTypes\")}\n \n\n \n {selectData.map((item) =>\n \n {t(`reports.actualPrice.analyticsFilters.${item.code}`)}\n \n )}\n \n\n \n {t(\"analytics.chart.wholesaleFilter.fuelTypesPlaceholder\")}\n \n
\n );\n};\n\nexport default NomenclatureFilter;\n","import gql from \"graphql-tag\";\n\nconst WHOLESALE_STATS_BASISES = gql`\n query basises {\n userProfile {\n id\n email\n customer {\n id\n basises {\n items{\n id\n name\n assortment {\n id\n trader {\n id\n name\n }\n product {\n id\n code\n name\n fullName\n }\n }\n }\n total\n }\n }\n }\n }\n`;\n\nexport default WHOLESALE_STATS_BASISES;\n","import React, {useEffect, useState} from \"react\";\nimport {Col} from \"antd\";\nimport {useQuery} from \"@apollo/react-hooks\";\n\nimport SellerFilter from \"./SellerFilter\";\nimport TankFarmFilter from \"./TankFarmFilter\";\nimport NomenclatureFilter from \"./NomenclatureFilter\";\nimport WHOLESALE_STATS_BASISES from \"lib/graphql/queries/WholesaleStats/WholesaleStatsBasises\";\nimport {Product} from \"lib/graphql/queries/CustomerStations/__generated__/customerStations\";\nimport {FilterBasis, WholesaleStatsBasis, WholesaleStatsBasisInput} from \"lib/graphql/queries/WholesaleStats/types\";\n\ninterface BasisStatsFilters {\n loading: boolean;\n basis: string;\n traders: Array;\n products: Array;\n setBasis: (value: (((prevState: string) => string) | string)) => void;\n setTraders: (value: (((prevState: Array) => Array) | Array)) => void;\n setProducts: (value: (((prevState: Array) => Array) | Array)) => void;\n}\n\nconst BasisStatsFilters: React.FC = ({\n loading,\n basis,\n traders,\n products,\n setBasis,\n setTraders,\n setProducts\n}) => {\n const [filterBasis, setFilterBasis] = useState>([]);\n const [filterSeller, setFilterSeller] = useState>([]);\n const [filterNomenclature, setFilterNomenclature] = useState<{[key: string]: Array}>({});\n const [showSearch, setShowSearch] = useState(true);\n\n const {\n data: dataBasis,\n loading: basisLoading\n } = useQuery(WHOLESALE_STATS_BASISES);\n\n useEffect(() => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 968) {\n setShowSearch(false);\n }\n }, []);\n\n useEffect(() => {\n if (dataBasis) {\n setFilterBasis(dataBasis.userProfile.customer.basises.items.map((item) => (\n {\n value: item.id,\n label: item.name\n }\n )));\n }\n }, [dataBasis]);\n\n useEffect(() => {\n if (!dataBasis || !filterBasis.length) {\n return;\n }\n\n const assortmentDictionary: {[key: string]: FilterBasis} = {};\n const tempProducts: {[key: string]: Array} = {};\n const {items: basisItems} = dataBasis.userProfile.customer.basises;\n\n const current = basisItems.find((item) => item.id === basis);\n\n // формируем список traders && products\n current && current.assortment.forEach((item) => {\n const traderID = item.trader.id;\n\n assortmentDictionary[traderID] = {\n value: traderID,\n label: item.trader.name\n };\n\n if (Array.isArray(tempProducts[traderID])) {\n tempProducts[traderID] = [...tempProducts[traderID], item.product]\n } else {\n tempProducts[traderID]= [item.product];\n }\n });\n\n setFilterSeller(Object.values(assortmentDictionary));\n setFilterNomenclature(tempProducts);\n setProducts([]);\n\n }, [basis]);\n\n return (\n \n \n \n \n \n )\n};\n\nexport default BasisStatsFilters\n","import React, {Fragment, ReactNode, useState} from \"react\";\nimport { Row } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\n\nimport PriceStatisticChart from \"components/PriceStatisticComponent/PriceStatisticChart\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\nimport CardWrapper from \"components/_common/CardWrapper\";\nimport { LineChartData } from \"lib/graphql/queries/PriceStatistic/types\";\nimport { ChartTranslateStrings } from \"../PriceStatisticComponent/helper\";\n\ninterface PriceStatisticBasisProps {\n loading: boolean;\n basis: string;\n products: Array;\n traders: Array;\n data: Array;\n Filters: ReactNode;\n}\n\nexport interface ScrollBarValue {\n start: number | null;\n end: number | null;\n}\n\nconst PriceStatisticBasisComponent: React.FC = ({\n Filters,\n loading,\n data,\n basis,\n products,\n traders,\n}) => {\n const { t } = useTranslation();\n const title = t(\"analytics.title\");\n const translate: ChartTranslateStrings = {\n firstInput: \"analytics.chart.wholesaleFilter.myWholesalePlaceholder\",\n secondInput: \"analytics.chart.wholesaleFilter.sellerPlaceholder\",\n thirdInput: \"analytics.chart.wholesaleFilter.fuelTypesPlaceholder\",\n };\n\n const [scrollBarValue, setScrollBarValue] = useState({\n start: null,\n end: null,\n } as ScrollBarValue);\n\n\n return (\n \n \n\n \n \n {Filters}\n\n \n \n \n \n );\n};\n\nexport default PriceStatisticBasisComponent;\n","import gql from \"graphql-tag\";\n\nconst WHOLESALE_STATS = gql`\n query wholesaleStats($input: WholesaleStatsInput!){\n wholesaleStats(input: $input) {\n trader {\n id\n name\n shortName\n }\n product {\n id\n code\n name\n fullName\n }\n data {\n date\n value\n }\n }\n }\n`;\n\nexport default WHOLESALE_STATS;\n","import React, {useEffect, useRef, useState} from \"react\";\nimport {useLazyQuery} from \"@apollo/react-hooks\";\nimport debounce from \"lodash.debounce\";\n\nimport BasisStatsFilters from \"components/PriceStatisticBasisComponent/BasisStatsFilters\";\nimport PriceStatisticBasisComponent from \"components/PriceStatisticBasisComponent\";\nimport WHOLESALE_STATS from \"lib/graphql/queries/WholesaleStats\";\nimport {LineChartData} from \"lib/graphql/queries/PriceStatistic/types\";\nimport {WholesaleStats, WholesaleStatsInput} from \"lib/graphql/queries/WholesaleStats/types\";\n\nconst PriceStatisticBasisContainer: React.FC = () => {\n const [basis, setBasis] = useState(\"\");\n const [traders, setTraders] = useState>([]);\n const [products, setProducts] = useState>([]);\n const [analytics, setAnalytics] = useState>([]);\n\n const [\n getStatistic,\n {\n data: statsData,\n loading: statsLoading\n }\n ] = useLazyQuery(WHOLESALE_STATS);\n\n const getStatisticRef = useRef(debounce((inputBasis, traders, products) => {\n getStatistic({\n variables: {\n input: {\n basis: inputBasis,\n traders,\n products\n }\n }\n })\n }, 200)).current;\n\n useEffect(() => {\n if (basis.length && products.length) {\n getStatisticRef(basis, traders, products);\n }\n\n }, [basis, traders, products]);\n\n useEffect(() => {\n if (statsData) {\n const lines: Array = [];\n\n statsData.wholesaleStats.forEach((stat) => {\n lines.push({\n id: `${stat.product.name} ${stat.trader.name}`,\n data: stat.data\n })\n });\n\n setAnalytics(lines);\n }\n }, [statsData]);\n\n const Filters = (\n \n );\n\n return (\n \n )\n};\n\nexport default PriceStatisticBasisContainer;\n","import React from \"react\";\n\nimport PriceStatisticBasisContainer from \"containers/PriceStatisticBasisContainers\";\n\nconst PriceStatisticBasisPage: React.FC = () => {\n return (\n \n );\n};\n\nexport default PriceStatisticBasisPage;\n","import gql from \"graphql-tag\";\n\nconst RECOMMENDED_PRICES = gql`\n query userProfile {\n userProfile {\n id\n customer {\n id\n gasStations {\n items {\n id\n name\n number\n address\n region {\n id\n }\n fuelPrices {\n product {\n id\n code\n name\n fullName\n }\n price\n delta\n recommendedPrice\n recommendedAt\n }\n }\n total\n }\n pricingEnabled\n pricingPresets {\n state\n strategy\n priority\n rounding\n }\n }\n }\n }\n`;\n\nexport default RECOMMENDED_PRICES;\n","import gql from \"graphql-tag\";\n\nconst UPDATE_PRICING_PRESETS = gql`\n mutation updatePricingPresets($input: PricingPresetsInput!) {\n updatePricingPresets(input: $input) {\n state\n strategy\n priority\n rounding\n }\n }\n`;\n\nexport default UPDATE_PRICING_PRESETS;\n","import React from \"react\";\nimport {ProductData} from \"../../../ActualPriceComponent/types\";\nimport ActualPriceCell from \"./\";\n\n\ninterface RecommendedPriceCellProps {\n value: ProductData;\n header: string;\n}\n\nconst RecommendedPriceCell: React.FC = ({\n value\n}) => {\n return (\n \n \n {value.recommendedPrice && value?.recommendedPrice.toFixed(2)}\n \n \n )\n};\n\nexport default RecommendedPriceCell;\n","import React from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport {Button, Tooltip, Typography} from \"antd\";\nimport {CloseOutlined, PaperClipOutlined, UploadOutlined} from \"@ant-design/icons\";\n\nconst {Text} = Typography;\n\ninterface Props {\n file?: File;\n clearFile: () => void;\n}\n\nconst SizeOfSalesButton: React.FC = ({\n file,\n clearFile\n}) => {\n const {t} = useTranslation();\n\n if (!file) {\n return (\n \n );\n }\n\n return (\n }\n >\n\n \n \n {file?.name}\n \n \n\n ) => {\n event.stopPropagation();\n clearFile();\n }}\n />\n \n )\n};\n\nexport default SizeOfSalesButton;\n","import React from \"react\";\nimport {InfoCircleOutlined} from \"@ant-design/icons\";\nimport {Tooltip} from \"antd\";\n\nimport \"./style.scss\";\n\ninterface InfoIconTooltipProps {\n title: string\n}\n\nconst InfoIconTooltip: React.FC = ({title}) => {\n return (\n \n \n \n )\n};\n\nexport default InfoIconTooltip;\n","import React from \"react\";\n\nimport InfoIconTooltip from \"components/_common/InfoIconTooltip\";\n\ninterface FilterFormItemLabelProps {\n title: string;\n tooltipText: string;\n}\n\nconst FilterFormItemLabel: React.FC = ({title, tooltipText}) => {\n return (\n <>\n {title}\n \n \n )\n};\n\nexport default FilterFormItemLabel;\n","export const strategyArray = [\"earning\", \"margin\", \"volume\"];\n","import React from \"react\";\nimport * as Yup from \"yup\";\nimport {useFormik} from \"formik\";\nimport {useTranslation} from \"react-i18next\";\nimport {Button, Form, Select, Slider, Upload} from \"antd\";\n\nimport {FilterFormInput} from \"../types\";\nimport SizeOfSalesButton from \"./SizeOfSalesButton\";\nimport FilterFormItemLabel from \"./FilterFormItemLabel\";\nimport {strategyArray} from \"lib/helpers/recommended\";\n\nimport \"./style.scss\";\n\nconst {Option} = Select;\n\ninterface Props {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleSubmit: (params: FilterFormInput, status: any) => void;\n validationSchema: Yup.ObjectSchema;\n initialValues: FilterFormInput;\n loading: boolean;\n}\n\nconst FilterForm: React.FC = ({\n handleSubmit,\n loading,\n initialValues,\n validationSchema\n}) => {\n const {t} = useTranslation();\n\n const {\n handleSubmit: formikHandleSubmit,\n setSubmitting,\n // status,\n touched,\n errors,\n values,\n // handleChange,\n isSubmitting,\n setFieldValue\n } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: handleSubmit,\n });\n\n const clearSizeOfSales = () => void setFieldValue('sizeOfSales', undefined);\n const clearLevelOfMarginality = () => void setFieldValue('levelOfMarginality', undefined);\n\n return(\n {\n formikHandleSubmit();\n setSubmitting(false);\n }}\n >\n\n \n }\n required\n >\n false}\n accept=\".csv\"\n onChange={(e) => {\n void setFieldValue('sizeOfSales', e.file);\n }}\n itemRender={() => null}\n >\n\n \n \n \n\n \n }\n >\n false}\n accept=\".csv\"\n onChange={(e) => {\n void setFieldValue('levelOfMarginality', e.file)\n }}\n itemRender={() => null}\n >\n \n \n \n\n \n }\n required\n >\n void setFieldValue(\"strategy\", value)}\n >\n {strategyArray.map((strat) => (\n \n ))}\n \n \n\n \n }\n >\n void setFieldValue(\"priority\", value)}\n />\n \n\n \n void setFieldValue(\"rounding\", val)}\n allowClear\n >\n {Array.from(Array(10).keys()).map(\n (item) => )\n }\n \n \n\n \n \n {t(\"recommendedPrices.form.submit\")}\n \n \n\n \n )\n};\n\nexport default FilterForm;\n","import React from \"react\";\nimport {useTranslation} from \"react-i18next\";\n\nimport \"./style.scss\";\n\nconst NoData: React.FC = () => {\n const {t} = useTranslation();\n\n return (\n
\n {t(\"recommendedPrices.noData\")}\n
\n )\n};\n\nexport default NoData;\n","import React from \"react\";\nimport {Typography} from \"antd\";\nimport {useTranslation} from \"react-i18next\";\nimport {InfoCircleFilled} from \"@ant-design/icons\"\n\nimport \"./style.scss\";\n\nconst { Title } = Typography;\n\nconst DataLoading: React.FC = () => {\n const {t} = useTranslation();\n\n return (\n
\n \n \n {t(\"recommendedPrices.loading\")}\n \n
\n )\n};\n\nexport default DataLoading;\n","import React from \"react\"\nimport { Spin, Space } from \"antd\";\n\nimport \"./style.scss\";\n\nconst Loading: React.FC = () => {\n return (\n
\n \n \n \n \n
\n );\n}\n\nexport default Loading;","import React from \"react\";\nimport {Table} from \"antd\";\nimport {ColumnsType} from \"antd/lib/table\";\nimport {useVT} from 'virtualizedtableforantd4';\n\nimport NoData from \"./NoData\";\nimport DataLoading from \"./DataLoading\";\nimport Loading from \"components/_common/Loading\";\nimport {ActualPriceTableRow} from \"components/ActualPriceComponent/types\";\nimport {PricingState} from \"lib/graphql/queries/GasStations/gasStations\";\n\ninterface RecommendedPriceTableProps {\n loading: boolean;\n presetStatus: PricingState;\n columns: ColumnsType;\n recommendedData: Array;\n}\n\nconst RecommendedPriceTable: React.FC = ({\n loading,\n columns,\n presetStatus,\n recommendedData\n}) => {\n const [vt] = useVT(() => ({scroll: {y: 600}}), []);\n\n const scrollCoordinates = () => {\n const deviceWidth = window.innerWidth;\n\n if (deviceWidth <= 500) {\n return {\n x: 1000,\n y: 500\n }\n }\n\n return {\n y: \"90vh\"\n };\n };\n\n if (loading) {\n return \n }\n\n if (presetStatus === PricingState.PENDING) {\n return \n }\n\n if (presetStatus === PricingState.EMPTY) {\n return \n }\n\n return (\n \n )\n};\n\nexport default RecommendedPriceTable;\n","import React, {Fragment} from \"react\";\nimport {Button} from \"antd\";\nimport * as Yup from \"yup\";\nimport {DownloadOutlined} from \"@ant-design/icons\"\nimport {useTranslation} from \"react-i18next\";\nimport {ColumnsType} from \"antd/lib/table\";\n\nimport {FilterFormInput} from \"./types\";\nimport FilterForm from \"./FilterForm/FilterForm\";\nimport PageMainHeader from \"components/_common/PageMainHeader\";\nimport CardWrapper from \"components/_common/CardWrapper\";\nimport RecommendedPriceTable from \"./DataRender/RecommendedPriceTable\";\nimport {ActualPriceTableRow} from \"../ActualPriceComponent/types\";\nimport {PricingState} from \"lib/graphql/queries/GasStations/gasStations\";\n\nimport \"./style.scss\"\n\ninterface Props {\n loading: boolean;\n pricingEnabled: boolean;\n status: PricingState;\n columns: ColumnsType;\n initialValues: FilterFormInput;\n validationSchema: Yup.ObjectSchema;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleSubmit: (params: FilterFormInput, status: any) => void;\n recommendedData: Array\n}\n\nconst RecommendedPricesComponent: React.FC = ({\n loading,\n handleSubmit,\n status,\n columns,\n recommendedData,\n initialValues,\n validationSchema\n}) => {\n const {t} = useTranslation();\n\n return (\n \n \n\n
\n \n \n \n
\n\n
\n \n
\n \n
\n\n
\n\n \n\n
\n
\n
\n\n
\n )\n};\n\nexport default RecommendedPricesComponent;\n","import React, {useEffect, useState} from \"react\";\nimport * as Yup from \"yup\";\nimport {useQuery, useMutation} from \"@apollo/react-hooks\";\n\nimport {actualPrices} from \"../ActualPriceContainer/dataMapping\";\nimport {actualPriceHeaders} from \"lib/helpers/fuelTypes\";\nimport {GasStationPagination} from \"lib/graphql/globalTypes\";\nimport {useGasStationColumns} from \"lib/hooks/useGasStationColumns\";\nimport RECOMMENDED_PRICES from \"lib/graphql/queries/RecommendedPrices\";\nimport UPDATE_PRICING_PRESETS from \"lib/graphql/mutations/UpdatePricingPresets\";\nimport {UpdatePresetsInput, UpdatePresetsMutation} from \"lib/types/recommended-prices\";\nimport {PricingState, UserProfileGasStations} from \"lib/graphql/queries/GasStations/gasStations\";\nimport {FilterFormInput} from \"components/RecommendedPricesComponent/types\";\nimport RecommendedPriceCell from \"components/_common/ActualPriceTable/ActualPriceCell/RecommendedPriceCell\";\nimport RecommendedPricesComponent from \"components/RecommendedPricesComponent\";\nimport {ActualPriceTableRow, ProductData} from \"components/ActualPriceComponent/types\";\n\nconst initFormData: FilterFormInput = {\n sizeOfSales: undefined,\n levelOfMarginality: undefined,\n strategy: undefined,\n priority: 0,\n rounding: [],\n};\n\nconst RecommendedPricesContainer: React.FC = () => {\n const [recommendedData, setRecommendedData] = useState>([]);\n const [pricingEnabled, setPricingEnabled] = useState(false);\n const [presetStatus, setPresetStatus] = useState(PricingState.EMPTY);\n const [initialValues, setInitialValues]= useState(initFormData);\n\n const { data, loading } = useQuery(RECOMMENDED_PRICES);\n const [sendRequest, {loading: presetLoading}] = useMutation(UPDATE_PRICING_PRESETS);\n\n const validationSchema: Yup.ObjectSchema = Yup.object().shape({\n sizeOfSales: Yup.mixed().required(\"Ошибка\"),\n priority: Yup.number().required(\"Ошибка\"),\n strategy: Yup.string().required(\"Ошибка\"),\n });\n\n const handleSubmit = async (params: FilterFormInput) => {\n try {\n\n const {strategy, priority, rounding, sizeOfSales, levelOfMarginality} = params;\n\n await sendRequest({\n variables: {\n input: {\n strategy,\n priority,\n rounding: rounding,\n marginsFile: levelOfMarginality,\n volumesFile: sizeOfSales\n }\n }\n }).then((response) => {\n if (response && response.data) {\n const {state, priority, rounding, strategy} = response.data.updatePricingPresets;\n setInitialValues({\n strategy,\n priority,\n rounding: rounding,\n sizeOfSales: undefined,\n levelOfMarginality: undefined,\n });\n\n setPresetStatus(state);\n }\n\n });\n }\n catch (err) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n // const message = 'graphQLErrors' in err ? err.graphQLErrors[0].message : err.message;\n // const tMessage = t(`notification.${String(message)}`);\n // setStatus(tMessage);\n //TODO: нужно куда-то вывести ошибку\n }\n\n\n };\n\n useEffect(() => {\n if (!loading && data) {\n const {gasStations, pricingEnabled, pricingPresets} = data.userProfile.customer;\n const {priority, rounding, strategy} = pricingPresets;\n setRecommendedData(actualPrices(gasStations.items));\n\n setPricingEnabled(pricingEnabled);\n\n setPresetStatus(pricingPresets.state);\n\n setInitialValues({\n strategy,\n priority,\n rounding: rounding,\n sizeOfSales: undefined,\n levelOfMarginality: undefined,\n })\n\n }\n }, [loading]);\n\n const {columns} = useGasStationColumns({\n headers: ['A0100', ...actualPriceHeaders],\n translateString: \"reports.actualPrice.fuel\",\n onFilters: \"\",\n zeroHeader: \"brand\",\n renderFunction: (value: ProductData, header: string) => {\n if (!value) return;\n\n return ;\n },\n sorter: false\n });\n\n return (\n \n )\n};\n\nexport default RecommendedPricesContainer;\n","import React from \"react\";\nimport RecommendedPricesContainer from \"containers/RecommendedPricesContainer\";\n\n\nconst RecommendedPricesPage: React.FC = () => {\n return (\n \n )\n};\n\nexport default RecommendedPricesPage;\n","import gql from \"graphql-tag\";\n\nconst GasStationMapItem = gql`\n fragment GasStationMapItem on GasStation {\n id\n location {\n latitude\n longitude\n }\n }\n`;\n\nexport default GasStationMapItem;\n","import GasStationMapItem from \"lib/graphql/fragments/GasStation/GasStationMapItems\"\nimport gql from \"graphql-tag\";\n\nconst GAS_STATIONS_LIST = gql`\n query userProfile {\n userProfile {\n id\n customer {\n id\n gasStations {\n items {\n ...GasStationMapItem\n competitors {\n name\n ...GasStationMapItem\n }\n region {\n id\n name\n }\n name\n }\n total\n }\n }\n }\n }\n ${GasStationMapItem}\n`;\n\nexport default GAS_STATIONS_LIST;\n\n\n\n","import React, { useEffect, useState } from \"react\";\nimport \"./style.scss\";\nimport dayjs from \"dayjs\";\nimport classNames from \"classnames\";\nimport { Card, Collapse, List, Skeleton, Typography } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons/lib\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { FeatureProperties } from \"./types\";\nimport { getGasStationTitle } from \"lib/helpers\";\n\ninterface MapTooltipProps {\n tooltipData: FeatureProperties;\n setTooltipVisible: (\n value: ((prevState: boolean) => boolean) | boolean\n ) => void;\n}\n\nconst { Text } = Typography;\n\nconst MapTooltip: React.FC = ({\n tooltipData,\n setTooltipVisible,\n}) => {\n const { t } = useTranslation();\n const fuelPriceTitle = t(\"map.tooltip.fuelPricesDate\");\n const [classes, setClasses] = useState(\"map-tooltip\");\n const [updatedAt, setUpdatedAt] = useState(\"\");\n\n const classesObj = {\n \"map-tooltip\": true,\n \"map-tooltip__open\": !!tooltipData,\n };\n const closeButton = (\n {\n setClasses(\n classNames({\n ...classesObj,\n \"map-tooltip__hidden\": true,\n })\n );\n setTimeout(() => {\n setTooltipVisible(false);\n }, 400);\n }}\n />\n );\n const customPanelStyle = {\n background: \"white\",\n border: \"none\",\n };\n\n useEffect(() => {\n setClasses(\n classNames({\n ...classesObj,\n \"map-tooltip__hidden\": !tooltipData,\n })\n );\n\n if (tooltipData.prices.length) {\n let maxDate = tooltipData.prices[0].updatedAt;\n\n tooltipData.prices.forEach((item) => {\n const formattedDate = dayjs(maxDate).isAfter(item.updatedAt);\n\n if (formattedDate) {\n maxDate = item.updatedAt;\n }\n });\n\n setUpdatedAt(maxDate);\n }\n }, [tooltipData]);\n\n const updatedAtTitle = tooltipData.prices.length\n ? `${fuelPriceTitle} ${dayjs(updatedAt)\n .utc(false)\n .format(\"DD.MM.YYYY hh:mm\")}`\n : \"\";\n\n const competitorsList =\n tooltipData.competitors && tooltipData.competitors.length ? (\n \n {tooltipData.competitors.map((competitor, index) => {\n return (\n \n
\n {\n return (\n \n \n
{item.price}
\n \n );\n }}\n />\n

\n {updatedAtTitle}\n

\n
\n \n );\n })}\n
\n ) : null;\n\n const competitors =\n tooltipData.competitors && tooltipData.competitors.length ? (\n
{competitorsList}
\n ) : null;\n\n if (!tooltipData.brand) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n {getGasStationTitle(tooltipData.brand, tooltipData.number)}\n \n
\n
{tooltipData.address}
\n \n }\n bordered={false}\n extra={closeButton}\n >\n
\n (\n \n \n
{item.price}
\n
\n )}\n />\n\n

\n {updatedAtTitle}\n

\n
\n\n {competitors}\n \n );\n};\n\nexport default MapTooltip;\n","import mapboxgl, {AnySourceData} from \"mapbox-gl\";\n\nexport const MAP_SOURCE_ID = 'places';\nexport const MAIN_LAYER_ID = `unclustered-${MAP_SOURCE_ID}`;\n\nexport const mainLayerProps: mapboxgl.AnyLayer = {\n 'id': MAIN_LAYER_ID,\n 'type': 'symbol',\n 'source': MAP_SOURCE_ID,\n 'filter': ['!', ['has', 'point_count']],\n 'layout': {\n \"text-field\": String.fromCharCode(0xF3C5),\n 'text-line-height': 1, // this is to avoid any padding around the \"icon\"\n 'text-padding': 0,\n 'text-anchor': 'center', // center, so when rotating the map, the \"icon\" stay on the same location\n 'text-offset': [0, -0.3], // give it a little offset on y, so when zooming it stay on the right place\n 'text-allow-overlap': true,\n 'text-ignore-placement': true,\n 'icon-optional': true, // since we're not using an icon, only text.\n 'text-font': ['Font Awesome 5 Free Solid'],\n 'text-size': 30\n },\n 'paint': {\n 'text-translate-anchor': 'viewport',\n 'text-color': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n ['get', 'hoverColor'],\n ['get', 'color']\n ]\n }\n};\n\nexport const defaultSourceProps: AnySourceData = {\n 'type': 'geojson',\n 'data': {\n 'type': 'FeatureCollection',\n 'features': []\n }\n};\n\nexport const defaultTooltipData = {\n brand: \"\",\n number: \"\",\n prices: [],\n address: \"\"\n};\n","import \"./style.scss\";\n\nimport {\n CircleLayoutProps,\n FeaturesMappingResult,\n GasStationMapProps,\n GasStationYandexMapData,\n GetDistanceBetweenCoordinates,\n GetOptimalZoomProps,\n ToRadians,\n} from \"../../lib/graphql/queries/GasStations/gasStations\";\nimport {\n GeolocationControl,\n Map,\n Placemark,\n YMaps,\n ZoomControl,\n} from \"react-yandex-maps\";\nimport React, { useCallback, useEffect, useState } from \"react\";\n\nimport MapTooltip from \"./tooltip/MapTooltip\";\nimport { mapFeaturesMapping } from \"./dataMapping\";\nimport { useYandexMapbox } from \"lib/hooks/useYandexMapBox\";\n\nconst GasStationYandexMapComponent: React.FC = ({\n points,\n FilterByRegion,\n ymaps,\n}) => {\n const { data }: FeaturesMappingResult = mapFeaturesMapping(points);\n const [mapState, setMapState] = useState({\n center: [55.76, 37.64],\n zoom: 8,\n });\n const { getMarkData, tooltipVisible, tooltipData, setTooltipVisible } =\n useYandexMapbox();\n const [selectedMark, setSelectedMark] = useState(null);\n\n const tooltip = (\n \n );\n\n const handleClick = useCallback(\n (id: string, coordinates: number[]) => {\n if(id === selectedMark) {\n getMarkData(null);\n setSelectedMark(null);\n } else {\n getMarkData(id);\n setMapState({ ...mapState, center: coordinates });\n setSelectedMark(id);\n }\n },\n [getMarkData, mapState]\n );\n const toRadians: ToRadians = (angle) => angle * (Math.PI / 180);\n\n const getDistanceBetweenCoordinates: GetDistanceBetweenCoordinates = (\n lat1,\n lng1,\n lat2,\n lng2\n ) => {\n const R = 6371; // радиус Земли в километрах\n const dLat = toRadians(lat2 - lat1);\n const dLng = toRadians(lng2 - lng1);\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadians(lat1)) *\n Math.cos(toRadians(lat2)) *\n Math.sin(dLng / 2) *\n Math.sin(dLng / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\n return R * c;\n };\n\n const getOptimalZoom: GetOptimalZoomProps = (\n minLat,\n maxLat,\n minLng,\n maxLng\n ) => {\n const WORLD_WIDTH = 256;\n const WORLD_HEIGHT = 256;\n\n const latDiff = maxLat - minLat;\n const lngDiff = maxLng - minLng;\n\n const mapWidth = window.innerWidth;\n const mapHeight = window.innerHeight;\n\n const zoomX = Math.log2((mapWidth * 360) / lngDiff / WORLD_WIDTH);\n const zoomY = Math.log2((mapHeight * 180) / latDiff / WORLD_HEIGHT);\n\n const minZoom = Math.min(zoomX, zoomY);\n\n const centerLat = (maxLat + minLat) / 2;\n const centerLng = (maxLng + minLng) / 2;\n\n const maxDistance = Math.max(\n getDistanceBetweenCoordinates(minLat, minLng, centerLat, centerLng),\n getDistanceBetweenCoordinates(maxLat, maxLng, centerLat, centerLng)\n );\n\n return maxDistance > 500\n ? Math.floor(minZoom * 0.8)\n : Math.ceil(minZoom - 1);\n };\n\n useEffect(() => {\n if (data.length > 0) {\n const bounds = data.reduce(\n (acc, mark) => {\n const [lat, lng] = mark.geometry.coordinates;\n acc.minLat = Math.min(acc.minLat, lat);\n acc.maxLat = Math.max(acc.maxLat, lat);\n acc.minLng = Math.min(acc.minLng, lng);\n acc.maxLng = Math.max(acc.maxLng, lng);\n return acc;\n },\n {\n minLat: Infinity,\n maxLat: -Infinity,\n minLng: Infinity,\n maxLng: -Infinity,\n }\n );\n\n const zoom = getOptimalZoom(\n bounds.minLat,\n bounds.maxLat,\n bounds.minLng,\n bounds.maxLng\n );\n const center = [\n (bounds.minLat + bounds.maxLat) / 2,\n (bounds.minLng + bounds.maxLng) / 2,\n ];\n\n if (data.length > 1) {\n setMapState({ center, zoom });\n } else {\n setMapState({ center, zoom: 15 });\n }\n }\n }, [data.length]);\n\n const apiKey = process.env.REACT_APP_YANDEX_API_KEY;\n\n const markCompetitors = useCallback(\n (mark: GasStationYandexMapData) => {\n return tooltipData.competitors?.find((elem) => elem.id === mark.id)\n ? `border: 3px solid #1890ff; width: 46px; height: 46px; z-index:1000`\n : `border: 3px solid #FFFFFF; z-index:5`;\n },\n [tooltipData]\n );\n\n const getImagePath = (mark: GasStationYandexMapData): { img: string; size: number } => {\n const isCompetitor = tooltipData.competitors?.find((elem) => elem.id === mark.id)\n if (selectedMark !== mark.id && !isCompetitor) {\n try {\n return {\n img: require(`../../assets/logos/лого__${mark?.properties.brand}_1.svg`),\n size: 85,\n };\n } catch (error) {\n return {\n img: require(`../../assets/logos/лого__Бензоколонка_1.svg`),\n size: 65,\n };\n }\n }\n try {\n return {\n img: require(`../../assets/logos/лого__${mark?.properties.brand}_2.svg`),\n size: 85,\n };\n } catch (error) {\n return {\n img: require(`../../assets/logos/лого__Бензоколонка_2.svg`),\n size: 65,\n };\n }\n };\n\n const circleLayout = ({ ymaps, mark }: CircleLayoutProps) => {\n const { img, size } = getImagePath(mark);\n const selectedMarkStyle = selectedMark !== mark.id ? markCompetitors(mark) : `border: 3px solid #53B178; width: 46px; height: 46px; z-index: 1000`;\n return ymaps?.templateLayoutFactory?.createClass(\n `
\"\"/
`\n );\n };\n\n return (\n
\n
{FilterByRegion}
\n {tooltipVisible && tooltip}\n \n \n {data?.map((mark, i: number) => {\n return (\n handleClick(mark.id, mark.geometry.coordinates)}\n key={i}\n modules={[\"geoObject.addon.balloon\"]}\n geometry={mark.geometry.coordinates.reverse()}\n options={{\n zIndex: mark.properties.zIndex,\n iconLayout: circleLayout({ ymaps, mark }),\n iconShape: {\n type: \"Rectangle\",\n coordinates: [\n [-15, -15],\n [15, 15],\n ],\n },\n }}\n />\n );\n })}\n \n \n \n \n
\n );\n};\n\nexport default GasStationYandexMapComponent;\n","import {GasStationYandexMapData, GasStationsItem} from \"lib/graphql/queries/GasStations/gasStations\";\n\nimport {LngLatLike} from \"mapbox-gl\";\nimport {getGasStationTitle} from \"lib/helpers\";\n\ninterface FeaturesMappingResult {\n coordinates: Array;\n data: GasStationYandexMapData[]\n}\n\nexport const mapFeaturesMapping = (points: Array): FeaturesMappingResult => {\n const coordinates: Array = [];\n const data: GasStationYandexMapData[] = [];\n\n for (let i = 0; i < points.length; i++) {\n coordinates.push([points[i].location.longitude, points[i].location.latitude]);\n\n data.push({\n id: points[i].id,\n type: 'Feature',\n properties: {\n region: points[i]?.region,\n brand: points[i].name,\n number: points[i].number || \"\",\n address: points[i].address,\n prices: +points[i].fuelPrices,\n color: \"#000\",\n zIndex: 9000,\n hoverColor: \"#ff6f00\",\n competitors: points[i].competitors.map(\n (competitor) => getGasStationTitle(competitor.name, competitor.number)\n )\n },\n geometry: {\n type: 'Point',\n coordinates: [points[i].location.longitude, points[i].location.latitude]\n }\n });\n\n // выводим конкурентов\n const competitor = points[i].competitors;\n\n for (let j = 0; j < competitor.length; j++) {\n coordinates.push([competitor[j].location.longitude, competitor[j].location.latitude]);\n\n const concurrent: GasStationYandexMapData = {\n id: competitor[j].id,\n type: 'Feature',\n properties: {\n region: points[j]?.region,\n brand: competitor[j].name,\n number: competitor[j].number || \"\",\n address: competitor[j].address,\n prices: +competitor[j].fuelPrices,\n color: \"#b5b3b4\",\n zIndex:0,\n hoverColor: \"#0163f5\",\n },\n geometry: {\n type: 'Point',\n coordinates: [competitor[j].location.longitude, competitor[j].location.latitude]\n }\n }\n\n data.push(concurrent);\n }\n }\n\n return {\n coordinates,\n data\n }\n}","import { useEffect, useState } from \"react\";\nimport { useLazyQuery } from \"react-apollo\";\n\nimport { defaultTooltipData } from \"containers/GasStationsMapContainer/mapSettings\";\nimport GAS_STATION from \"lib/graphql/queries/GasStation\";\nimport {\n GasStationProfile,\n GasStationVariables,\n} from \"lib/graphql/queries/GasStation/gasStation\";\nimport { getGasStationTitle } from \"../helpers\";\nimport { FeatureProperties } from \"components/GasStationsYandexMapComponent/tooltip/types\";\n\ninterface MapboxHook {\n tooltipVisible: boolean;\n tooltipData: FeatureProperties;\n setTooltipVisible: (\n value: ((prevState: boolean) => boolean) | boolean\n ) => void;\n getMarkData: (id: string | null) => void;\n}\n\nexport function useYandexMapbox(): MapboxHook {\n const [tooltipVisible, setTooltipVisible] = useState(false);\n const [tooltipData, setTooltipData] =\n useState(defaultTooltipData);\n\n const [getGasStation, { data }] = useLazyQuery<\n GasStationProfile,\n GasStationVariables\n >(GAS_STATION);\n\n useEffect(() => {\n if (data && tooltipVisible) {\n const { gasStation } = data;\n setTooltipData({\n brand: gasStation.name,\n number: gasStation.number,\n prices: gasStation.fuelPrices,\n address: gasStation.address,\n competitors: gasStation.competitors.map((competitor) => {\n return {\n id: competitor.id,\n address: competitor.address,\n brand: getGasStationTitle(competitor.name, competitor.number),\n prices: competitor.fuelPrices,\n };\n }),\n });\n }\n }, [data, tooltipVisible]);\n\n const getMarkData = (id: string | null) => {\n if(id === null) {\n setTooltipData(defaultTooltipData);\n setTooltipVisible(false);\n } else {\n getGasStation({\n variables: {\n id: id,\n },\n });\n setTooltipVisible(true); \n }\n };\n\n return {\n getMarkData,\n tooltipVisible,\n tooltipData,\n setTooltipVisible,\n };\n}\n","import React from \"react\";\nimport { Select } from \"antd\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { RegionSelect } from \"lib/graphql/queries/GasStations/gasStations\";\nimport { RegionSmallWholeSaleSelect } from \"containers/SmallWholesaleContainer\";\n\nconst { Option } = Select;\n\ninterface GasStationYandexMapRegionPickerProps {\n pickedRegion: Array;\n regions: Array;\n setPickedRegion: (\n value: ((prevState: Array) => Array) | Array\n ) => void;\n}\n\nconst GasStationYandexMapRegionPicker: React.FC<\n GasStationYandexMapRegionPickerProps\n> = ({ pickedRegion, setPickedRegion, regions }) => {\n const { t } = useTranslation();\n return (\n setPickedRegion(val)}\n allowClear\n showSearch={false}\n virtual={false}\n >\n {regions.map((item) => (\n \n ))}\n \n );\n};\n\nexport default GasStationYandexMapRegionPicker;\n","import {\n GasStationsItem,\n RegionSelect,\n UserProfileGasStations,\n} from \"../../lib/graphql/queries/GasStations/gasStations\";\nimport React, { useEffect, useState } from \"react\";\nimport { YMaps, withYMaps } from \"react-yandex-maps\";\n\nimport GAS_STATIONS_LIST from \"lib/graphql/queries/GasStations\";\nimport { GasStationPagination } from \"../../lib/graphql/globalTypes\";\nimport GasStationYandexMapComponent from \"components/GasStationsYandexMapComponent\";\nimport GasStationYandexMapRegionPicker from \"../../components/GasStationsYandexMapComponent/GasStationYandexMapRegionPicker\";\nimport Loading from \"../../components/_common/Loading\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\nconst GasStationsYandexMapContainer: React.FC = () => {\n const [points, setPoints] = useState>([]);\n const [regions, setRegions] = useState>([]);\n const [pickedRegion, setPickedRegion] = useState>([]);\n const [actualPoints, setActualPoints] = useState>([]);\n const { data, loading } = useQuery<\n UserProfileGasStations,\n GasStationPagination\n >(GAS_STATIONS_LIST);\n\n useEffect(() => {\n if (data) {\n const items = data.userProfile.customer.gasStations.items;\n setPoints(items);\n\n const tempRegions = items.reduce((acc, station) => {\n const { id } = station.region;\n\n if (acc[id]) {\n acc[id].count += 1;\n } else {\n acc[id] = { ...station.region, count: 1 };\n }\n\n return acc;\n }, {} as { [key: string]: RegionSelect });\n\n setRegions(Object.values(tempRegions));\n }\n }, [data]);\n\n useEffect(() => {\n const filtered = pickedRegion.length\n ? points.filter(\n (item) => item.region && pickedRegion.includes(item.region.id)\n )\n : points;\n setActualPoints(filtered);\n }, [pickedRegion, points]);\n\n const FilterByRegion = (\n \n );\n\n if (loading) {\n return ;\n }\n\n const MapComponentWithYMaps = withYMaps(GasStationYandexMapComponent, true, [\n \"geoObject.addon.balloon\",\n \"templateLayoutFactory\",\n ]);\n\n return (\n <>\n \n \n \n \n );\n};\n\nexport default GasStationsYandexMapContainer;\n","import React from \"react\";\nimport GasStationsYandexMapContainer from \"../../containers/GasStationsYandexMapContainer\";\n\nconst GasStationYandexMapPage: React.FC = () => {\n return ;\n};\n\nexport default GasStationYandexMapPage;\n","import React from \"react\";\nimport {\n Route,\n Switch,\n BrowserRouter as Router,\n Redirect,\n} from \"react-router-dom\";\n\nimport SecuredRoute from \"./SecuredRoute\";\nimport TokenStorage from \"lib/TokenStorage\";\nimport MainLayout from \"layouts/MainLayout\";\nimport AuthLayout from \"layouts/AuthLayout\";\nimport LoginPage from \"pages/LoginPage\";\nimport ActualPricePage from \"pages/ActualPricePage\";\nimport SmallWholesalePage from \"pages/SmallWholesalePage\";\nimport PriceStatisticPage from \"pages/PriceStatisticPage\";\nimport PersonalGasStationsPage from \"pages/PersonalGasStationsPage\";\nimport UserSettingsPage from \"pages/UserSettingsPage\";\nimport PriceStatisticBasisPage from \"pages/PriceStatisticBasisPage\";\nimport RecommendedPricesPage from \"pages/RecommendedPricesPage/RecommendedPricesPage\";\nimport GasStationYandexMapPage from \"pages/GasStationYandexMapPage\";\n\nconst Routers: React.FC = () => {\n return (\n \n \n \n \n \n {\n const { accessToken } = TokenStorage;\n\n if (accessToken) {\n return ;\n }\n\n return ;\n }}\n />\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Routers;\n","import recommendedPrices from \"./recommended-prices\"\n\nexport default {\n \"recommendedPrices\": recommendedPrices\n}\n","export default {\n \"title\": \"Рекомендованные цены\",\n \"noData\": \"No data\",\n \"loading\": \"Идёт загрузка данных... Среднее время ожидания 10 минут.\",\n \"download\": \"Сформировать отчёт\",\n \"form\": {\n \"levelOfMarginality\": \"Уровень маржинальности\",\n \"levelOfMarginalityTooltip\": \"Выберите файл для загрузки с динамикой маржинальности\",\n \"priority\": \"Приоритет\",\n \"priorityTooltip\": \"Если вместо удержания доли рынка нужно более активно завоевывать реализацию на рынке сдвиньте бегунок правее\",\n \"sizeOfSales\": \"Объем реализации\",\n \"sizeOfSalesTooltip\": \"Выберите файл для загрузки с объёмами реализации\",\n \"strategy\": \"Стратегия\",\n \"strategyList\": {\n \"earning\": \"Объём\",\n \"margin\": \"Маржа\",\n \"volume\": \"Выручка\"\n },\n \"strategyTooltip\": \"Выберите основную цель, которую нужно достичь при оптимизации розничных цен на топливо\",\n \"submit\": \"Загрузить\",\n \"rounding\": \"Округление до (коп.)\",\n \"upload\": \"Загрузить\"\n }\n}\n","import recommendedPrices from \"./recommended-prices\"\n\nexport default {\n \"recommendedPrices\": recommendedPrices\n\n}\n","export default {\n \"title\": \"Рекомендованные цены\",\n \"noData\": \"Нет данных\",\n \"loading\": \"Идёт загрузка данных... Среднее время ожидания 10 минут.\",\n \"download\": \"Сформировать отчёт\",\n \"form\": {\n \"levelOfMarginality\": \"Уровень маржинальности\",\n \"levelOfMarginalityTooltip\": \"Выберите файл для загрузки с динамикой маржинальности\",\n \"priority\": \"Приоритет\",\n \"priorityTooltip\": \"Если вместо удержания доли рынка нужно более активно завоевывать реализацию на рынке сдвиньте бегунок правее\",\n \"sizeOfSales\": \"Объем реализации\",\n \"sizeOfSalesTooltip\": \"Выберите файл для загрузки с объёмами реализации\",\n \"strategy\": \"Стратегия\",\n \"strategyList\": {\n \"earning\": \"Объём\",\n \"margin\": \"Маржа\",\n \"volume\": \"Выручка\"\n },\n \"strategyTooltip\": \"Выберите основную цель, которую нужно достичь при оптимизации розничных цен на топливо\",\n \"submit\": \"Загрузить\",\n \"rounding\": \"Округление до (коп.)\",\n \"upload\": \"Загрузить\"\n }\n}\n","import i18n from 'i18next';\nimport Backend from 'i18next-http-backend';\nimport languageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\nimport { isEnvForDebug } from 'lib/helpers';\n\nimport enTranslation from \"locales/en/translation\"\nimport ruTranslation from \"locales/ru/translation\"\n\nconst resources = {\n en: {\n translation: enTranslation,\n },\n ru: {\n translation: ruTranslation,\n }\n};\n\nvoid i18n.use(Backend).use(languageDetector).use(initReactI18next).init({\n fallbackLng: 'ru',\n resources,\n debug: isEnvForDebug(),\n detection: {\n order: ['localStorage', 'queryString', 'cookie'],\n cache: ['cookie']\n },\n interpolation: {\n escapeValue: false\n }\n});\n\nexport default i18n;\n","import enModules from \"./modules\";\n\nexport default {\n ...enModules,\n gasStation: {\n types: {\n title: \"Fuel\",\n },\n list: {\n title: \"Gas stations list\",\n tabs: {\n catalog: \"List\",\n map: \"Map\",\n },\n table: {\n brand: \"Brand\",\n managementCompany: \"Management\",\n status: \"Status\",\n fuelTypes: \"Types of fuel\",\n },\n },\n personalArea: {\n titles: {\n microMarket: \"Gas station micro market\",\n photos: \"Photos\",\n actualPrices: \"Actual prices\",\n actualPricesDiscount: \"Discounted prices\",\n info: \"Information\",\n news: \"News\",\n },\n services: {\n title: \"Services\",\n parking: \"Parking\",\n restroom: \"Restroom\",\n atm: \"ATM\",\n tireFitting: \"Tire fitting\",\n carWash: \"Car wash\",\n shop: \"Score\",\n service: \"Service\",\n pharmacy: \"Pharmacy\",\n cafe: \"A cafe\",\n },\n fuelCard: {\n title: \"Fuel Cards\",\n lickard: \"Lickard\",\n tinkoff: \"Tinkoff\",\n bpPartner: \"BP Partner\",\n tatneftPartner: \"Partner-Tatneft\",\n taif: \"TAIF\",\n },\n personalInfo: {\n owner: \"Владелец АЗС\",\n inn: \"ИНН владельца\",\n address: \"Адрес компании владельца\",\n ownerPhoneNumber: \"Телефон владельца АЗС\",\n phoneNumber: \"Телефон АЗС\",\n },\n management: {\n company: \"УК АЗС\",\n inn: \"ИНН УК\",\n address: \"Адрес УК\",\n managementPhoneNumber: \"Телефон УК\",\n count: \"Количество АЗС в сети\",\n gasStationPhoneNumber: \"Телефон АЗС\",\n countByManagement: \"Количество АЗС в сети по УК\",\n },\n map: {\n loading: \"Maps are loading. Please, wait.\",\n },\n news: {\n all: \"All\",\n marketing: \"Marketing\",\n statuses: \"Statuses\",\n prices: \"Prices\",\n },\n statuses: {\n active: \"Active\",\n reconstruction: \"Reconstruction\",\n underConstruction: \"Under Construction\",\n closed: \"Closed\",\n },\n },\n },\n login: {\n pleaseAuth: \"Please, sign in\",\n loginPlaceholder: \"E-mail, login, phone number\",\n passwordPlaceholder: \"Password\",\n submitText: \"Sign In\",\n rememberMeText: \"Remember me\",\n forgotPasswordText: \"Forgot password?\",\n didNotHaveAccount: \"Forgot your password?\",\n registration: \"Registration\",\n requiredField: \"Required field!\",\n emailMinLength: \"Email might be 6 characters or more\",\n },\n notification: {\n notAuthorized: \"Some authorization error\",\n \"notAuthorized.text\": \"Please, sign in to gain access\",\n welcome: \"Welcome\",\n \"welcome.text\": \"You have successfully logged in\",\n error: \"Error\",\n \"invalid credentials\": \"Invalid credentials\",\n networkError: {\n 500: \"Server error\",\n 503: \"Server not respond\",\n other: \"Something goes wrong\",\n },\n },\n reports: {\n actualPrice: {\n title: \"Actual prices\",\n regionSelect: \"Choose region\",\n companySelect: \"Choose company\",\n tooltip: {\n closed: \"Gas station under reconstruction.\",\n dynamic: \"Gas station with dynamic pricing.\",\n },\n extras: {\n search: \"Search\",\n pdf: \"Export to Excel\",\n excel: \"Export to Pdf\",\n print: \"Print\",\n createReport: \"Generate report\",\n priceHistory: \"Price history\",\n perPage: \"Per page\",\n },\n priceHistory: {\n reports: \"Reports\",\n loading: \"Loading\",\n download: \"Download\",\n create: \"Generate a report\",\n table: {\n from: \"From\",\n to: \"To\",\n created: \"Request date\",\n document: \"Document\",\n format: \"Format\",\n size: \"Size\",\n },\n },\n tabs: {\n all: \"All\",\n petrol: \"Patrol\",\n gas: \"Gas\",\n diesel: \"Diesel\",\n },\n fuel: {\n brand: \"Brand & address\",\n tankFarm: \"TF/Trader\",\n A0100: \"100/98B\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"D\",\n D0DTB: \"DB\",\n D0DTZ: \"DW\",\n D0DTK: \"DO\",\n G0KPG: \"CNG\",\n P0SUG: \"LPG\",\n D0DTL: \"ДТ-Л\",\n D0DTX: \"Other Diesel\",\n D0DTE: \"ДТ-М\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"СУГ-1\",\n \"D0DTB-full\": \"Branded Diesel\",\n \"D0DTZ-full\": \"Winter/Arctic Diesel\",\n \"D0DTK-full\": \"Other Diesel\",\n \"D0DTL-full\": \"ДТ-Летнее\",\n \"D0DTE-full\": \"ДТ-Межсезонное\",\n \"D0DTA-full\": \"ДТ-Арктика\",\n checkDate: \"Update\",\n },\n analyticsFuel: {\n A0100: \"100/98B\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"D\",\n D0DTB: \"DB\",\n D0DTZ: \"DW\",\n D0DTK: \"DO\",\n G0KPG: \"CNG\",\n P0SUG: \"LPG\",\n D0DTX: \"Other Diesel\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-М\",\n D0DTA: \"ДТ-А\",\n P0SPG: \"LNG\",\n PPCB2: \"СУГ-1\",\n },\n settings: {\n column: {\n A0100: \"100/98B\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"D\",\n D0DTB: \"Branded Diesel\",\n D0DTZ: \"Winter/Arctic Diesel\",\n D0DTK: \"Other Diesel\",\n G0KPG: \"CNG\",\n D0DTL: \"ДТ-Летнее\",\n D0DTE: \"ДТ-Межсезонное\",\n D0DTA: \"ДТ-Арктика\",\n D0DTX: \"Other Diesel\",\n PPCB2: \"СУГ-1\",\n P0SUG: \"LPG\",\n P0SPG: \"LNG\",\n updatedAt: \"Update\",\n },\n },\n analyticsFilters: {\n A0100: \"100\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"D\",\n D0DTB: \"Branded Diesel\",\n D0DTL: \"Summer Diesel\",\n D0DTE: \"Normal Diesel\",\n D0DTA: \"Arctic Diesel \",\n D0DTZ: \"Winter/Arctic Diesel\",\n D0DTX: \"Other Diesel\",\n D0DTK: \"Other Diesel\",\n G0KPG: \"CNG\",\n P0SUG: \"LPG\",\n\n PPCPS: \"СПБТ\",\n DTZK5: \"ДТ-З-К5\",\n DDEC3: \"ДТ Евро C-III\",\n DDEE3: \"ДТ Евро E-III\",\n DDE23: \"ДТ Евро 2-III\",\n DDE33: \"ДТ Евро 2-III\",\n DDWK2: \"ДТ класс 2 (ДТ-З-К5) минус 32\",\n DDWF5: \"ДТ сорт F (ДТ-З-К5) минус 20\",\n DTEK5: \"ДТ-Е-К5\",\n DDTZ3: \"ДТ (ДТ-А-К5)\",\n DDEF3: \"ДТ Евро F-III\",\n PPCPB: \"Technical propane butane\",\n },\n },\n basises: {\n fuel: {\n brand: \"TF/Trader\",\n A0100: \"100
98\",\n A0950: \"95\",\n A0920: \"92\",\n A0800: \"80\",\n D0DTL: \"DS\",\n D0DTE: \"DN\",\n D0DTZ: \"DW\",\n D0DTA: \"DA\",\n PPCB2: \"LPGD\",\n P0SUG: \"LPGA \",\n \"D0DTL-full\": \"Summer Diesel -5°C\",\n \"D0DTE-full\": \"Normal Diesel -15°C\",\n \"D0DTZ-full\": \"Winter Diesel -29°C\",\n \"D0DTA-full\": \"Arctic Diesel -40°C\",\n \"PPCB2-full\": \"Domestic LPG\",\n \"P0SUG-full\": \"Auto LPG\",\n checkDate: \"Update\",\n },\n settings: {\n column: {\n A0100: \"100 98\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"Winter Diesel \",\n D0DTK: \"ДТ-П\",\n G0KPG: \"КПГ\",\n D0DTL: \"Summer Diesel\",\n D0DTE: \"Normal Diesel\",\n D0DTA: \"Arctic Diesel \",\n PPCB2: \"Domestic LPG\",\n P0SUG: \"Auto LPG\",\n updatedAt: \"Update\",\n },\n },\n },\n personalPrice: {\n fuel: {\n A0100: \"100\",\n A0980: \"98\",\n A098B: \"98B\",\n A0950: \"95\",\n A095B: \"95B\",\n A0920: \"92\",\n A092B: \"92B\",\n A0800: \"80\",\n D0DT0: \"D\",\n D0DTB: \"DB\",\n D0DTZ: \"DW\",\n D0DTK: \"DO\",\n G0KPG: \"CNG\",\n P0SUG: \"LPG\",\n P0SPG: \"LNG\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-М\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"СУГ-1\",\n },\n },\n gasStationYandexMap: {\n regionSelect: \"Choose region\",\n },\n },\n analytics: {\n title: \"Analytics\",\n wrapperTitle: \"Price change schedule\",\n chart: {\n axisLeftLegend: \"Price\",\n axisBottomLegend: \"Date\",\n noInfo: \"No data to show\",\n filter: {\n myStation: \"My Gas Station\",\n ownGasStation: \"Choose your Gas Station\",\n gasStations: \"Competitors\",\n gasStationsSecondary: \"Choose competitors\",\n noContent: \"Choose Gas Station\",\n fuelTypes: \"Fuel types\",\n fuelTypesSecondary: \"Choose one or more fuel types\",\n },\n wholesaleFilter: {\n myWholesale: \"Wholesale\",\n myWholesalePlaceholder: \"Choose a wholesale\",\n seller: \"Seller\",\n sellerPlaceholder: \"Choose a seller\",\n fuelTypes: \"Type of nomenclature\",\n fuelTypesPlaceholder: \"Choose a nomenclature\",\n },\n },\n datePresets: {\n day: \"Day\",\n week: \"Week\",\n month: \"Month\",\n quarter: \"Quarter\",\n year: \"Year\",\n },\n },\n map: {\n tooltip: {\n fuelPricesDate: \"Fuel prices for\",\n },\n ownGasStations: \"Own Gas Stations\",\n },\n menu: {\n submenu: {\n gasStationPrices: \"Gas station prices\",\n tankFarmPrices: \"Tank farm prices\",\n },\n menuItem: {\n ActualPriceReport: \"Actual Prices\",\n SmallWholesale: \"Small Wholesale\",\n Analytics: \"Analytics\",\n PriceStatistic: \"Price change graph\",\n GasStationMap: \"Gas station map\",\n PersonalGasStations: \"My gas stations\",\n RecommendedPrices: \"Recommended prices\",\n },\n },\n user: {\n headerMenu: {\n signOut: \"Sign out\",\n settings: \"Settings\",\n },\n settingsMenu: {\n basicSettings: \"Basic Settings\",\n otherSettings: \"Other Settings\",\n },\n settingsItem: {\n mail: \"Email\",\n notification: \"Notifications\",\n on: \"yes\",\n off: \"no\",\n btnSubmit: \"Save changes\",\n },\n },\n title: {\n pages: {\n login: \"Login\",\n actualPrices: \"Actual prices for gas station\",\n },\n },\n utils: {\n loading: \"Loading...\",\n },\n};\n","import ruModules from \"./modules\";\n\nexport default {\n ...ruModules,\n gasStation: {\n types: {\n title: \"Топливо\",\n },\n list: {\n title: \"Список АЗС\",\n tabs: {\n catalog: \"Список\",\n map: \"Карта\",\n brand: \"Бренд\",\n managementCompany: \"Управляющая компания\",\n status: \"Статус\",\n fuelTypes: \"Виды топлива\",\n },\n },\n personalArea: {\n titles: {\n microMarket: \"Микрорынок АЗС\",\n photos: \"Фотографии\",\n actualPrices: \"Актуальные цены\",\n actualPricesDiscount: \"Цены со скидкой\",\n info: \"Информация\",\n news: \"Новости\",\n },\n services: {\n title: \"Услуги\",\n parking: \"Парковка\",\n restroom: \"Туалет\",\n atm: \"Банкомат\",\n tireFitting: \"Шиномонтаж\",\n carWash: \"Автомойка\",\n shop: \"Магазин\",\n service: \"Сервис\",\n pharmacy: \"Аптека\",\n cafe: \"Кафе\",\n },\n fuelCard: {\n title: \"Топливные карты\",\n lickard: \"Ликард\",\n tinkoff: \"Тинькофф\",\n bpPartner: \"BP Partner\",\n tatneftPartner: \"Партнер-Татнефть\",\n taif: \"ТАИФ\",\n },\n personalInfo: {\n owner: \"Владелец АЗС\",\n inn: \"ИНН владельца\",\n address: \"Адрес компании владельца\",\n ownerPhoneNumber: \"Телефон владельца АЗС\",\n phoneNumber: \"Телефон АЗС\",\n },\n management: {\n company: \"УК АЗС\",\n inn: \"ИНН УК\",\n address: \"Адрес УК\",\n managementPhoneNumber: \"Телефон УК\",\n count: \"Количество АЗС в сети\",\n gasStationPhoneNumber: \"Телефон АЗС\",\n countByManagement: \"Количество АЗС в сети по УК\",\n },\n map: {\n loading: \"Карта загружаются. Пожалуйста, подождите.\",\n },\n news: {\n all: \"Все\",\n marketing: \"Маркетинг\",\n statuses: \"Статусы\",\n prices: \"Цены\",\n },\n statuses: {\n active: \"Действующая\",\n reconstruction: \"Реконструкция\",\n underConstruction: \"Строится\",\n closed: \"Закрыто\",\n },\n },\n },\n login: {\n pleaseAuth: \"Пожалуйста, авторизуйтесь\",\n loginPlaceholder: \"E-mail, логин, телефон\",\n passwordPlaceholder: \"Пароль\",\n submitText: \"Войти\",\n rememberMeText: \"Запомнить меня\",\n forgotPasswordText: \"Забыли пароль?\",\n didNotHaveAccount: \"Ещё нет аккаунта?\",\n registration: \"Регистрация\",\n requiredField: \"Обязательное поле!\",\n emailMinLength: \"Email должен быть не короче 6 символов\",\n },\n notification: {\n authorizationError: \"Произошла ошибка авторизации\",\n notAuthorized: \"Вы не авторизованы\",\n \"notAuthorized.text\":\n \"Пожалуйста, авторизуйтесь на сайте, чтобы получить доступ.\",\n welcome: \"Добро пожаловать\",\n welcomeText: \"Авторизация прошла успешно\",\n error: \"Ошибка!\",\n \"invalid credentials\": \"Неправильные логин или пароль\",\n networkError: {\n 500: \"Ошибка на стороне сервера!\",\n 503: \"Сервер не доступен!\",\n other: \"Что-то пошло не так\",\n },\n },\n reports: {\n actualPrice: {\n title: \"Актуальные цены\",\n regionSelect: \"Выберите регион\",\n companySelect: \"Выберите компанию\",\n tooltip: {\n closed: \"АЗС на реконструкции.\",\n dynamic: \"АЗС с динамическим ценообразованием.\",\n },\n extras: {\n search: \"Поиск\",\n pdf: \"Экспорт в Excel\",\n excel: \"Экспорт в Pdf\",\n print: \"Печать\",\n createReport: \"Сформировать отчет\",\n priceHistory: \"История цен\",\n perPage: \"На странице\",\n },\n priceHistory: {\n reports: \"Отчёты\",\n loading: \"Загрузка\",\n download: \"Скачать\",\n create: \"Сформировать отчёт\",\n table: {\n from: \"C\",\n to: \"По\",\n created: \"Дата запроса\",\n document: \"Документ\",\n format: \"Формат\",\n size: \"Размер\",\n },\n },\n tabs: {\n all: \"Все\",\n petrol: \"Бензин\",\n gas: \"Газ\",\n diesel: \"Дизель\",\n },\n fuel: {\n brand: \"Бренд и адрес АЗС\",\n tankFarm: \"НБ/оператор\",\n A0100: \"АИ-100
АИ-98Б\",\n A0980: \"АИ-98\",\n A098B: \"АИ-98Б\",\n A0950: \"АИ-95\",\n A095B: \"АИ-95Б\",\n A0920: \"АИ-92\",\n A092B: \"АИ-92Б\",\n A0800: \"АИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"ДТ-З\",\n D0DTK: \"ДТ-П\",\n G0KPG: \"КПГ\",\n P0SUG: \"СУГ\",\n P0SPG: \"СПГ\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-Е\",\n D0DTA: \"ДТ-А\",\n D0DTX: \"Прочее ДТ\",\n PPCB2: \"СУГ-1\",\n \"D0DTB-full\": \"ДТ-Брендовые\",\n \"D0DTZ-full\": \"ДТ зимний\",\n \"D0DTK-full\": \"ДТ-Прочие\",\n \"D0DTL-full\": \"ДТ-Летнее\",\n \"D0DTE-full\": \"ДТ-Межсезонное\",\n \"D0DTA-full\": \"ДТ-Арктика\",\n checkDate: \"Дата проверки\",\n },\n analyticsFuel: {\n A0100: \"АИ-100/АИ-98Б\",\n A0980: \"АИ-98\",\n A098B: \"АИ-98Б\",\n A0950: \"АИ-95\",\n A095B: \"АИ-95Б\",\n A0920: \"АИ-92\",\n A092B: \"АИ-92Б\",\n A0800: \"АИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"ДТ-З\",\n D0DTK: \"ДТ-П\",\n D0DTX: \"Прочее ДТ\",\n G0KPG: \"КПГ\",\n P0SUG: \"СУГ\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-Е\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"СУГ-1\",\n },\n settings: {\n column: {\n A0100: \"АИ-100/АИ-98Б\",\n A0980: \"АИ-98\",\n A098B: \"98Б\",\n A0950: \"АИ-95\",\n A095B: \"АИ-95Б\",\n A0920: \"АИ-92\",\n A092B: \"АИ-92Б\",\n A0800: \"АИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ Брендовые\",\n D0DTZ: \"ДТ Сезонное\",\n D0DTK: \"ДТ Прочие\",\n G0KPG: \"КПГ\",\n D0DTL: \"ДТ-Летнее\",\n D0DTE: \"ДТ-Межсезонное\",\n D0DTA: \"ДТ-Арктика\",\n D0DTX: \"Прочее ДТ\",\n PPCB2: \"СУГ-1\",\n P0SUG: \"СУГ\",\n P0SPG: \"СПГ\",\n updatedAt: \"Дата проверки\",\n },\n },\n analyticsFilters: {\n A0100: \"AИ-100\",\n A0980: \"AИ-98\",\n A098B: \"AИ-98Б\",\n A0950: \"AИ-95\",\n A095B: \"AИ-95Б\",\n A0920: \"AИ-92\",\n A092B: \"AИ-92Б\",\n A0800: \"AИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"ДТ-З\",\n D0DTK: \"ДГК\",\n D0DTL: \"ДТЛ\",\n D0DTE: \"ДТЕ\",\n D0DTA: \"ДТА\",\n D0DTX: \"Прочее ДТ\",\n G0KPG: \"КПГ\",\n P0SUG: \"СУГ\",\n PPCPS: \"СПБТ\",\n DTZK5: \"ДТ-З-К5\",\n DDEC3: \"ДТ Евро C-III\",\n DDEE3: \"ДТ Евро E-III\",\n DDE23: \"ДТ Евро 2-III\",\n DDE33: \"ДТ Евро 2-III\",\n DDWK2: \"ДТ класс 2 (ДТ-З-К5) минус 32\",\n DDWF5: \"ДТ сорт F (ДТ-З-К5) минус 20\",\n DTEK5: \"ДТ-Е-К5\",\n DDTZ3: \"ДТ (ДТ-А-К5)\",\n DDEF3: \"ДТ Евро F-III\",\n PPCPB: \"Пропан бутан технический\",\n },\n },\n basises: {\n fuel: {\n brand: \"НБ/оператор\",\n A0100: \"АИ-100
АИ-98\",\n A0950: \"АИ-95\",\n A0920: \"АИ-92\",\n A0800: \"АИ-80\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-М\",\n D0DTZ: \"ДТ-З\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"ПБТ\",\n P0SUG: \"ПБА\",\n \"D0DTL-full\": \"ДТ-Л (Сорта A, B, C)\",\n \"D0DTE-full\": \"ДТ-М (Сорта D, E, F)\",\n \"D0DTZ-full\": \"ДТ-З (Классы 1, 2)\",\n \"D0DTA-full\": \"ДТ-А (Классы 3, 4)\",\n \"PPCB2-full\": \"\",\n \"P0SUG-full\": \"\",\n checkDate: \"Дата обновления\",\n },\n settings: {\n column: {\n A0100: \"АИ-100 АИ-98\",\n A0980: \"АИ-98\",\n A098B: \"98Б\",\n A0950: \"АИ-95\",\n A095B: \"АИ-95Б\",\n A0920: \"АИ-92\",\n A092B: \"АИ-92Б\",\n A0800: \"АИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"ДТ-З\",\n D0DTK: \"ДТ-П\",\n G0KPG: \"КПГ\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-М\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"ПБТ\",\n P0SUG: \"ПБА\",\n updatedAt: \"Дата обновления\",\n },\n },\n },\n personalPrice: {\n fuel: {\n A0100: \"АИ-100\",\n A0980: \"АИ-98\",\n A098B: \"АИ-98Б\",\n A0950: \"АИ-95\",\n A095B: \"АИ-95Б\",\n A0920: \"АИ-92\",\n A092B: \"АИ-92Б\",\n A0800: \"АИ-80\",\n D0DT0: \"ДТ\",\n D0DTB: \"ДТ-Б\",\n D0DTZ: \"ДТ-З\",\n D0DTK: \"ДТ-П\",\n G0KPG: \"КПГ\",\n P0SUG: \"СУГ\",\n P0SPG: \"СПГ\",\n D0DTL: \"ДТ-Л\",\n D0DTE: \"ДТ-М\",\n D0DTA: \"ДТ-А\",\n PPCB2: \"СУГ-1\",\n },\n },\n gasStationYandexMap: {\n regionSelect: \"Выберите регион\",\n },\n },\n analytics: {\n title: \"Аналитика\",\n wrapperTitle: \"График изменения цен\",\n chart: {\n axisLeftLegend: \"Цена\",\n axisBottomLegend: \"Дата\",\n noInfo: \"Нет данных для отображения\",\n filter: {\n myStation: \"Моя АЗС\",\n ownGasStation: \"Выбери свою АЗС\",\n gasStations: \"Конкуренты\",\n gasStationsSecondary: \"Выберите конкурентов\",\n fuelTypes: \"Виды топлива\",\n noContent: \"Выберите АЗС\",\n fuelTypesSecondary: \"Выберите один или несколько видов\",\n },\n wholesaleFilter: {\n myWholesale: \"Нефтебаза\",\n myWholesalePlaceholder: \"Выберите НБ\",\n seller: \"Продавец\",\n sellerPlaceholder: \"Выберите продавца\",\n fuelTypes: \"Типы номенклатур\",\n fuelTypesPlaceholder: \"Выберите номенклатуру\",\n },\n },\n datePresets: {\n day: \"За день\",\n week: \"За неделю\",\n month: \"За месяц\",\n quarter: \"За квартал\",\n year: \"За год\",\n },\n },\n map: {\n tooltip: {\n fuelPricesDate: \"Цена на топливо на\",\n },\n ownGasStations: \"Мои АЗС\",\n },\n menu: {\n submenu: {\n gasStationPrices: \"Цены на АЗС\",\n tankFarmPrices: \"Цены на НБ\",\n },\n menuItem: {\n ActualPriceReport: \"Актуальные цены\",\n SmallWholesale: \"Цены на НБ\",\n Analytics: \"Аналитика\",\n PriceStatistic: \"График изменения цен\",\n GasStationMap: \"Карта АЗС\",\n PersonalGasStations: \"Список моих АЗС\",\n RecommendedPrices: \"Рекомендованные цены\",\n },\n },\n user: {\n headerMenu: {\n signOut: \"Выйти\",\n settings: \"Настройки\",\n },\n settingsMenu: {\n basicSettings: \"Основные настройки\",\n otherSettings: \"Доплнительные настройки\",\n },\n settingsItem: {\n mail: \"Адрес электронной почты\",\n notification: \"Уведомления\",\n on: \"Вкл\",\n off: \"Выкл\",\n btnSubmit: \"Сохранить\",\n },\n },\n title: {\n pages: {\n login: \"Авторизация\",\n actualPrices: \"Актуальные цены на АЗС\",\n },\n },\n utils: {\n loading: \"Загрузка...\",\n },\n};\n","import React, { Suspense } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport dayjs from \"dayjs\";\nimport ReactGA from \"react-ga\";\nimport utc from \"dayjs/plugin/utc\";\nimport { ApolloProvider } from \"react-apollo\";\n\nimport { isEnvForDebug } from \"lib/helpers\";\nimport client from \"lib/graphql/client\";\nimport Routers from \"components/Router\";\nimport Loading from \"components/_common/Loading\";\n\nimport \"./lib/i18n\";\nimport \"./index.scss\";\n\ndayjs.extend(utc);\n\nconst trackingId = \"UA-188383870-2\";\nReactGA.initialize(trackingId, { debug: isEnvForDebug() });\n\nReactDOM.render(\n \n }>\n \n \n ,\n document.getElementById(\"root\")\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\n","module.exports = __webpack_public_path__ + \"static/media/logo_auth3.702d79e1.png\";","module.exports = __webpack_public_path__ + \"static/media/лого__Бензоколонка_1.e005c4b1.svg\";","module.exports = __webpack_public_path__ + \"static/media/лого__Бензоколонка_2.a0acf561.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAAGYmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTAxLTE0VDEzOjExOjM3KzAzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMS0xNFQxMzoxNzo0NiswMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMS0xNFQxMzoxNzo0NiswMzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1YjNkMGNmYy0zMDRiLTRkNDAtOGU3OS0wMjY5NWQ4NDc5MGQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3YzlmMDg4NC02OTVlLWIyNDMtOThmMS01YjkzZjk3ZmZkNzkiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NjdjYmUyNS1lNzBmLWY0NDYtOTdmZi00YTViOTgzNDZmNjEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2N2NiZTI1LWU3MGYtZjQ0Ni05N2ZmLTRhNWI5ODM0NmY2MSIgc3RFdnQ6d2hlbj0iMjAyMS0wMS0xNFQxMzoxMTozNyswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjViM2QwY2ZjLTMwNGItNGQ0MC04ZTc5LTAyNjk1ZDg0NzkwZCIgc3RFdnQ6d2hlbj0iMjAyMS0wMS0xNFQxMzoxNzo0NiswMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqzyrxsAAAZxSURBVHic7ZttiFRVGMd/N3d2d9zNzcqXtqKypIwQDCPszRZjzSLdJK18ySwqP1gZmGxCH8ygpBAp+9CbHwLB9ItKohm6FWqppRQLkhUhJVZKCu4Ms3Nn5+nDPTNz7p17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\"","module.exports = __webpack_public_path__ + \"static/media/main_logo_full2.070f0651.png\";"],"sourceRoot":""}