{"version":3,"sources":["components/login-form.js","components/user-info.js","components/upload.js","App.js","serviceWorker.js","index.js"],"names":["LoginFrom","props","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","handleInputChange","bind","assertThisInitialized","handleSubmit","state","snackbar","undefined","event","target","value","name","setState","defineProperty","_this2","data","URLSearchParams","append","login","password","fetch","method","body","then","response","status","message","onSubmit","_this3","isSignedIn","react_default","a","createElement","react_router","to","Fragment","Grid","container","spacing","direction","alignItems","justify","item","TextField","label","onChange","type","Button","variant","color","onClick","Snackbar","visible","onRequestClose","open","autoHideDuration","onClose","Component","GrowingTitle","styled","Typography","flexGrow","UserName","marginRight","UserInfo","render","handleSignOut","user","AppBar","position","Toolbar","userName","Upload","handleCloseChip","fileInput","React","createRef","uploaded","uploading","preventDefault","formData","FormData","current","files","success","catch","error","console","log","accept","id","style","display","ref","htmlFor","component","size","CloudUpload_default","LinearProgress","width","marginTop","Chip","avatar","Done_default","clickable","App","auth","fetchUserInfo","signOut","json","signedIn","react_router_dom","user_info","minHeight","path","login_form","assign","upload","exact","ReactDOM","App_App","document","querySelector","Boolean","window","location","hostname","match","src_App","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.2b78163a.chunk.js","sourcesContent":["import React from 'react';\nimport { Component } from \"react\";\n\nimport Button from '@material-ui/core/Button';\nimport { Grid, Snackbar, TextField } from '@material-ui/core';\nimport { Redirect } from \"react-router-dom\";\n\n\nclass LoginFrom extends Component {\n constructor(props) {\n super(props);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.state = {snackbar: undefined};\n }\n\n handleInputChange(event) {\n const target = event.target;\n const value = target.value;\n const name = target.name;\n\n this.setState({\n [name]: value\n });\n }\n\n handleSubmit() {\n const data = new URLSearchParams();\n data.append(\"login\", this.state.login)\n data.append(\"password\", this.state.password)\n\n fetch('/api/authenticate', {\n method: 'POST',\n body: data\n }).then((response) => {\n if (response.status !== 200) {\n const snackbar = {\n message: \"Авторизація неуспішна: Введено невірний логін або пароль\"\n };\n this.setState({snackbar})\n }\n\n if (this.props.onSubmit !== undefined) {\n this.props.onSubmit();\n }\n })\n }\n\n render() {\n\n if (this.props.isSignedIn) {\n return \n }\n\n return (\n <>\n
\n \n\n \n \n \n \n \n \n \n \n \n \n\n \n { return null } }\n open = { this.state.snackbar != undefined }\n autoHideDuration = {3000}\n onClose = {() => this.setState({snackbar: undefined})}\n />\n \n );\n }\n}\n\nexport default LoginFrom;","import React from 'react';\nimport { Component } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\nimport { Button, AppBar, Toolbar, Typography } from '@material-ui/core';\nimport { styled } from '@material-ui/core/styles';\n\n// const useStyles = makeStyles(theme => ({\n// root: {\n// flexGrow: 1,\n// },\n// menuButton: {\n// marginRight: theme.spacing(2),\n// },\n// title: {\n// flexGrow: 1,\n// },\n// }));\n\nconst GrowingTitle = styled(Typography)({\n flexGrow: 1,\n});\n\nconst UserName = styled(Typography)({\n marginRight: '20px'\n});\n\nclass UserInfo extends Component {\n constructor(props) {\n super(props);\n this.render = this.render.bind(this);\n this.handleSignOut = this.handleSignOut.bind(this);\n }\n\n handleSignOut() {\n this.props.handleSignOut();\n this.setState(this.state)\n }\n\n render() {\n if (this.props.user.isSignedIn) {\n return (\n \n \n Розсилка розрахункових листiв\n {this.props.user.userName}\n \n \n \n )\n } else {\n return \n }\n }\n}\n\n\nexport default UserInfo;","import React from 'react';\nimport { Component } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\nimport { Button, LinearProgress, Paper, Chip, Avatar } from '@material-ui/core';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport DoneIcon from '@material-ui/icons/Done';\n\n\nclass Upload extends Component {\n constructor(props) {\n super(props);\n this.render = this.render.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCloseChip = this.handleCloseChip.bind(this);\n this.fileInput = React.createRef();\n this.state = {\n uploaded: false,\n uploading: false\n };\n }\n\n handleSubmit(event) {\n event.preventDefault();\n const formData = new FormData();\n formData.append('payslips', this.fileInput.current.files[0]);\n this.setState({uploaded: false, uploading: true});\n fetch('/api/upload', {\n method: 'POST',\n body: formData\n }).then(success => {\n this.setState({uploaded: true, uploading: false});\n }).catch(error => {\n this.setState({uploading: false});\n console.log(error);\n });\n }\n\n handleCloseChip() {\n this.setState({uploaded: false});\n }\n\n render() {\n return (\n <>\n
\n \n \n\n \n \n {this.state.uploading && }\n {this.state.uploaded &&\n }\n label=\"Листи надіслано\"\n clickable\n color=\"secondary\"\n style={ {marginTop: '10px'} }\n onClick={this.handleCloseChip}\n />\n }\n \n )\n }\n}\n\n\nexport default Upload;","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Grid, Snackbar } from '@material-ui/core';\n// TODO: switch to BrowserRouter aftering figuring out files serve\nimport { HashRouter as Router, Route, Link } from \"react-router-dom\";\n\n\nimport LoginForm from './components/login-form';\nimport UserInfo from './components/user-info';\nimport Upload from './components/upload';\n\n\n// let Upload = () => {\n// return
Upload
\n// }\n\nclass App extends Component {\n constructor(props) {\n super(props);\n this.state = {\n auth: {\n isSignedIn: false,\n userName: undefined\n },\n };\n this.fetchUserInfo = this.fetchUserInfo.bind(this);\n this.signOut = this.signOut.bind(this);\n\n this.fetchUserInfo();\n }\n\n fetchUserInfo() {\n fetch('/api/user').then((response) => {\n if (response.status === 200) {\n this.setState({auth: {isSignedIn: true}});\n return response.json();\n }\n }).then((json) => {\n if (json) {\n this.setState((state) => {\n return state.auth.userName = json.name;\n });\n }\n });\n }\n\n signOut() {\n this.signedIn = false;\n this.userName = undefined;\n fetch('/api/logout', {method: 'POST'});\n this.setState({auth: {\n isSignedIn: false,\n userName: undefined\n }})\n }\n\n render() {\n return (\n \n \n \n\n } />\n \n <>\n
Done
\n { return null } }\n />\n \n \n } />\n \n\n \n
\n );\n }\n}\n\n\nReactDOM.render(, document.querySelector('#root'));\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}