{"version":3,"sources":["components/Layout.js","components/home/Home.js","components/chat/ChatHeader.js","components/UserPhoto.js","components/chat/ChatMessage.js","components/chat/ChatBody.js","components/chat/ChatFooter.js","components/chat/ChatConditions.js","components/chat/ChatMenu.js","components/chat/GoToMobileScreen/GoToMobileScreen.js","components/chat/Chat.js","components/info/InfoPage.js","App.js","registerServiceWorker.js","index.js"],"names":["Layout","id","this","props","children","Component","displayName","name","Home","state","chatId","onSubmit","bind","onChatIdChange","document","title","evt","setState","target","value","replace","path","trim","RegExp","history","push","encodeURIComponent","preventDefault","className","alt","src","process","renderAs","size","level","bgColor","fgColor","includeMargin","ref","type","placeholder","onChange","ChatHeader","baseInfoUrl","getLink","link","tenderName","info","menuButtonIcon","isMenuOpen","data-id","Container","fluid","onClick","onMenuClick","onTenderInfoToggle","Collapse","isOpen","isTenderInfoOpen","href","rel","publisher","UserPhoto","viewId","user","ChatMessage","message","formatedContent","content","split","map","item","index","key","isDeleted","date","Date","formatedTime","toLocaleTimeString","data-message-id","isMy","data-user-id","ChatBody","lockedBottom","firstMessageElement","isLockedToPrevPosition","topMessageId","lastPrevPosition","onScroll","window","addEventListener","removeEventListener","scrollElement","documentElement","messageElements","getElementsByClassName","scrollTop","scrollHeight","clientHeight","offsetTop","length","onScrollTop","showNoMesagesAlert","isInitLoaded","messages","currentDate","toLocaleDateString","role","i","formatedDate","isNewDate","ChatFooter","onTextChange","onKeyPress","onSendMessage","which","shiftKey","text","refs","chat_input","substring","buttonClass","isSendEnabled","autoComplete","ChatConditions","Row","Col","lg","md","to","withRouter","ChatMenu","menuClass","goToMobileToggle","GoToMobileScreen","onClose","Chat","total","isConnected","isJoined","tenderInfo","isConditionSubmited","localStorage","getItem","isGoToMobileOpen","goToMobileLink","token","sendInterval","componentDidMount","sendMessage","onConditionsSubmit","loadTenderInfo","loadMessages","toggleTenderInfo","toggleGoToMobile","signalRLogLevel","signalR","Error","hubConnection","configureLogging","withUrl","hubLocation","accessTokenFactory","withAutomaticReconnect","build","on","ym","concat","messageIdsToDelete","includes","onreconnecting","error","onreconnected","connectionId","onclose","start","then","catch","err","timer","clearInterval","off","stop","invoke","setInterval","result","count","offset","isFromTale","delta","newMessages","setItem","InfoPage","isLoaded","fetch","res","backLink","dangerouslySetInnerHTML","__html","App","location","pathname","listen","accounts","version","options","webvisor","defer","clickmap","trackLinks","accurateTrackBounce","exact","render","validId","decodeURIComponent","match","params","pageName","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","createBrowserHistory","nameEQ","ca","cookie","c","charAt","indexOf","readCookie","ReactDOM","basename","URL","origin","response","status","headers","get","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.c68ec66f.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.children}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport QRCode from 'qrcode.react';\r\nimport './style.scss';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { chatId: \"\" };\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.onChatIdChange = this.onChatIdChange.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = \"Чат закупок\";\r\n }\r\n\r\n onChatIdChange(evt) {\r\n this.setState({\r\n ...this.state,\r\n chatId: evt.target.value.replace(/[^\\d]+/g, '')\r\n });\r\n }\r\n\r\n onSubmit(evt) {\r\n const path = this.state.chatId.trim().replace(new RegExp('\\\\s', 'g'), '');\r\n if (path) {\r\n this.props.history.push('/' + encodeURIComponent(path));\r\n }\r\n evt.preventDefault();\r\n return false;\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \"Мобильная\r\n \r\n
\r\n\r\n
\r\n \"Чат\r\n

Чат закупок

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container, Collapse } from 'reactstrap';\r\n\r\n\r\nexport class ChatHeader extends Component {\r\n static displayName = ChatHeader.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.baseInfoUrl = \"https://zakupki.gov.ru\";\r\n\r\n this.getLink = this.getLink.bind(this);\r\n }\r\n\r\n getLink(link) {\r\n if (!link) {\r\n return \"\";\r\n }\r\n\r\n return this.baseInfoUrl + link.replace(this.baseInfoUrl, \"\");\r\n }\r\n\r\n render() {\r\n const tenderName = this.props.info != null ? this.props.info.name : \"\";\r\n const menuButtonIcon = this.props.isMenuOpen ? 'fa-times' : 'fa-bars';\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n\r\n

\r\n Закупка \r\n \r\n \r\n

\r\n
\r\n
\r\n {\r\n this.props.info &&\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class UserPhoto extends Component {\r\n static displayName = UserPhoto.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.viewId = this.props.user && this.props.user.viewId ? this.props.user.viewId : \"default\";\r\n this.name = this.props.user && this.props.user.name ? this.props.user.name : \"����������\";\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { UserPhoto } from '../UserPhoto';\r\n\r\nexport class ChatMessage extends Component {\r\n static displayName = ChatMessage.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.message = this.props.message;\r\n this.user = this.props.message.user;\r\n this.formatedContent = this.message.content.split('\\n').map((item, index) => {\r\n return (index === 0) ? item : [
, item]\r\n });\r\n\r\n if (this.message.isDeleted) {\r\n this.formatedContent = \"Удалено модератором.\";\r\n }\r\n\r\n if (this.message.date) {\r\n let date = new Date(this.message.date);\r\n this.formatedTime = date.toLocaleTimeString(\"ru\", {\r\n 'hour': '2-digit',\r\n 'minute': '2-digit'\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {this.user.name}\r\n {\r\n this.formatedTime &&\r\n \r\n }\r\n
\r\n
{this.formatedContent}
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { ChatMessage } from './ChatMessage';\r\n\r\nexport class ChatBody extends Component {\r\n static displayName = ChatBody.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.lockedBottom = true;\r\n\r\n this.firstMessageElement = null;\r\n this.isLockedToPrevPosition = false;\r\n this.topMessageId = \"\";\r\n this.lastPrevPosition = 0;\r\n\r\n this.onScroll = this.onScroll.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('scroll', this.onScroll);\r\n window.addEventListener('wheel', this.onScroll);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('scroll', this.onScroll);\r\n window.removeEventListener('wheel', this.onScroll);\r\n }\r\n\r\n componentDidUpdate() {\r\n const scrollElement = document.documentElement;\r\n const messageElements = document.getElementsByClassName(\"chat-message\");\r\n\r\n if (this.lockedBottom) {\r\n scrollElement.scrollTop = scrollElement.scrollHeight - scrollElement.clientHeight;\r\n }\r\n else if (this.isLockedToPrevPosition) {\r\n scrollElement.scrollTop = this.firstMessageElement ? this.firstMessageElement.offsetTop - 75 : scrollElement.scrollTop;\r\n this.isLockedToPrevPosition = false;\r\n }\r\n\r\n this.firstMessageElement = messageElements.length ? messageElements[0] : null;\r\n }\r\n\r\n onScroll(evt) {\r\n const scrollElement = document.documentElement;\r\n this.lockedBottom = scrollElement.scrollHeight - scrollElement.clientHeight - scrollElement.scrollTop < 20;\r\n\r\n this.isLockedToPrevPosition = false;\r\n if (scrollElement.scrollTop === 0 && this.props.onScrollTop) {\r\n this.isLockedToPrevPosition = true;\r\n this.props.onScrollTop();\r\n }\r\n }\r\n\r\n render() {\r\n const showNoMesagesAlert = this.props.isInitLoaded && this.props.messages.length === 0;\r\n var currentDate = (new Date()).toLocaleDateString(\"ru\");\r\n\r\n return (\r\n
\r\n {\r\n showNoMesagesAlert &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.props.messages.map((message, i) => {\r\n let isMy = this.props.user && message.user && this.props.user.id === message.user.id;\r\n let date = new Date(message.date);\r\n let formatedDate = date.toLocaleDateString(\"ru\");\r\n let isNewDate = formatedDate !== currentDate;\r\n currentDate = formatedDate;\r\n\r\n return (\r\n
\r\n {\r\n isNewDate &&\r\n
\r\n
\r\n
{formatedDate}
\r\n
\r\n
\r\n } \r\n \r\n \r\n \r\n
\r\n )\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\n\r\n\r\nexport class ChatFooter extends Component {\r\n static displayName = ChatFooter.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { message: \"\" };\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.onTextChange = this.onTextChange.bind(this);\r\n this.onKeyPress = this.onKeyPress.bind(this);\r\n }\r\n\r\n onSubmit(evt) {\r\n if (this.state.message) {\r\n this.props.onSendMessage(this.state.message);\r\n this.setState({ ...this.state, message: \"\" });\r\n } \r\n\r\n if (evt) {\r\n evt.preventDefault(); \r\n }\r\n return false;\r\n }\r\n\r\n onKeyPress(evt) {\r\n if (evt.which === 13 && !evt.shiftKey) {\r\n this.onSubmit();\r\n evt.preventDefault();\r\n }\r\n }\r\n\r\n onTextChange() {\r\n let maxLength = 200;\r\n let text = this.refs.chat_input.value;\r\n text = text.substring(0, maxLength);\r\n\r\n this.setState({ ...this.state, message: text });\r\n }\r\n\r\n render() {\r\n const sendEnabled = this.state.message.length > 0 && this.props.isSendEnabled;\r\n const buttonClass = sendEnabled ? \"\" : \"disabled\";\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport { Link, withRouter } from 'react-router-dom';\r\n\r\nexport class ChatConditions extends Component {\r\n static displayName = ChatConditions.name;\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n Данный сервис использует куки браузера для хранения тенической информации. Используя данный сервис, Вы принимаете условия лицензионного соглашения а также соглашаетесь с политикой обработки персональных данных.\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(ChatConditions);\r\n","import React, { Component } from 'react';\r\nimport { Link, withRouter } from 'react-router-dom';\r\n\r\nexport class ChatMenu extends Component {\r\n static displayName = ChatMenu.name;\r\n\r\n render() {\r\n const menuClass = this.props.isOpen ? 'shown' : '';\r\n\r\n return (\r\n
\r\n
\r\n Этот чат полностью анонимен.
\r\n {\r\n this.props.user &&\r\n \r\n Вы вошли как:
\r\n {this.props.user.name}\r\n
\r\n }\r\n
\r\n
\r\n
Информация:
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Закрыть чат\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(ChatMenu);\r\n","import React, { Component } from 'react';\r\nimport QRCode from 'qrcode.react';\r\nimport './style.scss'\r\n\r\n\r\nexport class GoToMobileScreen extends Component {\r\n static displayName = GoToMobileScreen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.link = this.props.link;\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
Чтобы открыть чат на мобильном устройстве, отсканируйте этот QR-код.
\r\n
\r\n \r\n
\r\n
\r\n Закрыть\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { ChatHeader } from './ChatHeader';\r\nimport { ChatBody } from './ChatBody';\r\nimport { ChatFooter } from './ChatFooter';\r\nimport { ChatConditions } from './ChatConditions';\r\nimport { ChatMenu } from './ChatMenu';\r\nimport { GoToMobileScreen } from './GoToMobileScreen/GoToMobileScreen';\r\nimport update from 'react-addons-update';\r\nimport ym from 'react-yandex-metrika';\r\nimport './style.scss'\r\n\r\n\r\nexport class Chat extends Component {\r\n static displayName = Chat.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n messages: [],\r\n total: 0,\r\n isConnected: false,\r\n isJoined: true,\r\n isInitLoaded: false,\r\n user: null,\r\n tenderInfo: null,\r\n isConditionSubmited: localStorage.getItem('isConditionSubmited') != null,\r\n isMenuOpen: false,\r\n isTenderInfoOpen: false,\r\n isSendEnabled: true,\r\n isGoToMobileOpen: false\r\n };\r\n\r\n this.id = this.props.id;\r\n this.goToMobileLink = `https://zakupki.chat/${this.id}?access_token=${this.props.token}`;\r\n\r\n this.sendInterval = 2500;\r\n\r\n this.componentDidMount = this.componentDidMount.bind(this);\r\n this.sendMessage = this.sendMessage.bind(this);\r\n\r\n this.onConditionsSubmit = this.onConditionsSubmit.bind(this);\r\n\r\n this.loadTenderInfo = this.loadTenderInfo.bind(this);\r\n this.loadMessages = this.loadMessages.bind(this);\r\n\r\n this.onMenuClick = this.onMenuClick.bind(this);\r\n this.toggleTenderInfo = this.toggleTenderInfo.bind(this);\r\n this.toggleGoToMobile = this.toggleGoToMobile.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = \"№\" + this.id;\r\n\r\n const hubLocation =\r\n process.env.NODE_ENV === 'production' ?\r\n \"https://hub.zakupki.chat\" :\r\n \"http://localhost:5050\";\r\n\r\n const signalRLogLevel =\r\n process.env.NODE_ENV === 'production' ?\r\n signalR.LogLevel.Error :\r\n signalR.LogLevel.Debug;\r\n\r\n this.hubConnection = new signalR.HubConnectionBuilder()\r\n .configureLogging(signalRLogLevel)\r\n .withUrl(\r\n hubLocation + \"?chatId=\" + this.id,\r\n { accessTokenFactory: () => this.props.token }\r\n )\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n this.hubConnection.on('Login', (evt) => {\r\n console.log(\"Login as:\");\r\n console.log(evt.user);\r\n this.setState({ ...this.state, user: evt.user });\r\n\r\n this.loadMessages();\r\n\r\n if (!this.state.tenderInfo) {\r\n this.loadTenderInfo();\r\n } \r\n\r\n ym('reachGoal', 'chatLogin');\r\n });\r\n\r\n this.hubConnection.on('ReceiveMessage', (message) => {\r\n console.log(message);\r\n const messages = this.state.messages.concat([message]);\r\n this.setState({ ...this.state, messages, total: this.state.total + 1 });\r\n });\r\n\r\n this.hubConnection.on('DeleteMessages', (messageIdsToDelete) => {\r\n console.log(\"Delete messages:\");\r\n console.log(messageIdsToDelete);\r\n\r\n const messages = this.state.messages.map((item) => { \r\n if (messageIdsToDelete.includes(item.id)) {\r\n return {...item, isDeleted: true };\r\n }\r\n return item;\r\n });\r\n\r\n this.setState(state => { return { ...this.state, messages } });\r\n });\r\n\r\n\r\n this.hubConnection.onreconnecting = (error) => {\r\n console.log('Disconnected! ' + error);\r\n console.log('Reconnecting!');\r\n\r\n this.setState({\r\n ...this.state,\r\n messages: [],\r\n total: 0,\r\n isConnected: false,\r\n isJoined: true,\r\n isInitLoaded: false\r\n });\r\n }\r\n\r\n this.hubConnection.onreconnected = (connectionId) => {\r\n console.log('Reconnected!');\r\n this.setState({\r\n ...this.state,\r\n messages: [],\r\n total: 0,\r\n isInitLoaded: false,\r\n isConnected: true\r\n });\r\n }\r\n\r\n this.hubConnection.onclose = (error) => {\r\n console.error(\"Disconnected!. \" + error);\r\n\r\n this.setState({\r\n ...this.state,\r\n isConnected: false\r\n });\r\n }\r\n\r\n this.hubConnection\r\n .start()\r\n .then(() => {\r\n console.log('Connection started!');\r\n this.setState({\r\n ...this.state,\r\n isConnected: true\r\n });\r\n })\r\n .catch(err => console.error('Error while establishing connection :('));\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.timer) {\r\n clearInterval(this.timer);\r\n }\r\n\r\n if (this.hubConnection) {\r\n this.hubConnection.off('Login');\r\n this.hubConnection.off('ReceiveMessage');\r\n this.hubConnection.stop();\r\n } \r\n }\r\n\r\n sendMessage(text) {\r\n if (!this.state.isJoined) {\r\n return;\r\n }\r\n\r\n let sendText = text.trim();\r\n if (sendText) {\r\n this.hubConnection\r\n .invoke('SendMessage', this.id, text)\r\n .catch(err => console.error(err));\r\n\r\n this.setState({\r\n ...this.state,\r\n isSendEnabled: false\r\n });\r\n\r\n setInterval(\r\n () => {\r\n this.setState({\r\n ...this.state,\r\n isSendEnabled: true\r\n })\r\n },\r\n this.sendInterval\r\n );\r\n\r\n ym('reachGoal', 'messageSent');\r\n }\r\n }\r\n\r\n loadTenderInfo() {\r\n this.hubConnection\r\n .invoke(\"GetTenderInfo\", this.id)\r\n .then((result) => {\r\n console.log(\"Tender info loaded:\");\r\n console.log(result);\r\n\r\n this.setState({\r\n ...this.state,\r\n tenderInfo: result\r\n });\r\n })\r\n .catch(err => console.error(err));\r\n }\r\n\r\n loadMessages() {\r\n let maxCount = 100;\r\n let count = maxCount;\r\n let offset = this.state.messages.length;\r\n let isFromTale = true;\r\n\r\n if (this.state.isInitLoaded) {\r\n isFromTale = false;\r\n let delta = this.state.total - this.state.messages.length;\r\n if (delta <= 0) {\r\n return;\r\n }\r\n count = delta > maxCount ? maxCount : delta;\r\n offset = delta - count;\r\n }\r\n \r\n this.hubConnection\r\n .invoke(\"GetMessages\", this.id, count, offset, isFromTale)\r\n .then((result) => {\r\n console.log(\"Messages loaded:\");\r\n console.log(result);\r\n\r\n const newMessages = result.messages.concat(this.state.messages);\r\n\r\n this.setState({\r\n ...this.state,\r\n messages: newMessages,\r\n total: result.total,\r\n isInitLoaded: true\r\n });\r\n })\r\n .catch(err => console.error(err));\r\n }\r\n\r\n onConditionsSubmit() {\r\n this.setState({\r\n ...this.state,\r\n isConditionSubmited: true\r\n });\r\n\r\n try {\r\n localStorage.setItem(\"isConditionSubmited\", true);\r\n } catch (error) { } \r\n }\r\n\r\n onMenuClick() {\r\n this.setState({\r\n ...this.state,\r\n isMenuOpen: !this.state.isMenuOpen,\r\n isTenderInfoOpen: false\r\n });\r\n }\r\n\r\n toggleTenderInfo() {\r\n this.setState({\r\n ...this.state,\r\n isTenderInfoOpen: !this.state.isTenderInfoOpen,\r\n isMenuOpen: false\r\n }); \r\n }\r\n\r\n toggleGoToMobile() {\r\n this.setState({\r\n ...this.state,\r\n isGoToMobileOpen: !this.state.isGoToMobileOpen,\r\n });\r\n }\r\n\r\n render() {\r\n let isFluid = false;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n\r\n {\r\n this.state.isJoined && this.state.isConditionSubmited && this.state.isConnected &&\r\n \r\n }\r\n\r\n {\r\n !this.state.isConditionSubmited &&\r\n \r\n }\r\n\r\n \r\n\r\n {\r\n this.state.isGoToMobileOpen &&\r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './style.scss'\r\n\r\n\r\nexport class InfoPage extends Component {\r\n static displayName = InfoPage.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n error: null,\r\n isLoaded: false,\r\n content: \"\"\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n document.title = \"Чат закпок\";\r\n\r\n fetch(this.props.href)\r\n .then(res => res.text())\r\n .then(\r\n (result) => {\r\n this.setState({\r\n isLoaded: true,\r\n content: result\r\n });\r\n \r\n },\r\n (error) => {\r\n this.setState({\r\n isLoaded: true,\r\n error\r\n });\r\n }\r\n )\r\n }\r\n\r\n render() {\r\n const backLink = this.props.backLink ? this.props.backLink : \"/\";\r\n\r\n return (\r\n \r\n
\r\n
\r\n Закрыть\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/home/Home';\r\nimport { Chat } from './components/chat/Chat';\r\nimport { InfoPage } from './components/info/InfoPage';\r\nimport ym, { YMInitializer } from 'react-yandex-metrika';\r\nimport './common.scss'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n componentDidMount() {\r\n ym('hit', this.props.history.location.pathname);\r\n\r\n this.props.history.listen((location) => {\r\n ym('hit', location.pathname);\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n {\r\n return ;\r\n }} />\r\n\r\n {\r\n let id = decodeURIComponent(props.match.params.id);\r\n let validId = id.replace(/[^\\d]+/g, '');\r\n\r\n return ;\r\n }} />\r\n\r\n {\r\n const href = \"/html/\" + props.match.params.pageName + \".html\";\r\n\r\n return ;\r\n }} />\r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport \"react-app-polyfill/stable\";\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Router } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport { createBrowserHistory } from 'history';\r\nimport 'font-awesome/css/font-awesome.min.css';\r\n\r\nconst readCookie = (name) => {\r\n var nameEQ = name + \"=\";\r\n var ca = document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n}\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\nconst history = createBrowserHistory();\r\nconst token = readCookie('ZakupkiChat.Token');\r\n\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}